Fossil SCM
Extend the user capability system to allow the use of upper-case ASCII letters for new capabilities.
Commit
e45cfde7aa17ab642a962f6fcd2cda4832a7715a5d5843f52e88e746ce6eef83
Parent
a9e74eb311f315d…
1 file changed
+9
-3
+9
-3
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -488,21 +488,26 @@ | ||
| 488 | 488 | ** to the page that displays a list of users. |
| 489 | 489 | */ |
| 490 | 490 | doWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1); |
| 491 | 491 | if( doWrite ){ |
| 492 | 492 | char c; |
| 493 | - char zCap[60], zNm[4]; | |
| 493 | + char zCap[70], zNm[4]; | |
| 494 | 494 | zNm[0] = 'a'; |
| 495 | 495 | zNm[2] = 0; |
| 496 | 496 | for(i=0, c='a'; c<='z'; c++){ |
| 497 | 497 | zNm[1] = c; |
| 498 | 498 | a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0; |
| 499 | 499 | if( a[c&0x7f] ) zCap[i++] = c; |
| 500 | 500 | } |
| 501 | 501 | for(c='0'; c<='9'; c++){ |
| 502 | 502 | zNm[1] = c; |
| 503 | - a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0; | |
| 503 | + a[c&0x7f] = P(zNm)!=0; | |
| 504 | + if( a[c&0x7f] ) zCap[i++] = c; | |
| 505 | + } | |
| 506 | + for(c='A'; c<='Z'; c++){ | |
| 507 | + zNm[1] = c; | |
| 508 | + a[c&0x7f] = P(zNm)!=0; | |
| 504 | 509 | if( a[c&0x7f] ) zCap[i++] = c; |
| 505 | 510 | } |
| 506 | 511 | |
| 507 | 512 | zCap[i] = 0; |
| 508 | 513 | zPw = P("pw"); |
| @@ -593,18 +598,19 @@ | ||
| 593 | 598 | zInfo = ""; |
| 594 | 599 | zCap = ""; |
| 595 | 600 | zPw = ""; |
| 596 | 601 | for(i='a'; i<='z'; i++) oa[i] = ""; |
| 597 | 602 | for(i='0'; i<='9'; i++) oa[i] = ""; |
| 603 | + for(i='A'; i<='Z'; i++) oa[i] = ""; | |
| 598 | 604 | if( uid ){ |
| 599 | 605 | zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid); |
| 600 | 606 | zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid); |
| 601 | 607 | zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid); |
| 602 | 608 | zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid); |
| 603 | 609 | for(i=0; zCap[i]; i++){ |
| 604 | 610 | char c = zCap[i]; |
| 605 | - if( (c>='a' && c<='z') || (c>='0' && c<='9') ){ | |
| 611 | + if( (c>='a' && c<='z') || (c>='0' && c<='9') || (c>='A' && c<='Z') ){ | |
| 606 | 612 | oa[c&0x7f] = " checked=\"checked\""; |
| 607 | 613 | } |
| 608 | 614 | } |
| 609 | 615 | } |
| 610 | 616 | |
| 611 | 617 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -488,21 +488,26 @@ | |
| 488 | ** to the page that displays a list of users. |
| 489 | */ |
| 490 | doWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1); |
| 491 | if( doWrite ){ |
| 492 | char c; |
| 493 | char zCap[60], zNm[4]; |
| 494 | zNm[0] = 'a'; |
| 495 | zNm[2] = 0; |
| 496 | for(i=0, c='a'; c<='z'; c++){ |
| 497 | zNm[1] = c; |
| 498 | a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0; |
| 499 | if( a[c&0x7f] ) zCap[i++] = c; |
| 500 | } |
| 501 | for(c='0'; c<='9'; c++){ |
| 502 | zNm[1] = c; |
| 503 | a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0; |
| 504 | if( a[c&0x7f] ) zCap[i++] = c; |
| 505 | } |
| 506 | |
| 507 | zCap[i] = 0; |
| 508 | zPw = P("pw"); |
| @@ -593,18 +598,19 @@ | |
| 593 | zInfo = ""; |
| 594 | zCap = ""; |
| 595 | zPw = ""; |
| 596 | for(i='a'; i<='z'; i++) oa[i] = ""; |
| 597 | for(i='0'; i<='9'; i++) oa[i] = ""; |
| 598 | if( uid ){ |
| 599 | zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid); |
| 600 | zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid); |
| 601 | zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid); |
| 602 | zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid); |
| 603 | for(i=0; zCap[i]; i++){ |
| 604 | char c = zCap[i]; |
| 605 | if( (c>='a' && c<='z') || (c>='0' && c<='9') ){ |
| 606 | oa[c&0x7f] = " checked=\"checked\""; |
| 607 | } |
| 608 | } |
| 609 | } |
| 610 | |
| 611 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -488,21 +488,26 @@ | |
| 488 | ** to the page that displays a list of users. |
| 489 | */ |
| 490 | doWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1); |
| 491 | if( doWrite ){ |
| 492 | char c; |
| 493 | char zCap[70], zNm[4]; |
| 494 | zNm[0] = 'a'; |
| 495 | zNm[2] = 0; |
| 496 | for(i=0, c='a'; c<='z'; c++){ |
| 497 | zNm[1] = c; |
| 498 | a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0; |
| 499 | if( a[c&0x7f] ) zCap[i++] = c; |
| 500 | } |
| 501 | for(c='0'; c<='9'; c++){ |
| 502 | zNm[1] = c; |
| 503 | a[c&0x7f] = P(zNm)!=0; |
| 504 | if( a[c&0x7f] ) zCap[i++] = c; |
| 505 | } |
| 506 | for(c='A'; c<='Z'; c++){ |
| 507 | zNm[1] = c; |
| 508 | a[c&0x7f] = P(zNm)!=0; |
| 509 | if( a[c&0x7f] ) zCap[i++] = c; |
| 510 | } |
| 511 | |
| 512 | zCap[i] = 0; |
| 513 | zPw = P("pw"); |
| @@ -593,18 +598,19 @@ | |
| 598 | zInfo = ""; |
| 599 | zCap = ""; |
| 600 | zPw = ""; |
| 601 | for(i='a'; i<='z'; i++) oa[i] = ""; |
| 602 | for(i='0'; i<='9'; i++) oa[i] = ""; |
| 603 | for(i='A'; i<='Z'; i++) oa[i] = ""; |
| 604 | if( uid ){ |
| 605 | zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid); |
| 606 | zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid); |
| 607 | zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid); |
| 608 | zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid); |
| 609 | for(i=0; zCap[i]; i++){ |
| 610 | char c = zCap[i]; |
| 611 | if( (c>='a' && c<='z') || (c>='0' && c<='9') || (c>='A' && c<='Z') ){ |
| 612 | oa[c&0x7f] = " checked=\"checked\""; |
| 613 | } |
| 614 | } |
| 615 | } |
| 616 | |
| 617 |