]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
APPS: Make it possible for apps to set the base (fallback) UI_METHOD
authorRichard Levitte <levitte@openssl.org>
Wed, 25 Nov 2020 13:10:29 +0000 (14:10 +0100)
committerRichard Levitte <levitte@openssl.org>
Thu, 26 Nov 2020 16:04:21 +0000 (17:04 +0100)
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)

apps/include/apps_ui.h
apps/lib/apps_ui.c

index 59a82d5ecb0709bbddab0affe30ede339d7aa1eb..6875b7c372d93533a6fde0c2bf1f3783e58b5585 100644 (file)
@@ -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;
 
index 6c8c3de1967ff828debe5a1ebced1aa7e20e4d16..00e0ba5d999693a7497dbac217c6be066a63f409 100644 (file)
 #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;
 }