SquidMD5Update(&Md5Ctx, pszMethod, strlen(pszMethod));
SquidMD5Update(&Md5Ctx, ":", 1);
SquidMD5Update(&Md5Ctx, pszDigestUri, strlen(pszDigestUri));
- if (strcasecmp(pszQop, "auth-int") == 0) {
+ if (pszQop && strcasecmp(pszQop, "auth-int") == 0) {
SquidMD5Update(&Md5Ctx, ":", 1);
SquidMD5Update(&Md5Ctx, HEntity, HASHHEXLEN);
}
SquidMD5Update(&Md5Ctx, ":", 1);
SquidMD5Update(&Md5Ctx, pszNonce, strlen(pszNonce));
SquidMD5Update(&Md5Ctx, ":", 1);
- if (*pszQop) {
+ if (pszQop) {
SquidMD5Update(&Md5Ctx, pszNonceCount, strlen(pszNonceCount));
SquidMD5Update(&Md5Ctx, ":", 1);
SquidMD5Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
/* quote mark */
p++;
+ safe_free(username);
username = xstrndup(p, strchr(p, '"') + 1 - p);
debugs(29, 9, "authDigestDecodeAuth: Found Username '" << username << "'");
/* quote mark */
p++;
+ safe_free(digest_request->realm);
digest_request->realm = xstrndup(p, strchr(p, '"') + 1 - p);
debugs(29, 9, "authDigestDecodeAuth: Found realm '" << digest_request->realm << "'");
/* quote mark */
p++;
+ safe_free(digest_request->qop);
digest_request->qop = xstrndup(p, strcspn(p, "\" \t\r\n()<>@,;:\\/[]?={}") + 1);
debugs(29, 9, "authDigestDecodeAuth: Found qop '" << digest_request->qop << "'");
/* quote mark */
p++;
+ safe_free(digest_request->algorithm);
digest_request->algorithm = xstrndup(p, strcspn(p, "\" \t\r\n()<>@,;:\\/[]?={}") + 1);
debugs(29, 9, "authDigestDecodeAuth: Found algorithm '" << digest_request->algorithm << "'");
/* quote mark */
p++;
+ safe_free(digest_request->uri);
digest_request->uri = xstrndup(p, strchr(p, '"') + 1 - p);
debugs(29, 9, "authDigestDecodeAuth: Found uri '" << digest_request->uri << "'");
/* quote mark */
p++;
+ safe_free(digest_request->nonceb64);
digest_request->nonceb64 = xstrndup(p, strchr(p, '"') + 1 - p);
debugs(29, 9, "authDigestDecodeAuth: Found nonce '" << digest_request->nonceb64 << "'");
/* quote mark */
p++;
+ safe_free(digest_request->cnonce);
digest_request->cnonce = xstrndup(p, strchr(p, '"') + 1 - p);
debugs(29, 9, "authDigestDecodeAuth: Found cnonce '" << digest_request->cnonce << "'");
/* quote mark */
p++;
+ safe_free(digest_request->response);
digest_request->response = xstrndup(p, strchr(p, '"') + 1 - p);
debugs(29, 9, "authDigestDecodeAuth: Found response '" << digest_request->response << "'");