|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|