コード例 #1
0
/* 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;
}
コード例 #2
0
ファイル: t_response_items.c プロジェクト: Akasurde/krb5
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;
}