Re: http_proxy with username and password

Jonas Fonseca <[email protected]>
Newsgroups gmane.comp.web.links
Message-ID <[email protected]>
Simon Tan <[email protected]> wrote Fri, Nov 30, 2007:
> I exported the http_proxy variable with username and password like so:
> export HTTP_PROXY=http://username:password@host:port.  Wget works, but
> elinks is unable to get online.  Is elinks not able to parse the
> variable?  If I enter the options and enter the proxy, username,
> password, elinks works fine. I understand there might be security
> concerns and stuff but if I save the password into a file(don't know
> if it's encrypted or not), same security concerns right.
> 
> It would still be a nice feature. Could that be implemented in future
> versions?  Thanks.

Since this is elinks-dev, here is a patch that extracts the user and
passwd from the HTTP_PROXY as an alternative to the options. It will
then be added as a "Proxy-Authorization: Basic ..." header.

Note, since I have no proxy server to test on I just tested it with some
debug prints and an online open proxy to see if the header variable was
set.

diff --git a/src/protocol/http/http.c b/src/protocol/http/http.c
index 26daefc..6a33580 100644
--- a/src/protocol/http/http.c
+++ b/src/protocol/http/http.c
@@ -630,7 +630,20 @@ http_send_header(struct socket *socket)
 		unsigned char *user = get_opt_str("protocol.http.proxy.user", NULL);
 		unsigned char *passwd = get_opt_str("protocol.http.proxy.passwd", NULL);
 
-		if (proxy_auth.digest) {
+		if (conn->uri->userlen)
+			user = memacpy(conn->uri->user, conn->uri->userlen);
+		else
+			user = stracpy(user);
+
+		if (conn->uri->passwordlen)
+			passwd = memacpy(conn->uri->password, conn->uri->passwordlen);
+		else
+			passwd = stracpy(passwd);
+
+		if (!passwd || !user) {
+			/* Failed to allocate! */
+
+		} else if (proxy_auth.digest) {
 			unsigned char *response;
 			int userlen = int_min(strlen(user), AUTH_USER_MAXLEN - 1);
 			int passwordlen = int_min(strlen(passwd), AUTH_PASSWORD_MAXLEN - 1);
@@ -671,6 +684,8 @@ http_send_header(struct socket *socket)
 				}
 			}
 		}
+		mem_free_if(user);
+		mem_free_if(passwd);
 	}
 
 	/* CONNECT: User-Agent does not reveal anything about the

-- 
Jonas Fonseca
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.