Fossil SCM

Extend the user capability system to allow the use of upper-case ASCII letters for new capabilities.

drh 2018-06-25 14:26 trunk
Commit e45cfde7aa17ab642a962f6fcd2cda4832a7715a5d5843f52e88e746ce6eef83
1 file changed +9 -3
+9 -3
--- src/setup.c
+++ src/setup.c
@@ -488,21 +488,26 @@
488488
** to the page that displays a list of users.
489489
*/
490490
doWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
491491
if( doWrite ){
492492
char c;
493
- char zCap[60], zNm[4];
493
+ char zCap[70], zNm[4];
494494
zNm[0] = 'a';
495495
zNm[2] = 0;
496496
for(i=0, c='a'; c<='z'; c++){
497497
zNm[1] = c;
498498
a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0;
499499
if( a[c&0x7f] ) zCap[i++] = c;
500500
}
501501
for(c='0'; c<='9'; c++){
502502
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;
504509
if( a[c&0x7f] ) zCap[i++] = c;
505510
}
506511
507512
zCap[i] = 0;
508513
zPw = P("pw");
@@ -593,18 +598,19 @@
593598
zInfo = "";
594599
zCap = "";
595600
zPw = "";
596601
for(i='a'; i<='z'; i++) oa[i] = "";
597602
for(i='0'; i<='9'; i++) oa[i] = "";
603
+ for(i='A'; i<='Z'; i++) oa[i] = "";
598604
if( uid ){
599605
zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
600606
zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
601607
zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid);
602608
zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid);
603609
for(i=0; zCap[i]; i++){
604610
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') ){
606612
oa[c&0x7f] = " checked=\"checked\"";
607613
}
608614
}
609615
}
610616
611617
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button