summaryrefslogtreecommitdiffstats
path: root/src/responder/nss/nsssrv_cmd.c
diff options
context:
space:
mode:
authorJan Zeleny <jzeleny@redhat.com>2011-05-23 07:08:01 -0400
committerStephen Gallagher <sgallagh@redhat.com>2011-06-02 15:35:20 -0400
commitea9a1b158585b3626b8e25ed79b92c579502e58c (patch)
tree8db5247da08766e274b7fc1d0fcc266d33c746e5 /src/responder/nss/nsssrv_cmd.c
parent28dab46aaa2c0d65160492f1d9d7c88652d8c714 (diff)
downloadsssd-ea9a1b158585b3626b8e25ed79b92c579502e58c.tar.gz
sssd-ea9a1b158585b3626b8e25ed79b92c579502e58c.tar.xz
sssd-ea9a1b158585b3626b8e25ed79b92c579502e58c.zip
Handle non-POSIX groups in nestingsssd-1.5.1-40.el6
Added sysdb_attrs_get_bool() function Non-posix group processing - sysdb changes Non-posix group processing - ldap provider and nss responder
Diffstat (limited to 'src/responder/nss/nsssrv_cmd.c')
-rw-r--r--src/responder/nss/nsssrv_cmd.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index 74c56a311..db7edd023 100644
--- a/src/responder/nss/nsssrv_cmd.c
+++ b/src/responder/nss/nsssrv_cmd.c
@@ -2922,6 +2922,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;
@@ -2939,14 +2941,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;