openssl/test/uitest.c
Richard Levitte edd689efbf VMS: Fix internals test programs
The internals test programs access header files that aren't guarded by
the public __DECC_INCLUDE_PROLOGUE.H and __DECC_INCLUDE_EPILOGUE.H files,
and therefore have no idea what the naming convention is.  Therefore, we
need to specify that explicitely in the internals test programs, since
they aren't built with the same naming convention as the library they
belong with.

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3247)
2017-04-18 23:46:13 +02:00

123 lines
2.6 KiB
C

/*
* Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
*/
#include <stdio.h>
#include <string.h>
#include <openssl/opensslconf.h>
#include <openssl/err.h>
/*
* The VMS build does stdio via a socketpair.
*/
#ifdef __VMS
# include "../apps/vms_term_sock.h"
#endif
#include "../apps/apps.h"
#include "testutil.h"
#include "test_main_custom.h"
/* apps/apps.c depend on these */
char *default_config_file = NULL;
BIO *bio_err = NULL;
#ifndef OPENSSL_NO_UI
# include <openssl/ui.h>
/* Old style PEM password callback */
static int test_pem_password_cb(char *buf, int size, int rwflag, void *userdata)
{
OPENSSL_strlcpy(buf, (char *)userdata, (size_t)size);
return 1;
}
/*
* Test wrapping old style PEM password callback in a UI method through the
* use of UI utility functions
*/
static int test_old()
{
UI_METHOD *ui_method = NULL;
UI *ui = NULL;
char defpass[] = "password";
char pass[16];
int ok = 0;
if (!TEST_ptr(ui_method =
UI_UTIL_wrap_read_pem_callback( test_pem_password_cb, 0))
|| !TEST_ptr(ui = UI_new_method(ui_method)))
goto err;
/* The wrapper passes the UI userdata as the callback userdata param */
UI_add_user_data(ui, defpass);
if (!UI_add_input_string(ui, "prompt", UI_INPUT_FLAG_DEFAULT_PWD,
pass, 0, sizeof(pass) - 1))
goto err;
switch (UI_process(ui)) {
case -2:
TEST_info("test_old: UI process interrupted or cancelled");
/* fall through */
case -1:
goto err;
default:
break;
}
if (TEST_str_eq(pass, defpass))
ok = 1;
err:
UI_free(ui);
UI_destroy_method(ui_method);
return ok;
}
/* Test of UI. This uses the UI method defined in apps/apps.c */
static int test_new_ui()
{
PW_CB_DATA cb_data = {
"password",
"prompt"
};
char pass[16];
int ok = 0;
setup_ui_method();
if (TEST_int_gt(password_callback(pass, sizeof(pass), 0, &cb_data), 0)
&& TEST_str_eq(pass, cb_data.password))
ok = 1;
destroy_ui_method();
return ok;
}
#endif
int test_main(int argc, char *argv[])
{
int ret;
bio_err = dup_bio_err(FORMAT_TEXT);
#ifndef OPENSSL_NO_UI
ADD_TEST(test_old);
ADD_TEST(test_new_ui);
#endif
ret = run_tests(argv[0]);
(void)BIO_flush(bio_err);
BIO_free(bio_err);
return ret;
}