/*
* Optional: Perform a policy check on a cross-realm ticket's transited
- * field and return an error (other than KRB5_PLUGIN_OP_NOTSUPP) if the
- * check fails.
+ * field. Return 0 if the check authoritatively succeeds,
+ * KRB5_PLUGIN_NO_HANDLE to use the core transited-checking mechanisms, or
+ * another error (other than KRB5_PLUGIN_OP_NOTSUPP) if the check fails.
*/
krb5_error_code (*check_transited_realms)(krb5_context kcontext,
const krb5_data *tr_contents,
{
krb5_error_code code;
- /* Check using krb5.conf */
- code = krb5_check_transited_list(kdc_context, trans, realm1, realm2);
- if (code)
+ /* Check against the KDB module. Treat this answer as authoritative if the
+ * method is supported and doesn't explicitly pass control. */
+ code = krb5_db_check_transited_realms(kdc_context, trans, realm1, realm2);
+ if (code != KRB5_PLUGIN_OP_NOTSUPP && code != KRB5_PLUGIN_NO_HANDLE)
return code;
- /* Check against the KDB module. */
- code = krb5_db_check_transited_realms(kdc_context, trans, realm1, realm2);
- if (code == KRB5_PLUGIN_OP_NOTSUPP)
- code = 0;
- return code;
+ /* Check using krb5.conf [capaths] or hierarchical relationships. */
+ return krb5_check_transited_list(kdc_context, trans, realm1, realm2);
}
krb5_error_code