diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2012-05-04 15:36:45 +0200 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2012-05-04 15:36:45 +0200 |
commit | dcb2c6be4101985dd7f9d519635227e9f81ac2a7 (patch) | |
tree | 636c6577afc2c42fb1ea3319dadd16d7436d2773 /nslcd/cfg.c | |
parent | d02bfa44cfda8b7d5b95817305e30f77cfbee079 (diff) |
allow the pam_authz_search option to be specified multiple times
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1679 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nslcd/cfg.c')
-rw-r--r-- | nslcd/cfg.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/nslcd/cfg.c b/nslcd/cfg.c index 73199bb..0811954 100644 --- a/nslcd/cfg.c +++ b/nslcd/cfg.c @@ -126,7 +126,8 @@ static void cfg_defaults(struct ldap_config *cfg) cfg->ldc_restart=1; cfg->ldc_pagesize=0; cfg->ldc_nss_initgroups_ignoreusers=NULL; - cfg->ldc_pam_authz_search=NULL; + for (i=0;i<NSS_LDAP_CONFIG_MAX_AUTHZ_SEARCHES;i++) + cfg->ldc_pam_authz_search[i]=NULL; cfg->ldc_nss_min_uid=0; parse_validnames_statement(__FILE__,__LINE__,"", "/^[a-z0-9._@$][a-z0-9._@$ \\~-]*[a-z0-9._@$~-]$/i",cfg); @@ -782,9 +783,17 @@ static void parse_pam_authz_search_statement( const char **list; int i; check_argumentcount(filename,lnr,keyword,(line!=NULL)&&(*line!='\0')); - cfg->ldc_pam_authz_search=xstrdup(line); + /* find free spot for search filter */ + for (i=0;(i<NSS_LDAP_CONFIG_MAX_AUTHZ_SEARCHES)&&(cfg->ldc_pam_authz_search[i]!=NULL);i++); + if (i>=NSS_LDAP_CONFIG_MAX_AUTHZ_SEARCHES) + { + log_log(LOG_ERR,"%s:%d: maximum number of pam_authz_search options (%d) exceeded", + filename,lnr,NSS_LDAP_CONFIG_MAX_AUTHZ_SEARCHES); + exit(EXIT_FAILURE); + } + cfg->ldc_pam_authz_search[i]=xstrdup(line); /* check the variables used in the expression */ - set=expr_vars(cfg->ldc_pam_authz_search,NULL); + set=expr_vars(cfg->ldc_pam_authz_search[i],NULL); list=set_tolist(set); for (i=0;list[i]!=NULL;i++) { |