report_openssl_version.c
Go to the documentation of this file.
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 }
puts("Result:")
geometry_msgs::TransformStamped t
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)
UNITTEST_START int * value
Definition: unit1602.c:51


rc_tagdetect_client
Author(s): Monika Florek-Jasinska , Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:16