* updating the constrained delegation PAC
* buffer.
+ * @param device The computer's samba kdc entry; used for compound
+ * authentication.
+
+ * @param device_pac The PAC from the computer's TGT; used
+ * for compound authentication.
+
* @param old_pac The old PAC
* @param new_pac The new already allocated PAC
const struct samba_kdc_entry *server,
const struct samba_kdc_entry *krbtgt,
const krb5_principal delegated_proxy_principal,
+ const struct samba_kdc_entry *device,
+ const krb5_const_pac *device_pac,
const krb5_pac old_pac,
const krb5_pac new_pac)
{
}
}
+ if (device != NULL) {
+ SMB_ASSERT(*device_pac != NULL);
+
+ /*
+ * Check the objectSID of the device and pac data are the same.
+ * Does a parse and SID check, but no crypto.
+ */
+ code = samba_kdc_validate_pac_blob(context,
+ device,
+ *device_pac);
+ if (code != 0) {
+ goto done;
+ }
+
+ /*
+ * TODO: When we support compound authentication, we will use
+ * the device PAC to generate PAC buffers for Device Info
+ * (containing the computer account's groups) and Device Claims
+ * (containing claims for the computer account), and insert them
+ * into the emitted PAC.
+ *
+ * See [MS-KILE 1.3.4], [MS-KILE 3.3.5.7.4].
+ */
+ }
+
if (!is_trusted) {
struct auth_user_info_dc *user_info_dc = NULL;
WERROR werr;
const struct samba_kdc_entry *server,
const struct samba_kdc_entry *krbtgt,
krb5_principal delegated_proxy_principal,
+ const struct samba_kdc_entry *device,
+ const krb5_const_pac *device_pac,
krb5_pac old_pac,
krb5_pac new_pac);
struct samba_kdc_entry *client_skdc_entry = NULL;
struct samba_kdc_entry *server_skdc_entry =
talloc_get_type_abort(server->context, struct samba_kdc_entry);
+ struct samba_kdc_entry *device_skdc_entry = NULL;
struct samba_kdc_entry *krbtgt_skdc_entry =
talloc_get_type_abort(krbtgt->context, struct samba_kdc_entry);
TALLOC_CTX *mem_ctx = NULL;
}
if (device != NULL) {
- struct samba_kdc_entry *device_skdc_entry = NULL;
-
device_skdc_entry = talloc_get_type_abort(device->context,
struct samba_kdc_entry);
-
- /*
- * Check the objectSID of the device and pac data are the same.
- * Does a parse and SID check, but no crypto.
- */
- ret = samba_kdc_validate_pac_blob(context,
- device_skdc_entry,
- *device_pac);
- if (ret != 0) {
- talloc_free(mem_ctx);
- return ret;
- }
}
/*
server_skdc_entry,
krbtgt_skdc_entry,
delegated_proxy_principal,
+ device_skdc_entry,
+ device_pac,
*pac,
new_pac);
if (ret != 0) {