const krb5_keyblock *(*client_keyblock)(krb5_context context,
krb5_kdcpreauth_rock rock);
+ /* Assert an authentication indicator in the AS-REP authdata. Duplicate
+ * indicators will be ignored. */
+ krb5_error_code (*add_auth_indicator)(krb5_context context,
+ krb5_kdcpreauth_rock rock,
+ const char *indicator);
+
/* End of version 3 kdcpreauth callbacks. */
} *krb5_kdcpreauth_callbacks;
char *sname, *cname;
void *pa_context;
const krb5_fulladdr *from;
+ krb5_data **auth_indicators;
krb5_error_code preauth_err;
krb5_free_data(kdc_context, state->inner_body);
kdc_free_rstate(state->rstate);
krb5_free_kdc_req(kdc_context, state->request);
+ k5_free_data_ptr_list(state->auth_indicators);
assert(did_log != 0);
free(state);
state->rock.inner_body = state->inner_body;
state->rock.rstate = state->rstate;
state->rock.vctx = vctx;
+ state->rock.auth_indicators = &state->auth_indicators;
if (!state->request->client) {
state->status = "NULL_CLIENT";
errcode = KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN;
return rock->client_keyblock;
}
+static krb5_error_code
+add_auth_indicator(krb5_context context, krb5_kdcpreauth_rock rock,
+ const char *indicator)
+{
+ return authind_add(context, indicator, rock->auth_indicators);
+}
+
static struct krb5_kdcpreauth_callbacks_st callbacks = {
3,
max_time_skew,
client_entry,
event_context,
have_client_keys,
- client_keyblock
+ client_keyblock,
+ add_auth_indicator
};
static krb5_error_code
krb5_keyblock *client_keyblock;
struct kdc_request_state *rstate;
verto_ctx *vctx;
+ krb5_data ***auth_indicators;
};
#define isflagset(flagfield, flag) (flagfield & (flag))