Blame SOURCES/0007-negcache-make-sure-short-names-are-added-to-sub-doma.patch

b833e0
From 0dc81a52e2836010974e9f71b1f3e47c20fd498d Mon Sep 17 00:00:00 2001
b833e0
From: Sumit Bose <sbose@redhat.com>
b833e0
Date: Fri, 9 Oct 2020 11:56:21 +0200
b833e0
Subject: [PATCH 7/8] negcache: make sure short names are added to sub-domains
b833e0
b833e0
If short names are used with filter_users or filter_groups in a
b833e0
[domain/...] section they should be added to the sub-domains of this
b833e0
domain as well.
b833e0
b833e0
Resolves: https://github.com/SSSD/sssd/issues/5238
b833e0
b833e0
Reviewed-by: Alexey Tikhonov <atikhono@redhat.com>
b833e0
---
b833e0
 src/responder/common/negcache.c  | 105 +++++++------
b833e0
 src/tests/cmocka/test_negcache.c | 254 +++++++++++++++++++++++++++++++
b833e0
 2 files changed, 312 insertions(+), 47 deletions(-)
b833e0
b833e0
diff --git a/src/responder/common/negcache.c b/src/responder/common/negcache.c
b833e0
index 139218420..9ee39ce3e 100644
b833e0
--- a/src/responder/common/negcache.c
b833e0
+++ b/src/responder/common/negcache.c
b833e0
@@ -971,6 +971,7 @@ errno_t sss_ncache_prepopulate(struct sss_nc_ctx *ncache,
b833e0
     char *name = NULL;
b833e0
     struct sss_domain_info *dom = NULL;
b833e0
     struct sss_domain_info *domain_list = rctx->domains;
b833e0
+    struct sss_domain_info *ddom;
b833e0
     char *domainname = NULL;
b833e0
     char *conf_path = NULL;
b833e0
     TALLOC_CTX *tmpctx = talloc_new(NULL);
b833e0
@@ -1013,39 +1014,44 @@ errno_t sss_ncache_prepopulate(struct sss_nc_ctx *ncache,
b833e0
                 continue;
b833e0
             }
b833e0
 
b833e0
-            if (domainname && strcmp(domainname, dom->name)) {
b833e0
-                DEBUG(SSSDBG_TRACE_FUNC,
b833e0
-                      "Mismatch between domain name (%s) and name "
b833e0
-                          "set in FQN  (%s), assuming %s is UPN\n",
b833e0
-                          dom->name, domainname, filter_list[i]);
b833e0
-                ret = sss_ncache_set_upn(ncache, true, dom, filter_list[i]);
b833e0
+            /* Check domain and its sub-domains */
b833e0
+            for (ddom = dom; ddom != NULL;
b833e0
+                        ddom = get_next_domain(ddom, SSS_GND_ALL_SUBDOMAINS)) {
b833e0
+
b833e0
+                if (domainname && strcmp(domainname, ddom->name)) {
b833e0
+                    DEBUG(SSSDBG_TRACE_FUNC,
b833e0
+                          "Mismatch between domain name (%s) and name "
b833e0
+                              "set in FQN  (%s), assuming %s is UPN\n",
b833e0
+                              ddom->name, domainname, filter_list[i]);
b833e0
+                    ret = sss_ncache_set_upn(ncache, true, ddom, filter_list[i]);
b833e0
+                    if (ret != EOK) {
b833e0
+                        DEBUG(SSSDBG_OP_FAILURE,
b833e0
+                              "sss_ncache_set_upn failed (%d [%s]), ignored\n",
b833e0
+                              ret, sss_strerror(ret));
b833e0
+                    }
b833e0
+                    continue;
b833e0
+                }
b833e0
+
b833e0
+                fqname = sss_create_internal_fqname(tmpctx, name, ddom->name);
b833e0
+                if (fqname == NULL) {
b833e0
+                    continue;
b833e0
+                }
b833e0
+
b833e0
+                ret = sss_ncache_set_upn(ncache, true, ddom, fqname);
b833e0
                 if (ret != EOK) {
b833e0
                     DEBUG(SSSDBG_OP_FAILURE,
b833e0
                           "sss_ncache_set_upn failed (%d [%s]), ignored\n",
b833e0
                           ret, sss_strerror(ret));
b833e0
                 }
b833e0
-                continue;
b833e0
-            }
b833e0
-
b833e0
-            fqname = sss_create_internal_fqname(tmpctx, name, dom->name);
b833e0
-            if (fqname == NULL) {
b833e0
-                continue;
b833e0
-            }
b833e0
-
b833e0
-            ret = sss_ncache_set_upn(ncache, true, dom, fqname);
b833e0
-            if (ret != EOK) {
b833e0
-                DEBUG(SSSDBG_OP_FAILURE,
b833e0
-                      "sss_ncache_set_upn failed (%d [%s]), ignored\n",
b833e0
-                      ret, sss_strerror(ret));
b833e0
-            }
b833e0
-            ret = sss_ncache_set_user(ncache, true, dom, fqname);
b833e0
-            talloc_zfree(fqname);
b833e0
-            if (ret != EOK) {
b833e0
-                DEBUG(SSSDBG_CRIT_FAILURE,
b833e0
-                      "Failed to store permanent user filter for [%s]"
b833e0
-                          " (%d [%s])\n", filter_list[i],
b833e0
-                          ret, sss_strerror(ret));
b833e0
-                continue;
b833e0
+                ret = sss_ncache_set_user(ncache, true, ddom, fqname);
b833e0
+                talloc_zfree(fqname);
b833e0
+                if (ret != EOK) {
b833e0
+                    DEBUG(SSSDBG_CRIT_FAILURE,
b833e0
+                          "Failed to store permanent user filter for [%s]"
b833e0
+                              " (%d [%s])\n", filter_list[i],
b833e0
+                              ret, sss_strerror(ret));
b833e0
+                    continue;
b833e0
+                }
b833e0
             }
b833e0
         }
b833e0
     }
b833e0
@@ -1161,27 +1167,32 @@ errno_t sss_ncache_prepopulate(struct sss_nc_ctx *ncache,
b833e0
                 continue;
b833e0
             }
b833e0
 
b833e0
-            if (domainname && strcmp(domainname, dom->name)) {
b833e0
-                DEBUG(SSSDBG_CRIT_FAILURE,
b833e0
-                      "Mismatch between domain name (%s) and name "
b833e0
-                          "set in FQN  (%s), skipping group %s\n",
b833e0
-                          dom->name, domainname, name);
b833e0
-                continue;
b833e0
-            }
b833e0
+            /* Check domain and its sub-domains */
b833e0
+            for (ddom = dom;
b833e0
+                        ddom != NULL && (ddom == dom || ddom->parent != NULL);
b833e0
+                        ddom = get_next_domain(ddom, SSS_GND_ALL_DOMAINS)) {
b833e0
+                if (domainname && strcmp(domainname, ddom->name)) {
b833e0
+                    DEBUG(SSSDBG_CRIT_FAILURE,
b833e0
+                          "Mismatch between domain name (%s) and name "
b833e0
+                              "set in FQN  (%s), skipping group %s\n",
b833e0
+                              ddom->name, domainname, name);
b833e0
+                    continue;
b833e0
+                }
b833e0
 
b833e0
-            fqname = sss_create_internal_fqname(tmpctx, name, dom->name);
b833e0
-            if (fqname == NULL) {
b833e0
-                continue;
b833e0
-            }
b833e0
+                fqname = sss_create_internal_fqname(tmpctx, name, ddom->name);
b833e0
+                if (fqname == NULL) {
b833e0
+                    continue;
b833e0
+                }
b833e0
 
b833e0
-            ret = sss_ncache_set_group(ncache, true, dom, fqname);
b833e0
-            talloc_zfree(fqname);
b833e0
-            if (ret != EOK) {
b833e0
-                DEBUG(SSSDBG_CRIT_FAILURE,
b833e0
-                      "Failed to store permanent group filter for [%s]"
b833e0
-                          " (%d [%s])\n", filter_list[i],
b833e0
-                          ret, strerror(ret));
b833e0
-                continue;
b833e0
+                ret = sss_ncache_set_group(ncache, true, ddom, fqname);
b833e0
+                talloc_zfree(fqname);
b833e0
+                if (ret != EOK) {
b833e0
+                    DEBUG(SSSDBG_CRIT_FAILURE,
b833e0
+                          "Failed to store permanent group filter for [%s]"
b833e0
+                              " (%d [%s])\n", filter_list[i],
b833e0
+                              ret, strerror(ret));
b833e0
+                    continue;
b833e0
+                }
b833e0
             }
b833e0
         }
b833e0
     }
b833e0
diff --git a/src/tests/cmocka/test_negcache.c b/src/tests/cmocka/test_negcache.c
b833e0
index b3a379227..fb306b110 100644
b833e0
--- a/src/tests/cmocka/test_negcache.c
b833e0
+++ b/src/tests/cmocka/test_negcache.c
b833e0
@@ -119,6 +119,8 @@ static int setup(void **state)
b833e0
     int ret;
b833e0
     struct test_state *ts;
b833e0
 
b833e0
+    test_dom_suite_setup(TESTS_PATH);
b833e0
+
b833e0
     ts = talloc(NULL, struct test_state);
b833e0
     assert_non_null(ts);
b833e0
 
b833e0
@@ -133,6 +135,7 @@ static int setup(void **state)
b833e0
 static int teardown(void **state)
b833e0
 {
b833e0
     struct test_state *ts = talloc_get_type_abort(*state, struct test_state);
b833e0
+    test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_DOM_NAME);
b833e0
     talloc_free(ts);
b833e0
     return 0;
b833e0
 }
b833e0
@@ -921,6 +924,255 @@ static void test_sss_ncache_reset_prepopulate(void **state)
b833e0
     assert_int_equal(ret, EEXIST);
b833e0
 }
b833e0
 
b833e0
+/* The main purpose of test_sss_ncache_short_name_in_domain is to test that
b833e0
+ * short names in the filter_users or filter_groups options in a [domain/...]
b833e0
+ * section are properly added to the related sub-domains as well (if there are
b833e0
+ * any) and not added to domains from other [domain/...] sections. For
b833e0
+ * completeness entries with fully-qualified names of the parent and the
b833e0
+ * sub-domain and the generic UPN are added as well.
b833e0
+ *
b833e0
+ * The result should of course be independent of the present domains. To
b833e0
+ * verify this the domains are added one after the other and the negative
b833e0
+ * cache is repopulated each time.
b833e0
+ *
b833e0
+ * With the given domains, users and group we have to following expectations:
b833e0
+ *  - the short name entry will be added to the domain and all sub-domains as
b833e0
+ *    name and as upn by expanding it to a fully-qualified name with the
b833e0
+ *    domain name or sub-domain name respectively
b833e0
+ *  - the fully-qualified name from the parent domain is added as name and upn
b833e0
+ *    to the parent domain and as upn to all sub-domains
b833e0
+ *  - the fully-qualified name from the sub-domain is added as name to the
b833e0
+ *    sub-domain and as upn to the parent and all sub-domains
b833e0
+ *  - the generic upn is nowhere added as name and as upn to the parent and all
b833e0
+ *    sub-domains
b833e0
+ *  - none of the names is added to a different parent domain
b833e0
+ *
b833e0
+ * The following table should illustrated the expectations:
b833e0
+ *
b833e0
+ * user (name):
b833e0
+ *                 | shortuser | parentu@TEST_DOM_NAME | subdomu@subTEST_DOM_NAME | upn@upn.dom
b833e0
+ *-----------------+-----------+-----------------------+--------------------------+------------
b833e0
+ * TEST_DOM_NAME   |  PRESENT  |  PRESENT              |  MISSING                 |  MISSING
b833e0
+ * subTEST_DOM_NAME|  PRESENT  |  MISSING              |  PRESENT                 |  MISSING
b833e0
+ * TEST_DOM_NAME2  |  MISSING  |  MISSING              |  MISSING                 |  MISSING
b833e0
+ *
b833e0
+ * user (upn):
b833e0
+ *                 | shortuser | parentu@TEST_DOM_NAME | subdomu@subTEST_DOM_NAME | upn@upn.dom
b833e0
+ *-----------------+-----------+-----------------------+--------------------------+------------
b833e0
+ * TEST_DOM_NAME   |  PRESENT  |  PRESENT              |  PRESENT                 |  PRESENT
b833e0
+ * subTEST_DOM_NAME|  PRESENT  |  PRESENT              |  PRESENT                 |  PRESENT
b833e0
+ * TEST_DOM_NAME2  |  MISSING  |  MISSING              |  MISSING                 |  MISSING
b833e0
+ *
b833e0
+ *
b833e0
+ *
b833e0
+ * groups:
b833e0
+ *                 | shortgroup | parentg@TEST_DOM_NAME | subdomg@subTEST_DOM_NAME
b833e0
+ *-----------------+------------+-----------------------+-------------------------
b833e0
+ * TEST_DOM_NAME   |  PRESENT   |  PRESENT              |  MISSING
b833e0
+ * subTEST_DOM_NAME|  PRESENT   |  MISSING              |  PRESENT
b833e0
+ * TEST_DOM_NAME2  |  MISSING   |  MISSING              |  MISSING
b833e0
+ *
b833e0
+ *
b833e0
+ * The following expect_*() implement checks for the expextations:
b833e0
+ */
b833e0
+
b833e0
+static void expect_in_parent(struct sss_nc_ctx *ncache,
b833e0
+                             struct sss_domain_info *dom)
b833e0
+{
b833e0
+    int ret;
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom, "shortuser");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom, "shortuser@"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom, "parentu");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom, "parentu@"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom, "subdomu");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom, "subdomu@sub"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom, "upn");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom, "upn@upn.dom");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, dom, "shortgroup");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, dom, "parentg");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, dom, "subdomg");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+}
b833e0
+
b833e0
+static void expect_in_subdomain(struct sss_nc_ctx *ncache,
b833e0
+                                struct sss_domain_info *sub_dom)
b833e0
+{
b833e0
+    int ret;
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, sub_dom, "shortuser");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+    ret = sss_ncache_check_upn(ncache, sub_dom, "shortuser@sub"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, sub_dom, "subdomu");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+    ret = sss_ncache_check_upn(ncache, sub_dom, "subdomu@sub"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, sub_dom, "upn");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, sub_dom, "upn@upn.dom");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, sub_dom, "parentu");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, sub_dom, "parentu@"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, sub_dom, "shortgroup");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, sub_dom, "parentg");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, sub_dom, "subdomg");
b833e0
+    assert_int_equal(ret, EEXIST);
b833e0
+}
b833e0
+static void expect_no_entries_in_dom(struct sss_nc_ctx *ncache,
b833e0
+                                     struct sss_domain_info *dom2)
b833e0
+{
b833e0
+    int ret;
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom2, "shortuser");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom2, "shortuser"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom2, "parentu");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom2, "parentu@"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom2, "subdomu");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom2, "subdomu@sub"TEST_DOM_NAME);
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_user_in_ncache(ncache, dom2, "upn");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+    ret = sss_ncache_check_upn(ncache, dom2, "upn@upn.dom");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, dom2, "shortgroup");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, dom2, "parentg");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+
b833e0
+    ret = check_group_in_ncache(ncache, dom2, "subdomg");
b833e0
+    assert_int_equal(ret, ENOENT);
b833e0
+}
b833e0
+
b833e0
+static void test_sss_ncache_short_name_in_domain(void **state)
b833e0
+{
b833e0
+    int ret;
b833e0
+    struct test_state *ts;
b833e0
+    struct tevent_context *ev;
b833e0
+    struct sss_nc_ctx *ncache;
b833e0
+    struct sss_test_ctx *tc;
b833e0
+    struct sss_domain_info *dom;
b833e0
+    struct sss_domain_info *dom2;
b833e0
+    struct sss_domain_info *sub_dom;
b833e0
+
b833e0
+    struct sss_test_conf_param params[] = {
b833e0
+        { "filter_users", "shortuser, parentu@"TEST_DOM_NAME", "
b833e0
+          "subdomu@sub"TEST_DOM_NAME", upn@upn.dom" },
b833e0
+        { "filter_groups", "shortgroup, parentg@"TEST_DOM_NAME", "
b833e0
+          "subdomg@sub"TEST_DOM_NAME },
b833e0
+        { NULL, NULL },
b833e0
+    };
b833e0
+
b833e0
+    const char *nss_filter_users[] = { params[0].value, NULL};
b833e0
+    const char *nss_filter_groups[] = { params[1].value, NULL};
b833e0
+
b833e0
+    ts = talloc_get_type_abort(*state, struct test_state);
b833e0
+
b833e0
+    ev = tevent_context_init(ts);
b833e0
+    assert_non_null(ev);
b833e0
+
b833e0
+    dom = talloc_zero(ts, struct sss_domain_info);
b833e0
+    assert_non_null(dom);
b833e0
+    dom->name = discard_const_p(char, TEST_DOM_NAME);
b833e0
+    sss_domain_set_state(dom, DOM_ACTIVE);
b833e0
+
b833e0
+    ts->nctx = mock_nctx(ts);
b833e0
+    assert_non_null(ts->nctx);
b833e0
+
b833e0
+    tc = create_dom_test_ctx(ts, TESTS_PATH, TEST_CONF_DB,
b833e0
+                             TEST_DOM_NAME, TEST_ID_PROVIDER, params);
b833e0
+    assert_non_null(tc);
b833e0
+
b833e0
+    ret = confdb_add_param(tc->confdb, true, "config/domain/"TEST_DOM_NAME,
b833e0
+                           "filter_users", nss_filter_users);
b833e0
+    assert_int_equal(ret, EOK);
b833e0
+
b833e0
+    ret = confdb_add_param(tc->confdb, true, "config/domain"TEST_DOM_NAME,
b833e0
+                           "filter_groups", nss_filter_groups);
b833e0
+    assert_int_equal(ret, EOK);
b833e0
+
b833e0
+    ncache = ts->ctx;
b833e0
+    ts->rctx = mock_rctx(ts, ev, dom, ts->nctx);
b833e0
+    assert_non_null(ts->rctx);
b833e0
+    ts->rctx->cdb = tc->confdb;
b833e0
+
b833e0
+    ret = sss_names_init(ts, tc->confdb, TEST_DOM_NAME, &dom->names);
b833e0
+    assert_int_equal(ret, EOK);
b833e0
+
b833e0
+    ret = sss_ncache_reset_repopulate_permanent(ts->rctx, ncache);
b833e0
+    assert_int_equal(ret, EOK);
b833e0
+
b833e0
+    /* Add another domain */
b833e0
+    dom2 = talloc_zero(ts, struct sss_domain_info);
b833e0
+    assert_non_null(dom2);
b833e0
+    dom2->name = discard_const_p(char, TEST_DOM_NAME"2");
b833e0
+    sss_domain_set_state(dom2, DOM_ACTIVE);
b833e0
+    dom->next = dom2;
b833e0
+    dom2->names = dom->names;
b833e0
+
b833e0
+    expect_in_parent(ncache, dom);
b833e0
+    expect_no_entries_in_dom(ncache, dom2);
b833e0
+
b833e0
+    ret = sss_ncache_reset_repopulate_permanent(ts->rctx, ncache);
b833e0
+    assert_int_equal(ret, EOK);
b833e0
+
b833e0
+    expect_in_parent(ncache, dom);
b833e0
+    expect_no_entries_in_dom(ncache, dom2);
b833e0
+
b833e0
+    /* Add a sub domain */
b833e0
+    sub_dom = talloc_zero(ts, struct sss_domain_info);
b833e0
+    assert_non_null(sub_dom);
b833e0
+    sub_dom->name = discard_const_p(char, "sub"TEST_DOM_NAME);
b833e0
+    sss_domain_set_state(sub_dom, DOM_ACTIVE);
b833e0
+    sub_dom->parent = dom;
b833e0
+    dom->subdomains = sub_dom;
b833e0
+    sub_dom->names = dom->names;
b833e0
+
b833e0
+    ret = sss_ncache_reset_repopulate_permanent(ts->rctx, ncache);
b833e0
+    assert_int_equal(ret, EOK);
b833e0
+
b833e0
+    expect_in_parent(ncache, dom);
b833e0
+    expect_in_subdomain(ncache, sub_dom);
b833e0
+    expect_no_entries_in_dom(ncache, dom2);
b833e0
+}
b833e0
+
b833e0
 static void test_sss_ncache_reset(void **state)
b833e0
 {
b833e0
     errno_t ret;
b833e0
@@ -1083,6 +1335,8 @@ int main(void)
b833e0
                                         setup, teardown),
b833e0
         cmocka_unit_test_setup_teardown(test_sss_ncache_reset_prepopulate,
b833e0
                                         setup, teardown),
b833e0
+        cmocka_unit_test_setup_teardown(test_sss_ncache_short_name_in_domain,
b833e0
+                                        setup, teardown),
b833e0
         cmocka_unit_test_setup_teardown(test_sss_ncache_reset,
b833e0
                                         setup, teardown),
b833e0
         cmocka_unit_test_setup_teardown(test_sss_ncache_locate_uid_gid,
b833e0
-- 
b833e0
2.21.3
b833e0