Check-in [1dbf332352]
Not logged in
Overview

SHA1 Hash:1dbf332352efea4a98c0f4570e9d52da0517648b
Date: 2008-05-05 19:08:43
User: drh
Comment:Fix the HOST: header to use the original URL, not the proxy URL.
Timelines: ancestors | descendants | both | trunk
Other Links: files | ZIP archive | manifest

Tags And Properties
Changes
[hide diffs]

Modified src/http.c from [19e3e65418] to [6ef99f841e].

@@ -338,11 +338,11 @@
     zSep = "";
   }else{
     zSep = "/";
   }
   blob_appendf(&hdr, "POST %s%sxfer HTTP/1.1\r\n", g.urlPath, zSep);
-  blob_appendf(&hdr, "Host: %s:%d\r\n", g.urlName, g.urlPort);
+  blob_appendf(&hdr, "Host: %s\r\n", g.urlHostname);
   if( g.fHttpTrace ){
     blob_appendf(&hdr, "Content-Type: application/x-fossil-debug\r\n");
   }else{
     blob_appendf(&hdr, "Content-Type: application/x-fossil\r\n");
   }

Modified src/main.c from [e12b36e51e] to [54f94155e2].

@@ -71,10 +71,11 @@
 
   int *aCommitFile;
 
   int urlIsFile;          /* True if a "file:" url */
   char *urlName;          /* Hostname for http: or filename for file: */
+  char *urlHostname;      /* The HOST: parameter on http headers */
   int urlPort;            /* TCP port number for http: */
   char *urlPath;          /* Pathname for http: */
   char *urlUser;          /* User id for http: */
   char *urlPasswd;        /* Password for http: */
   char *urlCanonical;     /* Canonical representation of the URL */

Modified src/url.c from [51a49c89b2] to [8c4adf4994].

@@ -67,12 +67,14 @@
       i++;
       while( (c = zUrl[i])!=0 && isdigit(c) ){
         g.urlPort = g.urlPort*10 + c - '0';
         i++;
       }
+      g.urlHostname = mprintf("%s:%d", g.urlName, g.urlPort);
     }else{
       g.urlPort = 80;
+      g.urlHostname = g.urlName;
     }
     g.urlPath = mprintf(&zUrl[i]);
     dehttpize(g.urlName);
     dehttpize(g.urlPath);
     g.urlCanonical = mprintf("http://%T:%d%T", g.urlName, g.urlPort, g.urlPath);
@@ -111,21 +113,29 @@
 
 /*
 ** COMMAND: test-urlparser
 */
 void cmd_test_urlparser(void){
+  int i;
   if( g.argc!=3 && g.argc!=4 ){
     usage("URL");
   }
   url_parse(g.argv[2]);
-  printf("g.urlIsFile    = %d\n", g.urlIsFile);
-  printf("g.urlName      = %s\n", g.urlName);
-  printf("g.urlPort      = %d\n", g.urlPort);
-  printf("g.urlPath      = %s\n", g.urlPath);
-  printf("g.urlUser      = %s\n", g.urlUser);
-  printf("g.urlPasswd    = %s\n", g.urlPasswd);
-  printf("g.urlCanonical = %s\n", g.urlCanonical);
+  for(i=0; i<2; i++){
+    printf("g.urlIsFile    = %d\n", g.urlIsFile);
+    printf("g.urlName      = %s\n", g.urlName);
+    printf("g.urlPort      = %d\n", g.urlPort);
+    printf("g.urlHostname  = %s\n", g.urlHostname);
+    printf("g.urlPath      = %s\n", g.urlPath);
+    printf("g.urlUser      = %s\n", g.urlUser);
+    printf("g.urlPasswd    = %s\n", g.urlPasswd);
+    printf("g.urlCanonical = %s\n", g.urlCanonical);
+    if( i==0 ){
+      printf("********\n");
+      url_enable_proxy("Using proxy: ");
+    }
+  }
 }
 
 /*
 ** If the "proxy" setting is defined, then change the URL to refer
 ** to the proxy server.
@@ -135,10 +145,12 @@
   if( zProxy==0 || zProxy[0] || is_false(zProxy) ){
     zProxy = getenv("http_proxy");
   }
   if( zProxy && zProxy[0] && !is_false(zProxy) ){
     char *zOriginalUrl = g.urlCanonical;
+    char *zOriginalHost = g.urlHostname;
     if( zMsg ) printf("%s%s\n", zMsg, zProxy);
     url_parse(zProxy);
     g.urlPath = zOriginalUrl;
+    g.urlHostname = zOriginalHost;
   }
 }