File 140619-SYSDB-sysdb_search_entry-fix-memory-leak.patch of Package sssd.openSUSE_Leap_42.1_Update

From fd2ff8fc8c87bc604768084de382420bbd6cca9a Mon Sep 17 00:00:00 2001
From: Pavel Reichl <preichl@redhat.com>
Date: Thu, 19 Jun 2014 12:09:06 +0100
Subject: [PATCH] SYSDB: sysdb_search_entry fix memory leak

Allocate res on tmp_ctx instead of on mem_ctx.
Also use '_' prefix convention for output parameters.

Reviewed-by: Stephen Gallagher <sgallagh@redhat.com>
(cherry picked from commit 09579ae252c181c7884defc0612c36108f6cf509

diff -rupN sssd-1.11.5.1-original/src/db/sysdb.h sssd-1.11.5.1-patched/src/db/sysdb.h
--- sssd-1.11.5.1-original/src/db/sysdb.h	2017-01-30 14:08:05.463013252 +0100
+++ sssd-1.11.5.1-patched/src/db/sysdb.h	2017-01-30 14:09:18.435839837 +0100
@@ -515,8 +515,8 @@ int sysdb_search_entry(TALLOC_CTX *mem_c
                        int scope,
                        const char *filter,
                        const char **attrs,
-                       size_t *msgs_count,
-                       struct ldb_message ***msgs);
+                       size_t *_msgs_count,
+                       struct ldb_message ***_msgs);
 
 /* Search User (by uid, sid or name) */
 int sysdb_search_user_by_name(TALLOC_CTX *mem_ctx,
diff -rupN sssd-1.11.5.1-original/src/db/sysdb_ops.c sssd-1.11.5.1-patched/src/db/sysdb_ops.c
--- sssd-1.11.5.1-original/src/db/sysdb_ops.c	2017-01-30 14:08:05.463013252 +0100
+++ sssd-1.11.5.1-patched/src/db/sysdb_ops.c	2017-01-30 14:09:18.435839837 +0100
@@ -210,27 +210,38 @@ int sysdb_search_entry(TALLOC_CTX *mem_c
                        int scope,
                        const char *filter,
                        const char **attrs,
-                       size_t *msgs_count,
-                       struct ldb_message ***msgs)
+                       size_t *_msgs_count,
+                       struct ldb_message ***_msgs)
 {
+    TALLOC_CTX *tmp_ctx;
     struct ldb_result *res;
     int ret;
 
-    ret = ldb_search(sysdb->ldb, mem_ctx, &res,
+    tmp_ctx = talloc_new(NULL);
+    if (tmp_ctx == NULL) {
+        ret = ENOMEM;
+        goto done;
+    }
+
+    ret = ldb_search(sysdb->ldb, tmp_ctx, &res,
                      base_dn, scope, attrs,
                      filter?"%s":NULL, filter);
-    if (ret) {
-        return sysdb_error_to_errno(ret);
+    if (ret != EOK) {
+        ret = sysdb_error_to_errno(ret);
+        goto done;
     }
 
-    *msgs_count = res->count;
-    *msgs = talloc_steal(mem_ctx, res->msgs);
+    *_msgs_count = res->count;
+    *_msgs = talloc_steal(mem_ctx, res->msgs);
 
     if (res->count == 0) {
-        return ENOENT;
+        ret = ENOENT;
+        goto done;
     }
 
-    return EOK;
+done:
+    talloc_zfree(tmp_ctx);
+    return ret;
 }
 
 /* =Search-Entry-by-SID-string============================================ */