Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nslcd/passwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd/passwd.c')
-rw-r--r--nslcd/passwd.c29
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 */