Return to report_openssl_version.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / packages / vms |
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: }