Annotation of embedaddon/curl/packages/vms/report_openssl_version.c, revision 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>