Blame SOURCES/0086-nss-idmap-allow-NULL-result-in-_timeout-calls.patch

9f2ebf
From 2a3accc78bb9658401b33ad5a3a2f1bc4bc3c269 Mon Sep 17 00:00:00 2001
9f2ebf
From: Sumit Bose <sbose@redhat.com>
9f2ebf
Date: Thu, 7 Dec 2017 17:42:45 +0100
9f2ebf
Subject: [PATCH 86/86] nss-idmap: allow NULL result in *_timeout calls
9f2ebf
MIME-Version: 1.0
9f2ebf
Content-Type: text/plain; charset=UTF-8
9f2ebf
Content-Transfer-Encoding: 8bit
9f2ebf
9f2ebf
To make the *_timeout calls more resilient checks are added if the
9f2ebf
result parameter is NULL. It will not be used in this case.
9f2ebf
9f2ebf
Related to https://pagure.io/SSSD/sssd/issue/2478
9f2ebf
9f2ebf
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
9f2ebf
Reviewed-by: Alexander Bokovoy <abokovoy@redhat.com>
9f2ebf
(cherry picked from commit bba068c535d23eebff61f592bddb3a6438446d6f)
9f2ebf
---
9f2ebf
 src/sss_client/idmap/sss_nss_ex.c | 46 +++++++++++++++++++++++++++------------
9f2ebf
 1 file changed, 32 insertions(+), 14 deletions(-)
9f2ebf
9f2ebf
diff --git a/src/sss_client/idmap/sss_nss_ex.c b/src/sss_client/idmap/sss_nss_ex.c
9f2ebf
index dcd9619a8b07ced7498f61b7e809fa46ebffe09e..861b1e1e92db4f7e6e8d74a812dc3c9220711773 100644
9f2ebf
--- a/src/sss_client/idmap/sss_nss_ex.c
9f2ebf
+++ b/src/sss_client/idmap/sss_nss_ex.c
9f2ebf
@@ -367,13 +367,17 @@ int sss_nss_getpwnam_timeout(const char *name, struct passwd *pwd,
9f2ebf
         return ret;
9f2ebf
     }
9f2ebf
 
9f2ebf
-    *result = NULL;
9f2ebf
-
9f2ebf
     ret = sss_get_ex(&inp, flags, timeout);
9f2ebf
     free(discard_const(inp.rd.data));
9f2ebf
-    if (ret == 0) {
9f2ebf
-        *result = inp.result.pwrep.result;
9f2ebf
+
9f2ebf
+    if (result != NULL) {
9f2ebf
+        if (ret == 0) {
9f2ebf
+            *result = inp.result.pwrep.result;
9f2ebf
+        } else {
9f2ebf
+            *result = NULL;
9f2ebf
+        }
9f2ebf
     }
9f2ebf
+
9f2ebf
     return ret;
9f2ebf
 }
9f2ebf
 
9f2ebf
@@ -395,12 +399,17 @@ int sss_nss_getpwuid_timeout(uid_t uid, struct passwd *pwd,
9f2ebf
 
9f2ebf
     SAFEALIGN_COPY_UINT32(&req_data[0], &uid, NULL);
9f2ebf
     SAFEALIGN_COPY_UINT32(&req_data[1], &flags, NULL);
9f2ebf
-    *result = NULL;
9f2ebf
 
9f2ebf
     ret = sss_get_ex(&inp, flags, timeout);
9f2ebf
-    if (ret == 0) {
9f2ebf
-        *result = inp.result.pwrep.result;
9f2ebf
+
9f2ebf
+    if (result != NULL) {
9f2ebf
+        if (ret == 0) {
9f2ebf
+            *result = inp.result.pwrep.result;
9f2ebf
+        } else {
9f2ebf
+            *result = NULL;
9f2ebf
+        }
9f2ebf
     }
9f2ebf
+
9f2ebf
     return ret;
9f2ebf
 }
9f2ebf
 
9f2ebf
@@ -421,13 +430,17 @@ int sss_nss_getgrnam_timeout(const char *name, struct group *grp,
9f2ebf
         return ret;
9f2ebf
     }
9f2ebf
 
9f2ebf
-    *result = NULL;
9f2ebf
-
9f2ebf
     ret = sss_get_ex(&inp, flags, timeout);
9f2ebf
     free(discard_const(inp.rd.data));
9f2ebf
-    if (ret == 0) {
9f2ebf
-        *result = inp.result.grrep.result;
9f2ebf
+
9f2ebf
+    if (result != NULL) {
9f2ebf
+        if (ret == 0) {
9f2ebf
+            *result = inp.result.grrep.result;
9f2ebf
+        } else {
9f2ebf
+            *result = NULL;
9f2ebf
+        }
9f2ebf
     }
9f2ebf
+
9f2ebf
     return ret;
9f2ebf
 }
9f2ebf
 
9f2ebf
@@ -448,12 +461,17 @@ int sss_nss_getgrgid_timeout(gid_t gid, struct group *grp,
9f2ebf
 
9f2ebf
     SAFEALIGN_COPY_UINT32(&req_data[0], &gid, NULL);
9f2ebf
     SAFEALIGN_COPY_UINT32(&req_data[1], &flags, NULL);
9f2ebf
-    *result = NULL;
9f2ebf
 
9f2ebf
     ret = sss_get_ex(&inp, flags, timeout);
9f2ebf
-    if (ret == 0) {
9f2ebf
-        *result = inp.result.grrep.result;
9f2ebf
+
9f2ebf
+    if (result != NULL) {
9f2ebf
+        if (ret == 0) {
9f2ebf
+            *result = inp.result.grrep.result;
9f2ebf
+        } else {
9f2ebf
+            *result = NULL;
9f2ebf
+        }
9f2ebf
     }
9f2ebf
+
9f2ebf
     return ret;
9f2ebf
 }
9f2ebf
 
9f2ebf
-- 
9f2ebf
2.14.3
9f2ebf