Skip to content
Snippets Groups Projects
Commit 2a966cdb authored by Russell Bryant's avatar Russell Bryant
Browse files

Merged revisions 115304 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r115304 | russell | 2008-05-05 14:49:25 -0500 (Mon, 05 May 2008) | 5 lines

Avoid putting opaque="" in Digest authentication.  This patch came from switchvox.
It fixes authentication with Primus in Canada, and has been in use for a very long
time without causing problems with any other providers.
(closes issue AST-36)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@115305 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 2e6537c5
Branches
Tags
No related merge requests found
...@@ -15055,6 +15055,7 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d ...@@ -15055,6 +15055,7 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d
char resp[256]; char resp[256];
char resp_hash[256]; char resp_hash[256];
char uri[256]; char uri[256];
char opaque[256] = "";
char cnonce[80]; char cnonce[80];
const char *username; const char *username;
const char *secret; const char *secret;
...@@ -15103,11 +15104,17 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d ...@@ -15103,11 +15104,17 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d
else else
snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, p->nonce, a2_hash); snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, p->nonce, a2_hash);
ast_md5_hash(resp_hash, resp); ast_md5_hash(resp_hash, resp);
/* only include the opaque string if it's set */
if (!ast_strlen_zero(p->opaque)) {
snprintf(opaque, sizeof(opaque), ", opaque=\"%s\"", p->opaque);
}
/* XXX We hard code our qop to "auth" for now. XXX */ /* XXX We hard code our qop to "auth" for now. XXX */
if (!ast_strlen_zero(p->qop)) if (!ast_strlen_zero(p->qop))
snprintf(digest, digest_len, "Digest username=\"%s\", realm=\"%s\", algorithm=MD5, uri=\"%s\", nonce=\"%s\", response=\"%s\", opaque=\"%s\", qop=auth, cnonce=\"%s\", nc=%08x", username, p->realm, uri, p->nonce, resp_hash, p->opaque, cnonce, p->noncecount); snprintf(digest, digest_len, "Digest username=\"%s\", realm=\"%s\", algorithm=MD5, uri=\"%s\", nonce=\"%s\", response=\"%s\"%s, qop=auth, cnonce=\"%s\", nc=%08x", username, p->realm, uri, p->nonce, resp_hash, opaque, cnonce, p->noncecount);
else else
snprintf(digest, digest_len, "Digest username=\"%s\", realm=\"%s\", algorithm=MD5, uri=\"%s\", nonce=\"%s\", response=\"%s\", opaque=\"%s\"", username, p->realm, uri, p->nonce, resp_hash, p->opaque); snprintf(digest, digest_len, "Digest username=\"%s\", realm=\"%s\", algorithm=MD5, uri=\"%s\", nonce=\"%s\", response=\"%s\"%s", username, p->realm, uri, p->nonce, resp_hash, opaque);
   
append_history(p, "AuthResp", "Auth response sent for %s in realm %s - nc %d", username, p->realm, p->noncecount); append_history(p, "AuthResp", "Auth response sent for %s in realm %s - nc %d", username, p->realm, p->noncecount);
   
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment