diff options
Diffstat (limited to 'nslcd/passwd.c')
-rw-r--r-- | nslcd/passwd.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/nslcd/passwd.c b/nslcd/passwd.c index a8cc603..b934257 100644 --- a/nslcd/passwd.c +++ b/nslcd/passwd.c @@ -46,7 +46,7 @@ */ /* the search base for searches */ -const char *passwd_base = NULL; +const char *passwd_bases[NSS_LDAP_CONFIG_MAX_BASES] = { NULL }; /* the search scope for searches */ int passwd_scope = LDAP_SCOPE_DEFAULT; @@ -108,9 +108,11 @@ static int mkfilter_passwd_byuid(uid_t uid, static void passwd_init(void) { - /* set up base */ - if (passwd_base==NULL) - passwd_base=nslcd_cfg->ldc_base; + int i; + /* set up search bases */ + if (passwd_bases[0]==NULL) + for (i=0;i<NSS_LDAP_CONFIG_MAX_BASES;i++) + passwd_bases[i]=nslcd_cfg->ldc_bases[i]; /* set up scope */ if (passwd_scope==LDAP_SCOPE_DEFAULT) passwd_scope=nslcd_cfg->ldc_scope; @@ -242,8 +244,10 @@ char *dn2uid(MYLDAP_SESSION *session,const char *dn,char *buf,size_t buflen) char *uid2dn(MYLDAP_SESSION *session,const char *uid,char *buf,size_t buflen) { - MYLDAP_SEARCH *search; - MYLDAP_ENTRY *entry; + MYLDAP_SEARCH *search=NULL; + MYLDAP_ENTRY *entry=NULL; + const char *base; + int i; static const char *attrs[1]; int rc; const char *dn; @@ -257,10 +261,15 @@ char *uid2dn(MYLDAP_SESSION *session,const char *uid,char *buf,size_t buflen) passwd_init(); /* we have to look up the entry */ mkfilter_passwd_byname(uid,filter,sizeof(filter)); - search=myldap_search(session,passwd_base,passwd_scope,filter,attrs); - if (search==NULL) - return NULL; - entry=myldap_get_entry(search,&rc); + for (i=0;(i<NSS_LDAP_CONFIG_MAX_BASES)&&((base=passwd_bases[i])!=NULL);i++) + { + search=myldap_search(session,base,passwd_scope,filter,attrs); + if (search==NULL) + return NULL; + entry=myldap_get_entry(search,&rc); + if (entry!=NULL) + break; + } if (entry==NULL) return NULL; /* get DN */ |