summaryrefslogtreecommitdiffstats
path: root/apps/lib
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-11-25 14:10:29 +0100
committerRichard Levitte <levitte@openssl.org>2020-11-26 17:04:21 +0100
commita6a5dec611da16a8bab81dca4172d5ea2ae99dc2 (patch)
tree0b2589d79fcc143503201a08026adc2506ce57da /apps/lib
parente3197e5ab23f7d38da940999422d9ba2dc487e94 (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/lib')
-rw-r--r--apps/lib/apps_ui.c24
1 files changed, 16 insertions, 8 deletions
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;
}