Hello,

please simple attached patches.

Thanks.
>From f4eedb6ba21bf0c483ba8b037695ef02f5e61ed8 Mon Sep 17 00:00:00 2001
From: Pavel Reichl <prei...@redhat.com>
Date: Tue, 4 Nov 2014 08:52:54 +0000
Subject: [PATCH 1/2] SYSDB: sysdb_get_bool() return ENOENT & unit tests

sysdb_get_bool() return ENOENT if no result is found.
Also unit test for sysdb_get_bool() & sysdb_set_bool() was added.

Resolves:
https://fedorahosted.org/sssd/ticket/1991
---
 src/db/sysdb.c          | 11 +++++++++--
 src/tests/sysdb-tests.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/src/db/sysdb.c b/src/db/sysdb.c
index 1f02585e747dda6aadde772f76f30d3d69c4cfc0..53230dc4a3ac67b7faf0c68f792a828502b0ffc1 100644
--- a/src/db/sysdb.c
+++ b/src/db/sysdb.c
@@ -1508,6 +1508,7 @@ errno_t sysdb_get_bool(struct sysdb_ctx *sysdb,
     errno_t ret;
     int lret;
     const char *attrs[2] = {attr_name, NULL};
+    struct ldb_message_element *el;
 
     tmp_ctx = talloc_new(NULL);
     if (tmp_ctx == NULL) {
@@ -1530,7 +1531,7 @@ errno_t sysdb_get_bool(struct sysdb_ctx *sysdb,
          * to contain this attribute.
          */
         *value = false;
-        ret = EOK;
+        ret = ENOENT;
         goto done;
     } else if (res->count != 1) {
         DEBUG(SSSDBG_CRIT_FAILURE,
@@ -1539,7 +1540,13 @@ errno_t sysdb_get_bool(struct sysdb_ctx *sysdb,
         goto done;
     }
 
-    *value = ldb_msg_find_attr_as_bool(res->msgs[0], attr_name, false);
+    el = ldb_msg_find_element(res->msgs[0], attr_name);
+    if (el == NULL || el->num_values == 0) {
+        ret = ENOENT;
+        goto done;
+    } else {
+        *value = ldb_msg_find_attr_as_bool(res->msgs[0], attr_name, false);
+    }
 
     ret = EOK;
 
diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c
index e01ddf4782c0a5a557f39d1adc2efd74b6234461..7f1ca8755d7066788cb4706b923c5282417b59aa 100644
--- a/src/tests/sysdb-tests.c
+++ b/src/tests/sysdb-tests.c
@@ -3474,6 +3474,48 @@ START_TEST (test_sysdb_memberof_user_cleanup)
 }
 END_TEST
 
+START_TEST (test_sysdb_set_get_bool)
+{
+    struct sysdb_test_ctx *test_ctx;
+    struct ldb_dn *dn;
+    bool value;
+    int ret;
+    const char *attr_val = "BOOL_VALUE";
+
+    /* Setup */
+    ret = setup_sysdb_tests(&test_ctx);
+    if (ret != EOK) {
+        fail("Could not set up the test");
+        return;
+    }
+
+    dn = ldb_dn_new_fmt(test_ctx, test_ctx->sysdb->ldb, SYSDB_DOM_BASE,
+                        test_ctx->domain->name);
+    fail_unless(dn != NULL);
+
+    /* attribute is not created yet */
+    ret = sysdb_get_bool(test_ctx->sysdb, dn, attr_val,
+                         &value);
+    fail_unless(ret == ENOENT,
+                "sysdb_get_bool returned %d:[%s], but ENOENT is expected",
+                ret, sss_strerror(ret));
+
+    /* add attribute */
+    ret = sysdb_set_bool(test_ctx->sysdb, dn, test_ctx->domain->name,
+                         attr_val, true);
+    fail_unless(ret == EOK);
+
+    /* successfully obtain attribute */
+    ret = sysdb_get_bool(test_ctx->sysdb, dn, attr_val,
+                         &value);
+    fail_unless(ret == EOK, "sysdb_get_bool failed %d:[%s]",
+                ret, sss_strerror(ret));
+    fail_unless(value == true);
+
+    talloc_free(test_ctx);
+}
+END_TEST
+
 START_TEST (test_sysdb_attrs_to_list)
 {
     struct sysdb_attrs *attrs_list[3];
@@ -6174,6 +6216,9 @@ Suite *create_sysdb_suite(void)
     tcase_add_loop_test(tc_memberof, test_sysdb_remove_local_group_by_gid,
                         MBO_GROUP_BASE , MBO_GROUP_BASE + 10);
 
+    /* Misc */
+    tcase_add_test(tc_sysdb, test_sysdb_set_get_bool);
+
     /* Ghost users tests */
     tcase_add_loop_test(tc_memberof, test_sysdb_memberof_store_group_with_ghosts,
                         MBO_GROUP_BASE , MBO_GROUP_BASE + 10);
-- 
1.9.3

>From 325c84d5f9d685ab9793b357dc4070d3b926ced2 Mon Sep 17 00:00:00 2001
From: Pavel Reichl <prei...@redhat.com>
Date: Tue, 4 Nov 2014 08:55:55 +0000
Subject: [PATCH 2/2] LDAP: fix ldap_setup_enumeration() handling ENOENT

This patch fixes ldap_setup_enumeration() to handle ENOENT returned by
sysdb_has_enumerated().

Resolves:
https://fedorahosted.org/sssd/ticket/1991
---
 src/providers/ldap/ldap_id_enum.c | 6 +++++-
 src/tests/sysdb-tests.c           | 7 +++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/providers/ldap/ldap_id_enum.c b/src/providers/ldap/ldap_id_enum.c
index 9ffa3e5d9737048e2f4508cea4edc28d6f8cda48..13d2a62544b3956165ef9eb480fb5b813c890fd4 100644
--- a/src/providers/ldap/ldap_id_enum.c
+++ b/src/providers/ldap/ldap_id_enum.c
@@ -41,7 +41,11 @@ errno_t ldap_setup_enumeration(struct be_ctx *be_ctx,
     struct ldap_enum_ctx *ectx;
 
     ret = sysdb_has_enumerated(sdom->dom, &has_enumerated);
-    if (ret != EOK) {
+    if (ret == ENOENT) {
+        /* default value */
+        has_enumerated = false;
+        ret = EOK;
+    } else if (ret != EOK) {
         return ret;
     }
 
diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c
index 7f1ca8755d7066788cb4706b923c5282417b59aa..c8be7f968160372c4ca23fa68671455f018d2a3f 100644
--- a/src/tests/sysdb-tests.c
+++ b/src/tests/sysdb-tests.c
@@ -4943,10 +4943,9 @@ START_TEST(test_sysdb_has_enumerated)
     fail_if(ret != EOK, "Could not set up the test");
 
     ret = sysdb_has_enumerated(test_ctx->domain, &enumerated);
-    fail_if(ret != EOK, "Error [%d][%s] checking enumeration",
-                        ret, strerror(ret));
-
-    fail_if(enumerated, "Enumeration should default to false");
+    fail_if(ret != ENOENT,
+            "Error [%d][%s] checking enumeration ENOENT is expected",
+            ret, strerror(ret));
 
     ret = sysdb_set_enumerated(test_ctx->domain, true);
     fail_if(ret != EOK, "Error [%d][%s] setting enumeration",
-- 
1.9.3

_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to