d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose/*
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Authors:
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Sumit Bose <sbose@redhat.com>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Copyright (C) 2013 Red Hat
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose SSSD tests: Unit tests for libsss_idmap
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose This program is free software; you can redistribute it and/or modify
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose it under the terms of the GNU General Public License as published by
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose the Free Software Foundation; either version 3 of the License, or
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose (at your option) any later version.
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose This program is distributed in the hope that it will be useful,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose but WITHOUT ANY WARRANTY; without even the implied warranty of
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose GNU General Public License for more details.
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose You should have received a copy of the GNU General Public License
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose along with this program. If not, see <http://www.gnu.org/licenses/>.
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose*/
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#include <popt.h>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#include "tests/cmocka/common_mock.h"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#include "lib/idmap/sss_idmap.h"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_RANGE_MIN 200000
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_RANGE_MAX 399999
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_DOM_NAME "test.dom"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_DOM_SID "S-1-5-21-123-456-789"
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose#define TEST_FIRST_RID 0
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose#define TEST_EXT_MAPPING true
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_2_RANGE_MIN 600000
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_2_RANGE_MAX 799999
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_2_DOM_NAME "test2.dom"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_2_DOM_SID "S-1-5-21-987-654-321"
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose#define TEST_2_FIRST_RID 1000000
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose#define TEST_2_EXT_MAPPING true
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_OFFSET 1000000
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose#define TEST_OFFSET_STR "1000000"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlconst int TEST_2922_MIN_ID = 1842600000;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlconst int TEST_2922_MAX_ID = 1842799999;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosestruct test_ctx {
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TALLOC_CTX *mem_idmap;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct sss_idmap_ctx *idmap_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose};
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosestatic void *idmap_talloc(size_t size, void *pvt)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose return talloc_size(pvt, size);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosestatic void idmap_free(void *ptr, void *pvt)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose talloc_free(ptr);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozekstatic int test_sss_idmap_setup(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_true(leak_check_setup());
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_zero(global_talloc_context, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose check_leaks_push(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx->mem_idmap = talloc_new(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx->mem_idmap);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_init(idmap_talloc, test_ctx->mem_idmap, idmap_free,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &test_ctx->idmap_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose *state = test_ctx;
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozekstatic int setup_ranges(struct test_ctx *test_ctx, bool external_mapping,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl bool second_domain, bool sec_slices)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct sss_idmap_range range;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose const char *name;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose const char *sid;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose if (second_domain) {
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.min = TEST_2_RANGE_MIN;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.max = TEST_2_RANGE_MAX;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose name = TEST_2_DOM_NAME;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose sid = TEST_2_DOM_SID;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose } else {
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.min = TEST_RANGE_MIN;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.max = TEST_RANGE_MAX;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose name = TEST_DOM_NAME;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose sid = TEST_DOM_SID;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose }
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl if (sec_slices) {
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_add_auto_domain_ex(test_ctx->idmap_ctx, name, sid,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl &range, NULL, 0, external_mapping,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl NULL, NULL);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl } else {
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, name, sid, &range,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl NULL, 0, external_mapping);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl }
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.min += TEST_OFFSET;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.max += TEST_OFFSET;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl if (sec_slices) {
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_add_auto_domain_ex(test_ctx->idmap_ctx, name, sid,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl &range, NULL, TEST_OFFSET,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl external_mapping, NULL, NULL);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl } else {
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, name, sid, &range,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl NULL, TEST_OFFSET, external_mapping);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl }
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlstatic int setup_ranges_2922(struct test_ctx *test_ctx)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl const int TEST_2922_DFL_SLIDE = 9212;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl struct sss_idmap_range range;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl enum idmap_error_code err;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl const char *name;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl const char *sid;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Pick a new slice. */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl id_t slice_num = -1;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_non_null(test_ctx);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl name = TEST_DOM_NAME;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl sid = TEST_DOM_SID;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_calculate_range(test_ctx->idmap_ctx, sid, &slice_num,
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl &range);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Range computation should be deterministic. Lets validate that. */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(range.min, TEST_2922_MIN_ID);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(range.max, TEST_2922_MAX_ID);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(slice_num, TEST_2922_DFL_SLIDE);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, name, sid, &range,
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl NULL, 0, false /* No external mapping */);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl return 0;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl}
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlstatic int test_sss_idmap_setup_with_domains(void **state)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_sss_idmap_setup(state);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl setup_ranges(test_ctx, false, false, false);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl return 0;
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl}
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlstatic int test_sss_idmap_setup_with_domains_2922(void **state)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl struct test_ctx *test_ctx;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl test_sss_idmap_setup(state);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl test_ctx = talloc_get_type(*state, struct test_ctx);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_non_null(test_ctx);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl setup_ranges_2922(test_ctx);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl return 0;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl}
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlstatic int test_sss_idmap_setup_with_domains_sec_slices(void **state)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl struct test_ctx *test_ctx;
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl test_sss_idmap_setup(state);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl test_ctx = talloc_get_type(*state, struct test_ctx);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_non_null(test_ctx);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl setup_ranges(test_ctx, false, false, true);
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlstatic int test_sss_idmap_setup_with_external_mappings(void **state)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_sss_idmap_setup(state);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl setup_ranges(test_ctx, true, false, false);
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlstatic int test_sss_idmap_setup_with_both(void **state)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_sss_idmap_setup(state);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl setup_ranges(test_ctx, false, false, false);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl setup_ranges(test_ctx, true, true, false);
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozekstatic int test_sss_idmap_teardown(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose talloc_free(test_ctx->idmap_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose talloc_free(test_ctx->mem_idmap);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_true(check_leaks_pop(test_ctx) == true);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose talloc_free(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_true(leak_check_teardown());
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosevoid test_add_domain(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct sss_idmap_range range;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.min = TEST_RANGE_MIN;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.max = TEST_RANGE_MAX;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain(test_ctx->idmap_ctx, TEST_DOM_NAME, TEST_DOM_SID,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &range);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain(test_ctx->idmap_ctx, TEST_DOM_NAME, TEST_DOM_SID,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &range);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID, &range, NULL, 0, false);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.min = TEST_RANGE_MIN + TEST_OFFSET;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.max = TEST_RANGE_MAX + TEST_OFFSET;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID, &range, NULL, 0, false);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME"X",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID, &range, NULL, TEST_OFFSET,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose false);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID"1", &range, NULL, TEST_OFFSET,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose false);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID, &range, NULL, TEST_OFFSET,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose true);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID, &range, NULL, TEST_OFFSET,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose false);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.min = TEST_RANGE_MIN + 2 * TEST_OFFSET;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose range.max = TEST_RANGE_MAX + 2 * TEST_OFFSET;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME"-nosid",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose NULL, &range, NULL, TEST_OFFSET,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose false);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SID_INVALID);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_add_domain_ex(test_ctx->idmap_ctx, TEST_DOM_NAME"-nosid",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose NULL, &range, NULL, TEST_OFFSET,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose true);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosevoid test_map_id(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose uint32_t id;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose char *sid = NULL;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"1-1", &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_DOMAIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_RANGE);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_OFFSET - 1, &sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_DOMAIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-0", &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(id, TEST_RANGE_MIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, id, &sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_string_equal(sid, TEST_DOM_SID"-0");
4537e95f6741ae05ec620e5b46ca1d4a3a1ceae5Pavel Březina sss_idmap_free_sid(test_ctx->idmap_ctx, sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID"-"TEST_OFFSET_STR, &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(id, TEST_RANGE_MIN+TEST_OFFSET);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, id, &sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_string_equal(sid, TEST_DOM_SID"-"TEST_OFFSET_STR);
4537e95f6741ae05ec620e5b46ca1d4a3a1ceae5Pavel Březina sss_idmap_free_sid(test_ctx->idmap_ctx, sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl/* https://fedorahosted.org/sssd/ticket/2922 */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl/* ID mapping - bug in computing max id for slice range */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichlvoid test_map_id_2922(void **state)
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl{
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl const char* TEST_2922_FIRST_SID = TEST_DOM_SID"-0";
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Last SID = first SID + (default) rangesize -1 */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl const char* TEST_2922_LAST_SID = TEST_DOM_SID"-199999";
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Last SID = first SID + rangesize */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl const char* TEST_2922_LAST_SID_PLUS_ONE = TEST_DOM_SID"-200000";
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl struct test_ctx *test_ctx;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl enum idmap_error_code err;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl uint32_t id;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl char *sid = NULL;
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl test_ctx = talloc_get_type(*state, struct test_ctx);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_non_null(test_ctx);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Min UNIX ID to SID */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_2922_MIN_ID, &sid);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_string_equal(sid, TEST_2922_FIRST_SID);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl sss_idmap_free_sid(test_ctx->idmap_ctx, sid);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* First SID to UNIX ID */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_2922_FIRST_SID, &id);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(id, TEST_2922_MIN_ID);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Max UNIX ID to SID */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_2922_MAX_ID, &sid);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_string_equal(sid, TEST_2922_LAST_SID);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl sss_idmap_free_sid(test_ctx->idmap_ctx, sid);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Last SID to UNIX ID */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_2922_LAST_SID, &id);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(id, TEST_2922_MAX_ID);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Max UNIX ID + 1 to SID */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_2922_MAX_ID + 1,
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl &sid);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_NO_DOMAIN);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Last SID + 1 to UNIX ID */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx,
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl TEST_2922_LAST_SID_PLUS_ONE, &id);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl /* Auto adding new ranges is disable in this test. */
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl assert_int_equal(err, IDMAP_NO_RANGE);
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl}
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichlvoid test_map_id_sec_slices(void **state)
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl{
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl struct test_ctx *test_ctx;
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl enum idmap_error_code err;
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl uint32_t id;
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl char *sid = NULL;
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl test_ctx = talloc_get_type(*state, struct test_ctx);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_non_null(test_ctx);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"1-1", &id);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_NO_DOMAIN);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-4000000",
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl &id);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(id, 575600000);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_OFFSET - 1, &sid);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_NO_DOMAIN);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-0", &id);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(id, TEST_RANGE_MIN);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, id, &sid);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_string_equal(sid, TEST_DOM_SID"-0");
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl sss_idmap_free_sid(test_ctx->idmap_ctx, sid);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl TEST_DOM_SID"-"TEST_OFFSET_STR, &id);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(id, TEST_RANGE_MIN+TEST_OFFSET);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, id, &sid);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_int_equal(err, IDMAP_SUCCESS);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl assert_string_equal(sid, TEST_DOM_SID"-"TEST_OFFSET_STR);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl sss_idmap_free_sid(test_ctx->idmap_ctx, sid);
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl}
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosevoid test_map_id_external(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose uint32_t id;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose char *sid = NULL;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"1-1", &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_DOMAIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_EXTERNAL);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_OFFSET - 1, &sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_DOMAIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-0", &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_EXTERNAL);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx, TEST_RANGE_MIN, &sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_EXTERNAL);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_sid_to_unix(test_ctx->idmap_ctx,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID"-"TEST_OFFSET_STR, &id);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_EXTERNAL);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_unix_to_sid(test_ctx->idmap_ctx,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_RANGE_MIN + TEST_OFFSET, &sid);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_EXTERNAL);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosevoid test_check_sid_id(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_check_sid_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_RANGE_MIN-1);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_RANGE);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_check_sid_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_RANGE_MIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_check_sid_unix(test_ctx->idmap_ctx, TEST_DOM_SID"1-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_RANGE_MIN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SID_UNKNOWN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_check_sid_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_RANGE_MAX + TEST_OFFSET);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_check_sid_unix(test_ctx->idmap_ctx, TEST_DOM_SID"-400000",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_RANGE_MAX + TEST_OFFSET + 1);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_NO_RANGE);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bosevoid test_has_algorithmic(void **state)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct test_ctx *test_ctx;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose bool use_id_mapping;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose enum idmap_error_code err;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_non_null(test_ctx);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_domain_has_algorithmic_mapping(NULL, NULL, &use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SID_INVALID);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_domain_has_algorithmic_mapping(NULL, TEST_DOM_SID,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_CONTEXT_INVALID);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_domain_has_algorithmic_mapping(test_ctx->idmap_ctx, NULL,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SID_INVALID);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_domain_has_algorithmic_mapping(test_ctx->idmap_ctx,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID"1",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SID_UNKNOWN);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_domain_has_algorithmic_mapping(test_ctx->idmap_ctx,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_DOM_SID,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_true(use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose err = sss_idmap_domain_has_algorithmic_mapping(test_ctx->idmap_ctx,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose TEST_2_DOM_SID,
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose assert_false(use_id_mapping);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bosevoid test_has_algorithmic_by_name(void **state)
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose{
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose struct test_ctx *test_ctx;
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose bool use_id_mapping;
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose enum idmap_error_code err;
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose test_ctx = talloc_get_type(*state, struct test_ctx);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_non_null(test_ctx);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose err = sss_idmap_domain_by_name_has_algorithmic_mapping(NULL, NULL, &use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_int_equal(err, IDMAP_ERROR);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose err = sss_idmap_domain_by_name_has_algorithmic_mapping(NULL, TEST_DOM_SID,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose &use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_int_equal(err, IDMAP_CONTEXT_INVALID);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose err = sss_idmap_domain_by_name_has_algorithmic_mapping(test_ctx->idmap_ctx, NULL,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose &use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_int_equal(err, IDMAP_ERROR);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose err = sss_idmap_domain_by_name_has_algorithmic_mapping(test_ctx->idmap_ctx,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose TEST_DOM_NAME"1",
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose &use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_int_equal(err, IDMAP_NAME_UNKNOWN);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose err = sss_idmap_domain_by_name_has_algorithmic_mapping(test_ctx->idmap_ctx,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose TEST_DOM_NAME,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose &use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_true(use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose err = sss_idmap_domain_by_name_has_algorithmic_mapping(test_ctx->idmap_ctx,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose TEST_2_DOM_NAME,
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose &use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose assert_false(use_id_mapping);
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose}
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bosevoid test_sss_idmap_check_collision_ex(void **state)
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose{
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose enum idmap_error_code err;
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose struct sss_idmap_range r1 = {TEST_RANGE_MIN, TEST_RANGE_MAX};
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose struct sss_idmap_range r2 = {TEST_2_RANGE_MIN, TEST_2_RANGE_MAX};
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_EXT_MAPPING,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_DOM_NAME, TEST_2_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_EXT_MAPPING);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Same name, different SID */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_EXT_MAPPING,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_DOM_NAME, TEST_2_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_EXT_MAPPING);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Same SID, different name */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_EXT_MAPPING,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_DOM_NAME, TEST_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_EXT_MAPPING);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Same SID and name, no overlaps */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_EXT_MAPPING,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_DOM_NAME, TEST_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_EXT_MAPPING);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Same SID and name, different mappings */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_EXT_MAPPING,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_DOM_NAME, TEST_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose !TEST_EXT_MAPPING);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Same SID and name, Overlapping RID range */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose false,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_DOM_NAME, TEST_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose false);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Different SID and name, Overlapping RID range */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose false,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_DOM_NAME, TEST_2_DOM_SID, &r2,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose false);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Overlapping ranges with no external mapping */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose false,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_DOM_NAME, TEST_2_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose false);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_COLLISION);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose /* Overlapping ranges with external mapping */
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose err = sss_idmap_check_collision_ex(TEST_DOM_NAME, TEST_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose true,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_DOM_NAME, TEST_2_DOM_SID, &r1,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose TEST_2_FIRST_RID, NULL,
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose true);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose assert_int_equal(err, IDMAP_SUCCESS);
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose}
ff6e24f4474cca6226cd44c47ba2ec6ba6cf9a16Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Boseint main(int argc, const char *argv[])
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose{
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose poptContext pc;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose int opt;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose struct poptOption long_options[] = {
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose POPT_AUTOHELP
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose SSSD_DEBUG_OPTS
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose POPT_TABLEEND
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose };
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek const struct CMUnitTest tests[] = {
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_add_domain,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_map_id,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup_with_domains,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl cmocka_unit_test_setup_teardown(test_map_id_2922,
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl test_sss_idmap_setup_with_domains_2922,
9d17f436795a36b1b1126f444923aa847fd0f93aPavel Reichl test_sss_idmap_teardown),
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl cmocka_unit_test_setup_teardown(test_map_id_sec_slices,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl test_sss_idmap_setup_with_domains_sec_slices,
8babbeee01e67893af4828ddfc922ecac0be4197Pavel Reichl test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_map_id_external,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup_with_external_mappings,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_check_sid_id,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup_with_domains,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_check_sid_id,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup_with_external_mappings,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_has_algorithmic,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup_with_both,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_has_algorithmic_by_name,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_setup_with_both,
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek test_sss_idmap_teardown),
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test(test_sss_idmap_check_collision_ex),
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose };
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose /* Set debug level to invalid value so we can deside if -d 0 was used. */
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose debug_level = SSSDBG_INVALID;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose pc = poptGetContext(argv[0], argc, argv, long_options, 0);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose while((opt = poptGetNextOpt(pc)) != -1) {
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose switch(opt) {
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose default:
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose fprintf(stderr, "\nInvalid option %s: %s\n\n",
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose poptBadOption(pc, 0), poptStrerror(opt));
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose poptPrintUsage(pc, stderr, 0);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose return 1;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose }
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose }
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose poptFreeContext(pc);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
6b57784f0f175275fd900eca21c77415e3a5ea52Jakub Hrozek DEBUG_CLI_INIT(debug_level);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose tests_set_cwd();
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return cmocka_run_group_tests(tests, NULL, NULL);
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose}