mirror of https://github.com/openssl/openssl
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);
|
int setup_ui_method(void);
|
||||||
void destroy_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;
|
extern BIO *bio_err;
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
#include "apps_ui.h"
|
#include "apps_ui.h"
|
||||||
|
|
||||||
static UI_METHOD *ui_method = NULL;
|
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)
|
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)
|
if (opener != NULL)
|
||||||
return opener(ui);
|
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)
|
if (reader != NULL)
|
||||||
return reader(ui, uis);
|
return reader(ui, uis);
|
||||||
/* Default to the empty password if we've got nothing better */
|
/* 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)
|
if (writer != NULL)
|
||||||
return writer(ui, uis);
|
return writer(ui, uis);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -92,7 +92,7 @@ static int ui_write(UI *ui, UI_STRING *uis)
|
||||||
|
|
||||||
static int ui_close(UI *ui)
|
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)
|
if (closer != NULL)
|
||||||
return closer(ui);
|
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);
|
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)
|
int setup_ui_method(void)
|
||||||
{
|
{
|
||||||
ui_fallback_method = UI_null();
|
ui_base_method = UI_null();
|
||||||
#ifndef OPENSSL_NO_UI_CONSOLE
|
#ifndef OPENSSL_NO_UI_CONSOLE
|
||||||
ui_fallback_method = UI_OpenSSL();
|
ui_base_method = UI_OpenSSL();
|
||||||
#endif
|
#endif
|
||||||
ui_method = UI_create_method("OpenSSL application user interface");
|
ui_method = UI_create_method("OpenSSL application user interface");
|
||||||
return ui_method != NULL
|
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;
|
return ui_method;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue