summaryrefslogtreecommitdiffstats
path: root/test/moduleloadtest.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-11-25 07:57:45 +0100
committerRichard Levitte <levitte@openssl.org>2020-12-01 11:06:03 +0100
commit527eb8d2949be19b1bc7b2fa84d0105091bb0928 (patch)
tree0bc1c77c34bc3158fceedcfacb83bf21e822d6c9 /test/moduleloadtest.c
parent9800b1a0da90159a6bd6f5dbf8df6249ee967946 (diff)
TEST: Add a simple module loader, and test the FIPS module with it
This very simple module loader is only linked with the standard C library, so cannot and should not provide any other symbol to the module it tries to load. It can thereby be used to verify that the module it tries to load doesn't have any surprising dependencies when it's supposed to be self contained. A test recipe is added to verify the FIPS module with this loader. Fixes #11020 Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/13507)
Diffstat (limited to 'test/moduleloadtest.c')
-rw-r--r--test/moduleloadtest.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/moduleloadtest.c b/test/moduleloadtest.c
new file mode 100644
index 0000000000..915343f055
--- /dev/null
+++ b/test/moduleloadtest.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (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
+ */
+
+/*
+ * Extremely simple dynamic loader, must never be linked with anything other
+ * than the standard C library. Its purpose is to try to load a dynamic module
+ * and verify the presence of one symbol, if that's given.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/core.h>
+#include "simpledynamic.h"
+
+static int test_load(const char *path, const char *symbol)
+{
+#ifdef SD_INIT
+ SD sd = SD_INIT;
+ SD_SYM sym;
+
+ return sd_load(path, &sd, SD_MODULE)
+ && (symbol == NULL || sd_sym(sd, symbol, &sym))
+ && sd_close(sd);
+#else
+ fprintf(stderr, "No dynamic loader\n");
+ return 0;
+#endif
+}
+
+int main(int argc, char *argv[])
+{
+ const char *m, *s;
+
+ if (argc != 2 && argc != 3) {
+ fprintf(stderr, "Usage: %s sharedobject [ entrypoint ]\n", argv[0]);
+ return 1;
+ }
+
+ m = argv[1];
+ s = argc == 3 ? argv[2] : NULL;
+
+ return test_load(m, s) ? 0 : 1;
+}