@@ -350,11 +350,11 @@
350 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fwrite(blob_buffer(&cgiContent[i]), 1, size, g.httpOut);
351 351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
352 352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
353 353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
354 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fflush(g.httpOut);
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CGIDEBUG(("DONE\n"));
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CGIDEBUG(("-------- END cgi ---------\n"));
356 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
357 357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* After the webpage has been sent, do any useful background
358 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** processing.
359 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
360 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.cgiOutput = 2;
@@ -1167,10 +1167,14 @@
1167 1167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1168 1168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j++;
1169 1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1170 1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nUsedQP = j;
1171 1171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Invoking with a NULL zName is just a way to cause the parameters
1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be sorted. So go ahead and bail out in that case */
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName==0 || zName[0]==0 ) return 0;
1172 1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1173 1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Do a binary search for a matching query parameter */
1174 1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lo = 0;
1175 1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hi = nUsedQP-1;
1176 1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( lo<=hi ){
@@ -1189,11 +1193,11 @@
1189 1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If no match is found and the name begins with an upper-case
1190 1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** letter, then check to see if there is an environment variable
1191 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with the given name. Handle environment variables with empty values
1192 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same as non-existent environment variables.
1193 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zName && fossil_isupper(zName[0]) ){
1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_isupper(zName[0]) ){
1195 1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue = fossil_getenv(zName);
1196 1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zValue && zValue[0] ){
1197 1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_set_parameter_nocopy(zName, zValue, 0);
1198 1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CGIDEBUG(("env-match [%s] = [%s]\n", zName, zValue));
1199 1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zValue;
@@ -1314,28 +1318,73 @@
1314 1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
1315 1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
1316 1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1317 1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1318 1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Print all query parameters on standard output. Format the
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** parameters as HTML. This is used for testing and debugging.
1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Load all relevant environment variables into the parameter buffer.
1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Invoke this routine prior to calling cgi_print_all() in order to see
1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the full CGI environment. This routine intended for debugging purposes
1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only.
1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void cgi_load_environment(void){
1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The following is a list of environment variables that Fossil considers
1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be "relevant". */
1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *const azCgiVars[] = {
1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE", "SCGI",
1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
1334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "HTTP_ACCEPT_LANGUAGE", "HTTP_AUTHENICATION",
1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "HTTP_CONNECTION", "HTTP_HOST",
1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "HTTP_IF_NONE_MATCH", "HTTP_IF_MODIFIED_SINCE",
1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "HTTP_USER_AGENT", "HTTP_REFERER", "PATH_INFO", "PATH_TRANSLATED",
1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "REMOTE_USER", "REQUEST_METHOD",
1340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "REQUEST_URI", "SCRIPT_FILENAME", "SCRIPT_NAME", "SERVER_PROTOCOL",
1341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "HOME", "FOSSIL_HOME", "USERNAME", "USER", "FOSSIL_USER",
1342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SQLITE_TMPDIR", "TMPDIR",
1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "TEMP", "TMP", "FOSSIL_VFS",
1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "FOSSIL_FORCE_TICKET_MODERATION", "FOSSIL_FORCE_WIKI_MODERATION",
1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "FOSSIL_TCL_PATH", "TH1_DELETE_INTERP", "TH1_ENABLE_DOCS",
1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "TH1_ENABLE_HOOKS", "TH1_ENABLE_TCL", "REMOTE_HOST",
1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<count(azCgiVars); i++) (void)P(azCgiVars[i]);
1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Print all query parameters on standard output.
1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is used for testing and debugging.
1321 1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1322 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Omit the values of the cookies unless showAll is true.
1357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The eDest parameter determines where the output is shown:
1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** eDest==0: Rendering as HTML into the CGI reply
1361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** eDest==1: Written to stderr
1362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** eDest==2: Written to cgi_debug
1323 1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void cgi_print_all(int showAll, int onConsole){
1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void cgi_print_all(int showAll, unsigned int eDest){
1325 1365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
1326 1366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_parameter("",""); /* Force the parameters into sorted order */
1327 1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nUsedQP; i++){
1328 1368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = aParamQP[i].zName;
1329 1369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !showAll ){
1330 1370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fossil_stricmp("HTTP_COOKIE",zName)==0 ) continue;
1331 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fossil_strnicmp("fossil-",zName,7)==0 ) continue;
1332 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( onConsole ){
1334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_trace("%s = %s\n", zName, aParamQP[i].zValue);
1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_printf("%h = %h <br />\n", zName, aParamQP[i].zValue);
1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( eDest ){
1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 0: {
1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_printf("%h = %h <br />\n", zName, aParamQP[i].zValue);
1376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
1377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 1: {
1379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_trace("%s = %s\n", zName, aParamQP[i].zValue);
1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 2: {
1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_debug("%s = %s\n", zName, aParamQP[i].zValue);
1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1337 1386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1338 1387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1339 1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1340 1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1341 1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -2076,10 +2125,30 @@
2076 2125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return mprintf("%s, %d %s %02d %02d:%02d:%02d +0000",
2077 2126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azDays[pTm->tm_wday], pTm->tm_mday, azMonths[pTm->tm_mon],
2078 2127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTm->tm_year+1900, pTm->tm_hour, pTm->tm_min, pTm->tm_sec);
2079 2128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2080 2129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
2132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Returns an ISO8601-formatted time string suitable for debugging
2133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** purposes.
2134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value returned is always a string obtained from mprintf() and must
2136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be freed using fossil_free() to avoid a memory leak.
2137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *cgi_iso8601_datestamp(void){
2139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct tm *pTm;
2140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ time_t now = time(0);
2141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTm = gmtime(&now);
2142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTm==0 ){
2143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return mprintf("");
2144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return mprintf("%04d-%02d-%02d %02d:%02d:%02d",
2146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTm->tm_year+1900, pTm->tm_mon, pTm->tm_mday,
2147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTm->tm_hour, pTm->tm_min, pTm->tm_sec);
2148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2081 2150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2082 2151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2083 2152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Parse an RFC822-formatted timestamp as we'd expect from HTTP and return
2084 2153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a Unix epoch time. <= zero is returned on failure.
2085 2154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2086 2155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!