svn commit: r251001 - stable/9/lib/libfetch

Dag-Erling Smørgrav des at FreeBSD.org
Sun May 26 16:48:51 UTC 2013


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)


More information about the svn-src-all mailing list