From c1e19528a071d4a354af1d8667c2b00edf9a5b7b Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Fri, 4 Dec 2015 14:11:38 +0100 Subject: [PATCH 2/2] LDAP: Link external group members of IPA groups, too --- src/providers/ldap/sdap_async_groups.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/providers/ldap/sdap_async_groups.c b/src/providers/ldap/sdap_async_groups.c index c15a6a2bd724498aaf59b7ed3172ec4ed09abb9d..b3f7ae51edbc2b1bbd94a49722459c3938fa6d98 100644 --- a/src/providers/ldap/sdap_async_groups.c +++ b/src/providers/ldap/sdap_async_groups.c @@ -781,6 +781,12 @@ are_sids_from_same_dom(const char *sid1, const char *sid2, bool *_result) char *rid1, *rid2; bool result; + if ((sid1 == NULL || sid2 == NULL) && sid1 != sid2) { + /* IPA and AD group probably */ + *_result = false; + return EOK; + } + rid1 = strrchr(sid1, '-'); if (rid1 == NULL) { return EINVAL; @@ -911,19 +917,19 @@ static int sdap_save_grpmem(TALLOC_CTX *memctx, */ if (opts->schema_type == SDAP_SCHEMA_IPA_V1) { ret = sysdb_attrs_get_string(attrs, SYSDB_SID_STR, &group_sid); - if (ret != EOK) { - DEBUG(SSSDBG_TRACE_FUNC, "Failed to get group sid\n"); + if (ret == ENOENT) { group_sid = NULL; + } else if (ret != EOK) { + DEBUG(SSSDBG_TRACE_FUNC, "Failed to get group sid\n"); + goto fail; } - if (group_sid != NULL) { - ret = retain_extern_members(memctx, dom, group_name, group_sid, - &userdns, &nuserdns); - if (ret != EOK) { - DEBUG(SSSDBG_TRACE_INTERNAL, - "retain_extern_members failed: %d:[%s].\n", - ret, sss_strerror(ret)); - } + ret = retain_extern_members(memctx, dom, group_name, group_sid, + &userdns, &nuserdns); + if (ret != EOK) { + DEBUG(SSSDBG_TRACE_INTERNAL, + "retain_extern_members failed: %d:[%s].\n", + ret, sss_strerror(ret)); } } -- 2.4.3