diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2013-10-10 19:21:07 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-10-25 19:57:09 +0200 |
commit | 2dae2ae732b0c8e31fd1d8dc38f207c62e7665b8 (patch) | |
tree | abc1e6d21a546b5a9986e0eb53966ac8fa53b3f6 /src/providers/ldap/ldap_id.c | |
parent | 0e12686d5ae015b760b9878f64d07c3536c9d466 (diff) | |
download | sssd-2dae2ae732b0c8e31fd1d8dc38f207c62e7665b8.tar.gz sssd-2dae2ae732b0c8e31fd1d8dc38f207c62e7665b8.tar.xz sssd-2dae2ae732b0c8e31fd1d8dc38f207c62e7665b8.zip |
LDAP: Delete entry by SID if not found
In case the entry was deleted from the server, the search didn't notice
and kept returning the cached data.
Diffstat (limited to 'src/providers/ldap/ldap_id.c')
-rw-r--r-- | src/providers/ldap/ldap_id.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c index 9fd95ce79..624533301 100644 --- a/src/providers/ldap/ldap_id.c +++ b/src/providers/ldap/ldap_id.c @@ -1553,12 +1553,28 @@ static void get_user_and_group_users_done(struct tevent_req *subreq) ret = users_get_recv(subreq, &state->dp_error, &state->sdap_ret); talloc_zfree(subreq); - if (ret == EOK) { /* Matching user found */ - tevent_req_done(req); - } else { + if (ret != EOK) { tevent_req_error(req, ret); + return; } + if (state->sdap_ret == ENOENT) { + /* The search ran to completion, but nothing was found. + * Delete the existing entry, if any. */ + ret = sysdb_delete_by_sid(state->sysdb, state->domain, + state->filter_val); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("Could not delete entry by SID!\n")); + tevent_req_error(req, ret); + return; + } + } else if (state->sdap_ret != EOK) { + tevent_req_error(req, EIO); + return; + } + + /* Both ret and sdap->ret are EOK. Matching user found */ + tevent_req_done(req); return; } |