From 05b37ac18ed8da00ce560ed52244c6ad7abfa6a9 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek@redhat.com>
Date: Wed, 13 Mar 2019 17:41:29 +0100
Subject: [PATCH 34/35] TESTS: Add a unit test for UPNs stored by
sss_ncache_prepopulate
Reviewed-by: Sumit Bose <sbose@redhat.com>
(cherry picked from commit 48c1e3ac34ec5b2d7cf27d7393d049c880bca319)
---
src/tests/cmocka/test_negcache.c | 111 +++++++++++++++++++++++++------
1 file changed, 92 insertions(+), 19 deletions(-)
diff --git a/src/tests/cmocka/test_negcache.c b/src/tests/cmocka/test_negcache.c
index a0210928b..9bddddd8d 100644
--- a/src/tests/cmocka/test_negcache.c
+++ b/src/tests/cmocka/test_negcache.c
@@ -39,6 +39,7 @@
#include "lib/idmap/sss_idmap.h"
#include "util/util.h"
#include "util/util_sss_idmap.h"
+#include "db/sysdb_private.h"
#include "responder/common/responder.h"
#include "responder/common/negcache.h"
@@ -52,6 +53,7 @@
#define TEST_CONF_DB "test_nss_conf.ldb"
#define TEST_DOM_NAME "nss_test"
#define TEST_ID_PROVIDER "ldap"
+#define TEST_SUBDOM_NAME "test.subdomain"
/* register_cli_protocol_version is required in test since it links with
* responder_common.c module
@@ -582,6 +584,29 @@ static int check_gid_in_ncache(struct sss_nc_ctx *ctx,
return ret;
}
+static int add_confdb_params(struct sss_test_conf_param params[],
+ struct confdb_ctx *cdb, const char *section)
+{
+ const char *val[2];
+ int ret;
+
+ val[1] = NULL;
+
+ for (int i = 0; params[i].key; i++) {
+ val[0] = params[i].value;
+ ret = confdb_add_param(cdb, true, section, params[i].key, val);
+ assert_int_equal(ret, EOK);
+ }
+
+ return EOK;
+}
+
+static int add_nss_params(struct sss_test_conf_param nss_params[],
+ struct confdb_ctx *cdb)
+{
+ return add_confdb_params(nss_params, cdb, CONFDB_NSS_CONF_ENTRY);
+}
+
static void test_sss_ncache_prepopulate(void **state)
{
int ret;
@@ -589,9 +614,14 @@ static void test_sss_ncache_prepopulate(void **state)
struct tevent_context *ev;
struct sss_nc_ctx *ncache;
struct sss_test_ctx *tc;
- struct sss_domain_info *dom;
+ const char *const testdom[4] = { TEST_SUBDOM_NAME, "TEST.SUB", "test", "S-3" };
+ struct sss_domain_info *subdomain;
- struct sss_test_conf_param params[] = {
+ struct sss_test_conf_param nss_params[] = {
+ { "filter_users", "testuser_nss@UPN.REALM, testuser_nss_short" },
+ { NULL, NULL },
+ };
+ struct sss_test_conf_param dom_params[] = {
{ "filter_users", "testuser1, testuser2@"TEST_DOM_NAME", testuser3@somedomain" },
{ "filter_groups", "testgroup1, testgroup2@"TEST_DOM_NAME", testgroup3@somedomain" },
{ NULL, NULL },
@@ -602,22 +632,35 @@ static void test_sss_ncache_prepopulate(void **state)
ev = tevent_context_init(ts);
assert_non_null(ev);
- dom = talloc_zero(ts, struct sss_domain_info);
- assert_non_null(dom);
- dom->name = discard_const_p(char, TEST_DOM_NAME);
-
ts->nctx = mock_nctx(ts);
assert_non_null(ts->nctx);
tc = create_dom_test_ctx(ts, TESTS_PATH, TEST_CONF_DB,
- TEST_DOM_NAME, TEST_ID_PROVIDER, params);
+ TEST_DOM_NAME, TEST_ID_PROVIDER, dom_params);
assert_non_null(tc);
+ ret = add_nss_params(nss_params, tc->confdb);
+ assert_int_equal(ret, EOK);
+
+ subdomain = new_subdomain(tc, tc->dom,
+ testdom[0], testdom[1], testdom[2], testdom[3],
+ false, false, NULL, NULL, 0,
+ tc->confdb);
+ assert_non_null(subdomain);
+
+ ret = sysdb_subdomain_store(tc->sysdb,
+ testdom[0], testdom[1], testdom[2], testdom[3],
+ false, false, NULL, 0, NULL);
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_update_subdomains(tc->dom, tc->confdb);
+ assert_int_equal(ret, EOK);
+
ncache = ts->ctx;
- ts->rctx = mock_rctx(ts, ev, dom, ts->nctx);
+ ts->rctx = mock_rctx(ts, ev, tc->dom, ts->nctx);
assert_non_null(ts->rctx);
- ret = sss_names_init(ts, tc->confdb, TEST_DOM_NAME, &dom->names);
+ ret = sss_names_init(ts, tc->confdb, TEST_DOM_NAME, &tc->dom->names);
assert_int_equal(ret, EOK);
ret = sss_ncache_prepopulate(ncache, tc->confdb, ts->rctx);
@@ -625,34 +668,37 @@ static void test_sss_ncache_prepopulate(void **state)
sleep(SHORTSPAN);
- ret = check_user_in_ncache(ncache, dom, "testuser1");
+ ret = check_user_in_ncache(ncache, tc->dom, "testuser1");
assert_int_equal(ret, EEXIST);
- ret = check_group_in_ncache(ncache, dom, "testgroup1");
+ ret = check_group_in_ncache(ncache, tc->dom, "testgroup1");
assert_int_equal(ret, EEXIST);
- ret = check_user_in_ncache(ncache, dom, "testuser2");
+ ret = check_user_in_ncache(ncache, tc->dom, "testuser2");
assert_int_equal(ret, EEXIST);
- ret = check_group_in_ncache(ncache, dom, "testgroup2");
+ ret = check_group_in_ncache(ncache, tc->dom, "testgroup2");
assert_int_equal(ret, EEXIST);
- ret = check_user_in_ncache(ncache, dom, "testuser3");
+ ret = check_user_in_ncache(ncache, tc->dom, "testuser3");
assert_int_equal(ret, ENOENT);
- ret = check_group_in_ncache(ncache, dom, "testgroup3");
+ ret = check_group_in_ncache(ncache, tc->dom, "testgroup3");
assert_int_equal(ret, ENOENT);
- ret = check_user_in_ncache(ncache, dom, "testuser3@somedomain");
+ ret = check_user_in_ncache(ncache, tc->dom, "testuser3@somedomain");
assert_int_equal(ret, ENOENT);
- ret = check_group_in_ncache(ncache, dom, "testgroup3@somedomain");
+ ret = sss_ncache_check_upn(ncache, tc->dom, "testuser3@somedomain");
+ assert_int_equal(ret, EEXIST);
+
+ ret = check_group_in_ncache(ncache, tc->dom, "testgroup3@somedomain");
assert_int_equal(ret, ENOENT);
- ret = check_user_in_ncache(ncache, dom, "root");
+ ret = check_user_in_ncache(ncache, tc->dom, "root");
assert_int_equal(ret, EEXIST);
- ret = check_group_in_ncache(ncache, dom, "root");
+ ret = check_group_in_ncache(ncache, tc->dom, "root");
assert_int_equal(ret, EEXIST);
ret = check_uid_in_ncache(ncache, 0);
@@ -660,6 +706,33 @@ static void test_sss_ncache_prepopulate(void **state)
ret = check_gid_in_ncache(ncache, 0);
assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom, "testuser_nss@UPN.REALM");
+ assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom->subdomains, "testuser_nss@UPN.REALM");
+ assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom, "testuser_nss_short@" TEST_DOM_NAME);
+ assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom->subdomains, "testuser_nss_short@" TEST_SUBDOM_NAME);
+ assert_int_equal(ret, EEXIST);
+
+ ret = check_user_in_ncache(ncache, tc->dom, "testuser_nss_short");
+ assert_int_equal(ret, EEXIST);
+
+ ret = check_user_in_ncache(ncache, tc->dom->subdomains, "testuser_nss_short");
+ assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom, "testuser1@" TEST_DOM_NAME);
+ assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom, "testuser2@" TEST_DOM_NAME);
+ assert_int_equal(ret, EEXIST);
+
+ ret = sss_ncache_check_upn(ncache, tc->dom, "testuser3@somedomain");
+ assert_int_equal(ret, EEXIST);
}
static void test_sss_ncache_default_domain_suffix(void **state)
--
2.20.1