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>