On Mon, Jan 12, 2015 at 01:04:14PM +0000, Stuart Henderson wrote:
> Good catch, definition for *proxyhost needs to go outside the #ifndef.

Thanks, new diff:

Index: usr.bin/ftp/fetch.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/usr.bin/ftp/fetch.c,v
retrieving revision 1.135
diff -u -p -r1.135 fetch.c
--- usr.bin/ftp/fetch.c 25 Nov 2014 08:22:09 -0000      1.135
+++ usr.bin/ftp/fetch.c 12 Jan 2015 13:17:38 -0000
@@ -187,6 +187,7 @@ url_get(const char *origline, const char
        off_t hashbytes;
        const char *errstr;
        ssize_t len, wlen;
+       char *proxyhost = NULL;
 #ifndef SMALL
        char *sslpath = NULL, *sslhost = NULL;
        char *locbase, *full_host = NULL;
@@ -300,6 +301,9 @@ noslash:
                                errx(1, "Can't allocate memory for https 
path/host.");
                }
 #endif /* !SMALL */
+               proxyhost = strdup(host);
+               if (proxyhost == NULL)
+                       errx(1, "Can't allocate memory for proxy host.");
                proxyurl = strdup(proxyenv);
                if (proxyurl == NULL)
                        errx(1, "Can't allocate memory for proxy URL.");
@@ -640,17 +644,18 @@ again:
                        fprintf(ttyout, " (via %s)\n", proxyurl);
                /*
                 * Host: directive must use the destination host address for
-                * the original URI (path).  We do not attach it at this moment.
+                * the original URI (path).
                 */
                if (credentials)
                        ftp_printf(fin, tls, "GET %s HTTP/1.0\r\n"
-                           "Proxy-Authorization: Basic %s%s\r\n%s\r\n\r\n",
-                           epath, credentials, buf ? buf : "",
-                           httpuseragent);
+                           "Proxy-Authorization: Basic %s\r\n"
+                           "Host: %s\r\n%s%s\r\n\r\n",
+                           epath, credentials,
+                           proxyhost, buf ? buf : "", httpuseragent);
                else
-                       ftp_printf(fin, tls, "GET %s HTTP/1.0\r\n%s%s\r\n\r\n",
-                           epath, buf ? buf : "", httpuseragent);
-
+                       ftp_printf(fin, tls, "GET %s HTTP/1.0\r\n"
+                           "Host: %s\r\n%s%s\r\n\r\n",
+                           epath, proxyhost, buf ? buf : "", httpuseragent);
        } else {
 #ifndef SMALL
                if (resume) {
@@ -676,7 +681,10 @@ again:
                            restart_point ? "HTTP/1.1\r\nConnection: close" :
 #endif /* !SMALL */
                            "HTTP/1.0");
-               if (strchr(host, ':')) {
+               if (proxyhost) {
+                       ftp_printf(fin, tls, "%s", proxyhost);
+                       port = NULL;
+               } else if (strchr(host, ':')) {
                        /*
                         * strip off scoped address portion, since it's
                         * local to node
@@ -991,6 +999,7 @@ cleanup_url_get:
        else if (s != -1)
                close(s);
        free(buf);
+       free(proxyhost);
        free(proxyurl);
        free(newline);
        free(credentials);
@@ -1486,6 +1495,13 @@ ftp_printf(FILE *fp, struct tls *tls, co
                ret = 0;
 
        va_end(ap);
+#ifndef SMALL
+       if (debug) {
+               va_start(ap, fmt);
+               ret = vfprintf(ttyout, fmt, ap);
+               va_end(ap);
+       }
+#endif /* !SMALL */
        return (ret);
 }
 

Reply via email to