Fossil SCM

Attempt to provide support for the REQUEST_SCHEMA and SERVER_NAME environment variables in CGI support. This is an alternative implementation of [0d72caae1592769e|check-in 0d72caae1592769e]. Discussion on [forum:/forumpost/cba707d7bd|forum thread cba707d7bd] and [forum:/forumpost/cb17013d06|cb17013d06].

drh 2020-12-12 14:05 trunk
Commit f101e94da1f80571942ba608773cc4c82f817592754d88b910bae8ef64512dc6
+8 -4
--- src/cgi.c
+++ src/cgi.c
@@ -1427,14 +1427,14 @@
14271427
"HTTP_ACCEPT_LANGUAGE", "HTTP_AUTHENICATION",
14281428
"HTTP_CONNECTION", "HTTP_HOST",
14291429
"HTTP_IF_NONE_MATCH", "HTTP_IF_MODIFIED_SINCE",
14301430
"HTTP_USER_AGENT", "HTTP_REFERER", "PATH_INFO", "PATH_TRANSLATED",
14311431
"QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
1432
- "REMOTE_USER", "REQUEST_METHOD",
1433
- "REQUEST_URI", "SCRIPT_FILENAME", "SCRIPT_NAME", "SERVER_PROTOCOL",
1434
- "HOME", "FOSSIL_HOME", "USERNAME", "USER", "FOSSIL_USER",
1435
- "SQLITE_TMPDIR", "TMPDIR",
1432
+ "REMOTE_USER", "REQUEST_METHOD", "REQUEST_SCHEMA",
1433
+ "REQUEST_URI", "SCRIPT_FILENAME", "SCRIPT_NAME", "SERVER_NAME",
1434
+ "SERVER_PROTOCOL", "HOME", "FOSSIL_HOME", "USERNAME", "USER",
1435
+ "FOSSIL_USER", "SQLITE_TMPDIR", "TMPDIR",
14361436
"TEMP", "TMP", "FOSSIL_VFS",
14371437
"FOSSIL_FORCE_TICKET_MODERATION", "FOSSIL_FORCE_WIKI_MODERATION",
14381438
"FOSSIL_TCL_PATH", "TH1_DELETE_INTERP", "TH1_ENABLE_DOCS",
14391439
"TH1_ENABLE_HOOKS", "TH1_ENABLE_TCL", "REMOTE_HOST",
14401440
};
@@ -1662,10 +1662,11 @@
16621662
** and subsequent code handles the actual generation of the webpage.
16631663
*/
16641664
void cgi_handle_http_request(const char *zIpAddr){
16651665
char *z, *zToken;
16661666
int i;
1667
+ const char *zSchema = "http";
16671668
char zLine[2000]; /* A single line of input. */
16681669
g.fullHttpReply = 1;
16691670
if( fgets(zLine, sizeof(zLine),g.httpIn)==0 ){
16701671
malformed_request("missing HTTP header");
16711672
}
@@ -1725,12 +1726,14 @@
17251726
cgi_setenv("CONTENT_TYPE", zVal);
17261727
}else if( fossil_strcmp(zFieldName,"cookie:")==0 ){
17271728
cgi_setenv("HTTP_COOKIE", zVal);
17281729
}else if( fossil_strcmp(zFieldName,"https:")==0 ){
17291730
cgi_setenv("HTTPS", zVal);
1731
+ zSchema = "https";
17301732
}else if( fossil_strcmp(zFieldName,"host:")==0 ){
17311733
cgi_setenv("HTTP_HOST", zVal);
1734
+ cgi_setenv("SERVER_NAME", zVal);
17321735
}else if( fossil_strcmp(zFieldName,"if-none-match:")==0 ){
17331736
cgi_setenv("HTTP_IF_NONE_MATCH", zVal);
17341737
}else if( fossil_strcmp(zFieldName,"if-modified-since:")==0 ){
17351738
cgi_setenv("HTTP_IF_MODIFIED_SINCE", zVal);
17361739
}else if( fossil_strcmp(zFieldName,"referer:")==0 ){
@@ -1752,10 +1755,11 @@
17521755
rangeStart = x1;
17531756
rangeEnd = x2+1;
17541757
}
17551758
}
17561759
}
1760
+ cgi_setenv("REQUEST_SCHEMA",zSchema);
17571761
cgi_init();
17581762
cgi_trace(0);
17591763
}
17601764
17611765
/*
17621766
--- src/cgi.c
+++ src/cgi.c
@@ -1427,14 +1427,14 @@
1427 "HTTP_ACCEPT_LANGUAGE", "HTTP_AUTHENICATION",
1428 "HTTP_CONNECTION", "HTTP_HOST",
1429 "HTTP_IF_NONE_MATCH", "HTTP_IF_MODIFIED_SINCE",
1430 "HTTP_USER_AGENT", "HTTP_REFERER", "PATH_INFO", "PATH_TRANSLATED",
1431 "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
1432 "REMOTE_USER", "REQUEST_METHOD",
1433 "REQUEST_URI", "SCRIPT_FILENAME", "SCRIPT_NAME", "SERVER_PROTOCOL",
1434 "HOME", "FOSSIL_HOME", "USERNAME", "USER", "FOSSIL_USER",
1435 "SQLITE_TMPDIR", "TMPDIR",
1436 "TEMP", "TMP", "FOSSIL_VFS",
1437 "FOSSIL_FORCE_TICKET_MODERATION", "FOSSIL_FORCE_WIKI_MODERATION",
1438 "FOSSIL_TCL_PATH", "TH1_DELETE_INTERP", "TH1_ENABLE_DOCS",
1439 "TH1_ENABLE_HOOKS", "TH1_ENABLE_TCL", "REMOTE_HOST",
1440 };
@@ -1662,10 +1662,11 @@
1662 ** and subsequent code handles the actual generation of the webpage.
1663 */
1664 void cgi_handle_http_request(const char *zIpAddr){
1665 char *z, *zToken;
1666 int i;
 
1667 char zLine[2000]; /* A single line of input. */
1668 g.fullHttpReply = 1;
1669 if( fgets(zLine, sizeof(zLine),g.httpIn)==0 ){
1670 malformed_request("missing HTTP header");
1671 }
@@ -1725,12 +1726,14 @@
1725 cgi_setenv("CONTENT_TYPE", zVal);
1726 }else if( fossil_strcmp(zFieldName,"cookie:")==0 ){
1727 cgi_setenv("HTTP_COOKIE", zVal);
1728 }else if( fossil_strcmp(zFieldName,"https:")==0 ){
1729 cgi_setenv("HTTPS", zVal);
 
1730 }else if( fossil_strcmp(zFieldName,"host:")==0 ){
1731 cgi_setenv("HTTP_HOST", zVal);
 
1732 }else if( fossil_strcmp(zFieldName,"if-none-match:")==0 ){
1733 cgi_setenv("HTTP_IF_NONE_MATCH", zVal);
1734 }else if( fossil_strcmp(zFieldName,"if-modified-since:")==0 ){
1735 cgi_setenv("HTTP_IF_MODIFIED_SINCE", zVal);
1736 }else if( fossil_strcmp(zFieldName,"referer:")==0 ){
@@ -1752,10 +1755,11 @@
1752 rangeStart = x1;
1753 rangeEnd = x2+1;
1754 }
1755 }
1756 }
 
1757 cgi_init();
1758 cgi_trace(0);
1759 }
1760
1761 /*
1762
--- src/cgi.c
+++ src/cgi.c
@@ -1427,14 +1427,14 @@
1427 "HTTP_ACCEPT_LANGUAGE", "HTTP_AUTHENICATION",
1428 "HTTP_CONNECTION", "HTTP_HOST",
1429 "HTTP_IF_NONE_MATCH", "HTTP_IF_MODIFIED_SINCE",
1430 "HTTP_USER_AGENT", "HTTP_REFERER", "PATH_INFO", "PATH_TRANSLATED",
1431 "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
1432 "REMOTE_USER", "REQUEST_METHOD", "REQUEST_SCHEMA",
1433 "REQUEST_URI", "SCRIPT_FILENAME", "SCRIPT_NAME", "SERVER_NAME",
1434 "SERVER_PROTOCOL", "HOME", "FOSSIL_HOME", "USERNAME", "USER",
1435 "FOSSIL_USER", "SQLITE_TMPDIR", "TMPDIR",
1436 "TEMP", "TMP", "FOSSIL_VFS",
1437 "FOSSIL_FORCE_TICKET_MODERATION", "FOSSIL_FORCE_WIKI_MODERATION",
1438 "FOSSIL_TCL_PATH", "TH1_DELETE_INTERP", "TH1_ENABLE_DOCS",
1439 "TH1_ENABLE_HOOKS", "TH1_ENABLE_TCL", "REMOTE_HOST",
1440 };
@@ -1662,10 +1662,11 @@
1662 ** and subsequent code handles the actual generation of the webpage.
1663 */
1664 void cgi_handle_http_request(const char *zIpAddr){
1665 char *z, *zToken;
1666 int i;
1667 const char *zSchema = "http";
1668 char zLine[2000]; /* A single line of input. */
1669 g.fullHttpReply = 1;
1670 if( fgets(zLine, sizeof(zLine),g.httpIn)==0 ){
1671 malformed_request("missing HTTP header");
1672 }
@@ -1725,12 +1726,14 @@
1726 cgi_setenv("CONTENT_TYPE", zVal);
1727 }else if( fossil_strcmp(zFieldName,"cookie:")==0 ){
1728 cgi_setenv("HTTP_COOKIE", zVal);
1729 }else if( fossil_strcmp(zFieldName,"https:")==0 ){
1730 cgi_setenv("HTTPS", zVal);
1731 zSchema = "https";
1732 }else if( fossil_strcmp(zFieldName,"host:")==0 ){
1733 cgi_setenv("HTTP_HOST", zVal);
1734 cgi_setenv("SERVER_NAME", zVal);
1735 }else if( fossil_strcmp(zFieldName,"if-none-match:")==0 ){
1736 cgi_setenv("HTTP_IF_NONE_MATCH", zVal);
1737 }else if( fossil_strcmp(zFieldName,"if-modified-since:")==0 ){
1738 cgi_setenv("HTTP_IF_MODIFIED_SINCE", zVal);
1739 }else if( fossil_strcmp(zFieldName,"referer:")==0 ){
@@ -1752,10 +1755,11 @@
1755 rangeStart = x1;
1756 rangeEnd = x2+1;
1757 }
1758 }
1759 }
1760 cgi_setenv("REQUEST_SCHEMA",zSchema);
1761 cgi_init();
1762 cgi_trace(0);
1763 }
1764
1765 /*
1766
--- src/extcgi.c
+++ src/extcgi.c
@@ -67,10 +67,11 @@
6767
"PATH_INFO",
6868
"QUERY_STRING",
6969
"REMOTE_ADDR",
7070
"REMOTE_USER",
7171
"REQUEST_METHOD",
72
+ "REQUEST_SCHEMA",
7273
"REQUEST_URI",
7374
"SCRIPT_DIRECTORY",
7475
"SCRIPT_FILENAME",
7576
"SCRIPT_NAME",
7677
"SERVER_NAME",
7778
--- src/extcgi.c
+++ src/extcgi.c
@@ -67,10 +67,11 @@
67 "PATH_INFO",
68 "QUERY_STRING",
69 "REMOTE_ADDR",
70 "REMOTE_USER",
71 "REQUEST_METHOD",
 
72 "REQUEST_URI",
73 "SCRIPT_DIRECTORY",
74 "SCRIPT_FILENAME",
75 "SCRIPT_NAME",
76 "SERVER_NAME",
77
--- src/extcgi.c
+++ src/extcgi.c
@@ -67,10 +67,11 @@
67 "PATH_INFO",
68 "QUERY_STRING",
69 "REMOTE_ADDR",
70 "REMOTE_USER",
71 "REQUEST_METHOD",
72 "REQUEST_SCHEMA",
73 "REQUEST_URI",
74 "SCRIPT_DIRECTORY",
75 "SCRIPT_FILENAME",
76 "SCRIPT_NAME",
77 "SERVER_NAME",
78
--- www/serverext.wiki
+++ www/serverext.wiki
@@ -129,10 +129,11 @@
129129
* AUTH_CONTENT
130130
* CONTENT_LENGTH
131131
* CONTENT_TYPE
132132
* DOCUMENT_ROOT
133133
* GATEWAY_INTERFACE
134
+ * HTTPS
134135
* HTTP_ACCEPT
135136
* HTTP_ACCEPT_ENCODING
136137
* HTTP_COOKIE
137138
* HTTP_HOST
138139
* HTTP_IF_MODIFIED_SINCE
@@ -142,10 +143,11 @@
142143
* PATH_INFO
143144
* QUERY_STRING
144145
* REMOTE_ADDR
145146
* REMOTE_USER
146147
* REQUEST_METHOD
148
+ * REQUEST_SCHEMA
147149
* REQUEST_URI
148150
* SCRIPT_DIRECTORY
149151
* SCRIPT_FILENAME
150152
* SCRIPT_NAME
151153
* SERVER_NAME
152154
--- www/serverext.wiki
+++ www/serverext.wiki
@@ -129,10 +129,11 @@
129 * AUTH_CONTENT
130 * CONTENT_LENGTH
131 * CONTENT_TYPE
132 * DOCUMENT_ROOT
133 * GATEWAY_INTERFACE
 
134 * HTTP_ACCEPT
135 * HTTP_ACCEPT_ENCODING
136 * HTTP_COOKIE
137 * HTTP_HOST
138 * HTTP_IF_MODIFIED_SINCE
@@ -142,10 +143,11 @@
142 * PATH_INFO
143 * QUERY_STRING
144 * REMOTE_ADDR
145 * REMOTE_USER
146 * REQUEST_METHOD
 
147 * REQUEST_URI
148 * SCRIPT_DIRECTORY
149 * SCRIPT_FILENAME
150 * SCRIPT_NAME
151 * SERVER_NAME
152
--- www/serverext.wiki
+++ www/serverext.wiki
@@ -129,10 +129,11 @@
129 * AUTH_CONTENT
130 * CONTENT_LENGTH
131 * CONTENT_TYPE
132 * DOCUMENT_ROOT
133 * GATEWAY_INTERFACE
134 * HTTPS
135 * HTTP_ACCEPT
136 * HTTP_ACCEPT_ENCODING
137 * HTTP_COOKIE
138 * HTTP_HOST
139 * HTTP_IF_MODIFIED_SINCE
@@ -142,10 +143,11 @@
143 * PATH_INFO
144 * QUERY_STRING
145 * REMOTE_ADDR
146 * REMOTE_USER
147 * REQUEST_METHOD
148 * REQUEST_SCHEMA
149 * REQUEST_URI
150 * SCRIPT_DIRECTORY
151 * SCRIPT_FILENAME
152 * SCRIPT_NAME
153 * SERVER_NAME
154

Keyboard Shortcuts

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