diff options
Diffstat (limited to 'src/util/usertools.c')
-rw-r--r-- | src/util/usertools.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/util/usertools.c b/src/util/usertools.c index 44a56ed97..ee2e86264 100644 --- a/src/util/usertools.c +++ b/src/util/usertools.c @@ -797,3 +797,37 @@ char *sss_create_internal_fqname(TALLOC_CTX *mem_ctx, done: return fqname; } + +/* Creates a list of internal fqnames in format shortname@domname. + * The domain portion is lowercased. */ +char **sss_create_internal_fqname_list(TALLOC_CTX *mem_ctx, + const char * const *shortname_list, + const char *dom_name) +{ + char **fqname_list = NULL; + size_t c; + + if (shortname_list == NULL || dom_name == NULL) { + /* Avoid allocating null@null */ + return NULL; + } + + for (c = 0; shortname_list[c] != NULL; c++); + fqname_list = talloc_zero_array(mem_ctx, char *, c+1); + if (fqname_list == NULL) { + talloc_free(fqname_list); + return NULL; + } + + for (size_t i = 0; shortname_list[i] != NULL; i++) { + fqname_list[i] = sss_create_internal_fqname(fqname_list, + shortname_list[i], + dom_name); + if (fqname_list == NULL) { + talloc_free(fqname_list); + return NULL; + } + } + + return fqname_list; +} |