Beispiel #1
0
char *
sss_get_domain_name(TALLOC_CTX *mem_ctx,
                    const char *orig_name,
                    struct sss_domain_info *dom)
{
    char *user_name;
    char *domain = NULL;
    int ret;

    /* check if the name already contains domain part */
    if (dom->names != NULL) {
        ret = sss_parse_name(mem_ctx, dom->names, orig_name, &domain, NULL);
        if (ret == ERR_REGEX_NOMATCH) {
            DEBUG(SSSDBG_TRACE_FUNC,
                  "sss_parse_name could not parse domain from [%s]. "
                  "Assuming it is not FQDN.\n", orig_name);
        } else if (ret != EOK) {
            DEBUG(SSSDBG_TRACE_FUNC,
                  "sss_parse_name failed [%d]: %s\n", ret, sss_strerror(ret));
            return NULL;
        }
    }

    if (IS_SUBDOMAIN(dom) && dom->fqnames && domain == NULL) {
        /* we always use the fully qualified name for subdomain users */
        user_name = sss_tc_fqname(mem_ctx, dom->names, dom, orig_name);
    } else {
        user_name = talloc_strdup(mem_ctx, orig_name);
    }

    talloc_free(domain);

    return user_name;
}
Beispiel #2
0
static errno_t attr_name(TALLOC_CTX *mem_ctx,
                           struct sysdb_attrs *entry,
                           struct sss_domain_info *dom,
                           const char *attr,
                           const char **_value)
{
    errno_t ret;
    const char *orig_name;
    char *tmp_name;
    char *outname;

    ret = sysdb_attrs_get_string(entry, attr, &orig_name);
    if (ret != EOK) {
        return ret;
    }

    tmp_name = sss_output_name(mem_ctx, orig_name, dom->case_preserve, 0);
    if (tmp_name == NULL) {
        return ENOMEM;
    }

    if (dom->fqnames) {
        outname = sss_tc_fqname(mem_ctx, dom->names, dom, tmp_name);
        talloc_free(tmp_name);
        if (outname == NULL) {
            DEBUG(SSSDBG_CRIT_FAILURE, "sss_replace_space failed\n");
            return ENOMEM;
        }
    } else {
        outname = tmp_name;
    }

    *_value = outname;
    return EOK;
}