diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tests/cmocka/test_utils.c | 33 | ||||
-rw-r--r-- | src/util/usertools.c | 40 | ||||
-rw-r--r-- | src/util/util.h | 6 |
3 files changed, 79 insertions, 0 deletions
diff --git a/src/tests/cmocka/test_utils.c b/src/tests/cmocka/test_utils.c index 456629581..e171848f1 100644 --- a/src/tests/cmocka/test_utils.c +++ b/src/tests/cmocka/test_utils.c @@ -1679,6 +1679,36 @@ static void test_sss_create_internal_fqname_list(void **state) assert_true(check_leaks_pop(global_talloc_context) == true); } +static void test_sss_output_name(void **state) +{ + char *outname; + char *fqname; + + check_leaks_push(global_talloc_context); + + fqname = sss_create_internal_fqname(global_talloc_context, + "Foo Bar", "DOM"); + assert_non_null(fqname); + + outname = sss_output_name(global_talloc_context, fqname, true, 0); + assert_non_null(outname); + assert_string_equal(outname, "Foo Bar"); + talloc_zfree(outname); + + outname = sss_output_name(global_talloc_context, fqname, false, 0); + assert_non_null(outname); + assert_string_equal(outname, "foo bar"); + talloc_zfree(outname); + + outname = sss_output_name(global_talloc_context, fqname, false, '-'); + assert_non_null(outname); + assert_string_equal(outname, "foo-bar"); + talloc_zfree(outname); + + talloc_free(fqname); + assert_true(check_leaks_pop(global_talloc_context) == true); +} + int main(int argc, const char *argv[]) { poptContext pc; @@ -1770,6 +1800,9 @@ int main(int argc, const char *argv[]) cmocka_unit_test_setup_teardown(test_sss_create_internal_fqname_list, setup_leak_tests, teardown_leak_tests), + cmocka_unit_test_setup_teardown(test_sss_output_name, + setup_leak_tests, + teardown_leak_tests), }; /* Set debug level to invalid value so we can deside if -d 0 was used. */ diff --git a/src/util/usertools.c b/src/util/usertools.c index ee2e86264..8e5be9788 100644 --- a/src/util/usertools.c +++ b/src/util/usertools.c @@ -831,3 +831,43 @@ char **sss_create_internal_fqname_list(TALLOC_CTX *mem_ctx, return fqname_list; } + +char *sss_output_name(TALLOC_CTX *mem_ctx, + const char *name, + bool case_sensitive, + const char replace_space) +{ + TALLOC_CTX *tmp_ctx = NULL; + errno_t ret; + char *shortname; + char *outname = NULL; + + tmp_ctx = talloc_new(NULL); + if (!tmp_ctx) return NULL; + + ret = sss_parse_internal_fqname(tmp_ctx, name, &shortname, NULL); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, "sss_parse_internal_fqname failed\n"); + goto done; + } + + outname = sss_get_cased_name(tmp_ctx, shortname, case_sensitive); + if (outname == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, + "sss_get_cased_name failed, skipping\n"); + ret = EIO; + goto done; + } + + outname = sss_replace_space(tmp_ctx, outname, replace_space); + if (outname == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "sss_replace_space failed\n"); + ret = EIO; + goto done; + } + + outname = talloc_steal(mem_ctx, outname); +done: + talloc_free(tmp_ctx); + return outname; +} diff --git a/src/util/util.h b/src/util/util.h index cd975c2c8..3b8acd1c5 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -290,6 +290,12 @@ char **sss_create_internal_fqname_list(TALLOC_CTX *mem_ctx, const char * const *shortname_list, const char *dom_name); +/* Turn fqname into cased shortname with replaced space. */ +char *sss_output_name(TALLOC_CTX *mem_ctx, + const char *fqname, + bool case_sensitive, + const char replace_space); + /* from backup-file.c */ int backup_file(const char *src, int dbglvl); |