diff options
author | Richard Levitte <levitte@openssl.org> | 2020-11-25 14:10:29 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2020-11-26 17:04:21 +0100 |
commit | a6a5dec611da16a8bab81dca4172d5ea2ae99dc2 (patch) | |
tree | 0b2589d79fcc143503201a08026adc2506ce57da /apps | |
parent | e3197e5ab23f7d38da940999422d9ba2dc487e94 (diff) |
APPS: Make it possible for apps to set the base (fallback) UI_METHOD
The apps UI method acts as a proxy that bases its activity on a base
(was called fallback) UI_METHOD, which defaults to UI_OpenSSL() under
normal circumstances.
However, some apps might want to have it based on another UI_METHOD,
such as UI_null() to avoid prompting (typical for a -batch run). The
new function set_base_ui_method() allows them to do precisely this.
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/13512)
Diffstat (limited to 'apps')
-rw-r--r-- | apps/include/apps_ui.h | 3 | ||||
-rw-r--r-- | apps/lib/apps_ui.c | 24 |
2 files changed, 18 insertions, 9 deletions
diff --git a/apps/include/apps_ui.h b/apps/include/apps_ui.h index 59a82d5ecb..6875b7c372 100644 --- a/apps/include/apps_ui.h +++ b/apps/include/apps_ui.h @@ -21,7 +21,8 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data); int setup_ui_method(void); void destroy_ui_method(void); -UI_METHOD *get_ui_method(void); +int set_base_ui_method(const UI_METHOD *ui_method); +const UI_METHOD *get_ui_method(void); extern BIO *bio_err; diff --git a/apps/lib/apps_ui.c b/apps/lib/apps_ui.c index 6c8c3de196..00e0ba5d99 100644 --- a/apps/lib/apps_ui.c +++ b/apps/lib/apps_ui.c @@ -13,11 +13,11 @@ #include "apps_ui.h" static UI_METHOD *ui_method = NULL; -static const UI_METHOD *ui_fallback_method = NULL; +static const UI_METHOD *ui_base_method = NULL; static int ui_open(UI *ui) { - int (*opener)(UI *ui) = UI_method_get_opener(ui_fallback_method); + int (*opener)(UI *ui) = UI_method_get_opener(ui_base_method); if (opener != NULL) return opener(ui); @@ -51,7 +51,7 @@ static int ui_read(UI *ui, UI_STRING *uis) } } - reader = UI_method_get_reader(ui_fallback_method); + reader = UI_method_get_reader(ui_base_method); if (reader != NULL) return reader(ui, uis); /* Default to the empty password if we've got nothing better */ @@ -84,7 +84,7 @@ static int ui_write(UI *ui, UI_STRING *uis) } } - writer = UI_method_get_writer(ui_fallback_method); + writer = UI_method_get_writer(ui_base_method); if (writer != NULL) return writer(ui, uis); return 1; @@ -92,7 +92,7 @@ static int ui_write(UI *ui, UI_STRING *uis) static int ui_close(UI *ui) { - int (*closer)(UI *ui) = UI_method_get_closer(ui_fallback_method); + int (*closer)(UI *ui) = UI_method_get_closer(ui_base_method); if (closer != NULL) return closer(ui); @@ -112,11 +112,19 @@ static char *ui_prompt_construct(UI *ui, const char *phrase_desc, return UI_construct_prompt(NULL, phrase_desc, object_name); } +int set_base_ui_method(const UI_METHOD *ui_meth) +{ + if (ui_meth == NULL) + ui_meth = UI_null(); + ui_base_method = ui_meth; + return 1; +} + int setup_ui_method(void) { - ui_fallback_method = UI_null(); + ui_base_method = UI_null(); #ifndef OPENSSL_NO_UI_CONSOLE - ui_fallback_method = UI_OpenSSL(); + ui_base_method = UI_OpenSSL(); #endif ui_method = UI_create_method("OpenSSL application user interface"); return ui_method != NULL @@ -136,7 +144,7 @@ void destroy_ui_method(void) } } -UI_METHOD *get_ui_method(void) +const UI_METHOD *get_ui_method(void) { return ui_method; } |