diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/providers/ldap/ldap_id.c | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c index a53a7d7b1..4ebcd516b 100644 --- a/src/providers/ldap/ldap_id.c +++ b/src/providers/ldap/ldap_id.c @@ -1142,32 +1142,37 @@ static void groups_by_user_done(struct tevent_req *subreq) } state->sdap_ret = ret; - if (ret && ret != ENOENT) { - state->dp_error = dp_error; - tevent_req_error(req, ret); - return; - } - - /* state->name is still the name used for the original request. The cached - * object might have a different name, e.g. a fully-qualified name. */ - ret = sysdb_get_real_name(state, state->domain, state->name, &cname); - if (ret != EOK) { - cname = state->name; - DEBUG(SSSDBG_OP_FAILURE, "Failed to canonicalize name, using [%s].\n", - cname); + if (ret == EOK || ret == ENOENT) { + /* state->name is still the name used for the original req. The cached + * object might have a different name, e.g. a fully-qualified name. */ + ret = sysdb_get_real_name(state, state->domain, state->name, &cname); + if (ret != EOK) { + cname = state->name; + DEBUG(SSSDBG_OP_FAILURE, + "Failed to canonicalize name, using [%s].\n", cname); + } } - if (ret == ENOENT && state->noexist_delete == true) { - ret = sysdb_delete_user(state->domain, cname, 0); - if (ret != EOK && ret != ENOENT) { + switch (state->sdap_ret) { + case ENOENT: + if (state->noexist_delete == true) { + ret = sysdb_delete_user(state->domain, cname, 0); + if (ret != EOK && ret != ENOENT) { + tevent_req_error(req, ret); + return; + } + } + break; + case EOK: + ret = set_initgroups_expire_attribute(state->domain, cname); + if (ret != EOK) { + state->dp_error = DP_ERR_FATAL; tevent_req_error(req, ret); return; } - } - - ret = set_initgroups_expire_attribute(state->domain, cname); - if (ret != EOK) { - state->dp_error = DP_ERR_FATAL; + break; + default: + state->dp_error = dp_error; tevent_req_error(req, ret); return; } |