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>