Annotation of src/usr.bin/openssl/version.c, Revision 1.6
1.6 ! jsing 1: /* $OpenBSD: version.c,v 1.5 2014/12/28 15:48:52 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
1.4 jsing 148: version_all_opts(void)
1.2 jsing 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,
1.4 jsing 165: .opt.func = version_all_opts,
1.2 jsing 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: },
1.3 bcook 203: {NULL},
1.2 jsing 204: };
205:
206: static void
207: version_usage(void)
208: {
209: fprintf(stderr, "usage: version [-abdfopv]\n");
210: options_usage(version_options);
211: }
1.1 jsing 212:
213: int
214: version_main(int argc, char **argv)
215: {
1.2 jsing 216: memset(&version_config, 0, sizeof(version_config));
217:
1.5 jsing 218: if (options_parse(argc, argv, version_options, NULL, NULL) != 0) {
1.2 jsing 219: version_usage();
220: return (1);
221: }
1.1 jsing 222:
223: if (argc == 1)
1.2 jsing 224: version_config.version = 1;
1.1 jsing 225:
1.2 jsing 226: if (version_config.version) {
1.1 jsing 227: if (SSLeay() == SSLEAY_VERSION_NUMBER) {
228: printf("%s\n", SSLeay_version(SSLEAY_VERSION));
229: } else {
230: printf("%s (Library: %s)\n",
231: OPENSSL_VERSION_TEXT,
232: SSLeay_version(SSLEAY_VERSION));
233: }
234: }
1.2 jsing 235: if (version_config.date)
1.1 jsing 236: printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON));
1.2 jsing 237: if (version_config.platform)
1.1 jsing 238: printf("%s\n", SSLeay_version(SSLEAY_PLATFORM));
1.2 jsing 239: if (version_config.options) {
1.1 jsing 240: printf("options: ");
241: printf("%s ", BN_options());
242: #ifndef OPENSSL_NO_RC4
243: printf("%s ", RC4_options());
244: #endif
245: #ifndef OPENSSL_NO_DES
246: printf("%s ", DES_options());
247: #endif
248: #ifndef OPENSSL_NO_IDEA
249: printf("%s ", idea_options());
250: #endif
251: #ifndef OPENSSL_NO_BF
252: printf("%s ", BF_options());
253: #endif
254: printf("\n");
255: }
1.2 jsing 256: if (version_config.cflags)
1.1 jsing 257: printf("%s\n", SSLeay_version(SSLEAY_CFLAGS));
1.2 jsing 258: if (version_config.dir)
1.1 jsing 259: printf("%s\n", SSLeay_version(SSLEAY_DIR));
260:
1.2 jsing 261: return (0);
1.1 jsing 262: }