From 4fa382194c576597b77006c45c0c9a73fa4cb77b Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Wed, 24 Oct 2012 09:47:21 +0200 Subject: [PATCH 17/18] Use find_or_guess_upn() where needed --- src/providers/krb5/krb5_access.c | 15 ++++++--------- src/providers/krb5/krb5_auth.c | 26 ++++++++++++-------------- src/providers/krb5/krb5_auth.h | 2 +- src/providers/krb5/krb5_common.c | 2 +- src/providers/krb5/krb5_common.h | 2 +- src/providers/krb5/krb5_renew_tgt.c | 16 ++++++---------- 6 files changed, 27 insertions(+), 36 deletions(-) diff --git a/src/providers/krb5/krb5_access.c b/src/providers/krb5/krb5_access.c index afa3a89..a7c42dd 100644 --- a/src/providers/krb5/krb5_access.c +++ b/src/providers/krb5/krb5_access.c @@ -25,6 +25,7 @@ #include "util/util.h" #include "providers/krb5/krb5_auth.h" #include "providers/krb5/krb5_common.h" +#include "providers/krb5/krb5_utils.h" struct krb5_access_state { struct tevent_context *ev; @@ -101,15 +102,11 @@ struct tevent_req *krb5_access_send(TALLOC_CTX *mem_ctx, goto done; break; case 1: - state->kr->upn = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_UPN, - NULL); - if (state->kr->upn == NULL) { - ret = krb5_get_simple_upn(state, krb5_ctx, pd->user, - &state->kr->upn); - if (ret != EOK) { - DEBUG(1, ("krb5_get_simple_upn failed.\n")); - goto done; - } + ret = find_or_guess_upn(state, res->msgs[0], krb5_ctx, pd->user, + &state->kr->upn); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("find_or_guess_upn failed.\n")); + goto done; } state->kr->uid = ldb_msg_find_attr_as_uint64(res->msgs[0], SYSDB_UIDNUM, diff --git a/src/providers/krb5/krb5_auth.c b/src/providers/krb5/krb5_auth.c index 98dc8d8..ee3b5fc 100644 --- a/src/providers/krb5/krb5_auth.c +++ b/src/providers/krb5/krb5_auth.c @@ -420,20 +420,18 @@ struct tevent_req *krb5_auth_send(TALLOC_CTX *mem_ctx, break; case 1: - kr->upn = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_UPN, NULL); - if (kr->upn == NULL) { - 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; - } - } else { - ret = compare_principal_realm(kr->upn, realm, - &kr->upn_from_different_realm); - if (ret != 0) { - DEBUG(SSSDBG_OP_FAILURE, ("compare_principal_realm failed.\n")); - goto done; - } + ret = find_or_guess_upn(state, res->msgs[0], krb5_ctx, pd->user, + &kr->upn); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("find_or_guess_upn failed.\n")); + goto done; + } + + ret = compare_principal_realm(kr->upn, realm, + &kr->upn_from_different_realm); + if (ret != 0) { + DEBUG(SSSDBG_OP_FAILURE, ("compare_principal_realm failed.\n")); + goto done; } kr->homedir = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_HOMEDIR, diff --git a/src/providers/krb5/krb5_auth.h b/src/providers/krb5/krb5_auth.h index bf49f7c..9133472 100644 --- a/src/providers/krb5/krb5_auth.h +++ b/src/providers/krb5/krb5_auth.h @@ -45,7 +45,7 @@ struct krb5child_req { const char *ccname; const char *old_ccname; const char *homedir; - const char *upn; + char *upn; uid_t uid; gid_t gid; bool is_offline; diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c index 45f126f..13a9bcb 100644 --- a/src/providers/krb5/krb5_common.c +++ b/src/providers/krb5/krb5_common.c @@ -858,7 +858,7 @@ errno_t krb5_install_sigterm_handler(struct tevent_context *ev, } errno_t krb5_get_simple_upn(TALLOC_CTX *mem_ctx, struct krb5_ctx *krb5_ctx, - const char *username, const char **_upn) + const char *username, char **_upn) { const char *realm; char *upn; diff --git a/src/providers/krb5/krb5_common.h b/src/providers/krb5/krb5_common.h index bc63bf9..4b29058 100644 --- a/src/providers/krb5/krb5_common.h +++ b/src/providers/krb5/krb5_common.h @@ -175,7 +175,7 @@ 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); + const char *username, char **_upn); errno_t compare_principal_realm(const char *upn, const char *realm, bool *different_realm); diff --git a/src/providers/krb5/krb5_renew_tgt.c b/src/providers/krb5/krb5_renew_tgt.c index 217e03d..d59bad1 100644 --- a/src/providers/krb5/krb5_renew_tgt.c +++ b/src/providers/krb5/krb5_renew_tgt.c @@ -381,7 +381,7 @@ static errno_t check_ccache_files(struct renew_tgt_ctx *renew_tgt_ctx) struct ldb_message **msgs = NULL; size_t c; const char *ccache_file; - const char *upn; + char *upn; const char *user_name; struct ldb_dn *base_dn; @@ -421,15 +421,11 @@ static errno_t check_ccache_files(struct renew_tgt_ctx *renew_tgt_ctx) continue; } - upn = ldb_msg_find_attr_as_string(msgs[c], SYSDB_UPN, NULL); - if (upn == NULL) { - ret = krb5_get_simple_upn(tmp_ctx, renew_tgt_ctx->krb5_ctx, - user_name, &upn); - if (ret != EOK) { - DEBUG(1, ("krb5_get_simple_upn failed.\n")); - continue; - } - DEBUG(9, ("No upn stored in cache, using [%s].\n", upn)); + ret = find_or_guess_upn(tmp_ctx, msgs[c], renew_tgt_ctx->krb5_ctx, + user_name, &upn); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("find_or_guess_upn failed.\n")); + goto done; } ccache_file = ldb_msg_find_attr_as_string(msgs[c], SYSDB_CCACHE_FILE, -- 1.7.7.6