Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the 'D' Debug user capability. This is designed to show additional information and controls on webpages for debugging purposes. Also take steps to avoid trying to generate a webpage error message after the webpage has already gone out. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
fd3198322a6f902a38dcabdea1663de9 |
User & Date: | drh 2018-07-25 13:20:15.431 |
Context
2018-07-30
| ||
13:25 | Backoffice processing improvements: Set a timer on the backoffice to prevent it from running too long. Report errors on failed attempts to open /dev/null. Use "NUL" instead of "/dev/null" on Windows. ... (check-in: 07356e44 user: drh tags: trunk) | |
2018-07-25
| ||
13:21 | Merge enhancements from trunk. ... (check-in: 94262a8c user: drh tags: forum-v2) | |
13:20 | Add the 'D' Debug user capability. This is designed to show additional information and controls on webpages for debugging purposes. Also take steps to avoid trying to generate a webpage error message after the webpage has already gone out. ... (check-in: fd319832 user: drh tags: trunk) | |
2018-07-22
| ||
21:10 | In debug config, reference the compiled sources; this allows stepping through the actual code in the debugger ... (check-in: 58bf02d1 user: ashepilko tags: trunk) | |
Changes
Changes to src/cgi.c.
︙ | ︙ | |||
341 342 343 344 345 346 347 348 349 350 351 352 353 354 | } fflush(g.httpOut); CGIDEBUG(("DONE\n")); /* After the webpage has been sent, do any useful background ** processing. */ if( g.db!=0 && iReplyStatus==200 ){ fclose(g.httpOut); g.httpOut = fossil_fopen("/dev/null", "wb"); backoffice_run(); } } | > | 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 | } fflush(g.httpOut); CGIDEBUG(("DONE\n")); /* After the webpage has been sent, do any useful background ** processing. */ g.cgiOutput = 2; if( g.db!=0 && iReplyStatus==200 ){ fclose(g.httpOut); g.httpOut = fossil_fopen("/dev/null", "wb"); backoffice_run(); } } |
︙ | ︙ |
Changes to src/login.c.
︙ | ︙ | |||
1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 | case '5': p->ModForum = 1; case '4': p->WrTForum = 1; case '3': p->WrForum = 1; case '2': p->RdForum = 1; break; case '7': p->EmailAlert = 1; break; case 'A': p->Announce = 1; break; /* The "u" privileges is a little different. It recursively ** inherits all privileges of the user named "reader" */ case 'u': { if( (flags & LOGIN_IGNORE_UV)==0 ){ const char *zUser; zUser = db_text("", "SELECT cap FROM user WHERE login='reader'"); | > | 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 | case '5': p->ModForum = 1; case '4': p->WrTForum = 1; case '3': p->WrForum = 1; case '2': p->RdForum = 1; break; case '7': p->EmailAlert = 1; break; case 'A': p->Announce = 1; break; case 'D': p->Debug = 1; break; /* The "u" privileges is a little different. It recursively ** inherits all privileges of the user named "reader" */ case 'u': { if( (flags & LOGIN_IGNORE_UV)==0 ){ const char *zUser; zUser = db_text("", "SELECT cap FROM user WHERE login='reader'"); |
︙ | ︙ | |||
1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 | case '2': rc = p->RdForum; break; case '3': rc = p->WrForum; break; case '4': rc = p->WrTForum; break; case '5': rc = p->ModForum; break; case '6': rc = p->AdminForum;break; case '7': rc = p->EmailAlert;break; case 'A': rc = p->Announce; break; default: rc = 0; break; } } return rc; } /* | > | 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 | case '2': rc = p->RdForum; break; case '3': rc = p->WrForum; break; case '4': rc = p->WrTForum; break; case '5': rc = p->ModForum; break; case '6': rc = p->AdminForum;break; case '7': rc = p->EmailAlert;break; case 'A': rc = p->Announce; break; case 'D': rc = p->Debug; break; default: rc = 0; break; } } return rc; } /* |
︙ | ︙ |
Changes to src/main.c.
︙ | ︙ | |||
91 92 93 94 95 96 97 98 99 100 101 102 103 104 | char RdForum; /* 2: Read forum posts */ char WrForum; /* 3: Create new forum posts */ char WrTForum; /* 4: Post to forums not subject to moderation */ char ModForum; /* 5: Moderate (approve or reject) forum posts */ char AdminForum; /* 6: Edit forum posts by other users */ char EmailAlert; /* 7: Sign up for email notifications */ char Announce; /* A: Send announcements */ }; #ifdef FOSSIL_ENABLE_TCL /* ** All Tcl related context information is in this structure. This structure ** definition has been copied from and should be kept in sync with the one in ** "th_tcl.c". | > | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | char RdForum; /* 2: Read forum posts */ char WrForum; /* 3: Create new forum posts */ char WrTForum; /* 4: Post to forums not subject to moderation */ char ModForum; /* 5: Moderate (approve or reject) forum posts */ char AdminForum; /* 6: Edit forum posts by other users */ char EmailAlert; /* 7: Sign up for email notifications */ char Announce; /* A: Send announcements */ char Debug; /* D: show extra Fossil debugging features */ }; #ifdef FOSSIL_ENABLE_TCL /* ** All Tcl related context information is in this structure. This structure ** definition has been copied from and should be kept in sync with the one in ** "th_tcl.c". |
︙ | ︙ | |||
166 167 168 169 170 171 172 | char *zHttpsURL; /* zBaseURL translated to https: */ char *zTop; /* Parent directory of zPath */ const char *zContentType; /* The content type of the input HTTP request */ int iErrPriority; /* Priority of current error message */ char *zErrMsg; /* Text of an error message */ int sslNotAvailable; /* SSL is not available. Do not redirect to https: */ Blob cgiIn; /* Input to an xfer www method */ | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | char *zHttpsURL; /* zBaseURL translated to https: */ char *zTop; /* Parent directory of zPath */ const char *zContentType; /* The content type of the input HTTP request */ int iErrPriority; /* Priority of current error message */ char *zErrMsg; /* Text of an error message */ int sslNotAvailable; /* SSL is not available. Do not redirect to https: */ Blob cgiIn; /* Input to an xfer www method */ int cgiOutput; /* 0: command-line 1: CGI. 2: after CGI */ int xferPanic; /* Write error messages in XFER protocol */ int fullHttpReply; /* True for full HTTP reply. False for CGI reply */ Th_Interp *interp; /* The TH1 interpreter */ char *th1Setup; /* The TH1 post-creation setup script, if any */ int th1Flags; /* The TH1 integration state flags */ FILE *httpIn; /* Accept HTTP input from here */ FILE *httpOut; /* Send HTTP output here */ |
︙ | ︙ |
Changes to src/printf.c.
︙ | ︙ | |||
1146 1147 1148 1149 1150 1151 1152 | fossil_errorlog("warning: %s", z); #ifdef FOSSIL_ENABLE_JSON if(g.json.isJsonMode){ json_warn( FSL_JSON_W_UNKNOWN, "%s", z ); }else #endif { | | | 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 | fossil_errorlog("warning: %s", z); #ifdef FOSSIL_ENABLE_JSON if(g.json.isJsonMode){ json_warn( FSL_JSON_W_UNKNOWN, "%s", z ); }else #endif { if( g.cgiOutput==1 ){ cgi_printf("<p class=\"generalError\">\n%h\n</p>\n", z); }else{ fossil_force_newline(); fossil_trace("%s\n", z); } } free(z); |
︙ | ︙ |
Changes to src/setup.c.
︙ | ︙ | |||
370 371 372 373 374 375 376 377 378 379 380 381 382 383 | @ <tr><th valign="top">6</th> @ <td><i>Forum-Supervisor:</i> \ @ Forum administrator @ <tr><th valign="top">7</th> @ <td><i>Email-Alerts:</i> Sign up for email nofications</td></tr> @ <tr><th valign="top">A</th> @ <td><i>Announce:</i> Send announcements</td></tr> @ </table> } /* ** WEBPAGE: setup_ulist_notes ** ** A documentation page showing notes about user configuration. This | > > | 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 | @ <tr><th valign="top">6</th> @ <td><i>Forum-Supervisor:</i> \ @ Forum administrator @ <tr><th valign="top">7</th> @ <td><i>Email-Alerts:</i> Sign up for email nofications</td></tr> @ <tr><th valign="top">A</th> @ <td><i>Announce:</i> Send announcements</td></tr> @ <tr><th valign="top">D</th> @ <td><i>Debug:</i> Enable debugging features</td></tr> @ </table> } /* ** WEBPAGE: setup_ulist_notes ** ** A documentation page showing notes about user configuration. This |
︙ | ︙ | |||
722 723 724 725 726 727 728 | @ <label><input type="checkbox" name="ai"%s(oa['i']) /> @ Check-In%s(B('i'))</label><br /> @ <label><input type="checkbox" name="ao"%s(oa['o']) /> @ Check-Out%s(B('o'))</label><br /> @ <label><input type="checkbox" name="ah"%s(oa['h']) /> @ Hyperlinks%s(B('h'))</label><br /> @ <label><input type="checkbox" name="ab"%s(oa['b']) /> | | < < > > | < < | > > | > > | 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 | @ <label><input type="checkbox" name="ai"%s(oa['i']) /> @ Check-In%s(B('i'))</label><br /> @ <label><input type="checkbox" name="ao"%s(oa['o']) /> @ Check-Out%s(B('o'))</label><br /> @ <label><input type="checkbox" name="ah"%s(oa['h']) /> @ Hyperlinks%s(B('h'))</label><br /> @ <label><input type="checkbox" name="ab"%s(oa['b']) /> @ Attachments%s(B('b'))</label><br> @ <label><input type="checkbox" name="ag"%s(oa['g']) /> @ Clone%s(B('g'))</label><br /> @ </td><td><td width="40"></td><td valign="top"> @ <label><input type="checkbox" name="aj"%s(oa['j']) /> @ Read Wiki%s(B('j'))</label><br> @ <label><input type="checkbox" name="af"%s(oa['f']) /> @ New Wiki%s(B('f'))</label><br /> @ <label><input type="checkbox" name="am"%s(oa['m']) /> @ Append Wiki%s(B('m'))</label><br /> @ <label><input type="checkbox" name="ak"%s(oa['k']) /> @ Write Wiki%s(B('k'))</label><br /> @ <label><input type="checkbox" name="al"%s(oa['l']) /> @ Moderate Wiki%s(B('l'))</label><br /> @ <label><input type="checkbox" name="ar"%s(oa['r']) /> @ Read Ticket%s(B('r'))</label><br /> @ <label><input type="checkbox" name="an"%s(oa['n']) /> @ New Tickets%s(B('n'))</label><br /> @ <label><input type="checkbox" name="ac"%s(oa['c']) /> @ Append To Ticket%s(B('c'))</label><br> @ <label><input type="checkbox" name="aw"%s(oa['w']) /> @ Write Tickets%s(B('w'))</label><br /> @ <label><input type="checkbox" name="aq"%s(oa['q']) /> @ Moderate Tickets%s(B('q'))</label><br> @ <label><input type="checkbox" name="at"%s(oa['t']) /> @ Ticket Report%s(B('t'))</label><br /> @ <label><input type="checkbox" name="ax"%s(oa['x']) /> @ Private%s(B('x'))</label> @ </td><td><td width="40"></td><td valign="top"> @ <label><input type="checkbox" name="ay"%s(oa['y']) /> @ Write Unversioned%s(B('y'))</label><br /> @ <label><input type="checkbox" name="az"%s(oa['z']) /> @ Download Zip%s(B('z'))</label><br /> @ <label><input type="checkbox" name="a2"%s(oa['2']) /> @ Read Forum%s(B('2'))</label><br /> @ <label><input type="checkbox" name="a3"%s(oa['3']) /> @ Write Forum%s(B('3'))</label><br /> @ <label><input type="checkbox" name="a4"%s(oa['4']) /> @ WriteTrusted Forum%s(B('4'))</label><br> @ <label><input type="checkbox" name="a5"%s(oa['5']) /> @ Moderate Forum%s(B('5'))</label><br> @ <label><input type="checkbox" name="a6"%s(oa['6']) /> @ Supervise Forum%s(B('6'))</label><br> @ <label><input type="checkbox" name="a7"%s(oa['7']) /> @ Email Alerts%s(B('7'))</label><br> @ <label><input type="checkbox" name="aA"%s(oa['A']) /> @ Send Announcements%s(B('A'))</label><br> @ <label><input type="checkbox" name="aD"%s(oa['D']) /> @ Enable Debug%s(B('D'))</label> @ </td></tr> @ </table> @ </td> @ </tr> @ <tr> @ <td class="usetupEditLabel">Selected Cap.:</td> @ <td> |
︙ | ︙ |