diff options
author | Jan Zeleny <jzeleny@redhat.com> | 2011-05-27 07:33:09 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2011-06-02 14:42:35 -0400 |
commit | 998d6ef7cc8c40b12fb890624b674fd1e407bdc0 (patch) | |
tree | f21c1a159a2873c17f6c167af38e0b071d0322eb /src/responder/nss | |
parent | 4f12fec1197d4e2afd4d1d8bec1b5299292f2962 (diff) | |
download | sssd-998d6ef7cc8c40b12fb890624b674fd1e407bdc0.tar.gz sssd-998d6ef7cc8c40b12fb890624b674fd1e407bdc0.tar.xz sssd-998d6ef7cc8c40b12fb890624b674fd1e407bdc0.zip |
Non-posix group processing - ldap provider and nss responder
Diffstat (limited to 'src/responder/nss')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index 2f9186064..e5a63e02a 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -2745,6 +2745,8 @@ static int fill_initgr(struct sss_packet *packet, struct ldb_result *res) size_t blen; gid_t gid; int ret, i, num; + int skipped = 0; + const char *posix; if (res->count == 0) { return ENOENT; @@ -2762,14 +2764,20 @@ static int fill_initgr(struct sss_packet *packet, struct ldb_result *res) /* skip first entry, it's the user entry */ for (i = 0; i < num; i++) { gid = ldb_msg_find_attr_as_uint64(res->msgs[i + 1], SYSDB_GIDNUM, 0); + posix = ldb_msg_find_attr_as_string(res->msgs[i + 1], SYSDB_POSIX, NULL); if (!gid) { - DEBUG(1, ("Incomplete group object for initgroups! Aborting\n")); - return EFAULT; + if (posix && strcmp(posix, "FALSE") == 0) { + skipped++; + continue; + } else { + DEBUG(1, ("Incomplete group object for initgroups! Aborting\n")); + return EFAULT; + } } ((uint32_t *)body)[2 + i] = gid; } - ((uint32_t *)body)[0] = num; /* num results */ + ((uint32_t *)body)[0] = num-skipped; /* num results */ ((uint32_t *)body)[1] = 0; /* reserved */ return EOK; |