Fossil SCM

Fix the HOST: header to use the original URL, not the proxy URL.

drh 2008-05-05 19:08 trunk
Commit 1dbf332352efea4a98c0f4570e9d52da0517648b
3 files changed +1 -1 +1 +19 -7
+1 -1
--- src/http.c
+++ src/http.c
@@ -338,11 +338,11 @@
338338
zSep = "";
339339
}else{
340340
zSep = "/";
341341
}
342342
blob_appendf(&hdr, "POST %s%sxfer HTTP/1.1\r\n", g.urlPath, zSep);
343
- blob_appendf(&hdr, "Host: %s:%d\r\n", g.urlName, g.urlPort);
343
+ blob_appendf(&hdr, "Host: %s\r\n", g.urlHostname);
344344
if( g.fHttpTrace ){
345345
blob_appendf(&hdr, "Content-Type: application/x-fossil-debug\r\n");
346346
}else{
347347
blob_appendf(&hdr, "Content-Type: application/x-fossil\r\n");
348348
}
349349
--- src/http.c
+++ src/http.c
@@ -338,11 +338,11 @@
338 zSep = "";
339 }else{
340 zSep = "/";
341 }
342 blob_appendf(&hdr, "POST %s%sxfer HTTP/1.1\r\n", g.urlPath, zSep);
343 blob_appendf(&hdr, "Host: %s:%d\r\n", g.urlName, g.urlPort);
344 if( g.fHttpTrace ){
345 blob_appendf(&hdr, "Content-Type: application/x-fossil-debug\r\n");
346 }else{
347 blob_appendf(&hdr, "Content-Type: application/x-fossil\r\n");
348 }
349
--- src/http.c
+++ src/http.c
@@ -338,11 +338,11 @@
338 zSep = "";
339 }else{
340 zSep = "/";
341 }
342 blob_appendf(&hdr, "POST %s%sxfer HTTP/1.1\r\n", g.urlPath, zSep);
343 blob_appendf(&hdr, "Host: %s\r\n", g.urlHostname);
344 if( g.fHttpTrace ){
345 blob_appendf(&hdr, "Content-Type: application/x-fossil-debug\r\n");
346 }else{
347 blob_appendf(&hdr, "Content-Type: application/x-fossil\r\n");
348 }
349
+1
--- src/main.c
+++ src/main.c
@@ -71,10 +71,11 @@
7171
7272
int *aCommitFile;
7373
7474
int urlIsFile; /* True if a "file:" url */
7575
char *urlName; /* Hostname for http: or filename for file: */
76
+ char *urlHostname; /* The HOST: parameter on http headers */
7677
int urlPort; /* TCP port number for http: */
7778
char *urlPath; /* Pathname for http: */
7879
char *urlUser; /* User id for http: */
7980
char *urlPasswd; /* Password for http: */
8081
char *urlCanonical; /* Canonical representation of the URL */
8182
--- src/main.c
+++ src/main.c
@@ -71,10 +71,11 @@
71
72 int *aCommitFile;
73
74 int urlIsFile; /* True if a "file:" url */
75 char *urlName; /* Hostname for http: or filename for file: */
 
76 int urlPort; /* TCP port number for http: */
77 char *urlPath; /* Pathname for http: */
78 char *urlUser; /* User id for http: */
79 char *urlPasswd; /* Password for http: */
80 char *urlCanonical; /* Canonical representation of the URL */
81
--- src/main.c
+++ src/main.c
@@ -71,10 +71,11 @@
71
72 int *aCommitFile;
73
74 int urlIsFile; /* True if a "file:" url */
75 char *urlName; /* Hostname for http: or filename for file: */
76 char *urlHostname; /* The HOST: parameter on http headers */
77 int urlPort; /* TCP port number for http: */
78 char *urlPath; /* Pathname for http: */
79 char *urlUser; /* User id for http: */
80 char *urlPasswd; /* Password for http: */
81 char *urlCanonical; /* Canonical representation of the URL */
82
+19 -7
--- src/url.c
+++ src/url.c
@@ -67,12 +67,14 @@
6767
i++;
6868
while( (c = zUrl[i])!=0 && isdigit(c) ){
6969
g.urlPort = g.urlPort*10 + c - '0';
7070
i++;
7171
}
72
+ g.urlHostname = mprintf("%s:%d", g.urlName, g.urlPort);
7273
}else{
7374
g.urlPort = 80;
75
+ g.urlHostname = g.urlName;
7476
}
7577
g.urlPath = mprintf(&zUrl[i]);
7678
dehttpize(g.urlName);
7779
dehttpize(g.urlPath);
7880
g.urlCanonical = mprintf("http://%T:%d%T", g.urlName, g.urlPort, g.urlPath);
@@ -111,21 +113,29 @@
111113
112114
/*
113115
** COMMAND: test-urlparser
114116
*/
115117
void cmd_test_urlparser(void){
118
+ int i;
116119
if( g.argc!=3 && g.argc!=4 ){
117120
usage("URL");
118121
}
119122
url_parse(g.argv[2]);
120
- printf("g.urlIsFile = %d\n", g.urlIsFile);
121
- printf("g.urlName = %s\n", g.urlName);
122
- printf("g.urlPort = %d\n", g.urlPort);
123
- printf("g.urlPath = %s\n", g.urlPath);
124
- printf("g.urlUser = %s\n", g.urlUser);
125
- printf("g.urlPasswd = %s\n", g.urlPasswd);
126
- printf("g.urlCanonical = %s\n", g.urlCanonical);
123
+ for(i=0; i<2; i++){
124
+ printf("g.urlIsFile = %d\n", g.urlIsFile);
125
+ printf("g.urlName = %s\n", g.urlName);
126
+ printf("g.urlPort = %d\n", g.urlPort);
127
+ printf("g.urlHostname = %s\n", g.urlHostname);
128
+ printf("g.urlPath = %s\n", g.urlPath);
129
+ printf("g.urlUser = %s\n", g.urlUser);
130
+ printf("g.urlPasswd = %s\n", g.urlPasswd);
131
+ printf("g.urlCanonical = %s\n", g.urlCanonical);
132
+ if( i==0 ){
133
+ printf("********\n");
134
+ url_enable_proxy("Using proxy: ");
135
+ }
136
+ }
127137
}
128138
129139
/*
130140
** If the "proxy" setting is defined, then change the URL to refer
131141
** to the proxy server.
@@ -135,10 +145,12 @@
135145
if( zProxy==0 || zProxy[0] || is_false(zProxy) ){
136146
zProxy = getenv("http_proxy");
137147
}
138148
if( zProxy && zProxy[0] && !is_false(zProxy) ){
139149
char *zOriginalUrl = g.urlCanonical;
150
+ char *zOriginalHost = g.urlHostname;
140151
if( zMsg ) printf("%s%s\n", zMsg, zProxy);
141152
url_parse(zProxy);
142153
g.urlPath = zOriginalUrl;
154
+ g.urlHostname = zOriginalHost;
143155
}
144156
}
145157
--- src/url.c
+++ src/url.c
@@ -67,12 +67,14 @@
67 i++;
68 while( (c = zUrl[i])!=0 && isdigit(c) ){
69 g.urlPort = g.urlPort*10 + c - '0';
70 i++;
71 }
 
72 }else{
73 g.urlPort = 80;
 
74 }
75 g.urlPath = mprintf(&zUrl[i]);
76 dehttpize(g.urlName);
77 dehttpize(g.urlPath);
78 g.urlCanonical = mprintf("http://%T:%d%T", g.urlName, g.urlPort, g.urlPath);
@@ -111,21 +113,29 @@
111
112 /*
113 ** COMMAND: test-urlparser
114 */
115 void cmd_test_urlparser(void){
 
116 if( g.argc!=3 && g.argc!=4 ){
117 usage("URL");
118 }
119 url_parse(g.argv[2]);
120 printf("g.urlIsFile = %d\n", g.urlIsFile);
121 printf("g.urlName = %s\n", g.urlName);
122 printf("g.urlPort = %d\n", g.urlPort);
123 printf("g.urlPath = %s\n", g.urlPath);
124 printf("g.urlUser = %s\n", g.urlUser);
125 printf("g.urlPasswd = %s\n", g.urlPasswd);
126 printf("g.urlCanonical = %s\n", g.urlCanonical);
 
 
 
 
 
 
 
127 }
128
129 /*
130 ** If the "proxy" setting is defined, then change the URL to refer
131 ** to the proxy server.
@@ -135,10 +145,12 @@
135 if( zProxy==0 || zProxy[0] || is_false(zProxy) ){
136 zProxy = getenv("http_proxy");
137 }
138 if( zProxy && zProxy[0] && !is_false(zProxy) ){
139 char *zOriginalUrl = g.urlCanonical;
 
140 if( zMsg ) printf("%s%s\n", zMsg, zProxy);
141 url_parse(zProxy);
142 g.urlPath = zOriginalUrl;
 
143 }
144 }
145
--- src/url.c
+++ src/url.c
@@ -67,12 +67,14 @@
67 i++;
68 while( (c = zUrl[i])!=0 && isdigit(c) ){
69 g.urlPort = g.urlPort*10 + c - '0';
70 i++;
71 }
72 g.urlHostname = mprintf("%s:%d", g.urlName, g.urlPort);
73 }else{
74 g.urlPort = 80;
75 g.urlHostname = g.urlName;
76 }
77 g.urlPath = mprintf(&zUrl[i]);
78 dehttpize(g.urlName);
79 dehttpize(g.urlPath);
80 g.urlCanonical = mprintf("http://%T:%d%T", g.urlName, g.urlPort, g.urlPath);
@@ -111,21 +113,29 @@
113
114 /*
115 ** COMMAND: test-urlparser
116 */
117 void cmd_test_urlparser(void){
118 int i;
119 if( g.argc!=3 && g.argc!=4 ){
120 usage("URL");
121 }
122 url_parse(g.argv[2]);
123 for(i=0; i<2; i++){
124 printf("g.urlIsFile = %d\n", g.urlIsFile);
125 printf("g.urlName = %s\n", g.urlName);
126 printf("g.urlPort = %d\n", g.urlPort);
127 printf("g.urlHostname = %s\n", g.urlHostname);
128 printf("g.urlPath = %s\n", g.urlPath);
129 printf("g.urlUser = %s\n", g.urlUser);
130 printf("g.urlPasswd = %s\n", g.urlPasswd);
131 printf("g.urlCanonical = %s\n", g.urlCanonical);
132 if( i==0 ){
133 printf("********\n");
134 url_enable_proxy("Using proxy: ");
135 }
136 }
137 }
138
139 /*
140 ** If the "proxy" setting is defined, then change the URL to refer
141 ** to the proxy server.
@@ -135,10 +145,12 @@
145 if( zProxy==0 || zProxy[0] || is_false(zProxy) ){
146 zProxy = getenv("http_proxy");
147 }
148 if( zProxy && zProxy[0] && !is_false(zProxy) ){
149 char *zOriginalUrl = g.urlCanonical;
150 char *zOriginalHost = g.urlHostname;
151 if( zMsg ) printf("%s%s\n", zMsg, zProxy);
152 url_parse(zProxy);
153 g.urlPath = zOriginalUrl;
154 g.urlHostname = zOriginalHost;
155 }
156 }
157

Keyboard Shortcuts

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