summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2013-10-09 20:34:14 -0400
committerSimo Sorce <simo@redhat.com>2013-10-10 10:20:02 -0400
commit251f36c38dd636f3406cd8ef1b9affee841c70bd (patch)
tree72c6405139e07e1778b7d3eb49c446ad5ac4249d
parenta9cb481cd1aa1633d725e6bd9e60d5914b31c390 (diff)
downloadfreeipa-mspac.tar.gz
freeipa-mspac.tar.xz
freeipa-mspac.zip
mspac: Add support for UPN_DNS_INFO buffermspac
Fill up a upn_dns_info buffer and adds it to the pac.
-rw-r--r--daemons/ipa-kdb/ipa_kdb_mspac.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/daemons/ipa-kdb/ipa_kdb_mspac.c b/daemons/ipa-kdb/ipa_kdb_mspac.c
index 302a692fd..b670697f9 100644
--- a/daemons/ipa-kdb/ipa_kdb_mspac.c
+++ b/daemons/ipa-kdb/ipa_kdb_mspac.c
@@ -820,6 +820,26 @@ static krb5_error_code ipadb_fill_info3(struct ipadb_context *ipactx,
return 0;
}
+static krb5_error_code ipadb_fill_upn_dns_info(struct ipadb_context *ipactx,
+ TALLOC_CTX *memctx,
+ const char *account_name,
+ struct PAC_UPN_DNS_INFO *info)
+{
+ /* for now always declare that the user has no UPN */
+ info->flags = UDI_ACCT_HAS_NO_UPN;
+ info->upn_name = talloc_asprintf(memctx, "%s@%s",
+ account_name, ipactx->realm);
+ if (!info->upn_name) {
+ return ENOMEM;
+ }
+ info->domain_name = talloc_strdup(memctx, ipactx->realm);
+ if (!info->domain_name) {
+ return ENOMEM;
+ }
+
+ return 0;
+}
+
static krb5_error_code ipadb_get_pac(krb5_context kcontext,
krb5_db_entry *client,
krb5_pac *pac)
@@ -910,7 +930,27 @@ static krb5_error_code ipadb_get_pac(krb5_context kcontext,
kerr = krb5_pac_add_buffer(kcontext, *pac, KRB5_PAC_LOGON_INFO, &data);
+ /* == Fill UPN_DNS_INFO == */
+ kerr = ipadb_fill_upn_dns_info(ipactx, tmpctx, account_name,
+ &pac_info.upn_dns_info);
+ if (kerr) {
+ goto done;
+ }
+
+ /* == Add PAC Buffer == */
+ ndr_err = ndr_push_union_blob(&pac_data, tmpctx, &pac_info,
+ PAC_TYPE_UPN_DNS_INFO,
+ (ndr_push_flags_fn_t)ndr_push_PAC_INFO);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ kerr = KRB5_KDB_INTERNAL_ERROR;
+ goto done;
+ }
+
+ data.magic = KV5M_DATA;
+ data.data = (char *)pac_data.data;
+ data.length = pac_data.length;
+ kerr = krb5_pac_add_buffer(kcontext, *pac, KRB5_PAC_UPN_DNS_INFO, &data);
done:
if (kerr) {