const struct samba_kdc_entry *krbtgt)
{
if (pac != NULL) {
+ SMB_ASSERT(pac_princ != NULL);
SMB_ASSERT(krbtgt != NULL);
+ } else {
+ pac_princ = NULL;
+ krbtgt = NULL;
+ entry = NULL;
}
return (struct samba_kdc_entry_pac) {
- .entry = entry,
- .krbtgt = krbtgt,
.pac = pac,
+ .pac_princ = pac_princ,
+ .krbtgt = krbtgt,
+ .entry = entry,
};
}
#else /* MIT */
bool is_trusted)
{
if (pac != NULL) {
+ /*
+ * TODO: we can't assert this yet,
+ * as mit_samba_update_pac() does not
+ * get this for cross realm clients.
+ *
+ * SMB_ASSERT(pac_princ != NULL);
+ */
SMB_ASSERT(krbtgt != NULL);
+ } else {
+ pac_princ = NULL;
+ krbtgt = NULL;
+ entry = NULL;
+ is_trusted = false;
}
return (struct samba_kdc_entry_pac) {
- .entry = entry,
- .krbtgt = krbtgt,
.pac = pac,
+ .pac_princ = pac_princ,
+ .krbtgt = krbtgt,
+ .entry = entry,
.pac_is_trusted = is_trusted,
};
}
};
struct samba_kdc_entry_pac {
- struct samba_kdc_entry *entry;
+ /*
+ * NULL indicates that no PAC is present.
+ *
+ * All other fields below are also NULL.
+ */
+ krb5_const_pac pac;
+
+ /* valid if pac is valid */
+ krb5_const_principal pac_princ;
+
+ /* valid if pac is valid */
const struct samba_kdc_entry *krbtgt;
- krb5_const_pac pac; /* NULL indicates that no PAC is present. */
+
+ /* valid if pac is valid and principal is local */
+ struct samba_kdc_entry *entry;
+
#ifndef HAVE_KRB5_PAC_IS_TRUSTED /* MIT */
bool pac_is_trusted : 1;
#endif /* HAVE_KRB5_PAC_IS_TRUSTED */