From 5242eef8fc54636a41701fd9d7083ba6e4a4e0b3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 26 Jun 2024 18:18:39 +0200 Subject: Merging upstream version 1:4.15.2. Signed-off-by: Daniel Baumann --- tests/unit/test_chkname.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 tests/unit/test_chkname.c (limited to 'tests/unit/test_chkname.c') diff --git a/tests/unit/test_chkname.c b/tests/unit/test_chkname.c new file mode 100644 index 0000000..e0f9f84 --- /dev/null +++ b/tests/unit/test_chkname.c @@ -0,0 +1,149 @@ +/* + * SPDX-FileCopyrightText: 2023, Alejandro Colomar + * SPDX-License-Identifier: BSD-3-Clause + */ + + +#include +#include +#include +#include +#include + +#include // Required by +#include // Required by +#include // Required by +#include // Required by +#include + +#include "alloc.h" +#include "chkname.h" + + +static void test_is_valid_user_name_ok(void **state); +static void test_is_valid_user_name_ok_dollar(void **state); +static void test_is_valid_user_name_nok_dash(void **state); +static void test_is_valid_user_name_nok_dir(void **state); +static void test_is_valid_user_name_nok_dollar(void **state); +static void test_is_valid_user_name_nok_empty(void **state); +static void test_is_valid_user_name_nok_numeric(void **state); +static void test_is_valid_user_name_nok_otherchars(void **state); +static void test_is_valid_user_name_long(void **state); + + +int +main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(test_is_valid_user_name_ok), + cmocka_unit_test(test_is_valid_user_name_ok_dollar), + cmocka_unit_test(test_is_valid_user_name_nok_dash), + cmocka_unit_test(test_is_valid_user_name_nok_dir), + cmocka_unit_test(test_is_valid_user_name_nok_dollar), + cmocka_unit_test(test_is_valid_user_name_nok_empty), + cmocka_unit_test(test_is_valid_user_name_nok_numeric), + cmocka_unit_test(test_is_valid_user_name_nok_otherchars), + cmocka_unit_test(test_is_valid_user_name_long), + }; + + return cmocka_run_group_tests(tests, NULL, NULL); +} + + +static void +test_is_valid_user_name_ok(void **state) +{ + assert_true(is_valid_user_name("alx")); + assert_true(is_valid_user_name("u-ser")); + assert_true(is_valid_user_name("u")); + assert_true(is_valid_user_name("I")); + assert_true(is_valid_user_name("_")); + assert_true(is_valid_user_name("_.-")); + assert_true(is_valid_user_name(".007")); + assert_true(is_valid_user_name("0_0")); + assert_true(is_valid_user_name("some_longish_user_name_sHould_also_be_valid.wHY_not")); +} + + +static void +test_is_valid_user_name_ok_dollar(void **state) +{ + // Non-POSIX extension for Samba 3.x "add machine script". + assert_true(is_valid_user_name("dollar$")); + assert_true(is_valid_user_name("SSS$")); +} + + +static void +test_is_valid_user_name_nok_dash(void **state) +{ + assert_true(false == is_valid_user_name("-")); + assert_true(false == is_valid_user_name("-not-valid")); + assert_true(false == is_valid_user_name("--C")); +} + + +static void +test_is_valid_user_name_nok_dir(void **state) +{ + assert_true(false == is_valid_user_name(".")); + assert_true(false == is_valid_user_name("..")); +} + + +static void +test_is_valid_user_name_nok_dollar(void **state) +{ + assert_true(false == is_valid_user_name("$")); + assert_true(false == is_valid_user_name("$dollar")); + assert_true(false == is_valid_user_name("mo$ney")); + assert_true(false == is_valid_user_name("do$$ar")); + assert_true(false == is_valid_user_name("foo$bar$")); +} + + +static void +test_is_valid_user_name_nok_empty(void **state) +{ + assert_true(false == is_valid_user_name("")); +} + + +static void +test_is_valid_user_name_nok_numeric(void **state) +{ + assert_true(false == is_valid_user_name("6")); + assert_true(false == is_valid_user_name("42")); +} + + +static void +test_is_valid_user_name_nok_otherchars(void **state) +{ + assert_true(false == is_valid_user_name("no spaces")); + assert_true(false == is_valid_user_name("no,")); + assert_true(false == is_valid_user_name("no;")); + assert_true(false == is_valid_user_name("no:")); +} + + +static void +test_is_valid_user_name_long(void **state) +{ + size_t max; + char *name; + + max = sysconf(_SC_LOGIN_NAME_MAX); + name = MALLOC(max + 1, char); + assert_true(name != NULL); + + memset(name, '_', max); + + name[max] = '\0'; + assert_true(false == is_valid_user_name(name)); + + name[max - 1] = '\0'; + assert_true(is_valid_user_name(name)); + + free(name); +} -- cgit v1.2.3