summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2007-08-03 08:13:51 +0000
committerArthur de Jong <arthur@arthurdejong.org>2007-08-03 08:13:51 +0000
commit1a79a08b416d2c611afd51d143c4d74efecd7b9e (patch)
treeb51baec4a337a6d237204d8f20ff9146b08cd29f
parentf352b7c00315571d70d6aa9b45ed95d234d61f6f (diff)
remove nss_initgroups and nss_initgroups_ignoreusers configfile options
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-ldapd@342 ef36b2f9-881f-0410-afb5-c4e39611909c
-rw-r--r--nslcd/cfg.c87
-rw-r--r--nslcd/cfg.h2
-rw-r--r--nslcd/group.c87
3 files changed, 24 insertions, 152 deletions
diff --git a/nslcd/cfg.c b/nslcd/cfg.c
index c5ad6f4..8d44725 100644
--- a/nslcd/cfg.c
+++ b/nslcd/cfg.c
@@ -80,8 +80,6 @@ struct ldap_config *nslcd_cfg=NULL;
#endif /* CONFIGURE_KRB5_CCNAME */
#define NSS_LDAP_KEY_DEBUG "debug"
#define NSS_LDAP_KEY_PAGESIZE "pagesize"
-#define NSS_LDAP_KEY_INITGROUPS "nss_initgroups"
-#define NSS_LDAP_KEY_INITGROUPS_IGNOREUSERS "nss_initgroups_ignoreusers"
/* more reconnect policy fine-tuning */
#define NSS_LDAP_KEY_RECONNECT_TRIES "nss_reconnect_tries"
@@ -158,7 +156,6 @@ static void _nss_ldap_init_config(struct ldap_config *result)
result->ldc_reconnect_sleeptime = LDAP_NSS_SLEEPTIME;
result->ldc_reconnect_maxsleeptime = LDAP_NSS_MAXSLEEPTIME;
result->ldc_reconnect_maxconntries = LDAP_NSS_MAXCONNTRIES;
- result->ldc_initgroups_ignoreusers = NULL;
}
static enum nss_status
@@ -305,70 +302,6 @@ static enum nss_status do_parse_map_statement(
return NSS_STATUS_SUCCESS;
}
-/* parse a comma-separated list */
-static enum nss_status do_parse_list(char *values,char ***valptr,
- char **pbuffer,size_t *pbuflen)
-{
- char *s, **p;
-#ifdef HAVE_STRTOK_R
- char *tok_r;
-#endif /* HAVE_STRTOK_R */
- size_t valcount;
-
- int buflen = *pbuflen;
- char *buffer = *pbuffer;
-
- /* comma separated list of values to ignore on initgroups() */
- for (valcount = 1, s = values; *s != '\0'; s++)
- {
- if (*s == ',')
- valcount++;
- }
-
- if (bytesleft (buffer, buflen, char *) < (valcount + 1) * sizeof (char *))
- {
- return NSS_STATUS_UNAVAIL;
- }
-
- align (buffer, buflen, char *);
- p = *valptr = (char **) buffer;
-
- buffer += (valcount + 1) * sizeof (char *);
- buflen -= (valcount + 1) * sizeof (char *);
-
-#ifdef HAVE_STRTOK_R
- for (s = strtok_r(values, ",", &tok_r); s != NULL;
- s = strtok_r(NULL, ",", &tok_r))
-#else /* HAVE_STRTOK_R */
- for (s = strtok(values, ","); s != NULL; s = strtok(NULL, ","))
-#endif /* not HAVE_STRTOK_R */
- {
- int vallen;
- char *elt = NULL;
-
- vallen = strlen (s);
- if (buflen < (size_t) (vallen + 1))
- {
- return NSS_STATUS_UNAVAIL;
- }
-
- /* copy this value into the next block of buffer space */
- elt = buffer;
- buffer += vallen + 1;
- buflen -= vallen + 1;
-
- strncpy (elt, s, vallen);
- elt[vallen] = '\0';
- *p++ = elt;
- }
-
- *p = NULL;
- *pbuffer = buffer;
- *pbuflen = buflen;
-
- return NSS_STATUS_SUCCESS;
-}
-
static enum nss_status
do_searchdescriptorconfig (const char *key, const char *value, size_t len,
struct ldap_service_search_descriptor ** result,
@@ -739,17 +672,6 @@ static enum nss_status _nss_ldap_readconfig(struct ldap_config ** presult, char
{
do_parse_map_statement (result, v);
}
- else if (!strcasecmp (k, NSS_LDAP_KEY_INITGROUPS))
- {
- if (!strcasecmp (v, "backlink"))
- {
- result->ldc_flags |= NSS_LDAP_FLAGS_INITGROUPS_BACKLINK;
- }
- else
- {
- result->ldc_flags &= ~(NSS_LDAP_FLAGS_INITGROUPS_BACKLINK);
- }
- }
else if (!strcasecmp (k, NSS_LDAP_KEY_SCHEMA))
{
if (!strcasecmp (v, "rfc2307bis"))
@@ -761,15 +683,6 @@ static enum nss_status _nss_ldap_readconfig(struct ldap_config ** presult, char
result->ldc_flags &= ~(NSS_LDAP_FLAGS_RFC2307BIS);
}
}
- else if (!strcasecmp (k, NSS_LDAP_KEY_INITGROUPS_IGNOREUSERS))
- {
- status = do_parse_list (v, &result->ldc_initgroups_ignoreusers,
- buffer, buflen);
- if (status == NSS_STATUS_UNAVAIL)
- {
- break;
- }
- }
else if (!strcasecmp (k, NSS_LDAP_KEY_CONNECT_POLICY))
{
if (!strcasecmp (v, "oneshot"))
diff --git a/nslcd/cfg.h b/nslcd/cfg.h
index bff6c1a..c790c57 100644
--- a/nslcd/cfg.h
+++ b/nslcd/cfg.h
@@ -137,7 +137,6 @@ struct ldap_config
/* Use active directory time offsets? */
enum ldap_shadow_selector ldc_shadow_type;
unsigned int ldc_flags;
- char **ldc_initgroups_ignoreusers;
};
extern struct ldap_config *nslcd_cfg;
@@ -145,7 +144,6 @@ extern struct ldap_config *nslcd_cfg;
/*
* Flags that are exposed via _nss_ldap_test_config_flag()
*/
-#define NSS_LDAP_FLAGS_INITGROUPS_BACKLINK 0x0001
#define NSS_LDAP_FLAGS_RFC2307BIS 0x0004
#define NSS_LDAP_FLAGS_CONNECT_POLICY_ONESHOT 0x0008
diff --git a/nslcd/group.c b/nslcd/group.c
index 534ef30..c61940b 100644
--- a/nslcd/group.c
+++ b/nslcd/group.c
@@ -1014,21 +1014,6 @@ static enum nss_status ng_chase_backlink(const char ** membersOf, ldap_initgroup
return stat;
}
-static int _nss_ldap_test_initgroups_ignoreuser(const char *user)
-{
- char **p;
- if (nslcd_cfg == NULL)
- return 0;
- if (nslcd_cfg->ldc_initgroups_ignoreusers == NULL)
- return 0;
- for (p = nslcd_cfg->ldc_initgroups_ignoreusers; *p != NULL; p++)
- {
- if (strcmp (*p, user) == 0)
- return 1;
- }
- return 0;
-}
-
static enum nss_status group_bymember(const char *user, long int *start,
long int *size, long int limit,
int *errnop)
@@ -1065,64 +1050,40 @@ static enum nss_status group_bymember(const char *user, long int *start,
return stat;
}
- if (_nss_ldap_test_initgroups_ignoreuser (LA_STRING (a)))
+ if (_nss_ldap_test_config_flag (NSS_LDAP_FLAGS_RFC2307BIS))
{
- log_log(LOG_DEBUG,"<== group_bymember (user ignored)");
- _nss_ldap_leave ();
- return NSS_STATUS_NOTFOUND;
+ /* lookup the user's DN. */
+ stat = _nss_ldap_search_s (&a, _nss_ldap_filt_getpwnam, LM_PASSWD,
+ no_attrs, 1, &res);
+ if (stat == NSS_STATUS_SUCCESS)
+ {
+ e = _nss_ldap_first_entry (res);
+ if (e != NULL)
+ {
+ userdn = _nss_ldap_get_dn (e);
+ }
+ ldap_msgfree (res);
+ }
+ }
+ else
+ {
+ userdn = NULL;
}
- lia.backlink = _nss_ldap_test_config_flag (NSS_LDAP_FLAGS_INITGROUPS_BACKLINK);
-
- if (lia.backlink != 0)
+ if (userdn != NULL)
{
- filter = _nss_ldap_filt_getpwnam_groupsbymember;
- LA_STRING2 (a) = LA_STRING (a);
+ LA_STRING2 (a) = userdn;
LA_TYPE (a) = LA_TYPE_STRING_AND_STRING;
-
- gidnumber_attrs[0] = attmap_group_gidNumber;
- gidnumber_attrs[1] = attmap_group_memberOf;
- gidnumber_attrs[2] = NULL;
-
- map = LM_PASSWD;
+ filter = _nss_ldap_filt_getgroupsbymemberanddn;
}
else
{
- if (_nss_ldap_test_config_flag (NSS_LDAP_FLAGS_RFC2307BIS))
- {
- /* lookup the user's DN. */
- stat = _nss_ldap_search_s (&a, _nss_ldap_filt_getpwnam, LM_PASSWD,
- no_attrs, 1, &res);
- if (stat == NSS_STATUS_SUCCESS)
- {
- e = _nss_ldap_first_entry (res);
- if (e != NULL)
- {
- userdn = _nss_ldap_get_dn (e);
- }
- ldap_msgfree (res);
- }
- }
- else
- {
- userdn = NULL;
- }
-
- if (userdn != NULL)
- {
- LA_STRING2 (a) = userdn;
- LA_TYPE (a) = LA_TYPE_STRING_AND_STRING;
- filter = _nss_ldap_filt_getgroupsbymemberanddn;
- }
- else
- {
- filter = _nss_ldap_filt_getgroupsbymember;
- }
-
- gidnumber_attrs[0] = attmap_group_gidNumber;
- gidnumber_attrs[1] = NULL;
+ filter = _nss_ldap_filt_getgroupsbymember;
}
+ gidnumber_attrs[0] = attmap_group_gidNumber;
+ gidnumber_attrs[1] = NULL;
+
if (_nss_ldap_ent_context_init_locked(&ctx)==NULL)
{
log_log(LOG_DEBUG,"<== group_bymember (ent_context_init failed)");