diff options
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 132 | ||||
-rw-r--r-- | src/tests/cmocka/test_fqnames.c | 21 | ||||
-rw-r--r-- | src/tests/cmocka/test_nss_srv.c | 21 | ||||
-rw-r--r-- | src/tests/cmocka/test_utils.c | 6 | ||||
-rw-r--r-- | src/util/usertools.c | 114 | ||||
-rw-r--r-- | src/util/util.h | 12 |
6 files changed, 97 insertions, 209 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index 715313f89..0b02bf6e8 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -298,20 +298,14 @@ static int fill_pwent(struct sss_packet *packet, uint32_t uid; uint32_t gid; size_t rsize, rp, blen; - size_t dom_len = 0; - int delim = 0; - int i, ret, num, t; + int fq_len = 0; + int i, ret, num; bool add_domain = (!IS_SUBDOMAIN(dom) && dom->fqnames); const char *domain = dom->name; bool packet_initialized = false; int ncret; TALLOC_CTX *tmp_ctx = NULL; - if (add_domain) { - delim = 1; - dom_len = sss_fqdom_len(dom->names, dom); - } - to_sized_string(&pwfield, nctx->pwfield); rp = 2*sizeof(uint32_t); @@ -381,7 +375,17 @@ static int fill_pwent(struct sss_packet *packet, rsize = 2 * sizeof(uint32_t) + name.len + gecos.len + homedir.len + shell.len + pwfield.len; - if (add_domain) rsize += delim + dom_len; + + if (add_domain) { + fq_len = sss_fqname(NULL, 0, dom->names, dom, name.str); + if (fq_len >= 0) { + fq_len += 1; + rsize -= name.len; + rsize += fq_len; + } else { + fq_len = 0; + } + } ret = sss_packet_grow(packet, rsize); if (ret != EOK) { @@ -394,25 +398,8 @@ static int fill_pwent(struct sss_packet *packet, SAFEALIGN_SET_UINT32(&body[rp], gid, &rp); if (add_domain) { - ret = sss_fqname((char *) &body[rp], name.len + delim + dom_len, - dom->names, dom, name.str); - if (ret >= (name.len + delim + dom_len)) { - /* need more space, got creative with the print format ? */ - t = ret - (name.len + delim + dom_len) + 1; - ret = sss_packet_grow(packet, t); - if (ret != EOK) { - num = 0; - goto done; - } - delim += t; - sss_packet_get_body(packet, &body, &blen); - - /* retry */ - ret = sss_fqname((char *) &body[rp], name.len + delim + dom_len, - dom->names, dom, name.str); - } - - if (ret != name.len + delim + dom_len - 1) { + ret = sss_fqname((char *) &body[rp], fq_len, dom->names, dom, name.str); + if (ret < 0 || ret != fq_len - 1) { DEBUG(1, ("Failed to generate a fully qualified name for user " "[%s] in [%s]! Skipping user.\n", name.str, domain)); continue; @@ -2281,8 +2268,7 @@ static int fill_members(struct sss_packet *packet, struct sized_string name; TALLOC_CTX *tmp_ctx = NULL; - size_t delim = 0; - size_t dom_len = 0; + int nlen = 0; uint8_t *body; size_t blen; @@ -2319,9 +2305,6 @@ static int fill_members(struct sss_packet *packet, } } - delim = 0; - dom_len = 0; - ret = parse_member(tmp_ctx, dom, tmpstr, &member_dom, &name, &add_domain); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, @@ -2330,44 +2313,33 @@ static int fill_members(struct sss_packet *packet, } if (add_domain) { - delim = 1; - dom_len = sss_fqdom_len(member_dom->names, member_dom); + nlen = sss_fqname(NULL, 0, dom->names, dom, name.str); + if (nlen >= 0) { + nlen += 1; + } else { + /* Other failures caught below */ + nlen = 0; + } + } else { + nlen = name.len; } - ret = sss_packet_grow(packet, name.len + delim + dom_len); + ret = sss_packet_grow(packet, nlen); if (ret != EOK) { goto done; } sss_packet_get_body(packet, &body, &blen); if (add_domain) { - ret = sss_fqname((char *)&body[rzero + rsize], - name.len + delim + dom_len, + ret = sss_fqname((char *)&body[rzero + rsize], nlen, member_dom->names, member_dom, name.str); - if (ret >= (name.len + delim + dom_len)) { - /* need more space, - * got creative with the print format ? */ - int t = ret - (name.len + delim + dom_len) + 1; - ret = sss_packet_grow(packet, t); - if (ret != EOK) { - goto done; - } - sss_packet_get_body(packet, &body, &blen); - delim += t; - - /* retry */ - ret = sss_fqname((char *)&body[rzero + rsize], - name.len + delim + dom_len, - member_dom->names, member_dom, name.str); - } - - if (ret != name.len + delim + dom_len - 1) { + if (ret < 0 || ret != nlen - 1) { DEBUG(SSSDBG_OP_FAILURE, ("Failed to generate a fully qualified name" " for member [%s@%s] of group [%s]!" " Skipping\n", name.str, domain, (char *)&body[rzero+STRS_ROFFSET])); /* reclaim space */ - ret = sss_packet_shrink(packet, name.len + delim + dom_len); + ret = sss_packet_shrink(packet, nlen); if (ret != EOK) { goto done; } @@ -2378,7 +2350,7 @@ static int fill_members(struct sss_packet *packet, memcpy(&body[rzero + rsize], name.str, name.len); } - rsize += name.len + delim + dom_len; + rsize += nlen; memnum++; } @@ -2409,8 +2381,7 @@ static int fill_grent(struct sss_packet *packet, struct sized_string name; struct sized_string pwfield; struct sized_string fullname; - size_t delim = 0; - size_t dom_len = 0; + int fq_len = 0; int i = 0; int ret, num, memnum; size_t rzero, rsize; @@ -2418,11 +2389,6 @@ static int fill_grent(struct sss_packet *packet, const char *domain = dom->name; TALLOC_CTX *tmp_ctx = NULL; - if (add_domain) { - delim = 1; - dom_len = sss_fqdom_len(dom->names, dom); - } - to_sized_string(&pwfield, nctx->pwfield); num = 0; @@ -2483,7 +2449,18 @@ static int fill_grent(struct sss_packet *packet, /* fill in gid and name and set pointer for number of members */ rsize = STRS_ROFFSET + name.len + pwfield.len; /* name\0x\0 */ - if (add_domain) rsize += delim + dom_len; + + if (add_domain) { + fq_len = sss_fqname(NULL, 0, dom->names, dom, name.str); + if (fq_len >= 0) { + fq_len += 1; + rsize -= name.len; + rsize += fq_len; + } else { + /* Other failures caught below */ + fq_len = 0; + } + } ret = sss_packet_grow(packet, rsize); if (ret != EOK) { @@ -2500,28 +2477,9 @@ static int fill_grent(struct sss_packet *packet, /* 8-X: sequence of strings (name, passwd, mem..) */ if (add_domain) { - ret = sss_fqname((char *)&body[rzero+STRS_ROFFSET], - name.len + delim + dom_len, + ret = sss_fqname((char *)&body[rzero+STRS_ROFFSET], fq_len, dom->names, dom, name.str); - if (ret >= (name.len + delim + dom_len)) { - /* need more space, got creative with the print format ? */ - int t = ret - (name.len + delim + dom_len) + 1; - ret = sss_packet_grow(packet, t); - if (ret != EOK) { - num = 0; - goto done; - } - sss_packet_get_body(packet, &body, &blen); - rsize += t; - delim += t; - - /* retry */ - ret = sss_fqname((char *)&body[rzero+STRS_ROFFSET], - name.len + delim + dom_len, - dom->names, dom, name.str); - } - - if (ret != name.len + delim + dom_len - 1) { + if (ret < 0 || ret != fq_len - 1) { DEBUG(1, ("Failed to generate a fully qualified name for" " group [%s] in [%s]! Skipping\n", name.str, domain)); /* reclaim space */ diff --git a/src/tests/cmocka/test_fqnames.c b/src/tests/cmocka/test_fqnames.c index e0735083a..90f60c5be 100644 --- a/src/tests/cmocka/test_fqnames.c +++ b/src/tests/cmocka/test_fqnames.c @@ -76,7 +76,6 @@ void test_default(void **state) char *fqdn; const int fqdn_size = 255; char fqdn_s[fqdn_size]; - size_t domsize; if (test_ctx == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, ("Type mismatch\n")); @@ -87,7 +86,6 @@ void test_default(void **state) "(?P<name>[^@]+)@?(?P<domain>[^@]*$)", "%1$s@%2$s", &test_ctx->nctx); assert_int_equal(ret, EOK); - assert_int_equal(test_ctx->nctx->fq_flags, FQ_FMT_NAME | FQ_FMT_DOMAIN); fqdn = sss_tc_fqname(test_ctx, test_ctx->nctx, test_ctx->dom, NAME); assert_non_null(fqdn); @@ -98,9 +96,6 @@ void test_default(void **state) assert_int_equal(ret + 1, sizeof(NAME"@"DOMNAME)); assert_string_equal(fqdn_s, NAME"@"DOMNAME); - domsize = sss_fqdom_len(test_ctx->nctx, test_ctx->dom); - assert_int_equal(domsize, sizeof(DOMNAME)-1); - talloc_free(test_ctx->nctx); } @@ -113,7 +108,6 @@ void test_all(void **state) char *fqdn; const int fqdn_size = 255; char fqdn_s[fqdn_size]; - size_t domsize; if (test_ctx == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, ("Type mismatch\n")); @@ -124,8 +118,6 @@ void test_all(void **state) "(?P<name>[^@]+)@?(?P<domain>[^@]*$)", "%1$s@%2$s@%3$s", &test_ctx->nctx); assert_int_equal(ret, EOK); - assert_int_equal(test_ctx->nctx->fq_flags, - FQ_FMT_NAME | FQ_FMT_DOMAIN | FQ_FMT_FLAT_NAME); fqdn = sss_tc_fqname(test_ctx, test_ctx->nctx, test_ctx->dom, NAME); assert_non_null(fqdn); @@ -136,9 +128,6 @@ void test_all(void **state) assert_int_equal(ret + 1, sizeof(NAME"@"DOMNAME"@"FLATNAME)); assert_string_equal(fqdn_s, NAME"@"DOMNAME"@"FLATNAME); - domsize = sss_fqdom_len(test_ctx->nctx, test_ctx->dom); - assert_int_equal(domsize, sizeof(DOMNAME)-1 + sizeof(FLATNAME)-1); - talloc_free(test_ctx->nctx); } @@ -151,7 +140,6 @@ void test_flat(void **state) char *fqdn; const int fqdn_size = 255; char fqdn_s[fqdn_size]; - size_t domsize; if (test_ctx == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, ("Type mismatch\n")); @@ -162,7 +150,6 @@ void test_flat(void **state) "(?P<name>[^@]+)@?(?P<domain>[^@]*$)", "%1$s@%3$s", &test_ctx->nctx); assert_int_equal(ret, EOK); - assert_int_equal(test_ctx->nctx->fq_flags, FQ_FMT_NAME | FQ_FMT_FLAT_NAME); fqdn = sss_tc_fqname(test_ctx, test_ctx->nctx, test_ctx->dom, NAME); assert_non_null(fqdn); @@ -173,9 +160,6 @@ void test_flat(void **state) assert_int_equal(ret + 1, sizeof(NAME"@"FLATNAME)); assert_string_equal(fqdn_s, NAME"@"FLATNAME); - domsize = sss_fqdom_len(test_ctx->nctx, test_ctx->dom); - assert_int_equal(domsize, sizeof(FLATNAME)-1); - talloc_free(test_ctx->nctx); } @@ -188,7 +172,6 @@ void test_flat_fallback(void **state) char *fqdn; const int fqdn_size = 255; char fqdn_s[fqdn_size]; - size_t domsize; if (test_ctx == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, ("Type mismatch\n")); @@ -199,7 +182,6 @@ void test_flat_fallback(void **state) "(?P<name>[^@]+)@?(?P<domain>[^@]*$)", "%1$s@%3$s", &test_ctx->nctx); assert_int_equal(ret, EOK); - assert_int_equal(test_ctx->nctx->fq_flags, FQ_FMT_NAME | FQ_FMT_FLAT_NAME); test_ctx->dom->flat_name = NULL; @@ -215,9 +197,6 @@ void test_flat_fallback(void **state) assert_int_equal(ret + 1, sizeof(NAME"@"DOMNAME)); assert_string_equal(fqdn_s, NAME"@"DOMNAME); - domsize = sss_fqdom_len(test_ctx->nctx, test_ctx->dom); - assert_int_equal(domsize, sizeof(DOMNAME)-1); - talloc_free(test_ctx->nctx); } diff --git a/src/tests/cmocka/test_nss_srv.c b/src/tests/cmocka/test_nss_srv.c index d1a4d4bd8..4db108a79 100644 --- a/src/tests/cmocka/test_nss_srv.c +++ b/src/tests/cmocka/test_nss_srv.c @@ -540,8 +540,8 @@ void test_nss_getpwnam_fqdn(void **state) * Check that FQDN processing is able to handle arbitrarily sized * delimeter */ -static int test_nss_getpwnam_check_resize_fqdn(uint32_t status, - uint8_t *body, size_t blen) +static int test_nss_getpwnam_check_fancy_fqdn(uint32_t status, + uint8_t *body, size_t blen) { struct passwd pwd; errno_t ret; @@ -555,29 +555,28 @@ static int test_nss_getpwnam_check_resize_fqdn(uint32_t status, assert_int_equal(pwd.pw_uid, 125); assert_int_equal(pwd.pw_gid, 458); - assert_string_equal(pwd.pw_name, "testuser_fqdn_resize@@@@@"TEST_DOM_NAME); + assert_string_equal(pwd.pw_name, "testuser_fqdn_fancy@@@@@"TEST_DOM_NAME); assert_string_equal(pwd.pw_shell, "/bin/sh"); return EOK; } -void test_nss_getpwnam_fqdn_resize(void **state) +void test_nss_getpwnam_fqdn_fancy(void **state) { errno_t ret; /* Prime the cache with a valid user */ ret = sysdb_add_user(nss_test_ctx->tctx->dom, - "testuser_fqdn_resize", 125, 458, "test user", + "testuser_fqdn_fancy", 125, 458, "test user", "/home/testuser", "/bin/sh", NULL, NULL, 300, 0); assert_int_equal(ret, EOK); - mock_input_user_or_group("testuser_fqdn_resize@"TEST_DOM_NAME); + mock_input_user_or_group("testuser_fqdn_fancy@"TEST_DOM_NAME); will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETPWNAM); mock_fill_user(); - will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL); /* Query for that user, call a callback when command finishes */ - set_cmd_cb(test_nss_getpwnam_check_resize_fqdn); + set_cmd_cb(test_nss_getpwnam_check_fancy_fqdn); nss_test_ctx->cctx->rctx->domains[0].fqnames = true; ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETPWNAM, nss_test_ctx->nss_cmds); @@ -1298,7 +1297,7 @@ void nss_subdom_test_setup(void **state) nss_test_ctx->subdom = subdomain; } -void nss_fqdn_resize_test_setup(void **state) +void nss_fqdn_fancy_test_setup(void **state) { struct sss_test_conf_param params[] = { { "enumerate", "false" }, @@ -1339,8 +1338,8 @@ int main(int argc, const char *argv[]) nss_test_setup, nss_test_teardown), unit_test_setup_teardown(test_nss_getpwnam_fqdn, nss_fqdn_test_setup, nss_test_teardown), - unit_test_setup_teardown(test_nss_getpwnam_fqdn_resize, - nss_fqdn_resize_test_setup, nss_test_teardown), + unit_test_setup_teardown(test_nss_getpwnam_fqdn_fancy, + nss_fqdn_fancy_test_setup, nss_test_teardown), unit_test_setup_teardown(test_nss_getgrnam_no_members, nss_test_setup, nss_test_teardown), unit_test_setup_teardown(test_nss_getgrnam_members, diff --git a/src/tests/cmocka/test_utils.c b/src/tests/cmocka/test_utils.c index eeef9ee0c..13a67f756 100644 --- a/src/tests/cmocka/test_utils.c +++ b/src/tests/cmocka/test_utils.c @@ -531,8 +531,7 @@ void test_sss_names_init(void **state) assert_int_equal(ret, EOK); assert_non_null(names_ctx); assert_string_equal(names_ctx->re_pattern, GLOBAL_RE_EXPRESSION); - assert_string_equal(names_ctx->fq_fmt, GLOBAL_FULL_NAME_FORMAT"%3$s"); - assert_int_equal(names_ctx->fq_flags, FQ_FMT_NAME|FQ_FMT_DOMAIN); + assert_string_equal(names_ctx->fq_fmt, GLOBAL_FULL_NAME_FORMAT); talloc_free(names_ctx); @@ -541,8 +540,7 @@ void test_sss_names_init(void **state) assert_int_equal(ret, EOK); assert_non_null(names_ctx); assert_string_equal(names_ctx->re_pattern, DOMAIN_RE_EXPRESSION); - assert_string_equal(names_ctx->fq_fmt, DOMAIN_FULL_NAME_FORMAT"%2$s"); - assert_int_equal(names_ctx->fq_flags, FQ_FMT_NAME|FQ_FMT_FLAT_NAME); + assert_string_equal(names_ctx->fq_fmt, DOMAIN_FULL_NAME_FORMAT); talloc_free(names_ctx); } diff --git a/src/util/usertools.c b/src/util/usertools.c index cd57d0c57..c77aa7ce0 100644 --- a/src/util/usertools.c +++ b/src/util/usertools.c @@ -26,6 +26,7 @@ #include "confdb/confdb.h" #include "util/util.h" +#include "util/safe-format-string.h" #include "responder/common/responder.h" #ifdef HAVE_LIBPCRE_LESSER_THAN_7 @@ -138,18 +139,7 @@ done: static errno_t sss_fqnames_init(struct sss_names_ctx *nctx, const char *fq_fmt) { - struct pattern_desc { - const char *pattern; - const char *desc; - int flag; - }; - - struct pattern_desc fqname_patterns[] = { - { "%1$s", "user name", FQ_FMT_NAME }, - { "%2$s", "domain name", FQ_FMT_DOMAIN }, - { "%3$s", "domain flat name", FQ_FMT_FLAT_NAME }, - { NULL, NULL, 0 } - }; + char *fq; nctx->fq_fmt = talloc_strdup(nctx, fq_fmt); if (nctx->fq_fmt == NULL) { @@ -158,34 +148,20 @@ static errno_t sss_fqnames_init(struct sss_names_ctx *nctx, const char *fq_fmt) DEBUG(SSSDBG_CONF_SETTINGS, ("Using fq format [%s].\n", nctx->fq_fmt)); - /* Fail if the name specifier is missing and warn if the domain - * specifier is missing - */ - if (strstr(fq_fmt, fqname_patterns[0].pattern) == NULL) { + /* Fail if the name specifier is missing, or if the format is + * invalid */ + fq = sss_tc_fqname2 (nctx, nctx, "unused.example.com", "unused", "the-test-user"); + if (fq == NULL) { + DEBUG(SSSDBG_OP_FAILURE, + ("The fq format is invalid [%s]", nctx->fq_fmt)); + return EINVAL; + } else if (strstr (fq, "the-test-user") == NULL) { DEBUG(SSSDBG_OP_FAILURE, ("Username pattern not found in [%s]\n", nctx->fq_fmt)); return ENOENT; } - nctx->fq_flags = FQ_FMT_NAME; - - for (int i = 1; fqname_patterns[i].pattern; i++) { - char *s; - s = strstr(fq_fmt, fqname_patterns[i].pattern); - if (s == NULL) { - /* Append the format specifier */ - nctx->fq_fmt = talloc_strdup_append(nctx->fq_fmt, - fqname_patterns[i].pattern); - if (nctx->fq_fmt == NULL) { - return ENOMEM; - } - continue; - } - - DEBUG(SSSDBG_CONF_SETTINGS, - ("Found the pattern for %s\n", fqname_patterns[i].desc)); - nctx->fq_flags |= fqname_patterns[i].flag; - } + talloc_free (fq); return EOK; } @@ -568,19 +544,13 @@ sss_get_cased_name_list(TALLOC_CTX *mem_ctx, const char * const *orig, } static inline const char * -safe_fq_str(struct sss_names_ctx *nctx, uint8_t part, const char *str) -{ - return nctx->fq_flags & part ? str : ""; -} - -static inline const char * -safe_flat_name(struct sss_names_ctx *nctx, struct sss_domain_info *domain) +calc_flat_name(struct sss_domain_info *domain) { const char *s; - s = safe_fq_str(nctx, FQ_FMT_FLAT_NAME, domain->flat_name); + s = domain->flat_name; if (s == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, ("Flat name requested but domain has no" + DEBUG(SSSDBG_MINOR_FAILURE, ("Flat name requested but domain has no" "flat name set, falling back to domain name\n")); s = domain->name; } @@ -588,28 +558,24 @@ safe_flat_name(struct sss_names_ctx *nctx, struct sss_domain_info *domain) return s; } -static inline size_t -fq_part_len(struct sss_names_ctx *nctx, struct sss_domain_info *dom, - uint8_t part, const char *str) -{ - const char *s = str; - - if (part == FQ_FMT_FLAT_NAME) { - s = safe_flat_name(nctx, dom); - } - return nctx->fq_flags & part ? strlen(s) : 0; -} - char * sss_tc_fqname(TALLOC_CTX *mem_ctx, struct sss_names_ctx *nctx, struct sss_domain_info *domain, const char *name) { if (domain == NULL || nctx == NULL) return NULL; - return talloc_asprintf(mem_ctx, nctx->fq_fmt, - safe_fq_str(nctx, FQ_FMT_NAME, name), - safe_fq_str(nctx, FQ_FMT_DOMAIN, domain->name), - safe_flat_name(nctx, domain)); + return sss_tc_fqname2 (mem_ctx, nctx, domain->name, + calc_flat_name (domain), name); +} + +static void +safe_talloc_callback (void *data, + const char *piece, + size_t len) +{ + char **output = data; + if (*output != NULL) + *output = talloc_strndup_append(*output, piece, len); } char * @@ -617,12 +583,17 @@ sss_tc_fqname2(TALLOC_CTX *mem_ctx, struct sss_names_ctx *nctx, const char *domain_name, const char *flat_dom_name, const char *name) { + const char *args[] = { name, domain_name, flat_dom_name, NULL }; + char *output; + if (nctx == NULL) return NULL; - return talloc_asprintf(mem_ctx, nctx->fq_fmt, - safe_fq_str(nctx, FQ_FMT_NAME, name), - safe_fq_str(nctx, FQ_FMT_DOMAIN, domain_name), - safe_fq_str(nctx, FQ_FMT_FLAT_NAME, flat_dom_name)); + output = talloc_strdup(mem_ctx, ""); + if (safe_format_string_cb(safe_talloc_callback, &output, nctx->fq_fmt, args, 3) < 0) + output = NULL; + else if (output == NULL) + errno = ENOMEM; + return output; } int @@ -631,19 +602,8 @@ sss_fqname(char *str, size_t size, struct sss_names_ctx *nctx, { if (domain == NULL || nctx == NULL) return -EINVAL; - return snprintf(str, size, nctx->fq_fmt, - safe_fq_str(nctx, FQ_FMT_NAME, name), - safe_fq_str(nctx, FQ_FMT_DOMAIN, domain->name), - safe_flat_name(nctx, domain)); -} - -size_t -sss_fqdom_len(struct sss_names_ctx *nctx, - struct sss_domain_info *domain) -{ - size_t len = fq_part_len(nctx, domain, FQ_FMT_DOMAIN, domain->name); - len += fq_part_len(nctx, domain, FQ_FMT_FLAT_NAME, domain->flat_name); - return len; + return safe_format_string(str, size, nctx->fq_fmt, + name, domain->name, calc_flat_name (domain), NULL); } char * diff --git a/src/util/util.h b/src/util/util.h index 101270571..4a9dbb75f 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -324,14 +324,9 @@ char *get_username_from_uid(TALLOC_CTX *mem_ctx, uid_t uid); char *get_uppercase_realm(TALLOC_CTX *memctx, const char *name); -#define FQ_FMT_NAME 0x01 -#define FQ_FMT_DOMAIN 0x02 -#define FQ_FMT_FLAT_NAME 0x04 - struct sss_names_ctx { char *re_pattern; char *fq_fmt; - uint8_t fq_flags; pcre *re; }; @@ -384,15 +379,14 @@ sss_tc_fqname2(TALLOC_CTX *mem_ctx, struct sss_names_ctx *nctx, /* Return fully-qualified name formatted according to the fq_fmt. The buffer in "str" is * "size" bytes long. Returns the number of bytes written on success or a negative * value of failure. + * + * Pass a zero size to calculate the length that would be needed by the fully-qualified + * name. */ int sss_fqname(char *str, size_t size, struct sss_names_ctx *nctx, struct sss_domain_info *domain, const char *name); -size_t -sss_fqdom_len(struct sss_names_ctx *nctx, - struct sss_domain_info *domain); - /* Subdomains use fully qualified names in the cache while primary domains use * just the name. Return either of these for a specified domain or subdomain */ |