test_negcache.c revision c34f3f7d2a4d9f50109d13cd7c9f2cbb9a11b3d0
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/*
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen SSSD
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen NSS Responder
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen Authors:
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen Pallavi Jha <pallavikumarijha@gmail.com>
2d8b23805db6f06b8b38174fb6e135386694f429Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen Copyright (C) 2013 Red Hat
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen This program is free software; you can redistribute it and/or modify
51dbc2d559815da774f8ee5faf0e28df3c8d40c0Timo Sirainen it under the terms of the GNU General Public License as published by
51dbc2d559815da774f8ee5faf0e28df3c8d40c0Timo Sirainen the Free Software Foundation; either version 3 of the License, or
51dbc2d559815da774f8ee5faf0e28df3c8d40c0Timo Sirainen (at your option) any later version.
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen This program is distributed in the hope that it will be useful,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen GNU General Public License for more details.
6b0e35b29f65a95fe8ae22ed8b5f0f36720c9f45Timo Sirainen You should have received a copy of the GNU General Public License
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen*/
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include <stdarg.h>
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen#include <stdlib.h>
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include <stddef.h>
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen#include <setjmp.h>
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include <errno.h>
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen#include <unistd.h>
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen#include <sys/types.h>
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include <inttypes.h>
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include <cmocka.h>
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#include "tests/cmocka/common_mock.h"
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#include "tests/cmocka/common_mock_resp.h"
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#include "responder/nss/nsssrv.h"
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#include "responder/nss/nsssrv_private.h"
9b61a6db87c026656f8d2ae214e4486b98a069c0Timo Sirainen#include "sss_client/idmap/sss_nss_idmap.h"
9b61a6db87c026656f8d2ae214e4486b98a069c0Timo Sirainen#include "util/util_sss_idmap.h"
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include "lib/idmap/sss_idmap.h"
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen#include "util/util.h"
9346506a9f4dd9a6285fe8595588e73161849235Timo Sirainen#include "util/util_sss_idmap.h"
eca38954bcf972618f6b85932a3690acbd2b673aTimo Sirainen#include "responder/common/responder.h"
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen#include "responder/common/negcache.h"
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#define PORT 21
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#define SID "S-1-2-3-4-5"
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#define CERT "MIIECTCCAvGgAwIBAgIBCTANBgkqhkiG9w0BAQsFADA0MRIwEAYDVQQKDAlJUEEuREVWRUwxHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xNTA0MjgxMDIxMTFaFw0xNzA0MjgxMDIxMTFaMDIxEjAQBgNVBAoMCUlQQS5ERVZFTDEcMBoGA1UEAwwTaXBhLWRldmVsLmlwYS5kZXZlbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALIykqtHuAwTVEofHikG/9BQy/dfeZFlsTkBg2qtnnc78w3XufbcnkpJp9Bmcsy/d9beqf5nlsxJ8TcjLsRQ9Ou6YtQjTfM3OILuOz8s0ICbF6qb66bd9hX/BrLO/9+KnpWFSR+E/YEmzgYyDTbKfBWBaGuPPrOi/K6vwkRYFZVA/FYZkYDtQhFmBO884HYzS4P6frRH3PvtRqWNCmaHpe97dGKsvnM2ybT+IMSB8/54GajQr3+BciRh2XaT4wvSTxkXM1fUgrDxqAP2AZmpuIyDyboZh+rWOwbrTPfx5SipELZG3uHhP8HMcr4qQ8b20LWgxCRuT73sIooHET350xUCAwEAAaOCASYwggEiMB8GA1UdIwQYMBaAFPKdQk4PxEglWC8czg+hPyLIVciRMDsGCCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL2lwYS1jYS5pcGEuZGV2ZWwvY2Evb2NzcDAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMHQGA1UdHwRtMGswaaAxoC+GLWh0dHA6Ly9pcGEtY2EuaXBhLmRldmVsL2lwYS9jcmwvTWFzdGVyQ1JMLmJpbqI0pDIwMDEOMAwGA1UECgwFaXBhY2ExHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAdBgNVHQ4EFgQULSs/y/Wy/zIsqMIc3b2MgB7dMYIwDQYJKoZIhvcNAQELBQADggEBAJpHLlCnTR1TD8lxQgzl2n1JZOeryN/fAsGH0Vve2m8r5PC+ugnfAoULiuabBn1pOGxy/0x7Kg0/Iy8WRv8Fk7DqJCjXEqFXuFkZJfNDCtP9DzeNuMoV50iKoMfHS38BPFjXN+X/fSsBrA2fUWrlQCTmXlUN97gvQqxt5Slrxgukvxm9OSfu/sWz22LUvtJHupYwWv1iALgnXS86lAuVNYVALLxn34r58XsZlj5CSBMjBJWpaxEzgUdag3L2IPqOQXuPd0d8x11G9E/9gQquOSe2aiZjsdO/VYOCmzZsM2QPUMBVlBPDhfTVcWXQwN385uycW/ARtSzzSME2jKKWSIQ="
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#define PROTO "TCP"
1f166c4a7498b4b6bdf6f072edeaebb388cc53ebSergey Kitov#define SHORTSPAN 1
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen#define NAME "foo_name"
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen#define TESTS_PATH "tp_" BASE_FILE_STEM
9b61a6db87c026656f8d2ae214e4486b98a069c0Timo Sirainen#define TEST_CONF_DB "test_nss_conf.ldb"
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen#define TEST_DOM_NAME "nss_test"
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen#define TEST_ID_PROVIDER "ldap"
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen/* register_cli_protocol_version is required in test since it links with
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen * responder_common.c module
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen */
fde14422caabc3c4ac4a6c5e3e5cf176cedd90a6Timo Sirainenstruct cli_protocol_version *register_cli_protocol_version(void)
fde14422caabc3c4ac4a6c5e3e5cf176cedd90a6Timo Sirainen{
65e14cef911d5d3fac8993c8a76911a587f05cd7Timo Sirainen static struct cli_protocol_version responder_test_cli_protocol_version[] = {
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen {0, NULL, NULL}
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen };
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen return responder_test_cli_protocol_version;
e5acc283bf030b0b5c79ca4e52d315c516a299faPascal Volk}
f0339f522dc9c8e2e8a29ef9a3f937c431c6bd1bTimo Sirainen
65e14cef911d5d3fac8993c8a76911a587f05cd7Timo Sirainen/* Mock NSS structure */
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainenstatic struct nss_ctx *
92d1458b00f4f236c4cec96a696253d3bbf8b05aTimo Sirainenmock_nctx(TALLOC_CTX *mem_ctx)
92d1458b00f4f236c4cec96a696253d3bbf8b05aTimo Sirainen{
efe78d3ba24fc866af1c79b9223dc0809ba26cadStephan Bosch struct nss_ctx *nctx;
9346506a9f4dd9a6285fe8595588e73161849235Timo Sirainen enum idmap_error_code err;
9346506a9f4dd9a6285fe8595588e73161849235Timo Sirainen
9346506a9f4dd9a6285fe8595588e73161849235Timo Sirainen nctx = talloc_zero(mem_ctx, struct nss_ctx);
9346506a9f4dd9a6285fe8595588e73161849235Timo Sirainen if (!nctx) {
20e04227229970d148801c507946666e2a9bd838Timo Sirainen return NULL;
9b61a6db87c026656f8d2ae214e4486b98a069c0Timo Sirainen }
10399559650f552a23949772be79eb6a80198c5aTimo Sirainen
eca38954bcf972618f6b85932a3690acbd2b673aTimo Sirainen nctx->pwfield = discard_const("*");
10399559650f552a23949772be79eb6a80198c5aTimo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen err = sss_idmap_init(sss_idmap_talloc, nctx, sss_idmap_talloc_free,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen &nctx->idmap_ctx);
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen if (err != IDMAP_SUCCESS) {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen DEBUG(SSSDBG_FATAL_FAILURE, ("sss_idmap_init failed.\n"));
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen talloc_free(nctx);
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen return NULL;
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen }
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen return nctx;
3764f786a6d13b23c49c9990b816be1e23a1adccAki Tuomi}
3764f786a6d13b23c49c9990b816be1e23a1adccAki Tuomi
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainenstruct test_state {
3764f786a6d13b23c49c9990b816be1e23a1adccAki Tuomi struct sss_nc_ctx *ctx;
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen struct nss_ctx *nctx;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen struct resp_ctx *rctx;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen};
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
43d32cbe60fdaef2699d99f1ca259053e9350411Timo Sirainenstatic int setup(void **state)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen{
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen int ret;
e392fcb39a06609af20a9e79017683f194de3ddeTimo Sirainen struct test_state *ts;
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen ts = talloc(NULL, struct test_state);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen assert_non_null(ts);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen ret = sss_ncache_init(ts, SHORTSPAN, &ts->ctx);
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen assert_int_equal(ret, EOK);
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen assert_non_null(ts->ctx);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi *state = (void *)ts;
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen return 0;
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen}
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen
d2cbbecf76de3f4eb945895fab5760ed0a28281cMartti Rannanjärvistatic int teardown(void **state)
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen{
d2cbbecf76de3f4eb945895fab5760ed0a28281cMartti Rannanjärvi struct test_state *ts = talloc_get_type_abort(*state, struct test_state);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi talloc_free(ts);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi return 0;
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen}
d2cbbecf76de3f4eb945895fab5760ed0a28281cMartti Rannanjärvi
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainenstatic void test_sss_ncache_init(void **state)
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi{
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi int ret;
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi TALLOC_CTX *memctx;
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi struct sss_nc_ctx *ctx;
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi memctx = talloc_new(NULL);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi assert_non_null(memctx);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi ret = sss_ncache_init(memctx, SHORTSPAN, &ctx );
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi assert_int_equal(ret, EOK);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi assert_non_null(ctx);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen talloc_free(memctx);
1bb7fb04a0583f0d5160706f24b2df08d31ada46Timo Sirainen}
1bb7fb04a0583f0d5160706f24b2df08d31ada46Timo Sirainen
1bb7fb04a0583f0d5160706f24b2df08d31ada46Timo Sirainen/* @test_sss_ncache_uid : test following functions
1bb7fb04a0583f0d5160706f24b2df08d31ada46Timo Sirainen * sss_ncache_set_uid
1bb7fb04a0583f0d5160706f24b2df08d31ada46Timo Sirainen * sss_ncache_check_uid
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen */
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainenstatic void test_sss_ncache_uid(void **state)
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen{
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen uid_t uid;
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen int ret;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen bool permanent;
d23c747de9d33966483fbdd41f08ad7766da7c5cTimo Sirainen struct test_state *ts;
a525be16a69367f43765d20c873b5f168c5b7ea3Martti Rannanjärvi
a525be16a69367f43765d20c873b5f168c5b7ea3Martti Rannanjärvi uid = getuid();
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen ts = talloc_get_type_abort(*state, struct test_state);
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen
f8ead0942a9b7c8fcf91414ed1b534d5807ca555Timo Sirainen /* test when uid not present in database */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen ret = sss_ncache_check_uid(ts->ctx, NULL, uid);
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen assert_int_equal(ret, ENOENT);
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen /* test when uid is present in database */
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen permanent = true;
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainen
51dbc2d559815da774f8ee5faf0e28df3c8d40c0Timo Sirainen ret = sss_ncache_reset_permanent(ts->ctx);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen assert_int_equal(ret, EOK);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi ret = sss_ncache_set_uid(ts->ctx, permanent, NULL, uid);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi assert_int_equal(ret, EOK);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi ret = sss_ncache_check_uid(ts->ctx, NULL, uid);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi assert_int_equal(ret, EEXIST);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi ret = sss_ncache_set_uid(ts->ctx, permanent, NULL, uid);
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi assert_int_equal(ret, EOK);
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi
5729882717902b5f3f5d62f71ddf2894b67fc7a6Martti Rannanjärvi ret = sss_ncache_check_uid(ts->ctx, NULL, uid);
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi assert_int_equal(ret, EEXIST);
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi sleep(SHORTSPAN + 1);
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi ret = sss_ncache_check_uid(ts->ctx, NULL, uid);
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi assert_int_equal(ret, EEXIST);
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi permanent = false;
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi
995c0a88e9a32e0ec1460567ce5f2ce6e7ba1f13Martti Rannanjärvi ret = sss_ncache_set_uid(ts->ctx, permanent, NULL, uid);
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen assert_int_equal(ret, EOK);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen ret = sss_ncache_check_uid(ts->ctx, NULL, uid);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen assert_int_equal(ret, EEXIST);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen sleep(SHORTSPAN + 1);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen ret = sss_ncache_check_uid(ts->ctx, NULL, uid);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen assert_int_equal(ret, ENOENT);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi ret = sss_ncache_set_uid(ts->ctx, permanent, NULL, uid);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen assert_int_equal(ret, EOK);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen}
661998e2ccd772ad92a9d4a75cb712692a8c94b3Timo Sirainen
661998e2ccd772ad92a9d4a75cb712692a8c94b3Timo Sirainen/* @test_sss_ncache_gid : test following functions
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen * sss_ncache_set_gid
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen * sss_ncache_check_gid
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen */
661998e2ccd772ad92a9d4a75cb712692a8c94b3Timo Sirainenstatic void test_sss_ncache_gid(void **state)
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen{
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen gid_t gid;
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen int ret;
661998e2ccd772ad92a9d4a75cb712692a8c94b3Timo Sirainen bool permanent;
661998e2ccd772ad92a9d4a75cb712692a8c94b3Timo Sirainen struct test_state *ts;
661998e2ccd772ad92a9d4a75cb712692a8c94b3Timo Sirainen
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen gid = getgid();
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen ts = talloc_get_type_abort(*state, struct test_state);
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* test when gid is not present in database */
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen ret = sss_ncache_check_gid(ts->ctx, NULL, gid);
7b3b617e946d5b32078baa821f5fc05f775e1dfeMartti Rannanjärvi assert_int_equal(ret, ENOENT);
7b3b617e946d5b32078baa821f5fc05f775e1dfeMartti Rannanjärvi
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* test when gid is present in database */
3ccfcf0856958cb9208a9fc51c3bdf13c58ad52aTimo Sirainen permanent = true;
51dbc2d559815da774f8ee5faf0e28df3c8d40c0Timo Sirainen ret = sss_ncache_set_gid(ts->ctx, permanent, NULL, gid);
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen assert_int_equal(ret, EOK);
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen
39dea5f2e78f6bfc3adc0655176f596ee211938fTimo Sirainen ret = sss_ncache_check_gid(ts->ctx, NULL, gid);
2b4e421b76d997e2ad18c74200d9d8521bed165cMartti Rannanjärvi assert_int_equal(ret, EEXIST);
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen permanent = false;
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen ret = sss_ncache_set_gid(ts->ctx, permanent, NULL, gid);
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen assert_int_equal(ret, EOK);
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen ret = sss_ncache_check_gid(ts->ctx, NULL, gid);
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen assert_int_equal(ret, EEXIST);
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen}
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen
bd7b1a9000b12349e2a99bb43b3ce8b96a18e92bTimo Sirainen/* @test_sss_ncache_sid : test following functions
8f7e81b327b8b5bf34262f6755df6d4481760d23Timo Sirainen * sss_ncache_set_sid
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen * sss_ncache_check_sid
02d91785bcf42ced46080db91c29bb534fbe2d1cTimo Sirainen */
62300a38f91227b9de043a9a8ec1d4f1978e1138Timo Sirainenstatic void test_sss_ncache_sid(void **state)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen{
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen int ret;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen bool permanent;
048e40f9364fa68482bc276dd4a5d595a3d742e9Timo Sirainen const char *sid = NULL;
048e40f9364fa68482bc276dd4a5d595a3d742e9Timo Sirainen struct test_state *ts;
048e40f9364fa68482bc276dd4a5d595a3d742e9Timo Sirainen
048e40f9364fa68482bc276dd4a5d595a3d742e9Timo Sirainen sid = SID;
c4478af52de63804efef2055580adf1dfc8679c6Timo Sirainen ts = talloc_get_type_abort(*state, struct test_state);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen /*test when sid in not present in database */
c4478af52de63804efef2055580adf1dfc8679c6Timo Sirainen ret = sss_ncache_check_sid(ts->ctx, sid);
54a8bb6e9b852d9a96a8cdda1bb55a85ce0e10daTimo Sirainen assert_int_equal(ret, ENOENT);
048e40f9364fa68482bc276dd4a5d595a3d742e9Timo Sirainen
048e40f9364fa68482bc276dd4a5d595a3d742e9Timo Sirainen /* test when sid is present in database */
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen permanent = true;
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi ret = sss_ncache_set_sid(ts->ctx, permanent, sid);
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi assert_int_equal(ret, EOK);
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi ret = sss_ncache_check_sid(ts->ctx, sid);
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi assert_int_equal(ret, EEXIST);
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi permanent = false;
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi ret = sss_ncache_set_sid(ts->ctx, permanent, sid);
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi assert_int_equal(ret, EOK);
5997118fa7aee2535edac28092261ca085a958aeMartti Rannanjärvi
82995cc154a929f37aa486a72a6485e9f8d34a30Timo Sirainen ret = sss_ncache_check_sid(ts->ctx, sid);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen assert_int_equal(ret, EEXIST);
}
/* @test_sss_ncache_cert : test following functions
* sss_ncache_set_cert
* sss_ncache_check_cert_
*/
static void test_sss_ncache_cert(void **state)
{
int ret;
bool permanent;
const char *cert = NULL;
struct test_state *ts;
cert = CERT;
ts = talloc_get_type_abort(*state, struct test_state);
/*test when cert in not present in database */
ret = sss_ncache_check_cert(ts->ctx, cert);
assert_int_equal(ret, ENOENT);
/* test when cert is present in database */
permanent = true;
ret = sss_ncache_set_cert(ts->ctx, permanent, cert);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_cert(ts->ctx, cert);
assert_int_equal(ret, EEXIST);
permanent = false;
ret = sss_ncache_set_cert(ts->ctx, permanent, cert);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_cert(ts->ctx, cert);
assert_int_equal(ret, EEXIST);
}
/* @test_sss_ncache_user : test following functions
* sss_ncache_check_user
* sss_ncache_set_user
*/
static void test_sss_ncache_user(void **state)
{
int ret;
bool permanent;
const char *name = NAME;
struct test_state *ts;
struct sss_domain_info *dom;
ts = talloc_get_type_abort(*state, struct test_state);
dom = talloc(ts, struct sss_domain_info);
dom->name = discard_const_p(char, TEST_DOM_NAME);
/* test when domain name is not present in database */
dom->case_sensitive = false;
ret = sss_ncache_check_user(ts->ctx, dom, name);
assert_int_equal(ret, ENOENT);
dom->case_sensitive = true;
ret = sss_ncache_check_user(ts->ctx, dom, name);
assert_int_equal(ret, ENOENT);
/* test when domain name is present in database */
permanent = true;
ret = sss_ncache_set_user(ts->ctx, permanent, dom, name);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_user(ts->ctx, dom, name);
assert_int_equal(ret, EEXIST);
permanent = false;
ret = sss_ncache_set_user(ts->ctx, permanent, dom, name);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_user(ts->ctx, dom, name);
assert_int_equal(ret, EEXIST);
}
/* @test_sss_ncache_group : test following functions
* sss_ncache_check_group
* sss_ncache_set_group
*/
static void test_sss_ncache_group(void **state)
{
int ret;
bool permanent;
const char *name = NAME;
struct test_state *ts;
struct sss_domain_info *dom;
ts = talloc_get_type_abort(*state, struct test_state);
dom = talloc(ts, struct sss_domain_info);
dom->name = discard_const_p(char, TEST_DOM_NAME);
/* test when domain name is not present in database */
dom->case_sensitive = false;
ret = sss_ncache_check_group(ts->ctx, dom, name);
assert_int_equal(ret, ENOENT);
dom->case_sensitive = true;
ret = sss_ncache_check_group(ts->ctx, dom, name);
assert_int_equal(ret, ENOENT);
/* test when domain name is present in database */
permanent = true;
ret = sss_ncache_set_group(ts->ctx, permanent, dom, name);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_group(ts->ctx, dom, name);
assert_int_equal(ret, EEXIST);
permanent = false;
ret = sss_ncache_set_group(ts->ctx, permanent, dom, name);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_group(ts->ctx, dom, name);
assert_int_equal(ret, EEXIST);
}
/* @test_sss_ncache_netgr : test following functions
* sss_ncache_check_netgr
* sss_ncache_set_netgr
*/
static void test_sss_ncache_netgr(void **state)
{
int ret;
bool permanent;
const char *name = NAME;
struct test_state *ts;
struct sss_domain_info *dom;
ts = talloc_get_type_abort(*state, struct test_state);
dom = talloc(ts, struct sss_domain_info);
dom->name = discard_const_p(char, TEST_DOM_NAME);
/* test when domain name is not present in database */
dom->case_sensitive = false;
ret = sss_ncache_check_netgr(ts->ctx, dom, name);
assert_int_equal(ret, ENOENT);
dom->case_sensitive = true;
ret = sss_ncache_check_netgr(ts->ctx, dom, name);
assert_int_equal(ret, ENOENT);
/* test when domain name is present in database */
permanent = true;
ret = sss_ncache_set_netgr(ts->ctx, permanent, dom, name);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_netgr(ts->ctx, dom, name);
assert_int_equal(ret, EEXIST);
permanent = false;
ret = sss_ncache_set_netgr(ts->ctx, permanent, dom, name);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_netgr(ts->ctx, dom, name);
assert_int_equal(ret, EEXIST);
}
/* @test_sss_ncache_service_name : test following functions
* sss_ncache_check_service
* sss_ncache_set_service_name
*/
static void test_sss_ncache_service_name(void **state)
{
int ret;
bool permanent;
const char *name = NAME;
struct test_state *ts;
struct sss_domain_info *dom;
ts = talloc_get_type_abort(*state, struct test_state);
dom = talloc(ts, struct sss_domain_info);
dom->name = discard_const_p(char, TEST_DOM_NAME);
/* test when domain name and protocol are not present in database */
dom->case_sensitive = false;
ret = sss_ncache_check_service(ts->ctx, dom, name, PROTO);
assert_int_equal(ret, ENOENT);
dom->case_sensitive = true;
ret = sss_ncache_check_service(ts->ctx, dom, name, PROTO);
assert_int_equal(ret, ENOENT);
/* test when domain name and protocol are present in database */
permanent = true;
ret = sss_ncache_set_service_name(ts->ctx, permanent, dom, name, PROTO);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_service(ts->ctx, dom, name, PROTO);
assert_int_equal(ret, EEXIST);
permanent = false;
ret = sss_ncache_set_service_name(ts->ctx, permanent, dom, name, PROTO);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_service(ts->ctx, dom, name, PROTO);
assert_int_equal(ret, EEXIST);
}
/* @test_sss_ncache_service_port : test following functions
* sss_ncache_check_service_port
* sss_ncache_set_service_port
*/
static void test_sss_ncache_service_port(void **state)
{
int ret;
bool permanent;
struct test_state *ts;
struct sss_domain_info *dom;
ts = talloc_get_type_abort(*state, struct test_state);
dom = talloc(ts, struct sss_domain_info);
dom->name = discard_const_p(char, TEST_DOM_NAME);
/* test when domain name, port and protocol are not present in database */
dom->case_sensitive = false;
ret = sss_ncache_check_service_port(ts->ctx, dom, (uint16_t)PORT,
PROTO);
assert_int_equal(ret, ENOENT);
dom->case_sensitive = true;
ret = sss_ncache_check_service_port(ts->ctx, dom, (uint16_t)PORT,
PROTO);
assert_int_equal(ret, ENOENT);
/* test when domain name, port and protocol are present in database */
permanent = true;
ret = sss_ncache_set_service_port(ts->ctx, permanent, dom, (uint16_t)PORT,
PROTO);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_service_port(ts->ctx, dom, (uint16_t)PORT,
PROTO);
assert_int_equal(ret, EEXIST);
permanent = false;
ret = sss_ncache_set_service_port(ts->ctx, permanent, dom, (uint16_t)PORT,
PROTO);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_service_port(ts->ctx, dom, (uint16_t)PORT,
PROTO);
assert_int_equal(ret, EEXIST);
}
static void test_sss_ncache_reset_permanent(void **state)
{
int ret;
struct test_state *ts;
const bool permanent = true;
ts = talloc_get_type_abort(*state, struct test_state);
ret = sss_ncache_set_uid(ts->ctx, permanent, NULL, 0);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_uid(ts->ctx, NULL, 0);
assert_int_equal(ret, EEXIST);
ret = sss_ncache_reset_permanent(ts->ctx);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_uid(ts->ctx, NULL, 0);
assert_int_equal(ret, ENOENT);
}
static void test_sss_ncache_prepopulate(void **state)
{
int ret;
struct test_state *ts;
struct tevent_context *ev;
struct sss_nc_ctx *ncache;
struct sss_test_ctx *tc;
struct sss_domain_info *dom;
struct sss_test_conf_param params[] = {
{ "filter_users", "testuser1, testuser2@"TEST_DOM_NAME", testuser3@somedomain" },
{ "filter_groups", "testgroup1, testgroup2@"TEST_DOM_NAME", testgroup3@somedomain" },
{ NULL, NULL },
};
ts = talloc_get_type_abort(*state, struct test_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);
assert_non_null(tc);
ncache = ts->ctx;
ts->rctx = mock_rctx(ts, ev, dom, ts->nctx);
assert_non_null(ts->rctx);
ret = sss_names_init(ts, tc->confdb, TEST_DOM_NAME, &dom->names);
assert_int_equal(ret, EOK);
ret = sss_ncache_prepopulate(ncache, tc->confdb, ts->rctx);
assert_int_equal(ret, EOK);
sleep(SHORTSPAN);
ret = sss_ncache_check_user(ncache, dom, "testuser1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom, "testgroup1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_user(ncache, dom, "testuser2");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom, "testgroup2");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_user(ncache, dom, "testuser3");
assert_int_equal(ret, ENOENT);
ret = sss_ncache_check_group(ncache, dom, "testgroup3");
assert_int_equal(ret, ENOENT);
ret = sss_ncache_check_user(ncache, dom, "testuser3@somedomain");
assert_int_equal(ret, ENOENT);
ret = sss_ncache_check_group(ncache, dom, "testgroup3@somedomain");
assert_int_equal(ret, ENOENT);
}
static void test_sss_ncache_default_domain_suffix(void **state)
{
int ret;
struct test_state *ts;
struct tevent_context *ev;
struct sss_nc_ctx *ncache;
struct sss_test_ctx *tc;
struct sss_domain_info *dom;
struct sss_test_conf_param params[] = {
{ "filter_users", "testuser1, testuser2@"TEST_DOM_NAME", testuser3@somedomain" },
{ "filter_groups", "testgroup1, testgroup2@"TEST_DOM_NAME", testgroup3@somedomain" },
{ NULL, NULL },
};
ts = talloc_get_type_abort(*state, struct test_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);
assert_non_null(tc);
ncache = ts->ctx;
ts->rctx = mock_rctx(ts, ev, dom, ts->nctx);
assert_non_null(ts->rctx);
ts->rctx->default_domain = discard_const(TEST_DOM_NAME);
ret = sss_names_init(ts, tc->confdb, TEST_DOM_NAME, &dom->names);
assert_int_equal(ret, EOK);
ret = sss_ncache_prepopulate(ncache, tc->confdb, ts->rctx);
assert_int_equal(ret, EOK);
ret = sss_ncache_check_user(ncache, dom, "testuser1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom, "testgroup1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_user(ncache, dom, "testuser2");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom, "testgroup2");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_user(ncache, dom, "testuser3");
assert_int_equal(ret, ENOENT);
ret = sss_ncache_check_group(ncache, dom, "testgroup3");
assert_int_equal(ret, ENOENT);
}
static void test_sss_ncache_reset_prepopulate(void **state)
{
int ret;
struct test_state *ts;
struct tevent_context *ev;
struct sss_nc_ctx *ncache;
struct sss_test_ctx *tc;
struct sss_domain_info *dom;
struct sss_domain_info *dom2;
struct sss_test_conf_param params[] = {
{ "filter_users", "testuser1@"TEST_DOM_NAME", testuser2@"TEST_DOM_NAME"2" },
{ "filter_groups", "testgroup1@"TEST_DOM_NAME", testgroup2@"TEST_DOM_NAME"2" },
{ NULL, NULL },
};
const char *nss_filter_users[] = { params[0].value, NULL};
const char *nss_filter_groups[] = { params[1].value, NULL};
ts = talloc_get_type_abort(*state, struct test_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);
assert_non_null(tc);
ret = confdb_add_param(tc->confdb, true, "config/nss",
"filter_users", nss_filter_users);
assert_int_equal(ret, EOK);
ret = confdb_add_param(tc->confdb, true, "config/nss",
"filter_groups", nss_filter_groups);
assert_int_equal(ret, EOK);
ncache = ts->ctx;
ts->rctx = mock_rctx(ts, ev, dom, ts->nctx);
assert_non_null(ts->rctx);
ts->rctx->default_domain = discard_const(TEST_DOM_NAME);
ts->rctx->cdb = tc->confdb;
ret = sss_names_init(ts, tc->confdb, TEST_DOM_NAME, &dom->names);
assert_int_equal(ret, EOK);
ret = sss_ncache_reset_repopulate_permanent(ts->rctx, ncache);
assert_int_equal(ret, EOK);
/* Add another domain */
dom2 = talloc_zero(ts, struct sss_domain_info);
assert_non_null(dom2);
dom2->name = discard_const_p(char, TEST_DOM_NAME"2");
dom->next = dom2;
dom2->names = dom->names;
/* First domain should not be known, the second not */
ret = sss_ncache_check_user(ncache, dom, "testuser1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom, "testgroup1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_user(ncache, dom2, "testuser2");
assert_int_equal(ret, ENOENT);
ret = sss_ncache_check_group(ncache, dom2, "testgroup2");
assert_int_equal(ret, ENOENT);
ret = sss_ncache_reset_repopulate_permanent(ts->rctx, ncache);
assert_int_equal(ret, EOK);
/* First domain should not be known, the second not */
ret = sss_ncache_check_user(ncache, dom, "testuser1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom, "testgroup1");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_user(ncache, dom2, "testuser2");
assert_int_equal(ret, EEXIST);
ret = sss_ncache_check_group(ncache, dom2, "testgroup2");
assert_int_equal(ret, EEXIST);
}
int main(void)
{
int rv;
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_sss_ncache_init),
cmocka_unit_test_setup_teardown(test_sss_ncache_uid, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_gid, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_sid, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_cert, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_user, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_group, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_netgr, setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_service_name, setup,
teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_service_port,
setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_reset_permanent, setup,
teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_prepopulate,
setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_default_domain_suffix,
setup, teardown),
cmocka_unit_test_setup_teardown(test_sss_ncache_reset_prepopulate,
setup, teardown),
};
tests_set_cwd();
test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_DOM_NAME);
test_dom_suite_setup(TESTS_PATH);
rv = cmocka_run_group_tests(tests, NULL, NULL);
if (rv == 0) {
test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_DOM_NAME);
}
return rv;
}