changeset 32547:6a629e6fdb09

Add Proxy-Authorization header to authenticate on proxies
author cboesch
date Thu, 18 Nov 2010 20:20:39 +0000
parents e21aa887e9df
children ffbacc2a87fc
files stream/http.c stream/http.h stream/network.c
diffstat 3 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/stream/http.c	Thu Nov 18 20:18:44 2010 +0000
+++ b/stream/http.c	Thu Nov 18 20:20:39 2010 +0000
@@ -602,10 +602,11 @@
 	strcpy( http_hdr->uri, uri );
 }
 
-int
-http_add_basic_authentication( HTTP_header_t *http_hdr, const char *username, const char *password ) {
+static int
+http_add_authentication( HTTP_header_t *http_hdr, const char *username, const char *password, const char *auth_str ) {
 	char *auth = NULL, *usr_pass = NULL, *b64_usr_pass = NULL;
 	int encoded_len, pass_len=0, out_len;
+	size_t auth_len;
 	int res = -1;
 	if( http_hdr==NULL || username==NULL ) return -1;
 
@@ -637,13 +638,14 @@
 
 	b64_usr_pass[out_len]='\0';
 
-	auth = malloc(encoded_len+22);
+	auth_len = encoded_len + 100;
+	auth = malloc(auth_len);
 	if( auth==NULL ) {
 		mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
 		goto out;
 	}
 
-	sprintf( auth, "Authorization: Basic %s", b64_usr_pass);
+	snprintf(auth, auth_len, "%s: Basic %s", auth_str, b64_usr_pass);
 	http_set_field( http_hdr, auth );
 	res = 0;
 
@@ -655,6 +657,16 @@
 	return res;
 }
 
+int
+http_add_basic_authentication( HTTP_header_t *http_hdr, const char *username, const char *password ) {
+	return http_add_authentication(http_hdr, username, password, "Authorization");
+}
+
+int
+http_add_basic_proxy_authentication( HTTP_header_t *http_hdr, const char *username, const char *password ) {
+	return http_add_authentication(http_hdr, username, password, "Proxy-Authorization");
+}
+
 void
 http_debug_hdr( HTTP_header_t *http_hdr ) {
 	HTTP_field_t *field;
--- a/stream/http.h	Thu Nov 18 20:18:44 2010 +0000
+++ b/stream/http.h	Thu Nov 18 20:20:39 2010 +0000
@@ -63,6 +63,7 @@
 void		http_set_method( HTTP_header_t *http_hdr, const char *method );
 void		http_set_uri( HTTP_header_t *http_hdr, const char *uri );
 int		http_add_basic_authentication( HTTP_header_t *http_hdr, const char *username, const char *password );
+int		http_add_basic_proxy_authentication( HTTP_header_t *http_hdr, const char *username, const char *password );
 
 void		http_debug_hdr( HTTP_header_t *http_hdr );
 
--- a/stream/network.c	Thu Nov 18 20:18:44 2010 +0000
+++ b/stream/network.c	Thu Nov 18 20:20:39 2010 +0000
@@ -254,6 +254,8 @@
 	if (network_cookies_enabled) cookies_set( http_hdr, server_url->hostname, server_url->url );
 
 	http_set_field( http_hdr, "Connection: close");
+	if (proxy)
+		http_add_basic_proxy_authentication(http_hdr, url->username, url->password);
 	http_add_basic_authentication(http_hdr, server_url->username, server_url->password);
 	if( http_build_request( http_hdr )==NULL ) {
 		goto err_out;