Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch inherit-priv-mark-sub Excluding Merge-Ins
This is equivalent to a diff from a072137b to 6a0586f9
2014-10-02
| ||
17:01 | Merged in inherit-priv-mark-sub with one minor layout tweak. ... (check-in: 54a783e3 user: stephan tags: trunk) | |
13:45 | After testing in a real docker container, it turns out that "db_optional_sql()" doesn't do anything here. No idea why, but "db_multi_exec()" works fine. ... (check-in: 06987be5 user: jan.nijtmans tags: trunk) | |
2014-10-01
| ||
09:22 | merge trunk ... (check-in: bebd4083 user: jan.nijtmans tags: winsymlink) | |
2014-09-30
| ||
15:25 | Fix compiler warning and clarify use of local variables. ... (check-in: d2e7d2cf user: mistachkin tags: warningFix) | |
15:24 | Code style tweaks. ... (Closed-Leaf check-in: 6a0586f9 user: mistachkin tags: inherit-priv-mark-sub) | |
15:13 | Merge updates from trunk. ... (check-in: eb44ae1f user: mistachkin tags: inherit-priv-mark-sub) | |
2014-09-29
| ||
19:59 | Correct directory detection in the MSVC makefile to permit the batch building tool to function properly. ... (check-in: a072137b user: mistachkin tags: trunk) | |
15:37 | Make sure the MSVC makefile is only used from within the directory where it resides. ... (check-in: 86de8cbe user: mistachkin tags: trunk) | |
Changes to src/setup.c.
︙ | ︙ | |||
305 306 307 308 309 310 311 | const char *zOldLogin; int doWrite; int uid, i; int higherUser = 0; /* True if user being edited is SETUP and the */ /* user doing the editing is ADMIN. Disallow editing */ char *inherit[128]; int a[128]; | | | 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | const char *zOldLogin; int doWrite; int uid, i; int higherUser = 0; /* True if user being edited is SETUP and the */ /* user doing the editing is ADMIN. Disallow editing */ char *inherit[128]; int a[128]; const char *oa[128]; /* Must have ADMIN privileges to access this page */ login_check_credentials(); if( !g.perm.Admin ){ login_needed(); return; } /* Check to see if an ADMIN user is trying to edit a SETUP account. |
︙ | ︙ | |||
439 440 441 442 443 444 445 | /* figure out inherited permissions */ memset(inherit, 0, sizeof(inherit)); if( fossil_strcmp(zLogin, "developer") ){ char *z1, *z2; z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='developer'"); while( z1 && *z1 ){ inherit[0x7f & *(z1++)] = | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 | /* figure out inherited permissions */ memset(inherit, 0, sizeof(inherit)); if( fossil_strcmp(zLogin, "developer") ){ char *z1, *z2; z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='developer'"); while( z1 && *z1 ){ inherit[0x7f & *(z1++)] = "<span class=\"ueditInheritDeveloper\"><sub>[D]</sub></span>"; } free(z2); } if( fossil_strcmp(zLogin, "reader") ){ char *z1, *z2; z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='reader'"); while( z1 && *z1 ){ inherit[0x7f & *(z1++)] = "<span class=\"ueditInheritReader\"><sub>[R]</sub></span>"; } free(z2); } if( fossil_strcmp(zLogin, "anonymous") ){ char *z1, *z2; z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='anonymous'"); while( z1 && *z1 ){ inherit[0x7f & *(z1++)] = "<span class=\"ueditInheritAnonymous\"><sub>[A]</sub></span>"; } free(z2); } if( fossil_strcmp(zLogin, "nobody") ){ char *z1, *z2; z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='nobody'"); while( z1 && *z1 ){ inherit[0x7f & *(z1++)] = "<span class=\"ueditInheritNobody\"><sub>[N]</sub></span>"; } free(z2); } /* Begin generating the page */ style_submenu_element("Cancel", "Cancel", "setup_ulist"); if( uid ){ style_header(mprintf("Edit User %h", zLogin)); }else{ style_header("Add A New User"); } @ <div class="ueditCapBox"> @ <form action="%s(g.zPath)" method="post"><div> login_insert_csrf_secret(); if( login_is_special(zLogin) ){ @ <input type="hidden" name="login" value="%s(zLogin)"> @ <input type="hidden" name="info" value=""> @ <input type="hidden" name="pw" value="*"> } @ <script type='text/javascript'> @ function updateCapabilityString(){ @ /* @ ** This function updates the "#usetupEditCapability" span content @ ** with the capabilities selected by the interactive user, based @ ** upon the state of the capability checkboxes. @ */ @ try { @ var inputs = document.getElementsByTagName('input'); @ if( inputs && inputs.length ){ @ var output = document.getElementById('usetupEditCapability'); @ if( output ){ @ var permsIds = [], x = 0; @ for(var i = 0; i < inputs.length; i++){ @ var e = inputs[i]; @ if( !e.name || !e.type ) continue; @ if( e.type.toLowerCase()!=='checkbox' ) continue; @ if( e.name.length===2 && e.name[0]==='a' ){ @ // looks like a capability checkbox @ if( e.checked ){ @ // grab the second character of the element @ // name, which is the textual flag for this @ // capability, and then add it to the result @ // array. @ permsIds[x++] = e.name[1]; @ } @ } @ } @ permsIds.sort(); @ output.innerHTML = permsIds.join(''); @ } @ } @ } catch (e) { @ /* ignore errors */ @ } @ } @ </script> @ <table> @ <tr> @ <td class="usetupEditLabel">User ID:</td> if( uid ){ @ <td>%d(uid) <input type="hidden" name="id" value="%d(uid)" /></td> }else{ @ <td>(new user)<input type="hidden" name="id" value="0" /></td> |
︙ | ︙ | |||
514 515 516 517 518 519 520 | @ </tr> @ <tr> @ <td class="usetupEditLabel">Capabilities:</td> @ <td> #define B(x) inherit[x] @ <table border=0><tr><td valign="top"> if( g.perm.Setup ){ | | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > > > > > > > | 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 | @ </tr> @ <tr> @ <td class="usetupEditLabel">Capabilities:</td> @ <td> #define B(x) inherit[x] @ <table border=0><tr><td valign="top"> if( g.perm.Setup ){ @ <label><input type="checkbox" name="as"%s(oa['s']) @ onchange="updateCapabilityString()"/> @ Setup%s(B('s'))</label><br /> } @ <label><input type="checkbox" name="aa"%s(oa['a']) @ onchange="updateCapabilityString()" /> @ Admin%s(B('a'))</label><br /> @ <label><input type="checkbox" name="ad"%s(oa['d']) @ onchange="updateCapabilityString()" /> @ Delete%s(B('d'))</label><br /> @ <label><input type="checkbox" name="ae"%s(oa['e']) @ onchange="updateCapabilityString()" /> @ Email%s(B('e'))</label><br /> @ <label><input type="checkbox" name="ap"%s(oa['p']) @ onchange="updateCapabilityString()" /> @ Password%s(B('p'))</label><br /> @ <label><input type="checkbox" name="ai"%s(oa['i']) @ onchange="updateCapabilityString()" /> @ Check-In%s(B('i'))</label><br /> @ <label><input type="checkbox" name="ao"%s(oa['o']) @ onchange="updateCapabilityString()" /> @ Check-Out%s(B('o'))</label><br /> @ <label><input type="checkbox" name="ah"%s(oa['h']) @ onchange="updateCapabilityString()" /> @ Hyperlinks%s(B('h'))</label><br /> @ <label><input type="checkbox" name="ab"%s(oa['b']) @ onchange="updateCapabilityString()" /> @ Attachments%s(B('b'))</label><br /> @ </td><td><td width="40"></td><td valign="top"> @ <label><input type="checkbox" name="au"%s(oa['u']) @ onchange="updateCapabilityString()" /> @ Reader%s(B('u'))</label><br /> @ <label><input type="checkbox" name="av"%s(oa['v']) @ onchange="updateCapabilityString()" /> @ Developer%s(B('v'))</label><br /> @ <label><input type="checkbox" name="ag"%s(oa['g']) @ onchange="updateCapabilityString()" /> @ Clone%s(B('g'))</label><br /> @ <label><input type="checkbox" name="aj"%s(oa['j']) @ onchange="updateCapabilityString()" /> @ Read Wiki%s(B('j'))</label><br /> @ <label><input type="checkbox" name="af"%s(oa['f']) @ onchange="updateCapabilityString()" /> @ New Wiki%s(B('f'))</label><br /> @ <label><input type="checkbox" name="am"%s(oa['m']) @ onchange="updateCapabilityString()" /> @ Append Wiki%s(B('m'))</label><br /> @ <label><input type="checkbox" name="ak"%s(oa['k']) @ onchange="updateCapabilityString()" /> @ Write Wiki%s(B('k'))</label><br /> @ <label><input type="checkbox" name="al"%s(oa['l']) @ onchange="updateCapabilityString()" /> @ Moderate Wiki%s(B('l'))</label><br /> @ </td><td><td width="40"></td><td valign="top"> @ <label><input type="checkbox" name="ar"%s(oa['r']) @ onchange="updateCapabilityString()" /> @ Read Ticket%s(B('r'))</label><br /> @ <label><input type="checkbox" name="an"%s(oa['n']) @ onchange="updateCapabilityString()" /> @ New Tickets%s(B('n'))</label><br /> @ <label><input type="checkbox" name="ac"%s(oa['c']) @ onchange="updateCapabilityString()" /> @ Append To Ticket%s(B('c'))</label><br /> @ <label><input type="checkbox" name="aw"%s(oa['w']) @ onchange="updateCapabilityString()" /> @ Write Tickets%s(B('w'))</label><br /> @ <label><input type="checkbox" name="aq"%s(oa['q']) @ onchange="updateCapabilityString()" /> @ Moderate Tickets%s(B('q'))</label><br /> @ <label><input type="checkbox" name="at"%s(oa['t']) @ onchange="updateCapabilityString()" /> @ Ticket Report%s(B('t'))</label><br /> @ <label><input type="checkbox" name="ax"%s(oa['x']) @ onchange="updateCapabilityString()" /> @ Private%s(B('x'))</label><br /> @ <label><input type="checkbox" name="az"%s(oa['z']) @ onchange="updateCapabilityString()" /> @ Download Zip%s(B('z'))</label> @ </td></tr> @ </table> @ </td> @ </tr> @ <tr> @ <td class="usetupEditLabel">Selected Capabilities:</td> @ <td> @ <span id="usetupEditCapability">(missing JS?)</span> @ </td> @ </tr> if( !login_is_special(zLogin) ){ @ <tr> @ <td align="right">Password:</td> if( zPw[0] ){ /* Obscure the password for all users */ |
︙ | ︙ | |||
602 603 604 605 606 607 608 609 610 611 612 613 614 615 | @ <td> </td> @ <td><input type="submit" name="submit" value="Apply Changes" /></td> @ </tr> } @ </table> @ </div></form> @ </div> @ <h2>Privileges And Capabilities:</h2> @ <ul> if( higherUser ){ @ <li><p class="missingPriv"> @ User %h(zLogin) has Setup privileges and you only have Admin privileges @ so you are not permitted to make changes to %h(zLogin). @ </p></li> | > | 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 | @ <td> </td> @ <td><input type="submit" name="submit" value="Apply Changes" /></td> @ </tr> } @ </table> @ </div></form> @ </div> @ <script type='text/javascript'>updateCapabilityString();</script> @ <h2>Privileges And Capabilities:</h2> @ <ul> if( higherUser ){ @ <li><p class="missingPriv"> @ User %h(zLogin) has Setup privileges and you only have Admin privileges @ so you are not permitted to make changes to %h(zLogin). @ </p></li> |
︙ | ︙ |
Changes to src/style.c.
︙ | ︙ | |||
932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 | @ text-align: right; @ vertical-align: top; @ white-space: nowrap; }, { "span.ueditInheritNobody", "color for capabilities, inherited by nobody", @ color: green; }, { "span.ueditInheritDeveloper", "color for capabilities, inherited by developer", @ color: red; }, { "span.ueditInheritReader", "color for capabilities, inherited by reader", @ color: black; }, { "span.ueditInheritAnonymous", "color for capabilities, inherited by anonymous", @ color: blue; }, { "span.capability", "format for capabilities, mentioned on the user edit page", @ font-weight: bold; }, { "span.usertype", "format for different user types, mentioned on the user edit page", | > > > > | 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 | @ text-align: right; @ vertical-align: top; @ white-space: nowrap; }, { "span.ueditInheritNobody", "color for capabilities, inherited by nobody", @ color: green; @ padding: .2em; }, { "span.ueditInheritDeveloper", "color for capabilities, inherited by developer", @ color: red; @ padding: .2em; }, { "span.ueditInheritReader", "color for capabilities, inherited by reader", @ color: black; @ padding: .2em; }, { "span.ueditInheritAnonymous", "color for capabilities, inherited by anonymous", @ color: blue; @ padding: .2em; }, { "span.capability", "format for capabilities, mentioned on the user edit page", @ font-weight: bold; }, { "span.usertype", "format for different user types, mentioned on the user edit page", |
︙ | ︙ | |||
1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 | { "tr.row0", "even table row color", @ /* use default */ }, { "tr.row1", "odd table row color", @ /* Use default */ }, { "#canvas", "timeline graph node colors", @ color: black; @ background-color: white; }, { 0, 0, | > > > > | 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 | { "tr.row0", "even table row color", @ /* use default */ }, { "tr.row1", "odd table row color", @ /* Use default */ }, { "#usetupEditCapability", "format for capabilities string, mentioned on the user edit page", @ font-weight: bold; }, { "#canvas", "timeline graph node colors", @ color: black; @ background-color: white; }, { 0, 0, |
︙ | ︙ |