try to fix a bug in find_credentials with more than one Authorization headers

remotes/origin/3.3+ngcp2.6
Andrew Pogrebennyk 13 years ago
parent 6b3de4afc0
commit 5ad0d9d9b1

@ -241,7 +241,7 @@ int get_authorized_cred(struct hdr_field* _f, struct hdr_field** _h)
int find_credentials(struct sip_msg* msg, str* realm,
hdr_types_t hftype, struct hdr_field** hdr)
{
struct hdr_field** hook, *ptr, *prev;
struct hdr_field** hook, *ptr;
hdr_flags_t hdr_flags;
int res;
str* r;
@ -290,7 +290,7 @@ int find_credentials(struct sip_msg* msg, str* realm,
return (res == -1) ? -2 : -3;
} else if (res == 0) {
r = &(((auth_body_t*)(ptr->parsed))->digest.realm);
DBG("auth:find_credentials: compare realm '%.*s', len %d to parsed realm '%.*s', len %d\n", realm->s, realm->len, r->s, r->len);
if (r->len == realm->len) {
if (!strncasecmp(realm->s, r->s, r->len)) {
*hdr = ptr;
@ -299,15 +299,18 @@ int find_credentials(struct sip_msg* msg, str* realm,
}
}
prev = ptr;
if (parse_headers(msg, hdr_flags, 1) == -1) {
LOG(L_ERR, "auth:find_credentials: Error while parsing headers\n");
return -4;
} else {
if (prev != msg->last_header) {
if (msg->last_header->type == hftype) ptr = msg->last_header;
else break;
} else break;
ptr = ptr->next;
while (ptr) {
if (ptr->type == hftype)
break;
ptr = ptr->next;
}
if (!ptr)
break;
}
}

@ -1,8 +1,8 @@
kamailio (3.3+ngcp2.6.11) unstable; urgency=low
kamailio (3.3+ngcp2.6.12) unstable; urgency=low
* Add experimental debugging for find_credentials.
* Don't stop after first Authorization header if all message is already parsed in find_credentials.
-- Andrew Pogrebennyk <apogrebennyk@sipwise.com> Sun, 16 Dec 2012 11:38:23 +0100
-- Andrew Pogrebennyk <apogrebennyk@sipwise.com> Sun, 16 Dec 2012 18:21:47 +0100
kamailio (3.3+ngcp2.6.10) unstable; urgency=low

Loading…
Cancel
Save