[SSSD] [PATCH] Check LDB_MODULES_PATH for sysdb

Sumit Bose sbose at redhat.com
Mon Feb 14 16:15:23 UTC 2011


Hi,

the recent changes to our test environment in "Make 'make check' look
nice again" have revealed that older version of libldb does not support
the evaluation of the LDB_MODULES_PATH enviroment variable. These two
patches let sssd itself check LDB_MODULES_PATH while opening sysdb.
While the first patch only refactors the current code the second set the
ldb module path if LDB_MODULES_PATH is set.

bye,
Sumit
-------------- next part --------------
From d88f70bb89f99e0199d3ef381e355856ae89d089 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Mon, 14 Feb 2011 16:56:02 +0100
Subject: [PATCH 1/2] Introduce sysdb_ldb_connect()

---
 src/db/sysdb.c |   87 +++++++++++++++++++++++++++-----------------------------
 1 files changed, 42 insertions(+), 45 deletions(-)

diff --git a/src/db/sysdb.c b/src/db/sysdb.c
index 694ce54..e222c8b 100644
--- a/src/db/sysdb.c
+++ b/src/db/sysdb.c
@@ -25,6 +25,36 @@
 #include "confdb/confdb.h"
 #include <time.h>
 
+static errno_t  sysdb_ldb_connect(TALLOC_CTX *mem_ctx, const char *filename,
+                           struct ldb_context **_ldb)
+{
+    int ret;
+    struct ldb_context *ldb;
+
+    if (_ldb == NULL) {
+        return EINVAL;
+    }
+
+    ldb = ldb_init(mem_ctx, NULL);
+    if (!ldb) {
+        return EIO;
+    }
+
+    ret = ldb_set_debug(ldb, ldb_debug_messages, NULL);
+    if (ret != LDB_SUCCESS) {
+        return EIO;
+    }
+
+    ret = ldb_connect(ldb, filename, 0, NULL);
+    if (ret != LDB_SUCCESS) {
+        return EIO;
+    }
+
+    *_ldb = ldb;
+
+    return EOK;
+}
+
 errno_t sysdb_dn_sanitize(void *mem_ctx, const char *input,
                           char **sanitized)
 {
@@ -877,22 +907,10 @@ static int sysdb_check_upgrade_02(TALLOC_CTX *mem_ctx,
         goto exit;
     }
 
-    ldb = ldb_init(tmp_ctx, NULL);
-    if (!ldb) {
-        ret = EIO;
-        goto exit;
-    }
-
-    ret = ldb_set_debug(ldb, ldb_debug_messages, NULL);
-    if (ret != LDB_SUCCESS) {
-        ret = EIO;
-        goto exit;
-    }
-
-    ret = ldb_connect(ldb, ldb_file, 0, NULL);
-    if (ret != LDB_SUCCESS) {
-        ret = EIO;
-        goto exit;
+    ret = sysdb_ldb_connect(tmp_ctx, ldb_file, &ldb);
+    if (ret != EOK) {
+        DEBUG(1, ("sysdb_ldb_connect failed.\n"));
+        return ret;
     }
 
     verdn = ldb_dn_new(tmp_ctx, ldb, "cn=sysdb");
@@ -978,22 +996,10 @@ static int sysdb_check_upgrade_02(TALLOC_CTX *mem_ctx,
     }
 
     /* reopen */
-    ldb = ldb_init(tmp_ctx, NULL);
-    if (!ldb) {
-        ret = EIO;
-        goto exit;
-    }
-
-    ret = ldb_set_debug(ldb, ldb_debug_messages, NULL);
-    if (ret != LDB_SUCCESS) {
-        ret = EIO;
-        goto exit;
-    }
-
-    ret = ldb_connect(ldb, ldb_file, 0, NULL);
-    if (ret != LDB_SUCCESS) {
-        ret = EIO;
-        goto exit;
+    ret = sysdb_ldb_connect(tmp_ctx, ldb_file, &ldb);
+    if (ret != EOK) {
+        DEBUG(1, ("sysdb_ldb_connect failed.\n"));
+        return ret;
     }
 
     /* open a transaction */
@@ -1549,19 +1555,10 @@ static int sysdb_domain_init_internal(TALLOC_CTX *mem_ctx,
     }
     DEBUG(5, ("DB File for %s: %s\n", domain->name, ctx->ldb_file));
 
-    ctx->ldb = ldb_init(ctx, NULL);
-    if (!ctx->ldb) {
-        return EIO;
-    }
-
-    ret = ldb_set_debug(ctx->ldb, ldb_debug_messages, NULL);
-    if (ret != LDB_SUCCESS) {
-        return EIO;
-    }
-
-    ret = ldb_connect(ctx->ldb, ctx->ldb_file, 0, NULL);
-    if (ret != LDB_SUCCESS) {
-        return EIO;
+    ret = sysdb_ldb_connect(ctx, ctx->ldb_file, &ctx->ldb);
+    if (ret != EOK) {
+        DEBUG(1, ("sysdb_ldb_connect failed.\n"));
+        return ret;
     }
 
     tmp_ctx = talloc_new(ctx);
-- 
1.7.3.3

-------------- next part --------------
From c2e46e7950a197d431e85b2f3c5486fcd69aa5e6 Mon Sep 17 00:00:00 2001
From: Sumit Bose <sbose at redhat.com>
Date: Mon, 14 Feb 2011 16:56:25 +0100
Subject: [PATCH 2/2] Check LDB_MODULES_PATH for sysdb

---
 src/db/sysdb.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/db/sysdb.c b/src/db/sysdb.c
index e222c8b..521ae9d 100644
--- a/src/db/sysdb.c
+++ b/src/db/sysdb.c
@@ -25,11 +25,14 @@
 #include "confdb/confdb.h"
 #include <time.h>
 
+#define LDB_MODULES_PATH "LDB_MODULES_PATH"
+
 static errno_t  sysdb_ldb_connect(TALLOC_CTX *mem_ctx, const char *filename,
                            struct ldb_context **_ldb)
 {
     int ret;
     struct ldb_context *ldb;
+    const char *mod_path;
 
     if (_ldb == NULL) {
         return EINVAL;
@@ -45,6 +48,12 @@ static errno_t  sysdb_ldb_connect(TALLOC_CTX *mem_ctx, const char *filename,
         return EIO;
     }
 
+    mod_path = getenv(LDB_MODULES_PATH);
+    if (mod_path != NULL) {
+        DEBUG(9, ("Setting ldb module path to [%s].\n", mod_path));
+        ldb_set_modules_dir(ldb, mod_path);
+    }
+
     ret = ldb_connect(ldb, filename, 0, NULL);
     if (ret != LDB_SUCCESS) {
         return EIO;
-- 
1.7.3.3



More information about the sssd-devel mailing list