From 8e6795779558d2828aef14078fefbcadd5323fa6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Juho=20V=C3=A4h=C3=A4-Herttua?= Date: Mon, 24 Mar 2014 21:43:59 +0200 Subject: [PATCH] Make password authentication work on iTunes again, fixes #20. --- src/lib/raop.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lib/raop.c b/src/lib/raop.c index e5c6539..a58e92f 100644 --- a/src/lib/raop.c +++ b/src/lib/raop.c @@ -123,6 +123,7 @@ conn_init(void *opaque, unsigned char *local, int locallen, unsigned char *remot static void conn_request(void *ptr, http_request_t *request, http_response_t **response) { + const char realm[] = "airplay"; raop_conn_t *conn = ptr; raop_t *raop = conn->raop; @@ -139,7 +140,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) } res = http_response_init("RTSP/1.0", 200, "OK"); - if (strlen(raop->password)) { + if (strcmp(method, "OPTIONS") && strlen(raop->password)) { const char *authorization; authorization = http_request_get_header(request, "Authorization"); @@ -147,17 +148,19 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) logger_log(conn->raop->logger, LOGGER_DEBUG, "Our nonce: %s", conn->nonce); logger_log(conn->raop->logger, LOGGER_DEBUG, "Authorization: %s", authorization); } - if (!digest_is_valid("AppleTV", raop->password, conn->nonce, method, http_request_get_url(request), authorization)) { + if (!digest_is_valid(realm, raop->password, conn->nonce, method, http_request_get_url(request), authorization)) { char *authstr; int authstrlen; /* Allocate the authenticate string */ - authstrlen = sizeof("Digest realm=\"AppleTV\", nonce=\"\"") + sizeof(conn->nonce) + 1; + authstrlen = sizeof("Digest realm=\"\", nonce=\"\"") + sizeof(realm) + sizeof(conn->nonce) + 1; authstr = malloc(authstrlen); /* Concatenate the authenticate string */ memset(authstr, 0, authstrlen); - strcat(authstr, "Digest realm=\"AppleTV\", nonce=\""); + strcat(authstr, "Digest realm=\""); + strcat(authstr, realm); + strcat(authstr, "\", nonce=\""); strcat(authstr, conn->nonce); strcat(authstr, "\""); -- 2.34.1