Commit 57c0f378 authored by Richard Levitte's avatar Richard Levitte
Browse files

Make sure that password_callback exercises UI

parent 17ac8eaf
Loading
Loading
Loading
Loading
+11 −17
Original line number Diff line number Diff line
@@ -252,36 +252,27 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
    int res = 0;
#ifndef OPENSSL_NO_UI
    UI *ui = NULL;
    const char *prompt_info = NULL;
#endif
    const char *password = NULL;
    PW_CB_DATA *cb_data = (PW_CB_DATA *)cb_tmp;

    if (cb_data) {
        if (cb_data->password)
            password = cb_data->password;
#ifndef OPENSSL_NO_UI
        if (cb_data->prompt_info)
            prompt_info = cb_data->prompt_info;
#endif
    }

    if (password) {
        res = strlen(password);
#ifdef OPENSSL_NO_UI
    if (cb_data != NULL && cb_data->password != NULL) {
        res = strlen(cb_data->password);
        if (res > bufsiz)
            res = bufsiz;
        memcpy(buf, password, res);
        return res;
        memcpy(buf, cb_data->password, res);
    }

#ifndef OPENSSL_NO_UI
#else
    ui = UI_new_method(ui_method);
    if (ui) {
        int ok = 0;
        char *buff = NULL;
        int ui_flags = 0;
        const char *prompt_info = NULL;
        char *prompt;

        if (cb_data != NULL && cb_data->prompt_info != NULL)
            prompt_info = cb_data->prompt_info;
        prompt = UI_construct_prompt(ui, "pass phrase", prompt_info);
        if (!prompt) {
            BIO_printf(bio_err, "Out of memory\n");
@@ -292,6 +283,9 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
        ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD;
        UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0);

        /* We know that there is no previous user data to return to us */
        (void)UI_add_user_data(ui, cb_data);

        if (ok >= 0)
            ok = UI_add_input_string(ui, prompt, ui_flags, buf,
                                     PW_MIN_LENGTH, bufsiz - 1);