aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Janssen <erik.janssen@axis.com>2015-08-20 23:02:28 +0200
committerDaniel Stenberg <daniel@haxx.se>2015-08-20 23:02:28 +0200
commite4fb5f2f61487caa7229ab358754658ef072f537 (patch)
treed666a8c440887a3da31a56b84dce29708222502e
parente67e71d62b6e3f90678631004a6c267ca72df1cd (diff)
rtsp: support basic/digest authentication
-rw-r--r--lib/rtsp.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/rtsp.c b/lib/rtsp.c
index c30afd39d..f8e6b23dc 100644
--- a/lib/rtsp.c
+++ b/lib/rtsp.c
@@ -249,6 +249,8 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
const char *p_stream_uri = NULL;
const char *p_transport = NULL;
const char *p_uagent = NULL;
+ const char *p_proxyuserpwd = NULL;
+ const char *p_userpwd = NULL;
*done = TRUE;
@@ -326,7 +328,6 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
return CURLE_BAD_FUNCTION_ARGUMENT;
}
- /* TODO: auth? */
/* TODO: proxy? */
/* Stream URI. Default to server '*' if not specified */
@@ -392,6 +393,14 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
p_uagent = conn->allocptr.uagent;
}
+ /* setup the authentication headers */
+ result = Curl_http_output_auth(conn, p_request, p_stream_uri, FALSE);
+ if(result)
+ return result;
+
+ p_proxyuserpwd = conn->allocptr.proxyuserpwd;
+ p_userpwd = conn->allocptr.userpwd;
+
/* Referrer */
Curl_safefree(conn->allocptr.ref);
if(data->change.referer && !Curl_checkheaders(conn, "Referer:"))
@@ -464,13 +473,25 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
"%s" /* range */
"%s" /* referrer */
"%s" /* user-agent */
+ "%s" /* proxyuserpwd */
+ "%s" /* userpwd */
,
p_transport ? p_transport : "",
p_accept ? p_accept : "",
p_accept_encoding ? p_accept_encoding : "",
p_range ? p_range : "",
p_referrer ? p_referrer : "",
- p_uagent ? p_uagent : "");
+ p_uagent ? p_uagent : "",
+ p_proxyuserpwd ? p_proxyuserpwd : "",
+ p_userpwd ? p_userpwd : "");
+
+ /*
+ * Free userpwd now --- cannot reuse this for Negotiate and possibly NTLM
+ * with basic and digest, it will be freed anyway by the next request
+ */
+ Curl_safefree (conn->allocptr.userpwd);
+ conn->allocptr.userpwd = NULL;
+
if(result)
return result;