xref: /freebsd/crypto/openssl/test/ca_internals_test.c (revision e7be843b4a162e68651d3911f0357ed464915629)
1*e7be843bSPierre Pronchery /*
2*e7be843bSPierre Pronchery  * Copyright 2021-2024 The OpenSSL Project Authors. All Rights Reserved.
3*e7be843bSPierre Pronchery  *
4*e7be843bSPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5*e7be843bSPierre Pronchery  * this file except in compliance with the License.  You can obtain a copy
6*e7be843bSPierre Pronchery  * in the file LICENSE in the source distribution or at
7*e7be843bSPierre Pronchery  * https://www.openssl.org/source/license.html
8*e7be843bSPierre Pronchery  */
9*e7be843bSPierre Pronchery 
10*e7be843bSPierre Pronchery #include <string.h>
11*e7be843bSPierre Pronchery #include "apps.h"
12*e7be843bSPierre Pronchery #include "testutil.h"
13*e7be843bSPierre Pronchery #include "crypto/asn1.h"
14*e7be843bSPierre Pronchery 
15*e7be843bSPierre Pronchery #define binname "ca_internals_test"
16*e7be843bSPierre Pronchery 
17*e7be843bSPierre Pronchery char *default_config_file = NULL;
18*e7be843bSPierre Pronchery 
test_do_updatedb(void)19*e7be843bSPierre Pronchery static int test_do_updatedb(void)
20*e7be843bSPierre Pronchery {
21*e7be843bSPierre Pronchery     CA_DB *db = NULL;
22*e7be843bSPierre Pronchery     time_t testdateutc;
23*e7be843bSPierre Pronchery     int rv;
24*e7be843bSPierre Pronchery     size_t argc = test_get_argument_count();
25*e7be843bSPierre Pronchery     BIO *bio_tmp;
26*e7be843bSPierre Pronchery     char *testdate;
27*e7be843bSPierre Pronchery     char *indexfile;
28*e7be843bSPierre Pronchery     int need64bit;
29*e7be843bSPierre Pronchery     int have64bit;
30*e7be843bSPierre Pronchery 
31*e7be843bSPierre Pronchery     if (argc != 4) {
32*e7be843bSPierre Pronchery         TEST_error("Usage: %s: do_updatedb dbfile testdate need64bit\n", binname);
33*e7be843bSPierre Pronchery         TEST_error("       testdate format: ASN1-String\n");
34*e7be843bSPierre Pronchery         return 0;
35*e7be843bSPierre Pronchery     }
36*e7be843bSPierre Pronchery 
37*e7be843bSPierre Pronchery     /*
38*e7be843bSPierre Pronchery      * if the test will only work with 64bit time_t and
39*e7be843bSPierre Pronchery      * the build only supports 32, assume the test as success
40*e7be843bSPierre Pronchery      */
41*e7be843bSPierre Pronchery     need64bit = (int)strtol(test_get_argument(3), NULL, 0);
42*e7be843bSPierre Pronchery     have64bit = sizeof(time_t) > sizeof(uint32_t);
43*e7be843bSPierre Pronchery     if (need64bit && !have64bit) {
44*e7be843bSPierre Pronchery         BIO_printf(bio_out, "skipping test (need64bit: %i, have64bit: %i)",
45*e7be843bSPierre Pronchery             need64bit, have64bit);
46*e7be843bSPierre Pronchery         return 1;
47*e7be843bSPierre Pronchery     }
48*e7be843bSPierre Pronchery 
49*e7be843bSPierre Pronchery     testdate = test_get_argument(2);
50*e7be843bSPierre Pronchery     testdateutc = test_asn1_string_to_time_t(testdate);
51*e7be843bSPierre Pronchery     if (TEST_time_t_lt(testdateutc, 0)) {
52*e7be843bSPierre Pronchery         return 0;
53*e7be843bSPierre Pronchery     }
54*e7be843bSPierre Pronchery 
55*e7be843bSPierre Pronchery     indexfile = test_get_argument(1);
56*e7be843bSPierre Pronchery     db = load_index(indexfile, NULL);
57*e7be843bSPierre Pronchery     if (TEST_ptr_null(db)) {
58*e7be843bSPierre Pronchery         return 0;
59*e7be843bSPierre Pronchery     }
60*e7be843bSPierre Pronchery 
61*e7be843bSPierre Pronchery     bio_tmp = bio_err;
62*e7be843bSPierre Pronchery     bio_err = bio_out;
63*e7be843bSPierre Pronchery     rv = do_updatedb(db, &testdateutc);
64*e7be843bSPierre Pronchery     bio_err = bio_tmp;
65*e7be843bSPierre Pronchery 
66*e7be843bSPierre Pronchery     if (rv > 0) {
67*e7be843bSPierre Pronchery         if (!TEST_true(save_index(indexfile, "new", db)))
68*e7be843bSPierre Pronchery             goto end;
69*e7be843bSPierre Pronchery 
70*e7be843bSPierre Pronchery         if (!TEST_true(rotate_index(indexfile, "new", "old")))
71*e7be843bSPierre Pronchery             goto end;
72*e7be843bSPierre Pronchery     }
73*e7be843bSPierre Pronchery end:
74*e7be843bSPierre Pronchery     free_index(db);
75*e7be843bSPierre Pronchery     return 1;
76*e7be843bSPierre Pronchery }
77*e7be843bSPierre Pronchery 
setup_tests(void)78*e7be843bSPierre Pronchery int setup_tests(void)
79*e7be843bSPierre Pronchery {
80*e7be843bSPierre Pronchery     char *command = test_get_argument(0);
81*e7be843bSPierre Pronchery 
82*e7be843bSPierre Pronchery     if (test_get_argument_count() < 1) {
83*e7be843bSPierre Pronchery         TEST_error("%s: no command specified for testing\n", binname);
84*e7be843bSPierre Pronchery         return 0;
85*e7be843bSPierre Pronchery     }
86*e7be843bSPierre Pronchery 
87*e7be843bSPierre Pronchery     if (strcmp(command, "do_updatedb") == 0)
88*e7be843bSPierre Pronchery         return test_do_updatedb();
89*e7be843bSPierre Pronchery 
90*e7be843bSPierre Pronchery     TEST_error("%s: command '%s' is not supported for testing\n", binname, command);
91*e7be843bSPierre Pronchery     return 0;
92*e7be843bSPierre Pronchery }
93*e7be843bSPierre Pronchery 
94