aboutsummaryrefslogtreecommitdiff
path: root/packages/vms/report_openssl_version.c
diff options
context:
space:
mode:
authorJohn Malmberg <wb8tyw@qsl.net>2013-07-31 22:35:19 -0500
committerYang Tse <yangsita@gmail.com>2013-08-01 13:51:52 +0200
commit2ad688ed7c2fff6a21714577562c1ec944ecb3d1 (patch)
tree84c11066b452f99dd1da4da86aaddfa437859f42 /packages/vms/report_openssl_version.c
parentca786233d246539ba1a43250c64041a604cc0a30 (diff)
Add in the files needed to build libcurl shared images on VMS.
Update the packages/vms/readme file to be current. Also some files for the GNV based build were either missing or needed an update. curl_crtl_init.c is a special file that is run before main() to set up the proper C runtime behavior. generate_vax_transfer.com generates the VAX transfer vector modules from the gnv_libcurl_symbols.opt file. gnv_conftest.c_first is a helper file needed for configure scripts to come up with the expected answers on VMS. gnv_libcurl_symbols.opt is the public symbols for the libcurl shared image. gnv_link_curl.com builds the shared libcurl image and rebuilds other programs to use it. macro32_exactcase.patch is a hack to make a local copy of the VMS Macro32 assembler case sensitive, which is needed to build the VAX transfer modules. report_openssl_version.c is a tool for help verify that the libcurl shared image is being built for a minium version of openssl.
Diffstat (limited to 'packages/vms/report_openssl_version.c')
-rw-r--r--packages/vms/report_openssl_version.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/packages/vms/report_openssl_version.c b/packages/vms/report_openssl_version.c
new file mode 100644
index 000000000..ccb363be4
--- /dev/null
+++ b/packages/vms/report_openssl_version.c
@@ -0,0 +1,100 @@
+/* File: report_openssl_version.c
+ *
+ * $Id$
+ *
+ * This file dynamically loads the openssl shared image to report the
+ * version string.
+ *
+ * It will optionally place that version string in a DCL symbol.
+ *
+ * Usage: report_openssl_version <shared_image> [<dcl_symbol>]
+ *
+ * Copyright 2013, John Malmberg
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#include <dlfcn.h>
+#include <openssl/opensslv.h>
+#include <openssl/crypto.h>
+
+#include <string.h>
+#include <descrip.h>
+#include <libclidef.h>
+#include <stsdef.h>
+#include <errno.h>
+
+unsigned long LIB$SET_SYMBOL(
+ const struct dsc$descriptor_s * symbol,
+ const struct dsc$descriptor_s * value,
+ const unsigned long * table_type);
+
+int main(int argc, char ** argv) {
+
+
+void * libptr;
+const char * (*ssl_version)(int t);
+const char * version;
+
+ if (argc < 1) {
+ puts("report_openssl_version filename");
+ exit(1);
+ }
+
+ libptr = dlopen(argv[1], 0);
+
+ ssl_version = (const char * (*)(int))dlsym(libptr, "SSLeay_version");
+ if ((void *)ssl_version == NULL) {
+ ssl_version = (const char * (*)(int))dlsym(libptr, "ssleay_version");
+ if ((void *)ssl_version == NULL) {
+ ssl_version = (const char * (*)(int))dlsym(libptr, "SSLEAY_VERSION");
+ }
+ }
+
+ dlclose(libptr);
+
+ if ((void *)ssl_version == NULL) {
+ puts("Unable to lookup version of OpenSSL");
+ exit(1);
+ }
+
+ version = ssl_version(SSLEAY_VERSION);
+
+ puts(version);
+
+ /* Was a symbol argument given? */
+ if (argc > 1) {
+ int status;
+ struct dsc$descriptor_s symbol_dsc;
+ struct dsc$descriptor_s value_dsc;
+ const unsigned long table_type = LIB$K_CLI_LOCAL_SYM;
+
+ symbol_dsc.dsc$a_pointer = argv[2];
+ symbol_dsc.dsc$w_length = strlen(argv[2]);
+ symbol_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ symbol_dsc.dsc$b_class = DSC$K_CLASS_S;
+
+ value_dsc.dsc$a_pointer = (char *)version; /* Cast ok */
+ value_dsc.dsc$w_length = strlen(version);
+ value_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ value_dsc.dsc$b_class = DSC$K_CLASS_S;
+
+ status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
+ if (!$VMS_STATUS_SUCCESS(status)) {
+ exit(status);
+ }
+ }
+
+ exit(0);
+}