struct samba_kdc_db_context *kdc_db_ctx,
krb5_const_principal client_principal,
krb5_const_principal server_principal,
- krb5_const_pac header_pac,
+ const struct auth_user_info_dc *user_info_dc,
struct samba_kdc_entry *proxy_skdc_entry)
{
krb5_error_code code;
const char *proxy_dn = NULL;
const DATA_BLOB *data = NULL;
struct security_descriptor *rbcd_security_descriptor = NULL;
- struct auth_user_info_dc *user_info_dc = NULL;
struct security_token *security_token = NULL;
uint32_t session_info_flags =
AUTH_SESSION_INFO_DEFAULT_GROUPS |
server_name,
proxy_dn);
- code = kerberos_pac_to_user_info_dc(mem_ctx,
- header_pac,
- context,
- &user_info_dc,
- AUTH_INCLUDE_RESOURCE_GROUPS,
- NULL,
- NULL,
- NULL);
- if (code != 0) {
- goto out;
- }
-
if (!(user_info_dc->info->user_flags & NETLOGON_GUEST)) {
session_info_flags |= AUTH_SESSION_INFO_AUTHENTICATED;
}
struct samba_kdc_db_context *kdc_db_ctx,
krb5_const_principal client_principal,
krb5_const_principal server_principal,
- krb5_const_pac header_pac,
+ const struct auth_user_info_dc *user_info_dc,
struct samba_kdc_entry *proxy_skdc_entry);
NTSTATUS samba_kdc_setup_db_ctx(TALLOC_CTX *mem_ctx, struct samba_kdc_base_context *base_ctx,
{
struct samba_kdc_db_context *kdc_db_ctx = NULL;
struct samba_kdc_entry *proxy_skdc_entry = NULL;
+ struct auth_user_info_dc *user_info_dc = NULL;
+ TALLOC_CTX *mem_ctx = NULL;
+ krb5_error_code code;
kdc_db_ctx = talloc_get_type_abort(db->hdb_db,
struct samba_kdc_db_context);
proxy_skdc_entry = talloc_get_type_abort(proxy->context,
struct samba_kdc_entry);
- return samba_kdc_check_s4u2proxy_rbcd(context,
+ mem_ctx = talloc_new(kdc_db_ctx);
+ if (mem_ctx == NULL) {
+ return ENOMEM;
+ }
+
+ code = kerberos_pac_to_user_info_dc(mem_ctx,
+ header_pac,
+ context,
+ &user_info_dc,
+ AUTH_INCLUDE_RESOURCE_GROUPS,
+ NULL,
+ NULL,
+ NULL);
+ if (code != 0) {
+ goto out;
+ }
+
+ code = samba_kdc_check_s4u2proxy_rbcd(context,
kdc_db_ctx,
client->principal,
server_principal,
- header_pac,
+ user_info_dc,
proxy_skdc_entry);
+out:
+ talloc_free(mem_ctx);
+ return code;
}
static krb5_error_code
{
struct samba_kdc_entry *proxy_skdc_entry =
talloc_get_type_abort(proxy->e_data, struct samba_kdc_entry);
+ struct auth_user_info_dc *user_info_dc = NULL;
+ TALLOC_CTX *mem_ctx = NULL;
krb5_error_code code;
+ mem_ctx = talloc_new(NULL);
+ if (mem_ctx == NULL) {
+ return ENOMEM;
+ }
+
+ code = kerberos_pac_to_user_info_dc(mem_ctx,
+ header_pac,
+ ctx->context,
+ &user_info_dc,
+ AUTH_INCLUDE_RESOURCE_GROUPS,
+ NULL,
+ NULL,
+ NULL);
+ if (code != 0) {
+ goto out;
+ }
+
code = samba_kdc_check_s4u2proxy_rbcd(ctx->context,
ctx->db_ctx,
client_principal,
server_principal,
- header_pac,
+ user_info_dc,
proxy_skdc_entry);
-
+out:
+ talloc_free(mem_ctx);
return code;
}