Do not calculate the challenge if authentication fails.
[deb_shairplay.git] / src / lib / raop.c
index 9aafe65b18ef654e01303b7060e96629862cbae3..cd99b53b77c19b3f65ecd56dd0814889ae9da87b 100644 (file)
@@ -36,7 +36,7 @@
 #define MAX_PASSWORD_LEN 64
 
 /* MD5 as hex fits here */
-#define MAX_NONCE_LEN 33
+#define MAX_NONCE_LEN 32
 
 struct raop_s {
        /* Callbacks for audio */
@@ -143,9 +143,10 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response)
 
                authorization = http_request_get_header(request, "Authorization");
                if (authorization) {
+                       logger_log(&conn->raop->logger, LOGGER_DEBUG, "Our nonce: %s\n", conn->nonce);
                        logger_log(&conn->raop->logger, LOGGER_DEBUG, "Authorization: %s\n", authorization);
                }
-               if (!digest_is_valid("AppleTV", raop->password, conn->nonce, method, authorization)) {
+               if (!digest_is_valid("AppleTV", raop->password, conn->nonce, method, http_request_get_url(request), authorization)) {
                        char *authstr;
                        int authstrlen;
 
@@ -174,7 +175,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response)
        http_response_add_header(res, "Apple-Jack-Status", "connected; type=analog");
 
        challenge = http_request_get_header(request, "Apple-Challenge");
-       if (challenge) {
+       if (!require_auth && challenge) {
                char signature[MAX_SIGNATURE_LEN];
 
                memset(signature, 0, sizeof(signature));