Author: des
Date: Sun May 26 16:48:51 2013
New Revision: 251001
URL: http://svnweb.freebsd.org/changeset/base/251001

Log:
  MFH (r243149): fix indentation
  MFH (r249431): use CONNECT to proxy HTTPS over HTTP
  
  PR:           bin/80176

Modified:
  stable/9/lib/libfetch/http.c
Directory Properties:
  stable/9/lib/libfetch/   (props changed)

Modified: stable/9/lib/libfetch/http.c
==============================================================================
--- stable/9/lib/libfetch/http.c        Sun May 26 14:54:06 2013        
(r251000)
+++ stable/9/lib/libfetch/http.c        Sun May 26 16:48:51 2013        
(r251001)
@@ -1373,6 +1373,7 @@ http_authorize(conn_t *conn, const char 
 static conn_t *
 http_connect(struct url *URL, struct url *purl, const char *flags)
 {
+       struct url *curl;
        conn_t *conn;
        int verbose;
        int af, val;
@@ -1391,17 +1392,21 @@ http_connect(struct url *URL, struct url
                af = AF_INET6;
 #endif
 
-       if (purl && strcasecmp(URL->scheme, SCHEME_HTTPS) != 0) {
-               URL = purl;
-       } else if (strcasecmp(URL->scheme, SCHEME_FTP) == 0) {
-               /* can't talk http to an ftp server */
-               /* XXX should set an error code */
-               return (NULL);
-       }
+       curl = (purl != NULL) ? purl : URL;
 
-       if ((conn = fetch_connect(URL->host, URL->port, af, verbose)) == NULL)
+       if ((conn = fetch_connect(curl->host, curl->port, af, verbose)) == NULL)
                /* fetch_connect() has already set an error code */
                return (NULL);
+       if (strcasecmp(URL->scheme, SCHEME_HTTPS) == 0 && purl) {
+               http_cmd(conn, "CONNECT %s:%d HTTP/1.1",
+                   URL->host, URL->port);
+               http_cmd(conn, "");
+               if (http_get_reply(conn) != HTTP_OK) {
+                       fetch_close(conn);
+                       return (NULL);
+               }
+               http_get_reply(conn);
+       }
        if (strcasecmp(URL->scheme, SCHEME_HTTPS) == 0 &&
            fetch_ssl(conn, verbose) == -1) {
                fetch_close(conn);
@@ -1752,11 +1757,11 @@ http_request(struct url *URL, const char
 
                /* get headers. http_next_header expects one line readahead */
                if (fetch_getln(conn) == -1) {
-                   fetch_syserr();
-                   goto ouch;
+                       fetch_syserr();
+                       goto ouch;
                }
                do {
-                   switch ((h = http_next_header(conn, &headerbuf, &p))) {
+                       switch ((h = http_next_header(conn, &headerbuf, &p))) {
                        case hdr_syserror:
                                fetch_syserr();
                                goto ouch;
@@ -1785,7 +1790,7 @@ http_request(struct url *URL, const char
                                    conn->err != HTTP_USE_PROXY) {
                                        n = 1;
                                        break;
-                                }
+                               }
                                if (new)
                                        free(new);
                                if (verbose)
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to