From 9d7cc3df00fde4c582ff64a19b6ac67839692fe9 Mon Sep 17 00:00:00 2001 From: Michal Zidek Date: Tue, 21 Apr 2015 17:40:46 +0200 Subject: util: Add function to parse internal fqname format Add lightweight function to parse internal fqname format (shortname@domain). This function does not require the sss_names to be initialized. --- src/util/usertools.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/util/util.h | 6 ++++++ 2 files changed, 58 insertions(+) diff --git a/src/util/usertools.c b/src/util/usertools.c index 18639d9b6..bb6bbd14e 100644 --- a/src/util/usertools.c +++ b/src/util/usertools.c @@ -716,3 +716,55 @@ errno_t sss_user_by_name_or_uid(const char *input, uid_t *_uid, gid_t *_gid) } return EOK; } + +/* Accepts fqname in the format shortname@domname only. */ +errno_t sss_parse_internal_fqname(TALLOC_CTX *mem_ctx, + const char *fqname, + char **_shortname, + char **_dom_name) +{ + errno_t ret; + char *separator; + char *shortname = NULL; + char *dom_name = NULL; + size_t shortname_len; + TALLOC_CTX *tmp_ctx; + + tmp_ctx = talloc_new(NULL); + if (tmp_ctx == NULL) { + return ENOMEM; + } + + separator = strrchr(fqname, '@'); + if (separator == NULL) { + /*The name does not contain domain component. */ + ret = EINVAL; + goto done; + } + + dom_name = talloc_strdup(tmp_ctx, separator + 1); + if (dom_name == NULL) { + ret = ENOMEM; + goto done; + } + + shortname_len = strlen(fqname) - strlen(separator); + shortname = talloc_strndup(tmp_ctx, fqname, shortname_len); + if (shortname == NULL) { + ret = ENOMEM; + goto done; + } + + if (_dom_name != NULL) { + *_dom_name = talloc_steal(mem_ctx, dom_name); + } + + if (_shortname != NULL) { + *_shortname = talloc_steal(mem_ctx, shortname); + } + + ret = EOK; +done: + talloc_free(tmp_ctx); + return ret; +} diff --git a/src/util/util.h b/src/util/util.h index e1245bb0f..6e7491208 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -363,6 +363,12 @@ char * sss_get_domain_name(TALLOC_CTX *mem_ctx, const char *orig_name, struct sss_domain_info *dom); +/* Accepts fqname in the format shortname@domname only. */ +errno_t sss_parse_internal_fqname(TALLOC_CTX *mem_ctx, + const char *fqname, + char **_shortname, + char **_dom_name); + /* from backup-file.c */ int backup_file(const char *src, int dbglvl); -- cgit