mk_req_flags |= AP_OPTS_MUTUAL_REQUIRED | AP_OPTS_ETYPE_NEGOTIATION;
krb5_auth_con_set_authdata_context(context, ctx->auth_context, ad_context);
-
code = krb5_mk_req_extended(context, &ctx->auth_context, mk_req_flags,
checksum_data, k_cred, &ap_req);
+ krb5_auth_con_set_authdata_context(context, ctx->auth_context, NULL);
krb5_free_data_contents(context, &cksum_struct.checksum_data);
if (code)
goto cleanup;
code = 0;
cleanup:
- krb5_auth_con_set_authdata_context(context, ctx->auth_context, NULL);
if (checksum_data && checksum_data->data)
krb5_free_data_contents(context, checksum_data);
if (ap_req.data)
k5_merge_data_list(krb5_data **dst, krb5_data *src, unsigned int *len)
{
unsigned int i;
+ krb5_data *d;
if (src == NULL)
return 0;
for (i = 0; src[i].data != NULL; i++)
;
- *dst = realloc(*dst, (*len + i + 1) * sizeof(krb5_data));
- if (*dst == NULL)
+ d = realloc(*dst, (*len + i + 1) * sizeof(krb5_data));
+ if (d == NULL)
return ENOMEM;
- memcpy(&(*dst)[*len], src, i * sizeof(krb5_data));
+ memcpy(&d[*len], src, i * sizeof(krb5_data));
*len += i;
- (*dst)[*len].data = NULL;
+ d[*len].data = NULL;
+ d[*len].length = 0;
+
+ *dst = d;
return 0;
}
krb5_error_code code;
krb5_data *asserted = NULL;
krb5_data *verified = NULL;
- unsigned int len = 0;
+ unsigned int asserted_len = 0;
+ unsigned int verified_len = 0;
for (i = 0; i < context->n_modules; i++) {
struct _krb5_authdata_context_module *module = &context->modules[i];
continue;
if (asserted_attrs != NULL) {
- code = k5_merge_data_list(&asserted, asserted2, &len);
+ code = k5_merge_data_list(&asserted, asserted2, &asserted_len);
if (code != 0) {
krb5int_free_data_list(kcontext, asserted2);
break;
}
if (verified_attrs != NULL) {
- code = k5_merge_data_list(&verified, verified2, &len);
+ code = k5_merge_data_list(&verified, verified2, &verified_len);
if (code != 0) {
krb5int_free_data_list(kcontext, verified2);
break;
int i;
krb5_error_code code = ENOENT;
+ *authenticated = FALSE;
+ *complete = FALSE;
+
+ value->data = NULL;
+ value->length = 0;
+
+ display_value->data = NULL;
+ display_value->length = 0;
+
/*
* NB at present a module is presumed to be authoritative for
* an attribute; not sure how to federate "more" across module
const krb5_data *value)
{
int i;
- krb5_error_code code = ENOENT;
+ krb5_error_code code = 0;
+ int found = 0;
for (i = 0; i < context->n_modules; i++) {
struct _krb5_authdata_context_module *module = &context->modules[i];
complete,
attribute,
value);
- if (code != 0 && code != ENOENT)
+ if (code == ENOENT)
+ code = 0;
+ else if (code == 0)
+ found++;
+ else
break;
}
- return code;
+ if (code == 0 && found == 0)
+ code = ENOENT;
+ return code;
}
krb5_error_code KRB5_CALLCONV
{
int i;
krb5_error_code code = ENOENT;
+ int found = 0;
for (i = 0; i < context->n_modules; i++) {
struct _krb5_authdata_context_module *module = &context->modules[i];
module->plugin_context,
*(module->request_context_pp),
attribute);
- if (code != 0 && code != ENOENT)
+ if (code == ENOENT)
+ code = 0;
+ else if (code == 0)
+ found++;
+ else
break;
}
+ if (code == 0 && found == 0)
+ code = ENOENT;
+
return code;
}
*(module->request_context_pp),
flags,
&authdata2);
- if (code != 0 && code != ENOENT)
+ if (code == ENOENT)
+ code = 0;
+ else if (code != 0)
break;
if (authdata2 == NULL)