Commit 18cfc668 authored by Richard Levitte's avatar Richard Levitte
Browse files

Add an application data field in the UI_METHOD

parent a223ffe6
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -561,16 +561,18 @@ const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth)

UI_METHOD *UI_create_method(const char *name)
{
    UI_METHOD *ui_method = OPENSSL_zalloc(sizeof(*ui_method));
    UI_METHOD *ui_method = NULL;

    if (ui_method != NULL) {
        ui_method->name = OPENSSL_strdup(name);
        if (ui_method->name == NULL) {
    if ((ui_method = OPENSSL_zalloc(sizeof(*ui_method))) == NULL
        || (ui_method->name = OPENSSL_strdup(name)) == NULL
        || !CRYPTO_new_ex_data(CRYPTO_EX_INDEX_UI_METHOD, ui_method,
                               &ui_method->ex_data)) {
        if (ui_method)
            OPENSSL_free(ui_method->name);
        OPENSSL_free(ui_method);
        UIerr(UI_F_UI_CREATE_METHOD, ERR_R_MALLOC_FAILURE);
        return NULL;
    }
    }
    return ui_method;
}

@@ -581,6 +583,10 @@ UI_METHOD *UI_create_method(const char *name)
 */
void UI_destroy_method(UI_METHOD *ui_method)
{
    if (ui_method == NULL)
        return;
    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_UI_METHOD, ui_method,
                        &ui_method->ex_data);
    OPENSSL_free(ui_method->name);
    ui_method->name = NULL;
    OPENSSL_free(ui_method);
@@ -647,6 +653,11 @@ int UI_method_set_prompt_constructor(UI_METHOD *method,
    return -1;
}

int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data)
{
    return CRYPTO_set_ex_data(&method->ex_data, idx, data);
}

int (*UI_method_get_opener(const UI_METHOD *method)) (UI *)
{
    if (method != NULL)
@@ -690,6 +701,11 @@ char *(*UI_method_get_prompt_constructor(const UI_METHOD *method))
    return NULL;
}

const void *UI_method_get_ex_data(const UI_METHOD *method, int idx)
{
    return CRYPTO_get_ex_data(&method->ex_data, idx);
}

enum UI_string_types UI_get_string_type(UI_STRING *uis)
{
    return uis->type;
+4 −0
Original line number Diff line number Diff line
@@ -46,6 +46,10 @@ struct ui_method_st {
     */
    char *(*ui_construct_prompt) (UI *ui, const char *object_desc,
                                  const char *object_name);
    /*
     * UI_METHOD specific application data.
     */
    CRYPTO_EX_DATA ex_data;
};

struct ui_string_st {
+1 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ The specific structures are:
    RSA
    ENGINE
    UI
    UI_METHOD
    BIO

Each is identified by an B<CRYPTO_EX_INDEX_xxx> define in the B<crypto.h>
+2 −1
Original line number Diff line number Diff line
@@ -110,7 +110,8 @@ DEFINE_STACK_OF(void)
# define CRYPTO_EX_INDEX_UI              11
# define CRYPTO_EX_INDEX_BIO             12
# define CRYPTO_EX_INDEX_APP             13
# define CRYPTO_EX_INDEX__COUNT          14
# define CRYPTO_EX_INDEX_UI_METHOD       14
# define CRYPTO_EX_INDEX__COUNT          15

/*
 * This is the default callbacks, but we can have others as well: this is
+2 −0
Original line number Diff line number Diff line
@@ -284,6 +284,7 @@ int UI_method_set_prompt_constructor(UI_METHOD *method,
                                                                  *object_desc,
                                                                  const char
                                                                  *object_name));
int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data);
int (*UI_method_get_opener(const UI_METHOD *method)) (UI *);
int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *);
int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *);
@@ -291,6 +292,7 @@ int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *);
int (*UI_method_get_closer(const UI_METHOD *method)) (UI *);
char *(*UI_method_get_prompt_constructor(const UI_METHOD *method))
    (UI *, const char *, const char *);
const void *UI_method_get_ex_data(const UI_METHOD *method, int idx);

/*
 * The following functions are helpers for method writers to access relevant