mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
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)
This commit is contained in:
parent
e3197e5ab2
commit
a6a5dec611
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user