Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Fix etag processing so that no etag header is issued for pages which encounter errors or warnings. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
517fb01b9ca8b29055213e91c795ca04 |
| User & Date: | drh 2020-06-21 12:59:03.991 |
Context
|
2020-06-21
| ||
| 17:17 | Always increment the "cfgcnt" value on any configuration change, in order to reset the ETag in case the configuration changes display characteristics. ... (check-in: 0ba0e5e446 user: drh tags: trunk) | |
| 12:59 | Fix etag processing so that no etag header is issued for pages which encounter errors or warnings. ... (check-in: 517fb01b9c user: drh tags: trunk) | |
|
2020-06-20
| ||
| 19:51 | Make sure calls to db_close_config() also close the local checkout when needed. ... (check-in: aefbd20d6e user: mistachkin tags: trunk) | |
Changes
Changes to src/etag.c.
| ︙ | ︙ | |||
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#define ETAG_QUERY 0x10 /* Output depends on PATH_INFO and QUERY_STRING */
/* and the g.zLogin value */
#endif
static char zETag[33]; /* The generated ETag */
static int iMaxAge = 0; /* The max-age parameter in the reply */
static sqlite3_int64 iEtagMtime = 0; /* Last-Modified time */
/*
** Return a hash that changes every time the Fossil source code is
** rebuilt.
**
** The FOSSIL_BUILD_HASH string that is returned here gets computed by
** the mkversion utility program. The result is a hash of MANIFEST_UUID
| > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#define ETAG_QUERY 0x10 /* Output depends on PATH_INFO and QUERY_STRING */
/* and the g.zLogin value */
#endif
static char zETag[33]; /* The generated ETag */
static int iMaxAge = 0; /* The max-age parameter in the reply */
static sqlite3_int64 iEtagMtime = 0; /* Last-Modified time */
static int etagCancelled = 0; /* Never send an etag */
/*
** Return a hash that changes every time the Fossil source code is
** rebuilt.
**
** The FOSSIL_BUILD_HASH string that is returned here gets computed by
** the mkversion utility program. The result is a hash of MANIFEST_UUID
|
| ︙ | ︙ | |||
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
** Generate an ETag
*/
void etag_check(unsigned eFlags, const char *zHash){
const char *zIfNoneMatch;
char zBuf[50];
assert( zETag[0]==0 ); /* Only call this routine once! */
iMaxAge = 86400;
md5sum_init();
/* Always include the executable ID as part of the hash */
md5sum_step_text("exe-id: ", -1);
md5sum_step_text(fossil_exe_id(), -1);
md5sum_step_text("\n", 1);
if( (eFlags & ETAG_HASH)!=0 && zHash ){
md5sum_step_text("hash: ", -1);
md5sum_step_text(zHash, -1);
md5sum_step_text("\n", 1);
iMaxAge = 0;
| > > | > | | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
** Generate an ETag
*/
void etag_check(unsigned eFlags, const char *zHash){
const char *zIfNoneMatch;
char zBuf[50];
assert( zETag[0]==0 ); /* Only call this routine once! */
if( etagCancelled ) return;
iMaxAge = 86400;
md5sum_init();
/* Always include the executable ID as part of the hash */
md5sum_step_text("exe-id: ", -1);
md5sum_step_text(fossil_exe_id(), -1);
md5sum_step_text("\n", 1);
if( (eFlags & ETAG_HASH)!=0 && zHash ){
md5sum_step_text("hash: ", -1);
md5sum_step_text(zHash, -1);
md5sum_step_text("\n", 1);
iMaxAge = 0;
}
if( eFlags & ETAG_DATA ){
int iKey = db_int(0, "SELECT max(rcvid) FROM rcvfrom");
sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",iKey);
md5sum_step_text("data: ", -1);
md5sum_step_text(zBuf, -1);
md5sum_step_text("\n", 1);
iMaxAge = 60;
}
if( eFlags & ETAG_CONFIG ){
int iKey = db_int(0, "SELECT value FROM config WHERE name='cfgcnt'");
sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",iKey);
md5sum_step_text("config: ", -1);
md5sum_step_text(zBuf, -1);
md5sum_step_text("\n", 1);
iMaxAge = 3600;
}
|
| ︙ | ︙ | |||
243 244 245 246 247 248 249 |
db_find_and_open_repository(0, 0);
zKey = find_option("key",0,1);
zHash = find_option("hash",0,1);
if( zKey ) iKey = atoi(zKey);
etag_check(iKey, zHash);
fossil_print("%s\n", etag_tag());
}
| > > > > > > > > | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
db_find_and_open_repository(0, 0);
zKey = find_option("key",0,1);
zHash = find_option("hash",0,1);
if( zKey ) iKey = atoi(zKey);
etag_check(iKey, zHash);
fossil_print("%s\n", etag_tag());
}
/*
** Cancel the ETag.
*/
void etag_cancel(void){
etagCancelled = 1;
zETag[0] = 0;
}
|
Changes to src/printf.c.
| ︙ | ︙ | |||
1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 |
else
#endif
if( g.cgiOutput==1 && g.db ){
g.cgiOutput = 2;
cgi_reset_content();
cgi_set_content_type("text/html");
style_header("Bad Request");
@ <p class="generalError">%h(z)</p>
cgi_set_status(400, "Bad Request");
style_footer();
cgi_reply();
}else if( !g.fQuiet ){
fossil_force_newline();
fossil_trace("%s\n", z);
| > | 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 |
else
#endif
if( g.cgiOutput==1 && g.db ){
g.cgiOutput = 2;
cgi_reset_content();
cgi_set_content_type("text/html");
style_header("Bad Request");
etag_cancel();
@ <p class="generalError">%h(z)</p>
cgi_set_status(400, "Bad Request");
style_footer();
cgi_reply();
}else if( !g.fQuiet ){
fossil_force_newline();
fossil_trace("%s\n", z);
|
| ︙ | ︙ | |||
1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 |
*/
if( !json_is_main_boostrapped() ) json_main_bootstrap();
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);
| > | 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 |
*/
if( !json_is_main_boostrapped() ) json_main_bootstrap();
json_warn( FSL_JSON_W_UNKNOWN, "%s", z );
}else
#endif
{
if( g.cgiOutput==1 ){
etag_cancel();
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/security_audit.c.
| ︙ | ︙ | |||
684 685 686 687 688 689 690 |
return;
}
@ <p>The server error log at "%h(g.zErrlog)" is %,lld(szFile) bytes in size.
style_submenu_element("Download", "%R/errorlog?download");
style_submenu_element("Truncate", "%R/errorlog?truncate");
in = fossil_fopen(g.zErrlog, "rb");
if( in==0 ){
| | | 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 |
return;
}
@ <p>The server error log at "%h(g.zErrlog)" is %,lld(szFile) bytes in size.
style_submenu_element("Download", "%R/errorlog?download");
style_submenu_element("Truncate", "%R/errorlog?truncate");
in = fossil_fopen(g.zErrlog, "rb");
if( in==0 ){
@ <p class='generalError'>Unable to open that file for reading!</p>
style_footer();
return;
}
if( szFile>MXSHOWLOG && P("all")==0 ){
@ <form action="%R/errorlog" method="POST">
@ <p>Only the last %,d(MXSHOWLOG) bytes are shown.
@ <input type="submit" name="all" value="Show All">
|
| ︙ | ︙ |
Changes to src/timeline.c.
| ︙ | ︙ | |||
1741 1742 1743 1744 1745 1746 1747 |
login_check_credentials();
if( (!g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki && !g.perm.RdForum)
|| (bisectLocal && !g.perm.Setup)
){
login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
return;
}
| | | 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 |
login_check_credentials();
if( (!g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki && !g.perm.RdForum)
|| (bisectLocal && !g.perm.Setup)
){
login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
return;
}
etag_check(ETAG_QUERY|ETAG_COOKIE|ETAG_DATA|ETAG_CONFIG, 0);
cookie_read_parameter("y","y");
zType = P("y");
if( zType==0 ){
zType = g.perm.Read ? "ci" : "all";
cgi_set_parameter("y", zType);
}
if( zType[0]=='a' || zType[0]=='c' ){
|
| ︙ | ︙ |