ports/71214: security/gnupg - add patch to support http-proxy authentication
"Florent Thoumie" <Florent Thoumie
flz at xbsd.org
Wed Sep 1 01:30:31 UTC 2004
>Number: 71214
>Category: ports
>Synopsis: security/gnupg - add patch to support http-proxy authentication
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Sep 01 01:30:25 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator: Florent Thoumie
>Release: FreeBSD 5.2-CURRENT i386
>Organization:
Xbsd.org
>Environment:
System: FreeBSD 5.2-CURRENT #0: Tue Jul 27 03:52:18 CEST 2004
root at innercity.xbsd.org:/usr/obj/usr/src/sys/INNERCITY
>Description:
This is a simple patch to add http-proxy authentication support
>How-To-Repeat:
Put these patches in files/
>Fix:
--- patch-util::http.c begins here ---
--- util/http.c 2004-08-23 17:28:14.000000000 +0200
+++ util/http.c.new 2004-09-01 02:23:02.000000000 +0200
@@ -42,6 +42,7 @@
#include "util.h"
#include "iobuf.h"
#include "i18n.h"
+#include "g10/main.h"
#include "http.h"
@@ -303,6 +304,17 @@
p++;
if( (p2 = strchr(p, '/')) )
*p2++ = 0;
+
+ p3 = p;
+ if( (p=strchr( p3, '@' )) ) {
+ *p++ = 0;
+ uri->user = p3;
+ if ( !(uri->pass = strchr( p3, ':' )) )
+ return G10ERR_INVALID_URI;
+ *uri->pass++ = 0;
+ }
+ else p = p3;
+
strlwr( p );
uri->host = p;
if( (p3=strchr( p, ':' )) ) {
@@ -472,9 +484,11 @@
{
const byte *server;
byte *request, *p;
+ byte *cred;
ushort port;
int rc;
const char *http_proxy = NULL;
+ char *cookie = NULL;
server = *hd->uri->host? hd->uri->host : "localhost";
port = hd->uri->port? hd->uri->port : 80;
@@ -492,6 +506,12 @@
}
hd->sock = connect_server( *uri->host? uri->host : "localhost",
uri->port? uri->port : 80 );
+ if ( uri->user && uri->pass )
+ {
+ cred = m_alloc( strlen(uri->user) + strlen(uri->pass) + 2 );
+ sprintf( cred, "%s:%s", uri->user, uri->pass );
+ cookie = make_radix64_string( cred, strlen(cred) );
+ }
release_parsed_uri( uri );
}
else
@@ -501,9 +521,15 @@
return G10ERR_NETWORK;
p = build_rel_path( hd->uri );
- request = m_alloc( strlen(server)*2 + strlen(p) + 50 );
+ request = m_alloc( strlen(server)*2 + strlen(p) + 80 + strlen(cookie ? cookie : "") );
if( http_proxy ) {
- sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\n",
+ if ( cookie )
+ sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\nProxy-Authorization: Basic %s\r\n\r",
+ hd->req_type == HTTP_REQ_GET ? "GET" :
+ hd->req_type == HTTP_REQ_HEAD? "HEAD":
+ hd->req_type == HTTP_REQ_POST? "POST": "OOPS",
+ server, port, *p == '/'? "":"/", p, cookie );
+ else sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\n\r",
hd->req_type == HTTP_REQ_GET ? "GET" :
hd->req_type == HTTP_REQ_HEAD? "HEAD":
hd->req_type == HTTP_REQ_POST? "POST": "OOPS",
--- patch-util::http.c ends here ---
--- patch-include::http.h begins here ---
--- include/http.h 2002-06-29 15:26:17.000000000 +0200
+++ include/http.h.new 2004-09-01 02:10:14.000000000 +0200
@@ -34,6 +34,8 @@
struct parsed_uri {
/* all these pointers point into buffer; most stuff is not escaped */
char *scheme; /* pointer to the scheme string (lowercase) */
+ char *user; /* username for basic proxy authentication */
+ char *pass; /* password for basic proxy authentication */
char *host; /* host (converted to lowercase) */
ushort port; /* port (always set if the host is set) */
char *path; /* the path */
--- patch-include::http.h ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list