summaryrefslogtreecommitdiffstats
path: root/src/tests/cmocka
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2014-10-09 15:13:55 +0200
committerJakub Hrozek <jhrozek@redhat.com>2014-10-14 18:29:01 +0200
commit229c292143dcd4120acb022682b5b7d0aca622dd (patch)
tree98b85b3f54003042c8c7fb603a8faf164eb65f06 /src/tests/cmocka
parentabee3216261e3378430e472f0c992470b33976f0 (diff)
downloadsssd-229c292143dcd4120acb022682b5b7d0aca622dd.tar.gz
sssd-229c292143dcd4120acb022682b5b7d0aca622dd.tar.xz
sssd-229c292143dcd4120acb022682b5b7d0aca622dd.zip
nss: add SSS_NSS_GETORIGBYNAME request
This patch adds a new request to the nss responder which follows the same flow as a SSS_NSSGETSIDBYNAME request but returns more data than just the SID. The data is returned as pairs of \0-terminated strings where the first string is the sysdb attribute name and the second the corresponding value. The main use case is on the FreeIPA server to make additional user and group data available to the extdom plugin which then send this data to SSSD running on FreeIPA clients. Reviewed-by: Pavel Březina <pbrezina@redhat.com> Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Diffstat (limited to 'src/tests/cmocka')
-rw-r--r--src/tests/cmocka/test_nss_srv.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/tests/cmocka/test_nss_srv.c b/src/tests/cmocka/test_nss_srv.c
index 644468dbb..65298cdf0 100644
--- a/src/tests/cmocka/test_nss_srv.c
+++ b/src/tests/cmocka/test_nss_srv.c
@@ -1741,6 +1741,92 @@ void test_nss_well_known_getsidbyname_special(void **state)
assert_int_equal(ret, EOK);
}
+static int test_nss_getorigbyname_check(uint32_t status, uint8_t *body,
+ size_t blen)
+{
+ const char *s;
+ enum sss_id_type id_type;
+ size_t rp = 2 * sizeof(uint32_t);
+
+ assert_int_equal(status, EOK);
+
+ SAFEALIGN_COPY_UINT32(&id_type, body+rp, &rp);
+ assert_int_equal(id_type, SSS_ID_TYPE_UID);
+
+ /* Sequence of null terminated strings */
+ s = (char *) body+rp;
+ assert_string_equal(s, SYSDB_SID_STR);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "S-1-2-3-4");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, ORIGINALAD_PREFIX SYSDB_NAME);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "orig_name");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, ORIGINALAD_PREFIX SYSDB_UIDNUM);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "1234");
+ rp += strlen(s) + 1;
+ assert_int_equal(rp, blen);
+
+ return EOK;
+}
+
+void test_nss_getorigbyname(void **state)
+{
+ errno_t ret;
+ struct sysdb_attrs *attrs;
+
+ attrs = sysdb_new_attrs(nss_test_ctx);
+ assert_non_null(attrs);
+
+ ret = sysdb_attrs_add_string(attrs, SYSDB_SID_STR, "S-1-2-3-4");
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_string(attrs, ORIGINALAD_PREFIX SYSDB_NAME,
+ "orig_name");
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_uint32(attrs, ORIGINALAD_PREFIX SYSDB_UIDNUM, 1234);
+ assert_int_equal(ret, EOK);
+
+ /* Prime the cache with a valid user */
+ ret = sysdb_add_user(nss_test_ctx->tctx->dom,
+ "testuserorig", 1234, 5689, "test user orig",
+ "/home/testuserorig", "/bin/sh", NULL,
+ attrs, 300, 0);
+ assert_int_equal(ret, EOK);
+
+ mock_input_user_or_group("testuserorig");
+ will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETORIGBYNAME);
+ will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
+
+ /* Query for that user, call a callback when command finishes */
+ set_cmd_cb(test_nss_getorigbyname_check);
+ ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETORIGBYNAME,
+ nss_test_ctx->nss_cmds);
+ assert_int_equal(ret, EOK);
+
+ /* Wait until the test finishes with EOK */
+ ret = test_ev_loop(nss_test_ctx->tctx);
+ assert_int_equal(ret, EOK);
+}
+
void nss_test_setup(void **state)
{
struct sss_test_conf_param params[] = {
@@ -1875,6 +1961,8 @@ int main(int argc, const char *argv[])
nss_test_setup, nss_test_teardown),
unit_test_setup_teardown(test_nss_well_known_getsidbyname_special,
nss_test_setup, nss_test_teardown),
+ unit_test_setup_teardown(test_nss_getorigbyname,
+ nss_test_setup, nss_test_teardown),
};
/* Set debug level to invalid value so we can deside if -d 0 was used. */