From 263364ac7c4057817f1bb5bcb87f2b69653b749c Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 5 Nov 2013 11:37:00 +0100 Subject: [PATCH] Fix find auth info algorithm --- coreapi/authentication.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/coreapi/authentication.c b/coreapi/authentication.c index 977e489f5..a71e357da 100644 --- a/coreapi/authentication.c +++ b/coreapi/authentication.c @@ -256,25 +256,27 @@ static const LinphoneAuthInfo *find_auth_info(LinphoneCore *lc, const char *user MSList *elem; const LinphoneAuthInfo *ret=NULL; - for (elem=lc->auth_info;elem!=NULL;elem=elem->next){ - LinphoneAuthInfo *pinfo=(LinphoneAuthInfo*)elem->data; - if (username && pinfo->username && strcmp(username,pinfo->username)==0){ + for (elem=lc->auth_info;elem!=NULL;elem=elem->next) { + LinphoneAuthInfo *pinfo = (LinphoneAuthInfo*)elem->data; + if (username && pinfo->username && strcmp(username,pinfo->username)==0) { if (realm && domain){ if (pinfo->realm && strcmp(realm,pinfo->realm)==0 - && pinfo->domain && strcmp(domain,pinfo->domain)==0){ + && pinfo->domain && strcmp(domain,pinfo->domain)==0) { return pinfo; } - } else if (realm){ - if (pinfo->realm && realm_match(realm,pinfo->realm)){ - if (ret!=NULL){ + } else if (realm) { + if (pinfo->realm && realm_match(realm,pinfo->realm)) { + if (ret!=NULL) { ms_warning("Non unique realm found for %s",username); return NULL; } ret=pinfo; } - } else if (domain && pinfo->domain && strcmp(domain,pinfo->domain)==0){ + } else if (domain && pinfo->domain && strcmp(domain,pinfo->domain)==0) { return pinfo; - } else return pinfo; + } else if (!domain) { + return pinfo; + } } } return ret; @@ -291,14 +293,13 @@ static const LinphoneAuthInfo *find_auth_info(LinphoneCore *lc, const char *user **/ const LinphoneAuthInfo *linphone_core_find_auth_info(LinphoneCore *lc, const char *realm, const char *username, const char *domain){ const LinphoneAuthInfo *ai=NULL; - if (domain){ - ai=find_auth_info(lc,username,realm,domain); - if (ai==NULL){ - ai=find_auth_info(lc,username,NULL,domain); - } - } - if (ai==NULL && realm) { + if (realm){ ai=find_auth_info(lc,username,realm,NULL); + if (ai==NULL && domain){ + ai=find_auth_info(lc,username,realm,domain); + } + } else if (domain != NULL) { + ai=find_auth_info(lc,username,NULL,domain); } if (ai==NULL){ ai=find_auth_info(lc,username,NULL,NULL); -- GitLab