From db9b3ee468424a3b5ec6c3e4c28d95e630ab3842 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Thu, 28 Oct 2010 14:10:43 +0200 Subject: [PATCH 2/6] Add krb5_get_simple_upn() --- src/providers/krb5/krb5_auth.c | 9 +++------ src/providers/krb5/krb5_common.c | 25 +++++++++++++++++++++++++ src/providers/krb5/krb5_common.h | 2 ++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/providers/krb5/krb5_auth.c b/src/providers/krb5/krb5_auth.c index 7847f8f..cd86d3c 100644 --- a/src/providers/krb5/krb5_auth.c +++ b/src/providers/krb5/krb5_auth.c @@ -716,14 +716,11 @@ struct tevent_req *krb5_auth_send(TALLOC_CTX *mem_ctx, case 1: kr->upn = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_UPN, NULL); if (kr->upn == NULL) { - /* NOTE: this is a hack, works only in some environments */ - kr->upn = talloc_asprintf(kr, "%s@%s", pd->user, realm); - if (kr->upn == NULL) { - DEBUG(1, ("failed to build simple upn.\n")); - ret = ENOMEM; + ret = krb5_get_simple_upn(state, krb5_ctx, pd->user, &kr->upn); + if (ret != EOK) { + DEBUG(1, ("krb5_get_simple_upn failed.\n")); goto done; } - DEBUG(9, ("Using simple UPN [%s].\n", kr->upn)); } kr->homedir = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_HOMEDIR, diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c index 81ad4e9..4d57725 100644 --- a/src/providers/krb5/krb5_common.c +++ b/src/providers/krb5/krb5_common.c @@ -653,3 +653,28 @@ errno_t krb5_install_sigterm_handler(struct tevent_context *ev, return EOK; } + +errno_t krb5_get_simple_upn(TALLOC_CTX *mem_ctx, struct krb5_ctx *krb5_ctx, + const char *username, const char **_upn) +{ + const char *realm; + char *upn; + + realm = dp_opt_get_cstring(krb5_ctx->opts, KRB5_REALM); + if (realm == NULL) { + DEBUG(1, ("Missing Kerberos realm.\n")); + return ENOENT; + } + + /* NOTE: this is a hack, works only in some environments */ + upn = talloc_asprintf(mem_ctx, "%s@%s", username, realm); + if (upn == NULL) { + DEBUG(1, ("talloc_asprintf failed.\n")); + return ENOMEM; + } + + DEBUG(9, ("Using simple UPN [%s].\n", upn)); + + *_upn = upn; + return EOK; +} diff --git a/src/providers/krb5/krb5_common.h b/src/providers/krb5/krb5_common.h index a8ebcf5..139ce40 100644 --- a/src/providers/krb5/krb5_common.h +++ b/src/providers/krb5/krb5_common.h @@ -145,4 +145,6 @@ errno_t write_krb5info_file(const char *realm, const char *kdc, errno_t remove_krb5_info_files(TALLOC_CTX *mem_ctx, const char *realm); +errno_t krb5_get_simple_upn(TALLOC_CTX *mem_ctx, struct krb5_ctx *krb5_ctx, + const char *username, const char **_upn); #endif /* __KRB5_COMMON_H__ */ -- 1.7.2.3