Module Name:    src
Committed By:   christos
Date:           Sun Sep  1 15:07:31 UTC 2024

Modified Files:
        src/external/bsd/fetch/dist/libfetch: http.c

Log Message:
PR/58656: RVP: Fix proxy authentication for https and when proxy does not
add any extra headers.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/external/bsd/fetch/dist/libfetch/http.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/fetch/dist/libfetch/http.c
diff -u src/external/bsd/fetch/dist/libfetch/http.c:1.5 src/external/bsd/fetch/dist/libfetch/http.c:1.6
--- src/external/bsd/fetch/dist/libfetch/http.c:1.5	Fri Feb  2 17:19:05 2024
+++ src/external/bsd/fetch/dist/libfetch/http.c	Sun Sep  1 11:07:31 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: http.c,v 1.5 2024/02/02 22:19:05 christos Exp $	*/
+/*	$NetBSD: http.c,v 1.6 2024/09/01 15:07:31 christos Exp $	*/
 /*-
  * Copyright (c) 2000-2004 Dag-Erling Coïdan Smørgrav
  * Copyright (c) 2003 Thomas Klausner <w...@netbsd.org>
@@ -771,16 +771,18 @@ http_connect(struct url *URL, struct url
 				URL->host, URL->port);
 		http_cmd(conn, "Host: %s:%d\r\n",
 				URL->host, URL->port);
+		/* proxy authorization */
+		if (*purl->user || *purl->pwd)
+			http_basic_auth(conn, "Proxy-Authorization",
+			    purl->user, purl->pwd);
+		else if ((p = getenv("HTTP_PROXY_AUTH")) != NULL && *p != '\0')
+			http_authorize(conn, "Proxy-Authorization", p);
 		http_cmd(conn, "\r\n");
 		if (http_get_reply(conn) != HTTP_OK) {
 			http_seterr(conn->err);
 			goto ouch;
 		}
-		/* Read and discard the rest of the proxy response */
-		if (fetch_getln(conn) < 0) {
-			fetch_syserr();
-			goto ouch;
-		}
+		/* Read and discard the rest of the proxy response (if any) */
 		do {
 			switch ((h = http_next_header(conn, &p))) {
 			case hdr_syserror:
@@ -792,7 +794,7 @@ http_connect(struct url *URL, struct url
 			default:
 				/* ignore */ ;
 			}
-		} while (h < hdr_end);
+		} while (h > hdr_end);
 	}
 	if (strcasecmp(URL->scheme, SCHEME_HTTPS) == 0 &&
 	    fetch_ssl(conn, URL, verbose) == -1) {

Reply via email to