Annotation of embedaddon/curl/packages/vms/report_openssl_version.c, revision 1.1.1.1
1.1 misho 1: /* File: report_openssl_version.c
2: *
3: * $Id$
4: *
5: * This file dynamically loads the openssl shared image to report the
6: * version string.
7: *
8: * It will optionally place that version string in a DCL symbol.
9: *
10: * Usage: report_openssl_version <shared_image> [<dcl_symbol>]
11: *
12: * Copyright 2013, John Malmberg
13: *
14: * Permission to use, copy, modify, and/or distribute this software for any
15: * purpose with or without fee is hereby granted, provided that the above
16: * copyright notice and this permission notice appear in all copies.
17: *
18: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
19: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
20: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
21: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
22: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
23: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
24: * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25: *
26: */
27:
28: #include <dlfcn.h>
29: #include <openssl/opensslv.h>
30: #include <openssl/crypto.h>
31:
32: #include <string.h>
33: #include <descrip.h>
34: #include <libclidef.h>
35: #include <stsdef.h>
36: #include <errno.h>
37:
38: unsigned long LIB$SET_SYMBOL(
39: const struct dsc$descriptor_s * symbol,
40: const struct dsc$descriptor_s * value,
41: const unsigned long * table_type);
42:
43: int main(int argc, char ** argv) {
44:
45:
46: void * libptr;
47: const char * (*ssl_version)(int t);
48: const char * version;
49:
50: if (argc < 1) {
51: puts("report_openssl_version filename");
52: exit(1);
53: }
54:
55: libptr = dlopen(argv[1], 0);
56:
57: ssl_version = (const char * (*)(int))dlsym(libptr, "SSLeay_version");
58: if ((void *)ssl_version == NULL) {
59: ssl_version = (const char * (*)(int))dlsym(libptr, "ssleay_version");
60: if ((void *)ssl_version == NULL) {
61: ssl_version = (const char * (*)(int))dlsym(libptr, "SSLEAY_VERSION");
62: }
63: }
64:
65: dlclose(libptr);
66:
67: if ((void *)ssl_version == NULL) {
68: puts("Unable to lookup version of OpenSSL");
69: exit(1);
70: }
71:
72: version = ssl_version(SSLEAY_VERSION);
73:
74: puts(version);
75:
76: /* Was a symbol argument given? */
77: if (argc > 1) {
78: int status;
79: struct dsc$descriptor_s symbol_dsc;
80: struct dsc$descriptor_s value_dsc;
81: const unsigned long table_type = LIB$K_CLI_LOCAL_SYM;
82:
83: symbol_dsc.dsc$a_pointer = argv[2];
84: symbol_dsc.dsc$w_length = strlen(argv[2]);
85: symbol_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
86: symbol_dsc.dsc$b_class = DSC$K_CLASS_S;
87:
88: value_dsc.dsc$a_pointer = (char *)version; /* Cast ok */
89: value_dsc.dsc$w_length = strlen(version);
90: value_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
91: value_dsc.dsc$b_class = DSC$K_CLASS_S;
92:
93: status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
94: if (!$VMS_STATUS_SUCCESS(status)) {
95: exit(status);
96: }
97: }
98:
99: exit(0);
100: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>