test_nss_srv.c revision a3c8390d19593b1e5277d95bfb4ab206d4785150
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/*
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek Authors:
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek Jakub Hrozek <jhrozek@redhat.com>
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek Copyright (C) 2013 Red Hat
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek SSSD tests: Common utilities for tests that exercise domains
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek This program is free software; you can redistribute it and/or modify
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek it under the terms of the GNU General Public License as published by
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek the Free Software Foundation; either version 3 of the License, or
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek (at your option) any later version.
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek This program is distributed in the hope that it will be useful,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek but WITHOUT ANY WARRANTY; without even the implied warranty of
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek GNU General Public License for more details.
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek You should have received a copy of the GNU General Public License
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek along with this program. If not, see <http://www.gnu.org/licenses/>.
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek*/
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include <talloc.h>
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include <tevent.h>
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include <errno.h>
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include <popt.h>
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include "tests/cmocka/common_mock.h"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include "tests/cmocka/common_mock_resp.h"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include "responder/common/negcache.h"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include "responder/nss/nsssrv.h"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#include "responder/nss/nsssrv_private.h"
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose#include "sss_client/idmap/sss_nss_idmap.h"
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose#include "util/util_sss_idmap.h"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#define TESTS_PATH "tests_nss"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#define TEST_CONF_DB "test_nss_conf.ldb"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#define TEST_SYSDB_FILE "cache_nss_test.ldb"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#define TEST_DOM_NAME "nss_test"
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek#define TEST_SUBDOM_NAME "test.sub"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek#define TEST_ID_PROVIDER "ldap"
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstruct nss_test_ctx {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct sss_test_ctx *tctx;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct sss_domain_info *subdom;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct resp_ctx *rctx;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct cli_ctx *cctx;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct sss_cmd_table *nss_cmds;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct nss_ctx *nctx;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek bool ncache_hit;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek};
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstruct nss_test_ctx *nss_test_ctx;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Mock NSS structure */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstruct nss_ctx *
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekmock_nctx(TALLOC_CTX *mem_ctx)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct nss_ctx *nctx;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose enum idmap_error_code err;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nctx = talloc_zero(mem_ctx, struct nss_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (!nctx) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return NULL;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_ncache_init(nctx, &nctx->ncache);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (ret != EOK) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek talloc_free(nctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return NULL;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nctx->neg_timeout = 10;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nctx->pwfield = discard_const("*");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose err = sss_idmap_init(sss_idmap_talloc, nctx, sss_idmap_talloc_free,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose &nctx->idmap_ctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose if (err != IDMAP_SUCCESS) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "sss_idmap_init failed.\n");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose talloc_free(nctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose return NULL;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose }
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return nctx;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Mock reading requests from a client. Use values passed from mock
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * instead
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid __real_sss_packet_get_body(struct sss_packet *packet,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek uint8_t **body, size_t *blen);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid __wrap_sss_packet_get_body(struct sss_packet *packet,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek uint8_t **body, size_t *blen)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek enum sss_test_wrapper_call wtype = sss_mock_type(enum sss_test_wrapper_call);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (wtype == WRAP_CALL_REAL) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return __real_sss_packet_get_body(packet, body, blen);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek *body = sss_mock_ptr_type(uint8_t *);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek *blen = strlen((const char *) *body)+1;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Mock returning result to client. Terminate the unit test instead. */
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosetypedef int (*cmd_cb_fn_t)(uint32_t, uint8_t *, size_t );
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstatic void set_cmd_cb(cmd_cb_fn_t fn)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_cmd_done, fn);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid __wrap_sss_cmd_done(struct cli_ctx *cctx, void *freectx)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct sss_packet *packet = cctx->creq->out;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek uint8_t *body;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek size_t blen;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek cmd_cb_fn_t check_cb;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek check_cb = sss_mock_ptr_type(cmd_cb_fn_t);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek __real_sss_packet_get_body(packet, &body, &blen);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose nss_test_ctx->tctx->error = check_cb(sss_packet_get_status(packet),
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose body, blen);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->tctx->done = true;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekenum sss_cli_command __wrap_sss_packet_get_cmd(struct sss_packet *packet)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return sss_mock_type(enum sss_cli_command);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekint __wrap_sss_cmd_send_empty(struct cli_ctx *cctx, TALLOC_CTX *freectx)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->tctx->done = true;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->tctx->error = ENOENT;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Intercept negative cache lookups */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekint __real_sss_ncache_check_user(struct sss_nc_ctx *ctx, int ttl,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct sss_domain_info *dom, const char *name);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekint __wrap_sss_ncache_check_user(struct sss_nc_ctx *ctx, int ttl,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct sss_domain_info *dom, const char *name)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek int ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = __real_sss_ncache_check_user(ctx, ttl, dom, name);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (ret == EEXIST) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->ncache_hit = true;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Mock input from the client library */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekstatic void mock_input_user_or_group(const char *username)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_body, username);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstatic void mock_fill_user(void)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* One packet for the entry and one for num entries */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekstatic void mock_fill_group_with_members(unsigned members)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek unsigned i;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (members == 0) return;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Member header , one per member */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek for (i=0; i<members; i++) {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek }
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstatic int parse_user_packet(uint8_t *body, size_t blen, struct passwd *pwd)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek size_t rp = 2 * sizeof(uint32_t);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek SAFEALIGN_COPY_UINT32(&pwd->pw_uid, body+rp, &rp);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek SAFEALIGN_COPY_UINT32(&pwd->pw_gid, body+rp, &rp);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Sequence of null terminated strings (name, passwd, gecos, dir, shell) */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek pwd->pw_name = (char *) body+rp;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek rp += strlen(pwd->pw_name) + 1;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (rp >= blen) return EINVAL;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek pwd->pw_passwd = (char *) body+rp;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek rp += strlen(pwd->pw_passwd) + 1;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (rp >= blen) return EINVAL;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek pwd->pw_gecos = (char *) body+rp;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek rp += strlen(pwd->pw_gecos) + 1;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (rp >= blen) return EINVAL;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek pwd->pw_dir = (char *) body+rp;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek rp += strlen(pwd->pw_dir) + 1;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (rp >= blen) return EINVAL;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek pwd->pw_shell = (char *) body+rp;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek rp += strlen(pwd->pw_shell) + 1;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (rp != blen) return EINVAL;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek return EOK;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekstatic int parse_group_packet(uint8_t *body, size_t blen, struct group *gr, uint32_t *nmem)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek size_t rp = 2 * sizeof(uint32_t); /* Len and reserved */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek unsigned i;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek SAFEALIGN_COPY_UINT32(&gr->gr_gid, body+rp, &rp);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek SAFEALIGN_COPY_UINT32(nmem, body+rp, &rp);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek gr->gr_name = (char *) body+rp;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek rp += strlen(gr->gr_name) + 1;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (rp >= blen) return EINVAL;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek gr->gr_passwd = (char *) body+rp;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek rp += strlen(gr->gr_passwd) + 1;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (*nmem > 0) {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek gr->gr_mem = talloc_zero_array(nss_test_ctx, char *, *nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (gr->gr_mem == NULL) return ENOMEM;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek for (i = 0; i < *nmem; i++) {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (rp >= blen) return EINVAL;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek gr->gr_mem[i] = talloc_strdup(gr->gr_mem, (char *) body+rp);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek rp += strlen(gr->gr_mem[i]) + 1;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek }
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek }
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Make sure we exactly matched the end of the packet */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek if (rp != blen) return EINVAL;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* ====================== The tests =============================== */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Check getting cached and valid user from cache. Account callback will
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * not be called and test_nss_getpwnam_check will make sure the user is
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * the same as the test entered before starting
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek */
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getpwnam_check(uint32_t status, uint8_t *body, size_t blen)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct passwd pwd;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = parse_user_packet(body, blen, &pwd);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(pwd.pw_uid, 123);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(pwd.pw_gid, 456);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(pwd.pw_name, "testuser");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(pwd.pw_shell, "/bin/sh");
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_string_equal(pwd.pw_passwd, "*");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid test_nss_getpwnam(void **state)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Prime the cache with a valid user */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->tctx->dom,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "testuser", 123, 456, "test user",
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "/home/testuser", "/bin/sh", NULL,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek NULL, 300, 0);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testuser");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETPWNAM);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek mock_fill_user();
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Query for that user, call a callback when command finishes */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek set_cmd_cb(test_nss_getpwnam_check);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nss_cmds);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Wait until the test finishes with EOK */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Test that searching for a nonexistant user yields ENOENT.
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * Account callback will be called
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid test_nss_getpwnam_neg(void **state)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testuser_neg");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek mock_account_recv_simple();
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_true(nss_test_ctx->ncache_hit == false);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nss_cmds);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Wait until the test finishes with ENOENT */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, ENOENT);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_true(nss_test_ctx->ncache_hit == false);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Test that subsequent search for a nonexistent user yields
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * ENOENT and Account callback is not called, on the other hand
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * the ncache functions will be called
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->tctx->done = false;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testuser_neg");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nss_cmds);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Wait until the test finishes with ENOENT */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, ENOENT);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Negative cache was hit this time */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_true(nss_test_ctx->ncache_hit == true);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstatic int test_nss_getpwnam_search_acct_cb(void *pvt)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct nss_test_ctx *ctx = talloc_get_type(pvt, struct nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(ctx->tctx->dom,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "testuser_search", 567, 890, "test search",
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "/home/testsearch", "/bin/sh", NULL,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek NULL, 300, 0);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getpwnam_search_check(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct passwd pwd;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = parse_user_packet(body, blen, &pwd);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(pwd.pw_uid, 567);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(pwd.pw_gid, 890);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(pwd.pw_name, "testuser_search");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(pwd.pw_shell, "/bin/sh");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid test_nss_getpwnam_search(void **state)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct ldb_result *res;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testuser_search");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek mock_account_recv(0, 0, NULL, test_nss_getpwnam_search_acct_cb, nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETPWNAM);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek mock_fill_user();
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek set_cmd_cb(test_nss_getpwnam_search_check);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
b3292840ebaa747a9fd596ff47cc5d18198361d0Michal Zidek ret = sysdb_getpwnam(nss_test_ctx, nss_test_ctx->tctx->dom,
b3292840ebaa747a9fd596ff47cc5d18198361d0Michal Zidek "testuser_search", &res);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(res->count, 0);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nss_cmds);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Wait until the test finishes with EOK */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* test_nss_getpwnam_search_check will check the user attributes */
b3292840ebaa747a9fd596ff47cc5d18198361d0Michal Zidek ret = sysdb_getpwnam(nss_test_ctx, nss_test_ctx->tctx->dom,
b3292840ebaa747a9fd596ff47cc5d18198361d0Michal Zidek "testuser_search", &res);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(res->count, 1);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Test that searching for a user that is expired in the cache goes to the DP
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * which updates the record and the NSS responder returns the updated record
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek *
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * The user's shell attribute is updated.
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekstatic int test_nss_getpwnam_update_acct_cb(void *pvt)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct nss_test_ctx *ctx = talloc_get_type(pvt, struct nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_store_user(ctx->tctx->dom,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "testuser_update", NULL, 10, 11, "test user",
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "/home/testuser", "/bin/ksh", NULL,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek NULL, NULL, 300, 0);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getpwnam_update_check(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct passwd pwd;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = parse_user_packet(body, blen, &pwd);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(pwd.pw_uid, 10);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(pwd.pw_gid, 11);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(pwd.pw_name, "testuser_update");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(pwd.pw_shell, "/bin/ksh");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return EOK;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid test_nss_getpwnam_update(void **state)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct ldb_result *res;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek const char *shell;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Prime the cache with a valid but expired user */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->tctx->dom,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "testuser_update", 10, 11, "test user",
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek "/home/testuser", "/bin/sh", NULL,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek NULL, 1, 1);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Mock client input */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testuser_update");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Mock client command */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETPWNAM);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Call this function when user is updated by the mock DP request */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek mock_account_recv(0, 0, NULL, test_nss_getpwnam_update_acct_cb, nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Call this function to check what the responder returned to the client */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek set_cmd_cb(test_nss_getpwnam_update_check);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Mock output buffer */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek mock_fill_user();
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Fire the command */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nss_cmds);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Wait until the test finishes with EOK */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Check the user was updated in the cache */
b3292840ebaa747a9fd596ff47cc5d18198361d0Michal Zidek ret = sysdb_getpwnam(nss_test_ctx, nss_test_ctx->tctx->dom,
b3292840ebaa747a9fd596ff47cc5d18198361d0Michal Zidek "testuser_update", &res);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(res->count, 1);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek shell = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_SHELL, NULL);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_string_equal(shell, "/bin/ksh");
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek/* Check that a FQDN is returned if the domain is FQDN-only and a
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek * FQDN is requested
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek */
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getpwnam_check_fqdn(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek struct passwd pwd;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek errno_t ret;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_test_ctx->cctx->rctx->domains[0].fqnames = false;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek ret = parse_user_packet(body, blen, &pwd);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(pwd.pw_uid, 124);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(pwd.pw_gid, 457);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_string_equal(pwd.pw_name, "testuser_fqdn@"TEST_DOM_NAME);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_string_equal(pwd.pw_shell, "/bin/sh");
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek return EOK;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozekvoid test_nss_getpwnam_fqdn(void **state)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek errno_t ret;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek /* Prime the cache with a valid user */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->tctx->dom,
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek "testuser_fqdn", 124, 457, "test user",
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek "/home/testuser", "/bin/sh", NULL,
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek NULL, 300, 0);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testuser_fqdn@"TEST_DOM_NAME);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETPWNAM);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek mock_fill_user();
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek /* Query for that user, call a callback when command finishes */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek set_cmd_cb(test_nss_getpwnam_check_fqdn);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_test_ctx->cctx->rctx->domains[0].fqnames = true;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_test_ctx->nss_cmds);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek /* Wait until the test finishes with EOK */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek/*
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek * Check that FQDN processing is able to handle arbitrarily sized
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek * delimeter
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek */
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walterstatic int test_nss_getpwnam_check_fancy_fqdn(uint32_t status,
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter uint8_t *body, size_t blen)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek struct passwd pwd;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek errno_t ret;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_test_ctx->cctx->rctx->domains[0].fqnames = false;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek ret = parse_user_packet(body, blen, &pwd);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(pwd.pw_uid, 125);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(pwd.pw_gid, 458);
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter assert_string_equal(pwd.pw_name, "testuser_fqdn_fancy@@@@@"TEST_DOM_NAME);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_string_equal(pwd.pw_shell, "/bin/sh");
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek return EOK;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Waltervoid test_nss_getpwnam_fqdn_fancy(void **state)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek errno_t ret;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek /* Prime the cache with a valid user */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->tctx->dom,
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter "testuser_fqdn_fancy", 125, 458, "test user",
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek "/home/testuser", "/bin/sh", NULL,
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek NULL, 300, 0);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter mock_input_user_or_group("testuser_fqdn_fancy@"TEST_DOM_NAME);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETPWNAM);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek mock_fill_user();
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek /* Query for that user, call a callback when command finishes */
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter set_cmd_cb(test_nss_getpwnam_check_fancy_fqdn);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_test_ctx->cctx->rctx->domains[0].fqnames = true;
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM,
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_test_ctx->nss_cmds);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek /* Wait until the test finishes with EOK */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek assert_int_equal(ret, EOK);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek/* Testsuite setup and teardown */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozekvoid test_nss_setup(struct sss_test_conf_param params[],
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek void **state)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek errno_t ret;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx = talloc_zero(NULL, struct nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_non_null(nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->tctx = create_dom_test_ctx(nss_test_ctx, TESTS_PATH, TEST_CONF_DB,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek TEST_SYSDB_FILE, TEST_DOM_NAME,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek TEST_ID_PROVIDER, params);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_non_null(nss_test_ctx->tctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nss_cmds = get_nss_cmds();
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_non_null(nss_test_ctx->nss_cmds);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* FIXME - perhaps this should be folded into sssd_domain_init or stricty
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * used together
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek ret = sss_names_init(nss_test_ctx, nss_test_ctx->tctx->confdb,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek TEST_DOM_NAME, &nss_test_ctx->tctx->dom->names);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_int_equal(ret, EOK);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Initialize the NSS responder */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->nctx = mock_nctx(nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_non_null(nss_test_ctx->nctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_names_init(nss_test_ctx->nctx, nss_test_ctx->tctx->confdb,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose NULL, &nss_test_ctx->nctx->global_names);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_non_null(nss_test_ctx->nctx->global_names);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->rctx = mock_rctx(nss_test_ctx, nss_test_ctx->tctx->ev,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->tctx->dom, nss_test_ctx->nctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_non_null(nss_test_ctx->rctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Create client context */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_ctx->cctx = mock_cctx(nss_test_ctx, nss_test_ctx->rctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek assert_non_null(nss_test_ctx->cctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekstatic int test_nss_getgrnam_check(struct group *expected, struct group *gr, const int nmem)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek int i;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(gr->gr_gid, expected->gr_gid);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_string_equal(gr->gr_name, expected->gr_name);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_string_equal(gr->gr_passwd, expected->gr_passwd);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek for (i = 0; i < nmem; i++) {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_string_equal(gr->gr_mem[i], expected->gr_mem[i]);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek }
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek return EOK;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_no_members_check(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek int ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek uint32_t nmem;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group gr;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group expected = {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_gid = 1123,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_name = discard_const("testgroup"),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_passwd = discard_const("*"),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_mem = NULL,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(nmem, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek return EOK;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek/* Test that requesting a valid, cached group with no members returns a valid
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek * group structure
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekvoid test_nss_getgrnam_no_members(void **state)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek errno_t ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Prime the cache with a valid group */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group(nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testgroup", 1123,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testgroup");
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_fill_group_with_members(0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Query for that group, call a callback when command finishes */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek set_cmd_cb(test_nss_getgrnam_no_members_check);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->nss_cmds);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Wait until the test finishes with EOK */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_members_check(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek int ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek uint32_t nmem;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group gr;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek const char *exp_members[] = { "testmember1", "testmember2" };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group expected = {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_gid = 1124,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_name = discard_const("testgroup_members"),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_passwd = discard_const("*"),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_mem = discard_const(exp_members)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(nmem, 2);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek return EOK;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek/* Test that requesting a valid, cached group with some members returns a valid
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek * group structure with those members present
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekvoid test_nss_getgrnam_members(void **state)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek errno_t ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Prime the cache with a valid group and some members */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group(nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testgroup_members", 1124,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testmember1", 2001, 456, "test member1",
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "/home/testmember2", "/bin/sh", NULL,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testmember2", 2002, 456, "test member2",
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "/home/testmember2", "/bin/sh", NULL,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group_member(nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testgroup_members", "testmember1",
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek SYSDB_MEMBER_USER, false);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group_member(nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testgroup_members", "testmember2",
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek SYSDB_MEMBER_USER, false);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testgroup_members");
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_fill_group_with_members(2);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Query for that group, call a callback when command finishes */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek set_cmd_cb(test_nss_getgrnam_members_check);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->nss_cmds);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Wait until the test finishes with EOK */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_members_check_fqdn(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek int ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek uint32_t nmem;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group gr;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek const char *exp_members[] = { "testmember1@"TEST_DOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testmember2@"TEST_DOM_NAME };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group expected = {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_gid = 1124,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_name = discard_const("testgroup_members@"TEST_DOM_NAME),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_passwd = discard_const("*"),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_mem = discard_const(exp_members)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(nmem, 2);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek return EOK;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek/* Test that requesting a valid, cached group with some members returns a valid
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek * group structure with those members present as fully qualified names
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekvoid test_nss_getgrnam_members_fqdn(void **state)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek errno_t ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->tctx->dom->fqnames = true;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testgroup_members@"TEST_DOM_NAME);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_fill_group_with_members(2);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Query for that group, call a callback when command finishes */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek set_cmd_cb(test_nss_getgrnam_members_check_fqdn);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->nss_cmds);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Wait until the test finishes with EOK */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Restore FQDN settings */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->tctx->dom->fqnames = false;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_members_check_subdom(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek int ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek uint32_t nmem;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group gr;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek const char *exp_members[] = { "submember1@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "submember2@"TEST_SUBDOM_NAME };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct group expected = {
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_gid = 2124,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_name = discard_const("testsubdomgroup@"TEST_SUBDOM_NAME),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_passwd = discard_const("*"),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek .gr_mem = discard_const(exp_members)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(nmem, 2);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek return EOK;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek/* Test that requesting a valid, cached group with some members returns a valid
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek * group structure with those members present as fully qualified names
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekvoid test_nss_getgrnam_members_subdom(void **state)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek errno_t ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->tctx->dom->fqnames = true;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Add a group from a subdomain and two members from the same subdomain
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek */
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group(nss_test_ctx->subdom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testsubdomgroup@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek 2124, NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->subdom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "submember1@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek 4001, 456, "test subdomain member1",
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "/home/submember1", "/bin/sh", NULL,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_user(nss_test_ctx->subdom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "submember2@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek 2002, 456, "test subdomain member2",
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "/home/submember2", "/bin/sh", NULL,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek NULL, 300, 0);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group_member(nss_test_ctx->subdom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testsubdomgroup@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "submember1@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek SYSDB_MEMBER_USER, false);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_add_group_member(nss_test_ctx->subdom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "testsubdomgroup@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek "submember2@"TEST_SUBDOM_NAME,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek SYSDB_MEMBER_USER, false);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_input_user_or_group("testsubdomgroup@"TEST_SUBDOM_NAME);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek mock_fill_group_with_members(2);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Query for that group, call a callback when command finishes */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek set_cmd_cb(test_nss_getgrnam_members_check_subdom);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->nss_cmds);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Wait until the test finishes with EOK */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek /* Restore FQDN settings */
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->tctx->dom->fqnames = false;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_check_mix_dom(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek{
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek int ret;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek uint32_t nmem;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek struct group gr;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *exp_members[] = { "testmember1",
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "testmember2",
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "submember1@"TEST_SUBDOM_NAME };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek struct group expected = {
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_gid = 1124,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_name = discard_const("testgroup_members"),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_passwd = discard_const("*"),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_mem = discard_const(exp_members)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(nmem, 3);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek return EOK;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek}
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozekvoid test_nss_getgrnam_mix_dom(void **state)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek{
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek errno_t ret;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *group_strdn = NULL;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *add_groups[] = { NULL, NULL };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Add a subdomain user to a parent domain group */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek group_strdn = sysdb_group_strdn(nss_test_ctx,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->tctx->dom->name,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "testgroup_members");
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_non_null(group_strdn);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek add_groups[0] = group_strdn;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_update_members_dn(nss_test_ctx->subdom,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "submember1@"TEST_SUBDOM_NAME,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek SYSDB_MEMBER_USER,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek add_groups, NULL);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek mock_input_user_or_group("testgroup_members");
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek mock_fill_group_with_members(3);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Query for that group, call a callback when command finishes */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek set_cmd_cb(test_nss_getgrnam_check_mix_dom);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->nss_cmds);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Wait until the test finishes with EOK */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek}
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_check_mix_dom_fqdn(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek{
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek int ret;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek uint32_t nmem;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek struct group gr;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *exp_members[] = { "testmember1@"TEST_DOM_NAME,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "testmember2@"TEST_DOM_NAME,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "submember1@"TEST_SUBDOM_NAME };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek struct group expected = {
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_gid = 1124,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_name = discard_const("testgroup_members@"TEST_DOM_NAME),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_passwd = discard_const("*"),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_mem = discard_const(exp_members)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(nmem, 3);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek return EOK;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek}
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozekvoid test_nss_getgrnam_mix_dom_fqdn(void **state)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek{
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek errno_t ret;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->tctx->dom->fqnames = true;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek mock_input_user_or_group("testgroup_members@"TEST_DOM_NAME);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek mock_fill_group_with_members(3);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Query for that group, call a callback when command finishes */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek set_cmd_cb(test_nss_getgrnam_check_mix_dom_fqdn);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->nss_cmds);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Wait until the test finishes with EOK */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Restore FQDN settings */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->tctx->dom->fqnames = false;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek}
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bosestatic int test_nss_getgrnam_check_mix_subdom(uint32_t status,
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose uint8_t *body, size_t blen)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek{
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek int ret;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek uint32_t nmem;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek struct group gr;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *exp_members[] = { "submember1@"TEST_SUBDOM_NAME,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "submember2@"TEST_SUBDOM_NAME,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "testmember1@"TEST_DOM_NAME };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek struct group expected = {
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_gid = 2124,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_name = discard_const("testsubdomgroup@"TEST_SUBDOM_NAME),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_passwd = discard_const("*"),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek .gr_mem = discard_const(exp_members)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose assert_int_equal(status, EOK);
32b976eb666044d106dd85e27f8d0bb1d7b6cd6cSumit Bose
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = parse_group_packet(body, blen, &gr, &nmem);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(nmem, 3);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = test_nss_getgrnam_check(&expected, &gr, nmem);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek return EOK;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek}
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozekvoid test_nss_getgrnam_mix_subdom(void **state)
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek{
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek errno_t ret;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *group_strdn = NULL;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek const char *add_groups[] = { NULL, NULL };
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Add a subdomain user to a parent domain group */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek group_strdn = sysdb_group_strdn(nss_test_ctx,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->subdom->name,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "testsubdomgroup@"TEST_SUBDOM_NAME);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_non_null(group_strdn);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek add_groups[0] = group_strdn;
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
d115f40c7a3999e3cbe705a2ff9cf0fd493f80fbMichal Zidek ret = sysdb_update_members_dn(nss_test_ctx->tctx->dom,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek "testmember1",
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek SYSDB_MEMBER_USER,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek add_groups, NULL);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek mock_input_user_or_group("testsubdomgroup@"TEST_SUBDOM_NAME);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETGRNAM);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek mock_fill_group_with_members(3);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Query for that group, call a callback when command finishes */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek set_cmd_cb(test_nss_getgrnam_check_mix_subdom);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETGRNAM,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_test_ctx->nss_cmds);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek /* Wait until the test finishes with EOK */
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek ret = test_ev_loop(nss_test_ctx->tctx);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek assert_int_equal(ret, EOK);
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek}
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosestatic int test_nss_well_known_sid_check(uint32_t status,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose uint8_t *body, size_t blen)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose const char *name;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose enum sss_id_type type;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose size_t rp = 2 * sizeof(uint32_t);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose char *expected_result = sss_mock_ptr_type(char *);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose if (expected_result == NULL) {
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(status, EINVAL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(blen, 0);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose } else {
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(status, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose SAFEALIGN_COPY_UINT32(&type, body+rp, &rp);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose name = (char *) body+rp;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(type, SSS_ID_TYPE_GID);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_string_equal(name, expected_result);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose }
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose return EOK;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getnamebysid(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "S-1-5-32-550");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETNAMEBYSID);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, "Print Operators@BUILTIN");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETNAMEBYSID,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getnamebysid_special(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "S-1-2-0");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETNAMEBYSID);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, "LOCAL@LOCAL AUTHORITY");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETNAMEBYSID,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getnamebysid_non_existing(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "S-1-5-32-123");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETNAMEBYSID);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, NULL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETNAMEBYSID,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getidbysid_failure(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "S-1-5-32-550");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETIDBYSID);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, NULL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETIDBYSID,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getsidbyname(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "Cryptographic Operators@BUILTIN");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETSIDBYNAME);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, "S-1-5-32-569");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETSIDBYNAME,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getsidbyname_nonexisting(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "Abc@BUILTIN");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETSIDBYNAME);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, NULL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETSIDBYNAME,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bosevoid test_nss_well_known_getsidbyname_special(void **state)
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose{
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose errno_t ret;
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_WRAPPER);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, "CREATOR OWNER@CREATOR AUTHORITY");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETSIDBYNAME);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose will_return(test_nss_well_known_sid_check, "S-1-3-0");
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose set_cmd_cb(test_nss_well_known_sid_check);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETSIDBYNAME,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_ctx->nss_cmds);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose /* Wait until the test finishes with EOK */
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose ret = test_ev_loop(nss_test_ctx->tctx);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose assert_int_equal(ret, EOK);
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose}
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozekvoid nss_test_setup(void **state)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek struct sss_test_conf_param params[] = {
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { "enumerate", "false" },
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { NULL, NULL }, /* Sentinel */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek };
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek test_nss_setup(params, state);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozekvoid nss_fqdn_test_setup(void **state)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek struct sss_test_conf_param params[] = {
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { "enumerate", "false" },
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { "full_name_format", "%1$s@%2$s" },
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { NULL, NULL }, /* Sentinel */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek };
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek test_nss_setup(params, state);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozekvoid nss_subdom_test_setup(void **state)
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek{
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek const char *const testdom[4] = { TEST_SUBDOM_NAME, "TEST.SUB", "test", "S-3" };
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek struct sss_domain_info *subdomain;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek errno_t ret;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_setup(state);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek subdomain = new_subdomain(nss_test_ctx, nss_test_ctx->tctx->dom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek testdom[0], testdom[1], testdom[2], testdom[3],
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek false, false, NULL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_non_null(subdomain);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = sysdb_subdomain_store(nss_test_ctx->tctx->sysdb,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek testdom[0], testdom[1], testdom[2], testdom[3],
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek false, false, NULL);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek ret = sysdb_update_subdomains(nss_test_ctx->tctx->dom);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek assert_int_equal(ret, EOK);
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_ctx->subdom = subdomain;
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek}
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Waltervoid nss_fqdn_fancy_test_setup(void **state)
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek{
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek struct sss_test_conf_param params[] = {
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { "enumerate", "false" },
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { "full_name_format", "%1$s@@@@@%2$s" },
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek { NULL, NULL }, /* Sentinel */
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek };
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek test_nss_setup(params, state);
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek}
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekvoid nss_test_teardown(void **state)
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek talloc_free(nss_test_ctx);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozekint main(int argc, const char *argv[])
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek{
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek int rv;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek int no_cleanup = 0;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek poptContext pc;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek int opt;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek struct poptOption long_options[] = {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek POPT_AUTOHELP
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek SSSD_DEBUG_OPTS
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek {"no-cleanup", 'n', POPT_ARG_NONE, &no_cleanup, 0,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek _("Do not delete the test database after a test run"), NULL },
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek POPT_TABLEEND
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek };
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek const UnitTest tests[] = {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek unit_test_setup_teardown(test_nss_getpwnam,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_setup, nss_test_teardown),
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek unit_test_setup_teardown(test_nss_getpwnam_neg,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_setup, nss_test_teardown),
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek unit_test_setup_teardown(test_nss_getpwnam_search,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_setup, nss_test_teardown),
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek unit_test_setup_teardown(test_nss_getpwnam_update,
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek nss_test_setup, nss_test_teardown),
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek unit_test_setup_teardown(test_nss_getpwnam_fqdn,
777374243e15c53e7b0a7345e190c1018920be18Jakub Hrozek nss_fqdn_test_setup, nss_test_teardown),
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter unit_test_setup_teardown(test_nss_getpwnam_fqdn_fancy,
c86904baad32fbf9e66bf1cdc667aa5e683b48baStef Walter nss_fqdn_fancy_test_setup, nss_test_teardown),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_no_members,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_setup, nss_test_teardown),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_members,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_test_setup, nss_test_teardown),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_members_fqdn,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_fqdn_test_setup, nss_test_teardown),
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_members_subdom,
34926c3809b19f9e70f18931e44bf993321647a8Jakub Hrozek nss_subdom_test_setup, nss_test_teardown),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_mix_dom,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_subdom_test_setup, nss_test_teardown),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_mix_dom_fqdn,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_subdom_test_setup, nss_test_teardown),
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek unit_test_setup_teardown(test_nss_getgrnam_mix_subdom,
000e61bb652400215a9a851d3630cdc7307af398Jakub Hrozek nss_subdom_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getnamebysid,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getnamebysid_special,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getnamebysid_non_existing,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getidbysid_failure,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getsidbyname,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getsidbyname_nonexisting,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose unit_test_setup_teardown(test_nss_well_known_getsidbyname_special,
36c266d467e9105041b33e9b1cdcd9ff073d893eSumit Bose nss_test_setup, nss_test_teardown),
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek };
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Set debug level to invalid value so we can deside if -d 0 was used. */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek debug_level = SSSDBG_INVALID;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek pc = poptGetContext(argv[0], argc, argv, long_options, 0);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek while((opt = poptGetNextOpt(pc)) != -1) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek switch(opt) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek default:
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek fprintf(stderr, "\nInvalid option %s: %s\n\n",
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek poptBadOption(pc, 0), poptStrerror(opt));
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek poptPrintUsage(pc, stderr, 0);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return 1;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek poptFreeContext(pc);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek DEBUG_INIT(debug_level);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek /* Even though normally the tests should clean up after themselves
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek * they might not after a failed run. Remove the old db to be sure */
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek tests_set_cwd();
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_SYSDB_FILE);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek test_dom_suite_setup(TESTS_PATH);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek rv = run_tests(tests);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek if (rv == 0 && !no_cleanup) {
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_SYSDB_FILE);
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek }
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek return rv;
150b76e13b7c4f3ccf1d709bf517ca2af6b2c9a2Jakub Hrozek}