Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/curl/packages/vms/report_openssl_version.c
2066 views
1
/* File: report_openssl_version.c
2
*
3
* This file dynamically loads the OpenSSL shared image to report the
4
* version string.
5
*
6
* It will optionally place that version string in a DCL symbol.
7
*
8
* Usage: report_openssl_version <shared_image> [<dcl_symbol>]
9
*
10
* Copyright (C) John Malmberg
11
*
12
* Permission to use, copy, modify, and/or distribute this software for any
13
* purpose with or without fee is hereby granted, provided that the above
14
* copyright notice and this permission notice appear in all copies.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
22
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23
*
24
* SPDX-License-Identifier: ISC
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
void *libptr;
46
const char * (*ssl_version)(int t);
47
const char *version;
48
49
if(argc < 1) {
50
puts("report_openssl_version filename");
51
return 1;
52
}
53
54
libptr = dlopen(argv[1], 0);
55
56
ssl_version = (const char * (*)(int))dlsym(libptr, "SSLeay_version");
57
if(!ssl_version) {
58
ssl_version = (const char * (*)(int))dlsym(libptr, "ssleay_version");
59
if(!ssl_version) {
60
ssl_version = (const char * (*)(int))dlsym(libptr, "SSLEAY_VERSION");
61
}
62
}
63
64
dlclose(libptr);
65
66
if(!ssl_version) {
67
puts("Unable to lookup version of OpenSSL");
68
return 1;
69
}
70
71
version = ssl_version(SSLEAY_VERSION);
72
73
puts(version);
74
75
/* Was a symbol argument given? */
76
if(argc > 1) {
77
int status;
78
struct dsc$descriptor_s symbol_dsc;
79
struct dsc$descriptor_s value_dsc;
80
const unsigned long table_type = LIB$K_CLI_LOCAL_SYM;
81
82
symbol_dsc.dsc$a_pointer = argv[2];
83
symbol_dsc.dsc$w_length = strlen(argv[2]);
84
symbol_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
85
symbol_dsc.dsc$b_class = DSC$K_CLASS_S;
86
87
value_dsc.dsc$a_pointer = (char *)version; /* Cast ok */
88
value_dsc.dsc$w_length = strlen(version);
89
value_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
90
value_dsc.dsc$b_class = DSC$K_CLASS_S;
91
92
status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
93
if(!$VMS_STATUS_SUCCESS(status)) {
94
return status;
95
}
96
}
97
98
return 0;
99
}
100
101