/* Compile the set of response items for in_padata by invoke each module's * prep_questions method. */ static krb5_error_code fill_response_items(krb5_context context, krb5_kdc_req *request, krb5_data *encoded_request_body, krb5_data *encoded_previous_request, krb5_pa_data **in_padata, krb5_clpreauth_rock rock, krb5_gic_opt_ext *opte) { krb5_error_code ret; krb5_pa_data *pa; struct krb5_preauth_context_module_st *module; krb5_clpreauth_prep_questions_fn prep_questions; int i, j; k5_response_items_reset(rock->rctx.items); for (i = 0; in_padata[i] != NULL; i++) { pa = in_padata[i]; for (j = 0; j < context->preauth_context->n_modules; j++) { module = &context->preauth_context->modules[j]; prep_questions = module->client_prep_questions; if (module->pa_type != pa->pa_type || prep_questions == NULL) continue; ret = (*prep_questions)(context, module->moddata, *module->modreq_p, (krb5_get_init_creds_opt *)opte, &callbacks, rock, request, encoded_request_body, encoded_previous_request, pa); if (ret) return ret; } } return 0; }
int main() { k5_response_items *ri; check(k5_response_items_new(&ri)); check_pred(k5_response_items_empty(ri)); check(k5_response_items_ask_question(ri, TEST_STR1, TEST_STR1)); check(k5_response_items_ask_question(ri, TEST_STR2, NULL)); check_pred(nstrcmp(k5_response_items_get_challenge(ri, TEST_STR1), TEST_STR1) == 0); check_pred(nstrcmp(k5_response_items_get_challenge(ri, TEST_STR2), NULL) == 0); check_pred(!k5_response_items_empty(ri)); k5_response_items_reset(ri); check_pred(k5_response_items_empty(ri)); check_pred(k5_response_items_get_challenge(ri, TEST_STR1) == NULL); check_pred(k5_response_items_get_challenge(ri, TEST_STR2) == NULL); check(k5_response_items_ask_question(ri, TEST_STR1, TEST_STR1)); check_pred(nstrcmp(k5_response_items_get_challenge(ri, TEST_STR1), TEST_STR1) == 0); check(k5_response_items_set_answer(ri, TEST_STR1, TEST_STR1)); check_pred(nstrcmp(k5_response_items_get_answer(ri, TEST_STR1), TEST_STR1) == 0); k5_response_items_free(ri); return 0; }