Annotation of src/usr.bin/openssl/version.c, Revision 1.2
1.2 ! jsing 1: /* $OpenBSD: version.c,v 1.1 2014/08/26 17:47:25 jsing Exp $ */
1.1 jsing 2: /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3: * All rights reserved.
4: *
5: * This package is an SSL implementation written
6: * by Eric Young (eay@cryptsoft.com).
7: * The implementation was written so as to conform with Netscapes SSL.
8: *
9: * This library is free for commercial and non-commercial use as long as
10: * the following conditions are aheared to. The following conditions
11: * apply to all code found in this distribution, be it the RC4, RSA,
12: * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13: * included with this distribution is covered by the same copyright terms
14: * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15: *
16: * Copyright remains Eric Young's, and as such any Copyright notices in
17: * the code are not to be removed.
18: * If this package is used in a product, Eric Young should be given attribution
19: * as the author of the parts of the library used.
20: * This can be in the form of a textual message at program startup or
21: * in documentation (online or textual) provided with the package.
22: *
23: * Redistribution and use in source and binary forms, with or without
24: * modification, are permitted provided that the following conditions
25: * are met:
26: * 1. Redistributions of source code must retain the copyright
27: * notice, this list of conditions and the following disclaimer.
28: * 2. Redistributions in binary form must reproduce the above copyright
29: * notice, this list of conditions and the following disclaimer in the
30: * documentation and/or other materials provided with the distribution.
31: * 3. All advertising materials mentioning features or use of this software
32: * must display the following acknowledgement:
33: * "This product includes cryptographic software written by
34: * Eric Young (eay@cryptsoft.com)"
35: * The word 'cryptographic' can be left out if the rouines from the library
36: * being used are not cryptographic related :-).
37: * 4. If you include any Windows specific code (or a derivative thereof) from
38: * the apps directory (application code) you must include an acknowledgement:
39: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40: *
41: * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51: * SUCH DAMAGE.
52: *
53: * The licence and distribution terms for any publically available version or
54: * derivative of this code cannot be changed. i.e. this code cannot simply be
55: * copied and put under another distribution licence
56: * [including the GNU Public Licence.]
57: */
58: /* ====================================================================
59: * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
60: *
61: * Redistribution and use in source and binary forms, with or without
62: * modification, are permitted provided that the following conditions
63: * are met:
64: *
65: * 1. Redistributions of source code must retain the above copyright
66: * notice, this list of conditions and the following disclaimer.
67: *
68: * 2. Redistributions in binary form must reproduce the above copyright
69: * notice, this list of conditions and the following disclaimer in
70: * the documentation and/or other materials provided with the
71: * distribution.
72: *
73: * 3. All advertising materials mentioning features or use of this
74: * software must display the following acknowledgment:
75: * "This product includes software developed by the OpenSSL Project
76: * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77: *
78: * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79: * endorse or promote products derived from this software without
80: * prior written permission. For written permission, please contact
81: * openssl-core@openssl.org.
82: *
83: * 5. Products derived from this software may not be called "OpenSSL"
84: * nor may "OpenSSL" appear in their names without prior written
85: * permission of the OpenSSL Project.
86: *
87: * 6. Redistributions of any form whatsoever must retain the following
88: * acknowledgment:
89: * "This product includes software developed by the OpenSSL Project
90: * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91: *
92: * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103: * OF THE POSSIBILITY OF SUCH DAMAGE.
104: * ====================================================================
105: *
106: * This product includes cryptographic software written by Eric Young
107: * (eay@cryptsoft.com). This product includes software written by Tim
108: * Hudson (tjh@cryptsoft.com).
109: *
110: */
111:
112: #include <stdio.h>
113: #include <stdlib.h>
114: #include <string.h>
115:
116: #include "apps.h"
117:
118: #include <openssl/bn.h>
119: #include <openssl/crypto.h>
120: #include <openssl/evp.h>
121:
122: #ifndef OPENSSL_NO_BF
123: #include <openssl/blowfish.h>
124: #endif
125:
126: #ifndef OPENSSL_NO_DES
127: #include <openssl/des.h>
128: #endif
129:
130: #ifndef OPENSSL_NO_IDEA
131: #include <openssl/idea.h>
132: #endif
133:
134: #ifndef OPENSSL_NO_RC4
135: #include <openssl/rc4.h>
136: #endif
137:
1.2 ! jsing 138: static struct {
! 139: int cflags;
! 140: int date;
! 141: int dir;
! 142: int options;
! 143: int platform;
! 144: int version;
! 145: } version_config;
! 146:
! 147: static int
! 148: version_all_opts(struct option *opt, char *arg)
! 149: {
! 150: version_config.cflags = 1;
! 151: version_config.date = 1;
! 152: version_config.dir= 1;
! 153: version_config.options = 1;
! 154: version_config.platform = 1;
! 155: version_config.version = 1;
! 156:
! 157: return (0);
! 158: }
! 159:
! 160: static struct option version_options[] = {
! 161: {
! 162: .name = "a",
! 163: .desc = "All information (same as setting all other flags)",
! 164: .type = OPTION_FUNC,
! 165: .func = version_all_opts,
! 166: },
! 167: {
! 168: .name = "b",
! 169: .desc = "Date the current version of OpenSSL was built",
! 170: .type = OPTION_FLAG,
! 171: .opt.flag = &version_config.date,
! 172: },
! 173: {
! 174: .name = "d",
! 175: .desc = "OPENSSLDIR value",
! 176: .type = OPTION_FLAG,
! 177: .opt.flag = &version_config.dir,
! 178: },
! 179: {
! 180: .name = "f",
! 181: .desc = "Compilation flags",
! 182: .type = OPTION_FLAG,
! 183: .opt.flag = &version_config.cflags,
! 184: },
! 185: {
! 186: .name = "o",
! 187: .desc = "Option information",
! 188: .type = OPTION_FLAG,
! 189: .opt.flag = &version_config.options,
! 190: },
! 191: {
! 192: .name = "p",
! 193: .desc = "Platform settings",
! 194: .type = OPTION_FLAG,
! 195: .opt.flag = &version_config.platform,
! 196: },
! 197: {
! 198: .name = "v",
! 199: .desc = "Current OpenSSL version",
! 200: .type = OPTION_FLAG,
! 201: .opt.flag = &version_config.version,
! 202: },
! 203: {},
! 204: };
! 205:
! 206: static void
! 207: version_usage(void)
! 208: {
! 209: fprintf(stderr, "usage: version [-abdfopv]\n");
! 210: options_usage(version_options);
! 211: }
! 212:
1.1 jsing 213: int version_main(int, char **);
214:
215: int
216: version_main(int argc, char **argv)
217: {
1.2 ! jsing 218: memset(&version_config, 0, sizeof(version_config));
! 219:
! 220: if (options_parse(argc, argv, version_options, NULL) != 0) {
! 221: version_usage();
! 222: return (1);
! 223: }
1.1 jsing 224:
225: if (argc == 1)
1.2 ! jsing 226: version_config.version = 1;
1.1 jsing 227:
1.2 ! jsing 228: if (version_config.version) {
1.1 jsing 229: if (SSLeay() == SSLEAY_VERSION_NUMBER) {
230: printf("%s\n", SSLeay_version(SSLEAY_VERSION));
231: } else {
232: printf("%s (Library: %s)\n",
233: OPENSSL_VERSION_TEXT,
234: SSLeay_version(SSLEAY_VERSION));
235: }
236: }
1.2 ! jsing 237: if (version_config.date)
1.1 jsing 238: printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON));
1.2 ! jsing 239: if (version_config.platform)
1.1 jsing 240: printf("%s\n", SSLeay_version(SSLEAY_PLATFORM));
1.2 ! jsing 241: if (version_config.options) {
1.1 jsing 242: printf("options: ");
243: printf("%s ", BN_options());
244: #ifndef OPENSSL_NO_RC4
245: printf("%s ", RC4_options());
246: #endif
247: #ifndef OPENSSL_NO_DES
248: printf("%s ", DES_options());
249: #endif
250: #ifndef OPENSSL_NO_IDEA
251: printf("%s ", idea_options());
252: #endif
253: #ifndef OPENSSL_NO_BF
254: printf("%s ", BF_options());
255: #endif
256: printf("\n");
257: }
1.2 ! jsing 258: if (version_config.cflags)
1.1 jsing 259: printf("%s\n", SSLeay_version(SSLEAY_CFLAGS));
1.2 ! jsing 260: if (version_config.dir)
1.1 jsing 261: printf("%s\n", SSLeay_version(SSLEAY_DIR));
262:
1.2 ! jsing 263: return (0);
1.1 jsing 264: }