diff options
author | Michal Zidek <mzidek@redhat.com> | 2015-04-21 17:40:46 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2016-01-13 11:28:44 +0100 |
commit | 9d7cc3df00fde4c582ff64a19b6ac67839692fe9 (patch) | |
tree | 973fa33b9d30405d45325bdc9581c679f76bbc49 | |
parent | c42bd764452ecda95b7d8d3ce027c70b4ad5982c (diff) | |
download | sssd-9d7cc3df00fde4c582ff64a19b6ac67839692fe9.tar.gz sssd-9d7cc3df00fde4c582ff64a19b6ac67839692fe9.tar.xz sssd-9d7cc3df00fde4c582ff64a19b6ac67839692fe9.zip |
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.
-rw-r--r-- | src/util/usertools.c | 52 | ||||
-rw-r--r-- | src/util/util.h | 6 |
2 files changed, 58 insertions, 0 deletions
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); |