diff options
| author | Lars-Dominik Braun <lars@6xq.net> | 2011-06-12 13:52:21 +0200 | 
|---|---|---|
| committer | Lars-Dominik Braun <lars@6xq.net> | 2011-06-13 20:22:24 +0200 | 
| commit | f0af48a4f70dfed1372112f2247a4f3bbb10cf72 (patch) | |
| tree | 34eae2dbf95ba6d896e94356e6877da73363a329 | |
| parent | 58b1579f56a4fc49cef4f0e3a8b87e392b5fc376 (diff) | |
| download | pianobar-f0af48a4f70dfed1372112f2247a4f3bbb10cf72.tar.gz pianobar-f0af48a4f70dfed1372112f2247a4f3bbb10cf72.tar.bz2 pianobar-f0af48a4f70dfed1372112f2247a4f3bbb10cf72.zip | |
waitress: http "basic" authentication support
Closes #109
| -rw-r--r-- | src/libwaitress/waitress.c | 31 | 
1 files changed, 31 insertions, 0 deletions
| diff --git a/src/libwaitress/waitress.c b/src/libwaitress/waitress.c index 3c48616..8bef2f6 100644 --- a/src/libwaitress/waitress.c +++ b/src/libwaitress/waitress.c @@ -466,6 +466,27 @@ static WaitressReturn_t WaitressPollRead (int sockfd, char *buf, size_t count,  			CLOSE_RET (wRet); \  		} +/*	send basic http authorization + *	@param waitress handle + *	@param url containing user/password + *	@param header name prefix + */ +static bool WaitressFormatAuthorization (WaitressHandle_t *waith, +		WaitressUrl_t *url, const char *prefix, char *writeBuf, +		const size_t writeBufSize) { +	if (url->user != NULL) { +		char userPass[1024], *encodedUserPass; +		snprintf (userPass, sizeof (userPass), "%s:%s", url->user, +				(url->password != NULL) ? url->password : ""); +		encodedUserPass = WaitressBase64Encode (userPass); +		snprintf (writeBuf, writeBufSize, "%sAuthorization: Basic %s\r\n", +				prefix, encodedUserPass); +		free (encodedUserPass); +		return true; +	} +	return false; +} +  /*	get default http port if none was given   */  static const char *WaitressDefaultPort (WaitressUrl_t *url) { @@ -576,6 +597,16 @@ WaitressReturn_t WaitressFetchCall (WaitressHandle_t *waith) {  				strlen (waith->postData));  		WRITE_RET (writeBuf, strlen (writeBuf));  	} + +	/* write authorization headers */ +	if (WaitressFormatAuthorization (waith, &waith->url, "", writeBuf, +			sizeof (writeBuf))) { +		WRITE_RET (writeBuf, strlen (writeBuf)); +	} +	if (WaitressFormatAuthorization (waith, &waith->proxy, "Proxy-", +			writeBuf, sizeof (writeBuf))) { +		WRITE_RET (writeBuf, strlen (writeBuf)); +	}  	if (waith->extraHeaders != NULL) {  		WRITE_RET (waith->extraHeaders, strlen (waith->extraHeaders)); | 
