[SSSD] [PATCH] SDAP: Remove user from cache for missing user in LDAP

Lukas Slebodnik lslebodn at redhat.com
Thu Jun 18 16:13:31 UTC 2015


ehlo,

regression was cuased by patch d0b7e5fcfca7d0db9e3d19be7b51f34d03d3d720
because function sysdb_get_real_name overrode returned code from LDAP.

LS
-------------- next part --------------
>From b297d7357bff3e8776ee9801cbe863a1cfb1a132 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Wed, 17 Jun 2015 21:35:22 +0200
Subject: [PATCH 1/2] SDAP: Remove user from cache for missing user in LDAP

Function sysdb_get_real_name overrode returned code from LDAP
and thus user was not removed from cache after removing it from LDAP.
This patch also do not try to set initgroups flag if user
does not exist. It reduce some error message in logs.

Resolves:
https://fedorahosted.org/sssd/ticket/2681
---
 src/providers/ldap/ldap_id.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c
index d4f46f1dcd69898e5883d21be07f895fd198cf50..1676b8d5c1b4dc8875dc642fb5f8776c1879a655 100644
--- a/src/providers/ldap/ldap_id.c
+++ b/src/providers/ldap/ldap_id.c
@@ -1158,19 +1158,24 @@ static void groups_by_user_done(struct tevent_req *subreq)
                                  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;
-        tevent_req_error(req, ret);
-        return;
+        break;
     }
 
     state->dp_error = DP_ERR_OK;
-- 
2.4.3



More information about the sssd-devel mailing list