27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech/*
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech Authors:
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech Petr Čech <pcech@redhat.com>
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech Copyright (C) 2016 Red Hat
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech This program is free software; you can redistribute it and/or modify
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech it under the terms of the GNU General Public License as published by
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech the Free Software Foundation; either version 3 of the License, or
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech (at your option) any later version.
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech This program is distributed in the hope that it will be useful,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech but WITHOUT ANY WARRANTY; without even the implied warranty of
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech GNU General Public License for more details.
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech You should have received a copy of the GNU General Public License
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech along with this program. If not, see <http://www.gnu.org/licenses/>.
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech*/
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include <stdarg.h>
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include <stddef.h>
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include <setjmp.h>
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include <cmocka.h>
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include <popt.h>
dd285415d7a8d8376207960cfa3e977524c3b98cJakub Hrozek#include <ldb_module.h>
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include "tests/cmocka/common_mock.h"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#include "src/db/sysdb_sudo.h"
dd285415d7a8d8376207960cfa3e977524c3b98cJakub Hrozek#include "src/db/sysdb_private.h"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TESTS_PATH "tp_" BASE_FILE_STEM
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TEST_CONF_DB "test_sysdb_sudorules.ldb"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TEST_DOM_NAME "test_domain.test"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TEST_CACHE_SUDO_TIMEOUT "20"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TEST_USER_NON_EXIST "no_user"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TEST_GROUP_NAME "test_sudo_group"
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech#define TEST_GID 10001
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstruct test_user {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *name;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech uid_t uid;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech gid_t gid;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech} users[] = { { "test_USER1", 1001, 1001 },
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech { "test_user2", 1002, 1002 },
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech { "test_user3", 1003, 1003 } };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstruct test_rule {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *name;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *host;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *as_user;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech} rules[] = { { "test_rule1", "test_host1.test_domain.test", "root" },
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech { "test_rule2", "test_host2.test_domain.test", "root" },
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech { "test_rule3", "test_host3.test_domain.test", "root" } };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstruct sysdb_test_ctx {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sss_test_ctx *tctx;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech};
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstatic void create_groups(struct sss_domain_info *domain)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_add_group(domain, TEST_GROUP_NAME, TEST_GID,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL, 30, time(NULL));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstatic void create_users(struct sss_domain_info *domain)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech int gid;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech for (int i = 0; i < 3; i++) {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech gid = (i == 0) ? 0 : TEST_GID;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_add_user(domain, users[i].name, users[i].uid, gid,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech users[i].name, NULL, "/bin/bash", domain->name,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL, 30, time(NULL));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech }
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstatic void create_rule_attrs(struct sysdb_attrs *rule, int i)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_CN,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rules[i].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rules[i].host);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_RUNASUSER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rules[i].as_user);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_USER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech users[i].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čechstatic void create_rule_attrs_multiple_sudoUser(struct sysdb_attrs *rule)
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech{
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech errno_t ret;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_CN,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech rules[0].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_HOST,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech rules[0].host);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_RUNASUSER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech rules[0].as_user);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech for (int i = 0; i < 3; i++ ) {
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_attrs_add_string_safe(rule, SYSDB_SUDO_CACHE_AT_USER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech users[i].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech }
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech}
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstatic int get_stored_rules_count(struct sysdb_test_ctx *test_ctx)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech "(objectClass=sudoRule)",
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech if (!(ret == EOK || ret == ENOENT)) {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech msgs_count = -1;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech }
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech return msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstatic int test_sysdb_setup(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_true(leak_check_setup());
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_ctx = talloc_zero(global_talloc_context, struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_dom_suite_setup(TESTS_PATH);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_ctx->tctx = create_dom_test_ctx(test_ctx, TESTS_PATH, TEST_CONF_DB,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech TEST_DOM_NAME, "ipa", NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(test_ctx->tctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_groups(test_ctx->tctx->dom);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_users(test_ctx->tctx->dom);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
dd285415d7a8d8376207960cfa3e977524c3b98cJakub Hrozek reset_ldb_errstrings(test_ctx->tctx->dom);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech check_leaks_push(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech *state = (void *)test_ctx;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech return 0;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechstatic int test_sysdb_teardown(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_ctx = talloc_get_type_abort(*state, struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_DOM_NAME);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
a257259b05d62ebe548b6c798a3aa03a97dbc0c2Jakub Hrozek reset_ldb_errstrings(test_ctx->tctx->dom);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_true(check_leaks_pop(test_ctx));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_true(leak_check_teardown());
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech return 0;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_store_sudo(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char *filter;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SYSDB_SUDO_CACHE_AT_RUNASUSER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SYSDB_SUDO_CACHE_AT_USER, NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *result;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(rule, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina assert_non_null(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(msgs_count, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_CN, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, rules[0].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, rules[0].host);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_RUNASUSER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, rules[0].as_user);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_USER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, users[0].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čechvoid test_store_sudo_case_sensitive(void **state)
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech{
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech errno_t ret;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech char *filter;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_HOST,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech SYSDB_SUDO_CACHE_AT_RUNASUSER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech SYSDB_SUDO_CACHE_AT_USER, NULL };
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct ldb_message **msgs = NULL;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech size_t msgs_count;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech const char *result;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct ldb_message_element *element;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct sysdb_attrs *rule;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct sysdb_test_ctx);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech const char *lowered_name = sss_tc_utf8_str_tolower(test_ctx, users[0].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech rule = sysdb_new_attrs(test_ctx);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(rule);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech create_rule_attrs_multiple_sudoUser(rule);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech test_ctx->tctx->dom->case_sensitive = true;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(filter);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech attrs, &msgs_count, &msgs);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(msgs_count, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_CN, NULL);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(result);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_string_equal(result, rules[0].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_HOST,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech NULL);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(result);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_string_equal(result, rules[0].host);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_RUNASUSER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech NULL);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(result);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_string_equal(result, rules[0].as_user);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = ldb_msg_check_string_attribute(msgs[0], SYSDB_SUDO_CACHE_AT_USER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech users[0].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = ldb_msg_check_string_attribute(msgs[0], SYSDB_SUDO_CACHE_AT_USER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech lowered_name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, 0);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = ldb_msg_check_string_attribute(msgs[0], SYSDB_SUDO_CACHE_AT_USER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech users[1].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = ldb_msg_check_string_attribute(msgs[0], SYSDB_SUDO_CACHE_AT_USER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech users[2].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech element = ldb_msg_find_element(msgs[0], SYSDB_SUDO_CACHE_AT_USER);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(element->num_values, 3);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(lowered_name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(rule);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(filter);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(msgs);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech}
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čechvoid test_store_sudo_case_insensitive(void **state)
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech{
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech errno_t ret;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech char *filter;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_HOST,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech SYSDB_SUDO_CACHE_AT_RUNASUSER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech SYSDB_SUDO_CACHE_AT_USER, NULL };
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct ldb_message **msgs = NULL;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech size_t msgs_count;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech const char *result;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct ldb_message_element *element;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct sysdb_attrs *rule;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech struct sysdb_test_ctx);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech const char *lowered_name = sss_tc_utf8_str_tolower(test_ctx, users[0].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech rule = sysdb_new_attrs(test_ctx);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(rule);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech create_rule_attrs_multiple_sudoUser(rule);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech test_ctx->tctx->dom->case_sensitive = false;
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(filter);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech attrs, &msgs_count, &msgs);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, EOK);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(msgs_count, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_CN, NULL);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(result);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_string_equal(result, rules[0].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_HOST,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech NULL);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(result);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_string_equal(result, rules[0].host);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_RUNASUSER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech NULL);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_non_null(result);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_string_equal(result, rules[0].as_user);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech for (int i = 0; i < 3; i++) {
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech ret = ldb_msg_check_string_attribute(msgs[0], SYSDB_SUDO_CACHE_AT_USER,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech users[i].name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(ret, 1);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech }
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech /* test there is no duplication of lowercase forms */
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech element = ldb_msg_find_element(msgs[0], SYSDB_SUDO_CACHE_AT_USER);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech assert_int_equal(element->num_values, 4);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(lowered_name);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(rule);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(filter);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech talloc_zfree(msgs);
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech}
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_sudo_purge_by_filter(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char *delete_filter;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(rule, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina delete_filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina assert_non_null(delete_filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_purge(test_ctx->tctx->dom, delete_filter, NULL, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(delete_filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_sudo_purge_by_rules(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(rule, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_purge(test_ctx->tctx->dom, NULL, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_sudo_set_get_last_full_refresh(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech time_t now;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech time_t loaded_time;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech now = time(NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_set_last_full_refresh(test_ctx->tctx->dom, now);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_get_last_full_refresh(test_ctx->tctx->dom, &loaded_time);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(now, loaded_time);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_get_sudo_user_info(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char **groupnames = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* User 1 has group. */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_get_sudo_user_info(test_ctx, test_ctx->tctx->dom,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech users[1].name, 0, &groupnames);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(groupnames[0], TEST_GROUP_NAME);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(groupnames);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_get_sudo_user_info_nogroup(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char **groupnames = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* User 0 hasn't group. */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_get_sudo_user_info(test_ctx, test_ctx->tctx->dom,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech users[0].name, 0, &groupnames);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_null(groupnames);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(groupnames);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_get_sudo_nouser(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char **groupnames = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_get_sudo_user_info(test_ctx, test_ctx->tctx->dom,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech TEST_USER_NON_EXIST, 0, &groupnames);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, ENOENT);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_set_sudo_rule_attr_add(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *new_rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_COMMAND,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char *filter;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *result;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(rule, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech new_rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(new_rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string(new_rule, SYSDB_SUDO_CACHE_AT_COMMAND,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech "test_command");
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_set_sudo_rule_attr(test_ctx->tctx->dom, rules[0].name,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech new_rule, SYSDB_MOD_ADD);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina assert_non_null(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(msgs_count, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_CN, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, rules[0].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_COMMAND,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, "test_command");
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(new_rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_set_sudo_rule_attr_replace(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *new_rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_CACHE_EXPIRE, NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char *filter;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *result;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(rule, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech new_rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(new_rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_time_t(new_rule, SYSDB_CACHE_EXPIRE, 10);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_set_sudo_rule_attr(test_ctx->tctx->dom, rules[0].name,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech new_rule, SYSDB_MOD_REP);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina assert_non_null(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(msgs_count, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_CN, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, rules[0].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_CACHE_EXPIRE, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, "10");
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(new_rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_set_sudo_rule_attr_delete(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *new_rule;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char *filter;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *result;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(rule, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, &rule, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech new_rule = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(new_rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string(new_rule, SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rules[0].host);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_set_sudo_rule_attr(test_ctx->tctx->dom, rules[0].name,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech new_rule, LDB_FLAG_MOD_DELETE);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina filter = sysdb_sudo_filter_user(test_ctx, users[0].name, NULL, 0);
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina assert_non_null(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(msgs_count, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_CN, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, rules[0].name);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech result = ldb_msg_find_attr_as_string(msgs[0], SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech "deleted");
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(result);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_equal(result, "deleted");
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(new_rule);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(filter);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_search_sudo_rules(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina const char *filter;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_NAME, NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t num_rules = 2;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *tmp_rules[num_rules];
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *rule_names[num_rules];
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *db_results[num_rules];
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_rules[0] = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(tmp_rules[0]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(tmp_rules[0], 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_rules[1] = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(tmp_rules[1]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(tmp_rules[1], 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, tmp_rules, 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
61913b8f0d1ba54d82640500d7486fac5f72b030Pavel Březina filter = "(objectClass=" SYSDB_SUDO_CACHE_OC ")";
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom, filter,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(msgs_count, 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule_names[0] = rules[0].name;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rule_names[1] = rules[1].name;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech for (int i = 0; i < num_rules; ++i) {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech db_results[i] = ldb_msg_find_attr_as_string(msgs[i], SYSDB_NAME, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(db_results[i]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech }
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_string_not_equal(db_results[0], db_results[1]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_true(are_values_in_array(rule_names, num_rules,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech db_results, num_rules));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(tmp_rules[0]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(tmp_rules[1]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechvoid test_filter_rules_by_time(void **state)
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech errno_t ret;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech time_t cur_time;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *tmp_attr;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech uint32_t _num_rules;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs *tmp_rules[2];
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs **_rules;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_attrs **loaded_rules;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech size_t msgs_count;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct ldb_message **msgs = NULL;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech char buff[20];
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const char *attrs[] = { SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_HOST,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SYSDB_SUDO_CACHE_AT_RUNASUSER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SYSDB_SUDO_CACHE_AT_USER,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SYSDB_IPA_SUDORULE_NOTBEFORE,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SYSDB_IPA_SUDORULE_NOTAFTER, NULL };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct sysdb_test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_rules[0] = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(tmp_rules[0]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(tmp_rules[0], 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_rules[1] = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(tmp_rules[1]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech create_rule_attrs(tmp_rules[1], 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_store(test_ctx->tctx->dom, tmp_rules, 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /*
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech * We hit DST issue of time functions,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech * so we use big time shift to avoid this.
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_attr = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(tmp_attr);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cur_time = time(NULL) + 10000;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech strftime(buff, 20, "%Y%m%d%H%M%S%z", localtime(&cur_time));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string(tmp_attr, SYSDB_SUDO_CACHE_AT_NOTBEFORE, buff);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cur_time = time(NULL) + 20000;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech strftime(buff, 20, "%Y%m%d%H%M%S%z", localtime(&cur_time));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string(tmp_attr, SYSDB_SUDO_CACHE_AT_NOTAFTER, buff);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_set_sudo_rule_attr(test_ctx->tctx->dom, rules[0].name,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_attr, SYSDB_MOD_ADD);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(tmp_attr);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_attr = sysdb_new_attrs(test_ctx);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_non_null(tmp_attr);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cur_time = time(NULL) - 10000;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech strftime(buff, 20, "%Y%m%d%H%M%S%z", localtime(&cur_time));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string(tmp_attr, SYSDB_SUDO_CACHE_AT_NOTBEFORE, buff);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cur_time = time(NULL) + 10000;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech strftime(buff, 20, "%Y%m%d%H%M%S%z", localtime(&cur_time));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_attrs_add_string(tmp_attr, SYSDB_SUDO_CACHE_AT_NOTAFTER, buff);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_set_sudo_rule_attr(test_ctx->tctx->dom, rules[1].name,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tmp_attr, SYSDB_MOD_ADD);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(tmp_attr);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(get_stored_rules_count(test_ctx), 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_search_sudo_rules(test_ctx, test_ctx->tctx->dom,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech "(objectClass=sudoRule)",
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech attrs, &msgs_count, &msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(msgs_count, 2);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_msg2attrs(test_ctx, 2, msgs, &loaded_rules);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(msgs);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech ret = sysdb_sudo_filter_rules_by_time(test_ctx, 2, loaded_rules, 0,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech &_num_rules, &_rules);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(ret, EOK);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech assert_int_equal(_num_rules, 1);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(tmp_rules[0]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(tmp_rules[1]);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(loaded_rules);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech talloc_zfree(_rules);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cechint main(int argc, const char *argv[])
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech{
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech int rv;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech poptContext pc;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech int opt;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech struct poptOption long_options[] = {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech POPT_AUTOHELP
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech SSSD_DEBUG_OPTS
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech POPT_TABLEEND
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech const struct CMUnitTest tests[] = {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* sysdb_sudo_store() */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_store_sudo,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech cmocka_unit_test_setup_teardown(test_store_sudo_case_sensitive,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech test_sysdb_setup,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech test_sysdb_teardown),
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech cmocka_unit_test_setup_teardown(test_store_sudo_case_insensitive,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech test_sysdb_setup,
23637e2fd2b1fe42bdd2335893a11ac8016f56bcPetr Čech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* sysdb_sudo_purge() */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_sudo_purge_by_filter,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_sudo_purge_by_rules,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /*
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech * sysdb_sudo_set_last_full_refresh()
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech * sysdb_sudo_get_last_full_refresh()
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_sudo_set_get_last_full_refresh,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* sysdb_get_sudo_user_info() */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_get_sudo_user_info,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_get_sudo_user_info_nogroup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_get_sudo_nouser,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* sysdb_set_sudo_rule_attr() */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_set_sudo_rule_attr_add,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_set_sudo_rule_attr_replace,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_set_sudo_rule_attr_delete,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* sysdb_search_sudo_rules() */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_search_sudo_rules,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* sysdb_sudo_filter_rules_by_time() */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech cmocka_unit_test_setup_teardown(test_filter_rules_by_time,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_setup,
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_sysdb_teardown),
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech };
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech /* Set debug level to invalid value so we can deside if -d 0 was used. */
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech debug_level = SSSDBG_INVALID;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech pc = poptGetContext(argv[0], argc, argv, long_options, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech while ((opt = poptGetNextOpt(pc)) != -1) {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech switch (opt) {
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech default:
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech fprintf(stderr, "\nInvalid option %s: %s\n\n",
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech poptBadOption(pc, 0), poptStrerror(opt));
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech poptPrintUsage(pc, stderr, 0);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech return 1;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech }
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech }
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech poptFreeContext(pc);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech DEBUG_CLI_INIT(debug_level);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech tests_set_cwd();
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_DB, TEST_DOM_NAME);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech rv = cmocka_run_group_tests(tests, NULL, NULL);
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech return rv;
27a7dedb0ee4d4b51ca4c196aa894ad30cb3e821Petr Cech}