summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dso
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dso')
-rw-r--r--src/lib/libcrypto/dso/dso.h409
-rw-r--r--src/lib/libcrypto/dso/dso_dlfcn.c487
-rw-r--r--src/lib/libcrypto/dso/dso_err.c159
-rw-r--r--src/lib/libcrypto/dso/dso_lib.c483
-rw-r--r--src/lib/libcrypto/dso/dso_null.c90
-rw-r--r--src/lib/libcrypto/dso/dso_openssl.c83
6 files changed, 0 insertions, 1711 deletions
diff --git a/src/lib/libcrypto/dso/dso.h b/src/lib/libcrypto/dso/dso.h
deleted file mode 100644
index 839f2e0617..0000000000
--- a/src/lib/libcrypto/dso/dso.h
+++ /dev/null
@@ -1,409 +0,0 @@
1/* dso.h -*- mode:C; c-file-style: "eay" -*- */
2/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
3 * project 2000.
4 */
5/* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59#ifndef HEADER_DSO_H
60#define HEADER_DSO_H
61
62#include <openssl/crypto.h>
63
64#ifdef __cplusplus
65extern "C" {
66#endif
67
68/* These values are used as commands to DSO_ctrl() */
69#define DSO_CTRL_GET_FLAGS 1
70#define DSO_CTRL_SET_FLAGS 2
71#define DSO_CTRL_OR_FLAGS 3
72
73/* By default, DSO_load() will translate the provided filename into a form
74 * typical for the platform (more specifically the DSO_METHOD) using the
75 * dso_name_converter function of the method. Eg. win32 will transform "blah"
76 * into "blah.dll", and dlfcn will transform it into "libblah.so". The
77 * behaviour can be overriden by setting the name_converter callback in the DSO
78 * object (using DSO_set_name_converter()). This callback could even utilise
79 * the DSO_METHOD's converter too if it only wants to override behaviour for
80 * one or two possible DSO methods. However, the following flag can be set in a
81 * DSO to prevent *any* native name-translation at all - eg. if the caller has
82 * prompted the user for a path to a driver library so the filename should be
83 * interpreted as-is. */
84#define DSO_FLAG_NO_NAME_TRANSLATION 0x01
85/* An extra flag to give if only the extension should be added as
86 * translation. This is obviously only of importance on Unix and
87 * other operating systems where the translation also may prefix
88 * the name with something, like 'lib', and ignored everywhere else.
89 * This flag is also ignored if DSO_FLAG_NO_NAME_TRANSLATION is used
90 * at the same time. */
91#define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02
92
93/* The following flag controls the translation of symbol names to upper
94 * case. This is currently only being implemented for OpenVMS.
95 */
96#define DSO_FLAG_UPCASE_SYMBOL 0x10
97
98/* This flag loads the library with public symbols.
99 * Meaning: The exported symbols of this library are public
100 * to all libraries loaded after this library.
101 * At the moment only implemented in unix.
102 */
103#define DSO_FLAG_GLOBAL_SYMBOLS 0x20
104
105
106typedef void (*DSO_FUNC_TYPE)(void);
107
108typedef struct dso_st DSO;
109
110/* The function prototype used for method functions (or caller-provided
111 * callbacks) that transform filenames. They are passed a DSO structure pointer
112 * (or NULL if they are to be used independantly of a DSO object) and a
113 * filename to transform. They should either return NULL (if there is an error
114 * condition) or a newly allocated string containing the transformed form that
115 * the caller will need to free with OPENSSL_free() when done. */
116typedef char* (*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *);
117/* The function prototype used for method functions (or caller-provided
118 * callbacks) that merge two file specifications. They are passed a
119 * DSO structure pointer (or NULL if they are to be used independantly of
120 * a DSO object) and two file specifications to merge. They should
121 * either return NULL (if there is an error condition) or a newly allocated
122 * string containing the result of merging that the caller will need
123 * to free with OPENSSL_free() when done.
124 * Here, merging means that bits and pieces are taken from each of the
125 * file specifications and added together in whatever fashion that is
126 * sensible for the DSO method in question. The only rule that really
127 * applies is that if the two specification contain pieces of the same
128 * type, the copy from the first string takes priority. One could see
129 * it as the first specification is the one given by the user and the
130 * second being a bunch of defaults to add on if they're missing in the
131 * first. */
132typedef char* (*DSO_MERGER_FUNC)(DSO *, const char *, const char *);
133
134typedef struct dso_meth_st
135 {
136 const char *name;
137 /* Loads a shared library, NB: new DSO_METHODs must ensure that a
138 * successful load populates the loaded_filename field, and likewise a
139 * successful unload OPENSSL_frees and NULLs it out. */
140 int (*dso_load)(DSO *dso);
141 /* Unloads a shared library */
142 int (*dso_unload)(DSO *dso);
143 /* Binds a variable */
144 void *(*dso_bind_var)(DSO *dso, const char *symname);
145 /* Binds a function - assumes a return type of DSO_FUNC_TYPE.
146 * This should be cast to the real function prototype by the
147 * caller. Platforms that don't have compatible representations
148 * for different prototypes (this is possible within ANSI C)
149 * are highly unlikely to have shared libraries at all, let
150 * alone a DSO_METHOD implemented for them. */
151 DSO_FUNC_TYPE (*dso_bind_func)(DSO *dso, const char *symname);
152
153/* I don't think this would actually be used in any circumstances. */
154#if 0
155 /* Unbinds a variable */
156 int (*dso_unbind_var)(DSO *dso, char *symname, void *symptr);
157 /* Unbinds a function */
158 int (*dso_unbind_func)(DSO *dso, char *symname, DSO_FUNC_TYPE symptr);
159#endif
160 /* The generic (yuck) "ctrl()" function. NB: Negative return
161 * values (rather than zero) indicate errors. */
162 long (*dso_ctrl)(DSO *dso, int cmd, long larg, void *parg);
163 /* The default DSO_METHOD-specific function for converting filenames to
164 * a canonical native form. */
165 DSO_NAME_CONVERTER_FUNC dso_name_converter;
166 /* The default DSO_METHOD-specific function for converting filenames to
167 * a canonical native form. */
168 DSO_MERGER_FUNC dso_merger;
169
170 /* [De]Initialisation handlers. */
171 int (*init)(DSO *dso);
172 int (*finish)(DSO *dso);
173
174 /* Return pathname of the module containing location */
175 int (*pathbyaddr)(void *addr,char *path,int sz);
176 /* Perform global symbol lookup, i.e. among *all* modules */
177 void *(*globallookup)(const char *symname);
178 } DSO_METHOD;
179
180/**********************************************************************/
181/* The low-level handle type used to refer to a loaded shared library */
182
183struct dso_st
184 {
185 DSO_METHOD *meth;
186 /* Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS
187 * doesn't use anything but will need to cache the filename
188 * for use in the dso_bind handler. All in all, let each
189 * method control its own destiny. "Handles" and such go in
190 * a STACK. */
191 STACK_OF(void) *meth_data;
192 int references;
193 int flags;
194 /* For use by applications etc ... use this for your bits'n'pieces,
195 * don't touch meth_data! */
196 CRYPTO_EX_DATA ex_data;
197 /* If this callback function pointer is set to non-NULL, then it will
198 * be used in DSO_load() in place of meth->dso_name_converter. NB: This
199 * should normally set using DSO_set_name_converter(). */
200 DSO_NAME_CONVERTER_FUNC name_converter;
201 /* If this callback function pointer is set to non-NULL, then it will
202 * be used in DSO_load() in place of meth->dso_merger. NB: This
203 * should normally set using DSO_set_merger(). */
204 DSO_MERGER_FUNC merger;
205 /* This is populated with (a copy of) the platform-independant
206 * filename used for this DSO. */
207 char *filename;
208 /* This is populated with (a copy of) the translated filename by which
209 * the DSO was actually loaded. It is NULL iff the DSO is not currently
210 * loaded. NB: This is here because the filename translation process
211 * may involve a callback being invoked more than once not only to
212 * convert to a platform-specific form, but also to try different
213 * filenames in the process of trying to perform a load. As such, this
214 * variable can be used to indicate (a) whether this DSO structure
215 * corresponds to a loaded library or not, and (b) the filename with
216 * which it was actually loaded. */
217 char *loaded_filename;
218 };
219
220
221DSO * DSO_new(void);
222DSO * DSO_new_method(DSO_METHOD *method);
223int DSO_free(DSO *dso);
224int DSO_flags(DSO *dso);
225int DSO_up_ref(DSO *dso);
226long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg);
227
228/* This function sets the DSO's name_converter callback. If it is non-NULL,
229 * then it will be used instead of the associated DSO_METHOD's function. If
230 * oldcb is non-NULL then it is set to the function pointer value being
231 * replaced. Return value is non-zero for success. */
232int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
233 DSO_NAME_CONVERTER_FUNC *oldcb);
234/* These functions can be used to get/set the platform-independant filename
235 * used for a DSO. NB: set will fail if the DSO is already loaded. */
236const char *DSO_get_filename(DSO *dso);
237int DSO_set_filename(DSO *dso, const char *filename);
238/* This function will invoke the DSO's name_converter callback to translate a
239 * filename, or if the callback isn't set it will instead use the DSO_METHOD's
240 * converter. If "filename" is NULL, the "filename" in the DSO itself will be
241 * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is
242 * simply duplicated. NB: This function is usually called from within a
243 * DSO_METHOD during the processing of a DSO_load() call, and is exposed so that
244 * caller-created DSO_METHODs can do the same thing. A non-NULL return value
245 * will need to be OPENSSL_free()'d. */
246char *DSO_convert_filename(DSO *dso, const char *filename);
247/* This function will invoke the DSO's merger callback to merge two file
248 * specifications, or if the callback isn't set it will instead use the
249 * DSO_METHOD's merger. A non-NULL return value will need to be
250 * OPENSSL_free()'d. */
251char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2);
252/* If the DSO is currently loaded, this returns the filename that it was loaded
253 * under, otherwise it returns NULL. So it is also useful as a test as to
254 * whether the DSO is currently loaded. NB: This will not necessarily return
255 * the same value as DSO_convert_filename(dso, dso->filename), because the
256 * DSO_METHOD's load function may have tried a variety of filenames (with
257 * and/or without the aid of the converters) before settling on the one it
258 * actually loaded. */
259const char *DSO_get_loaded_filename(DSO *dso);
260
261void DSO_set_default_method(DSO_METHOD *meth);
262DSO_METHOD *DSO_get_default_method(void);
263DSO_METHOD *DSO_get_method(DSO *dso);
264DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth);
265
266/* The all-singing all-dancing load function, you normally pass NULL
267 * for the first and third parameters. Use DSO_up and DSO_free for
268 * subsequent reference count handling. Any flags passed in will be set
269 * in the constructed DSO after its init() function but before the
270 * load operation. If 'dso' is non-NULL, 'flags' is ignored. */
271DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags);
272
273/* This function binds to a variable inside a shared library. */
274void *DSO_bind_var(DSO *dso, const char *symname);
275
276/* This function binds to a function inside a shared library. */
277DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname);
278
279/* This method is the default, but will beg, borrow, or steal whatever
280 * method should be the default on any particular platform (including
281 * DSO_METH_null() if necessary). */
282DSO_METHOD *DSO_METHOD_openssl(void);
283
284/* This method is defined for all platforms - if a platform has no
285 * DSO support then this will be the only method! */
286DSO_METHOD *DSO_METHOD_null(void);
287
288/* If DSO_DLFCN is defined, the standard dlfcn.h-style functions
289 * (dlopen, dlclose, dlsym, etc) will be used and incorporated into
290 * this method. If not, this method will return NULL. */
291DSO_METHOD *DSO_METHOD_dlfcn(void);
292
293/* If DSO_DL is defined, the standard dl.h-style functions (shl_load,
294 * shl_unload, shl_findsym, etc) will be used and incorporated into
295 * this method. If not, this method will return NULL. */
296DSO_METHOD *DSO_METHOD_dl(void);
297
298/* If WIN32 is defined, use DLLs. If not, return NULL. */
299DSO_METHOD *DSO_METHOD_win32(void);
300
301/* If VMS is defined, use shared images. If not, return NULL. */
302DSO_METHOD *DSO_METHOD_vms(void);
303
304/* This function writes null-terminated pathname of DSO module
305 * containing 'addr' into 'sz' large caller-provided 'path' and
306 * returns the number of characters [including trailing zero]
307 * written to it. If 'sz' is 0 or negative, 'path' is ignored and
308 * required amount of charachers [including trailing zero] to
309 * accomodate pathname is returned. If 'addr' is NULL, then
310 * pathname of cryptolib itself is returned. Negative or zero
311 * return value denotes error.
312 */
313int DSO_pathbyaddr(void *addr,char *path,int sz);
314
315/* This function should be used with caution! It looks up symbols in
316 * *all* loaded modules and if module gets unloaded by somebody else
317 * attempt to dereference the pointer is doomed to have fatal
318 * consequences. Primary usage for this function is to probe *core*
319 * system functionality, e.g. check if getnameinfo(3) is available
320 * at run-time without bothering about OS-specific details such as
321 * libc.so.versioning or where does it actually reside: in libc
322 * itself or libsocket. */
323void *DSO_global_lookup(const char *name);
324
325/* If BeOS is defined, use shared images. If not, return NULL. */
326DSO_METHOD *DSO_METHOD_beos(void);
327
328/* BEGIN ERROR CODES */
329/* The following lines are auto generated by the script mkerr.pl. Any changes
330 * made after this point may be overwritten when the script is next run.
331 */
332void ERR_load_DSO_strings(void);
333
334/* Error codes for the DSO functions. */
335
336/* Function codes. */
337#define DSO_F_BEOS_BIND_FUNC 144
338#define DSO_F_BEOS_BIND_VAR 145
339#define DSO_F_BEOS_LOAD 146
340#define DSO_F_BEOS_NAME_CONVERTER 147
341#define DSO_F_BEOS_UNLOAD 148
342#define DSO_F_DLFCN_BIND_FUNC 100
343#define DSO_F_DLFCN_BIND_VAR 101
344#define DSO_F_DLFCN_LOAD 102
345#define DSO_F_DLFCN_MERGER 130
346#define DSO_F_DLFCN_NAME_CONVERTER 123
347#define DSO_F_DLFCN_UNLOAD 103
348#define DSO_F_DL_BIND_FUNC 104
349#define DSO_F_DL_BIND_VAR 105
350#define DSO_F_DL_LOAD 106
351#define DSO_F_DL_MERGER 131
352#define DSO_F_DL_NAME_CONVERTER 124
353#define DSO_F_DL_UNLOAD 107
354#define DSO_F_DSO_BIND_FUNC 108
355#define DSO_F_DSO_BIND_VAR 109
356#define DSO_F_DSO_CONVERT_FILENAME 126
357#define DSO_F_DSO_CTRL 110
358#define DSO_F_DSO_FREE 111
359#define DSO_F_DSO_GET_FILENAME 127
360#define DSO_F_DSO_GET_LOADED_FILENAME 128
361#define DSO_F_DSO_GLOBAL_LOOKUP 139
362#define DSO_F_DSO_LOAD 112
363#define DSO_F_DSO_MERGE 132
364#define DSO_F_DSO_NEW_METHOD 113
365#define DSO_F_DSO_PATHBYADDR 140
366#define DSO_F_DSO_SET_FILENAME 129
367#define DSO_F_DSO_SET_NAME_CONVERTER 122
368#define DSO_F_DSO_UP_REF 114
369#define DSO_F_GLOBAL_LOOKUP_FUNC 138
370#define DSO_F_PATHBYADDR 137
371#define DSO_F_VMS_BIND_SYM 115
372#define DSO_F_VMS_LOAD 116
373#define DSO_F_VMS_MERGER 133
374#define DSO_F_VMS_UNLOAD 117
375#define DSO_F_WIN32_BIND_FUNC 118
376#define DSO_F_WIN32_BIND_VAR 119
377#define DSO_F_WIN32_GLOBALLOOKUP 142
378#define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143
379#define DSO_F_WIN32_JOINER 135
380#define DSO_F_WIN32_LOAD 120
381#define DSO_F_WIN32_MERGER 134
382#define DSO_F_WIN32_NAME_CONVERTER 125
383#define DSO_F_WIN32_PATHBYADDR 141
384#define DSO_F_WIN32_SPLITTER 136
385#define DSO_F_WIN32_UNLOAD 121
386
387/* Reason codes. */
388#define DSO_R_CTRL_FAILED 100
389#define DSO_R_DSO_ALREADY_LOADED 110
390#define DSO_R_EMPTY_FILE_STRUCTURE 113
391#define DSO_R_FAILURE 114
392#define DSO_R_FILENAME_TOO_BIG 101
393#define DSO_R_FINISH_FAILED 102
394#define DSO_R_INCORRECT_FILE_SYNTAX 115
395#define DSO_R_LOAD_FAILED 103
396#define DSO_R_NAME_TRANSLATION_FAILED 109
397#define DSO_R_NO_FILENAME 111
398#define DSO_R_NO_FILE_SPECIFICATION 116
399#define DSO_R_NULL_HANDLE 104
400#define DSO_R_SET_FILENAME_FAILED 112
401#define DSO_R_STACK_ERROR 105
402#define DSO_R_SYM_FAILURE 106
403#define DSO_R_UNLOAD_FAILED 107
404#define DSO_R_UNSUPPORTED 108
405
406#ifdef __cplusplus
407}
408#endif
409#endif
diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c
deleted file mode 100644
index e21b9f6dbc..0000000000
--- a/src/lib/libcrypto/dso/dso_dlfcn.c
+++ /dev/null
@@ -1,487 +0,0 @@
1/* dso_dlfcn.c -*- mode:C; c-file-style: "eay" -*- */
2/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
3 * project 2000.
4 */
5/* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59/* We need to do this early, because stdio.h includes the header files
60 that handle _GNU_SOURCE and other similar macros. Defining it later
61 is simply too late, because those headers are protected from re-
62 inclusion. */
63#ifdef __linux
64# ifndef _GNU_SOURCE
65# define _GNU_SOURCE /* make sure dladdr is declared */
66# endif
67#endif
68
69#include <stdio.h>
70#include "cryptlib.h"
71#include <openssl/dso.h>
72
73#ifndef DSO_DLFCN
74DSO_METHOD *DSO_METHOD_dlfcn(void)
75 {
76 return NULL;
77 }
78#else
79
80#ifdef HAVE_DLFCN_H
81# ifdef __osf__
82# define __EXTENSIONS__
83# endif
84# include <dlfcn.h>
85# define HAVE_DLINFO 1
86# if defined(_AIX) || defined(__CYGWIN__) || \
87 defined(__SCO_VERSION__) || defined(_SCO_ELF) || \
88 (defined(__osf__) && !defined(RTLD_NEXT)) || \
89 (defined(__OpenBSD__) && (!defined(__ELF__) || !defined(RTLD_SELF))) || \
90 defined(__ANDROID__)
91# undef HAVE_DLINFO
92# endif
93#endif
94
95/* Part of the hack in "dlfcn_load" ... */
96#define DSO_MAX_TRANSLATED_SIZE 256
97
98static int dlfcn_load(DSO *dso);
99static int dlfcn_unload(DSO *dso);
100static void *dlfcn_bind_var(DSO *dso, const char *symname);
101static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname);
102#if 0
103static int dlfcn_unbind(DSO *dso, char *symname, void *symptr);
104static int dlfcn_init(DSO *dso);
105static int dlfcn_finish(DSO *dso);
106static long dlfcn_ctrl(DSO *dso, int cmd, long larg, void *parg);
107#endif
108static char *dlfcn_name_converter(DSO *dso, const char *filename);
109static char *dlfcn_merger(DSO *dso, const char *filespec1,
110 const char *filespec2);
111static int dlfcn_pathbyaddr(void *addr,char *path,int sz);
112static void *dlfcn_globallookup(const char *name);
113
114static DSO_METHOD dso_meth_dlfcn = {
115 "OpenSSL 'dlfcn' shared library method",
116 dlfcn_load,
117 dlfcn_unload,
118 dlfcn_bind_var,
119 dlfcn_bind_func,
120/* For now, "unbind" doesn't exist */
121#if 0
122 NULL, /* unbind_var */
123 NULL, /* unbind_func */
124#endif
125 NULL, /* ctrl */
126 dlfcn_name_converter,
127 dlfcn_merger,
128 NULL, /* init */
129 NULL, /* finish */
130 dlfcn_pathbyaddr,
131 dlfcn_globallookup
132 };
133
134DSO_METHOD *DSO_METHOD_dlfcn(void)
135 {
136 return(&dso_meth_dlfcn);
137 }
138
139/* Prior to using the dlopen() function, we should decide on the flag
140 * we send. There's a few different ways of doing this and it's a
141 * messy venn-diagram to match up which platforms support what. So
142 * as we don't have autoconf yet, I'm implementing a hack that could
143 * be hacked further relatively easily to deal with cases as we find
144 * them. Initially this is to cope with OpenBSD. */
145#if defined(__OpenBSD__) || defined(__NetBSD__)
146# ifdef DL_LAZY
147# define DLOPEN_FLAG DL_LAZY
148# else
149# ifdef RTLD_NOW
150# define DLOPEN_FLAG RTLD_NOW
151# else
152# define DLOPEN_FLAG 0
153# endif
154# endif
155#else
156# ifdef OPENSSL_SYS_SUNOS
157# define DLOPEN_FLAG 1
158# else
159# define DLOPEN_FLAG RTLD_NOW /* Hope this works everywhere else */
160# endif
161#endif
162
163/* For this DSO_METHOD, our meth_data STACK will contain;
164 * (i) the handle (void*) returned from dlopen().
165 */
166
167static int dlfcn_load(DSO *dso)
168 {
169 void *ptr = NULL;
170 /* See applicable comments in dso_dl.c */
171 char *filename = DSO_convert_filename(dso, NULL);
172 int flags = DLOPEN_FLAG;
173
174 if(filename == NULL)
175 {
176 DSOerr(DSO_F_DLFCN_LOAD,DSO_R_NO_FILENAME);
177 goto err;
178 }
179
180#ifdef RTLD_GLOBAL
181 if (dso->flags & DSO_FLAG_GLOBAL_SYMBOLS)
182 flags |= RTLD_GLOBAL;
183#endif
184 ptr = dlopen(filename, flags);
185 if(ptr == NULL)
186 {
187 DSOerr(DSO_F_DLFCN_LOAD,DSO_R_LOAD_FAILED);
188 ERR_add_error_data(4, "filename(", filename, "): ", dlerror());
189 goto err;
190 }
191 if(!sk_void_push(dso->meth_data, (char *)ptr))
192 {
193 DSOerr(DSO_F_DLFCN_LOAD,DSO_R_STACK_ERROR);
194 goto err;
195 }
196 /* Success */
197 dso->loaded_filename = filename;
198 return(1);
199err:
200 /* Cleanup! */
201 if(filename != NULL)
202 OPENSSL_free(filename);
203 if(ptr != NULL)
204 dlclose(ptr);
205 return(0);
206}
207
208static int dlfcn_unload(DSO *dso)
209 {
210 void *ptr;
211 if(dso == NULL)
212 {
213 DSOerr(DSO_F_DLFCN_UNLOAD,ERR_R_PASSED_NULL_PARAMETER);
214 return(0);
215 }
216 if(sk_void_num(dso->meth_data) < 1)
217 return(1);
218 ptr = sk_void_pop(dso->meth_data);
219 if(ptr == NULL)
220 {
221 DSOerr(DSO_F_DLFCN_UNLOAD,DSO_R_NULL_HANDLE);
222 /* Should push the value back onto the stack in
223 * case of a retry. */
224 sk_void_push(dso->meth_data, ptr);
225 return(0);
226 }
227 /* For now I'm not aware of any errors associated with dlclose() */
228 dlclose(ptr);
229 return(1);
230 }
231
232static void *dlfcn_bind_var(DSO *dso, const char *symname)
233 {
234 void *ptr, *sym;
235
236 if((dso == NULL) || (symname == NULL))
237 {
238 DSOerr(DSO_F_DLFCN_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
239 return(NULL);
240 }
241 if(sk_void_num(dso->meth_data) < 1)
242 {
243 DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_STACK_ERROR);
244 return(NULL);
245 }
246 ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
247 if(ptr == NULL)
248 {
249 DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_NULL_HANDLE);
250 return(NULL);
251 }
252 sym = dlsym(ptr, symname);
253 if(sym == NULL)
254 {
255 DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_SYM_FAILURE);
256 ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
257 return(NULL);
258 }
259 return(sym);
260 }
261
262static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)
263 {
264 void *ptr;
265 union {
266 DSO_FUNC_TYPE sym;
267 void *dlret;
268 } u;
269
270 if((dso == NULL) || (symname == NULL))
271 {
272 DSOerr(DSO_F_DLFCN_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
273 return(NULL);
274 }
275 if(sk_void_num(dso->meth_data) < 1)
276 {
277 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_STACK_ERROR);
278 return(NULL);
279 }
280 ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
281 if(ptr == NULL)
282 {
283 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE);
284 return(NULL);
285 }
286 u.dlret = dlsym(ptr, symname);
287 if(u.dlret == NULL)
288 {
289 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE);
290 ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
291 return(NULL);
292 }
293 return u.sym;
294 }
295
296static char *dlfcn_merger(DSO *dso, const char *filespec1,
297 const char *filespec2)
298 {
299 char *merged;
300 size_t len;
301
302 if(!filespec1 && !filespec2)
303 {
304 DSOerr(DSO_F_DLFCN_MERGER,
305 ERR_R_PASSED_NULL_PARAMETER);
306 return(NULL);
307 }
308 /* If the first file specification is a rooted path, it rules.
309 same goes if the second file specification is missing. */
310 if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/'))
311 {
312 len = strlen(filespec1) + 1;
313 merged = OPENSSL_malloc(len);
314 if(!merged)
315 {
316 DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
317 return(NULL);
318 }
319 strlcpy(merged, filespec1, len);
320 }
321 /* If the first file specification is missing, the second one rules. */
322 else if (!filespec1)
323 {
324 len = strlen(filespec2) + 1;
325 merged = OPENSSL_malloc(strlen(filespec2) + 1);
326 if(!merged)
327 {
328 DSOerr(DSO_F_DLFCN_MERGER,
329 ERR_R_MALLOC_FAILURE);
330 return(NULL);
331 }
332 strlcpy(merged, filespec2, len);
333 }
334 else
335 /* This part isn't as trivial as it looks. It assumes that
336 the second file specification really is a directory, and
337 makes no checks whatsoever. Therefore, the result becomes
338 the concatenation of filespec2 followed by a slash followed
339 by filespec1. */
340 {
341 int spec2len, len;
342
343 spec2len = strlen(filespec2);
344 len = spec2len + (filespec1 ? strlen(filespec1) : 0);
345
346 if(filespec2 && filespec2[spec2len - 1] == '/')
347 {
348 spec2len--;
349 len--;
350 }
351 merged = OPENSSL_malloc(len + 2);
352 if(!merged)
353 {
354 DSOerr(DSO_F_DLFCN_MERGER,
355 ERR_R_MALLOC_FAILURE);
356 return(NULL);
357 }
358 strlcpy(merged, filespec2, len + 2);
359 merged[spec2len] = '/';
360 strlcpy(&merged[spec2len + 1], filespec1, len + 1 - spec2len);
361 }
362 return(merged);
363 }
364
365#ifdef OPENSSL_SYS_MACOSX
366#define DSO_ext ".dylib"
367#define DSO_extlen 6
368#else
369#define DSO_ext ".so"
370#define DSO_extlen 3
371#endif
372
373
374static char *dlfcn_name_converter(DSO *dso, const char *filename)
375 {
376 char *translated;
377 int len, rsize, transform;
378
379 len = strlen(filename);
380 rsize = len + 1;
381 transform = (strstr(filename, "/") == NULL);
382 if(transform)
383 {
384 /* We will convert this to "%s.so" or "lib%s.so" etc */
385 rsize += DSO_extlen; /* The length of ".so" */
386 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
387 rsize += 3; /* The length of "lib" */
388 }
389 translated = OPENSSL_malloc(rsize);
390 if(translated == NULL)
391 {
392 DSOerr(DSO_F_DLFCN_NAME_CONVERTER,
393 DSO_R_NAME_TRANSLATION_FAILED);
394 return(NULL);
395 }
396 if(transform)
397 {
398 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
399 snprintf(translated, rsize, "lib%s" DSO_ext, filename);
400 else
401 snprintf(translated, rsize, "%s" DSO_ext, filename);
402 }
403 else
404 snprintf(translated, rsize, "%s", filename);
405 return(translated);
406 }
407
408#if defined(__sgi) && !defined(__OpenBSD__)
409/*
410This is a quote from IRIX manual for dladdr(3c):
411
412 <dlfcn.h> does not contain a prototype for dladdr or definition of
413 Dl_info. The #include <dlfcn.h> in the SYNOPSIS line is traditional,
414 but contains no dladdr prototype and no IRIX library contains an
415 implementation. Write your own declaration based on the code below.
416
417 The following code is dependent on internal interfaces that are not
418 part of the IRIX compatibility guarantee; however, there is no future
419 intention to change this interface, so on a practical level, the code
420 below is safe to use on IRIX.
421*/
422#include <rld_interface.h>
423#ifndef _RLD_INTERFACE_DLFCN_H_DLADDR
424#define _RLD_INTERFACE_DLFCN_H_DLADDR
425typedef struct Dl_info {
426 const char * dli_fname;
427 void * dli_fbase;
428 const char * dli_sname;
429 void * dli_saddr;
430 int dli_version;
431 int dli_reserved1;
432 long dli_reserved[4];
433} Dl_info;
434#else
435typedef struct Dl_info Dl_info;
436#endif
437#define _RLD_DLADDR 14
438
439static int dladdr(void *address, Dl_info *dl)
440{
441 void *v;
442 v = _rld_new_interface(_RLD_DLADDR,address,dl);
443 return (int)v;
444}
445#endif /* __sgi */
446
447static int dlfcn_pathbyaddr(void *addr,char *path,int sz)
448 {
449#ifdef HAVE_DLINFO
450 Dl_info dli;
451 int len;
452
453 if (addr == NULL)
454 {
455 union { int(*f)(void*,char*,int); void *p; } t =
456 { dlfcn_pathbyaddr };
457 addr = t.p;
458 }
459
460 if (dladdr(addr,&dli))
461 {
462 len = (int)strlen(dli.dli_fname);
463 if (sz <= 0) return len+1;
464 if (len >= sz) len=sz-1;
465 memcpy(path,dli.dli_fname,len);
466 path[len++]=0;
467 return len;
468 }
469
470 ERR_add_error_data(4, "dlfcn_pathbyaddr(): ", dlerror());
471#endif
472 return -1;
473 }
474
475static void *dlfcn_globallookup(const char *name)
476 {
477 void *ret = NULL,*handle = dlopen(NULL,RTLD_LAZY);
478
479 if (handle)
480 {
481 ret = dlsym(handle,name);
482 dlclose(handle);
483 }
484
485 return ret;
486 }
487#endif /* DSO_DLFCN */
diff --git a/src/lib/libcrypto/dso/dso_err.c b/src/lib/libcrypto/dso/dso_err.c
deleted file mode 100644
index 2bb07c2514..0000000000
--- a/src/lib/libcrypto/dso/dso_err.c
+++ /dev/null
@@ -1,159 +0,0 @@
1/* crypto/dso/dso_err.c */
2/* ====================================================================
3 * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@OpenSSL.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55
56/* NOTE: this file was auto generated by the mkerr.pl script: any changes
57 * made to it will be overwritten when the script next updates this file,
58 * only reason strings will be preserved.
59 */
60
61#include <stdio.h>
62#include <openssl/err.h>
63#include <openssl/dso.h>
64
65/* BEGIN ERROR CODES */
66#ifndef OPENSSL_NO_ERR
67
68#define ERR_FUNC(func) ERR_PACK(ERR_LIB_DSO,func,0)
69#define ERR_REASON(reason) ERR_PACK(ERR_LIB_DSO,0,reason)
70
71static ERR_STRING_DATA DSO_str_functs[]=
72 {
73{ERR_FUNC(DSO_F_BEOS_BIND_FUNC), "BEOS_BIND_FUNC"},
74{ERR_FUNC(DSO_F_BEOS_BIND_VAR), "BEOS_BIND_VAR"},
75{ERR_FUNC(DSO_F_BEOS_LOAD), "BEOS_LOAD"},
76{ERR_FUNC(DSO_F_BEOS_NAME_CONVERTER), "BEOS_NAME_CONVERTER"},
77{ERR_FUNC(DSO_F_BEOS_UNLOAD), "BEOS_UNLOAD"},
78{ERR_FUNC(DSO_F_DLFCN_BIND_FUNC), "DLFCN_BIND_FUNC"},
79{ERR_FUNC(DSO_F_DLFCN_BIND_VAR), "DLFCN_BIND_VAR"},
80{ERR_FUNC(DSO_F_DLFCN_LOAD), "DLFCN_LOAD"},
81{ERR_FUNC(DSO_F_DLFCN_MERGER), "DLFCN_MERGER"},
82{ERR_FUNC(DSO_F_DLFCN_NAME_CONVERTER), "DLFCN_NAME_CONVERTER"},
83{ERR_FUNC(DSO_F_DLFCN_UNLOAD), "DLFCN_UNLOAD"},
84{ERR_FUNC(DSO_F_DL_BIND_FUNC), "DL_BIND_FUNC"},
85{ERR_FUNC(DSO_F_DL_BIND_VAR), "DL_BIND_VAR"},
86{ERR_FUNC(DSO_F_DL_LOAD), "DL_LOAD"},
87{ERR_FUNC(DSO_F_DL_MERGER), "DL_MERGER"},
88{ERR_FUNC(DSO_F_DL_NAME_CONVERTER), "DL_NAME_CONVERTER"},
89{ERR_FUNC(DSO_F_DL_UNLOAD), "DL_UNLOAD"},
90{ERR_FUNC(DSO_F_DSO_BIND_FUNC), "DSO_bind_func"},
91{ERR_FUNC(DSO_F_DSO_BIND_VAR), "DSO_bind_var"},
92{ERR_FUNC(DSO_F_DSO_CONVERT_FILENAME), "DSO_convert_filename"},
93{ERR_FUNC(DSO_F_DSO_CTRL), "DSO_ctrl"},
94{ERR_FUNC(DSO_F_DSO_FREE), "DSO_free"},
95{ERR_FUNC(DSO_F_DSO_GET_FILENAME), "DSO_get_filename"},
96{ERR_FUNC(DSO_F_DSO_GET_LOADED_FILENAME), "DSO_get_loaded_filename"},
97{ERR_FUNC(DSO_F_DSO_GLOBAL_LOOKUP), "DSO_global_lookup"},
98{ERR_FUNC(DSO_F_DSO_LOAD), "DSO_load"},
99{ERR_FUNC(DSO_F_DSO_MERGE), "DSO_merge"},
100{ERR_FUNC(DSO_F_DSO_NEW_METHOD), "DSO_new_method"},
101{ERR_FUNC(DSO_F_DSO_PATHBYADDR), "DSO_pathbyaddr"},
102{ERR_FUNC(DSO_F_DSO_SET_FILENAME), "DSO_set_filename"},
103{ERR_FUNC(DSO_F_DSO_SET_NAME_CONVERTER), "DSO_set_name_converter"},
104{ERR_FUNC(DSO_F_DSO_UP_REF), "DSO_up_ref"},
105{ERR_FUNC(DSO_F_GLOBAL_LOOKUP_FUNC), "GLOBAL_LOOKUP_FUNC"},
106{ERR_FUNC(DSO_F_PATHBYADDR), "PATHBYADDR"},
107{ERR_FUNC(DSO_F_VMS_BIND_SYM), "VMS_BIND_SYM"},
108{ERR_FUNC(DSO_F_VMS_LOAD), "VMS_LOAD"},
109{ERR_FUNC(DSO_F_VMS_MERGER), "VMS_MERGER"},
110{ERR_FUNC(DSO_F_VMS_UNLOAD), "VMS_UNLOAD"},
111{ERR_FUNC(DSO_F_WIN32_BIND_FUNC), "WIN32_BIND_FUNC"},
112{ERR_FUNC(DSO_F_WIN32_BIND_VAR), "WIN32_BIND_VAR"},
113{ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP), "WIN32_GLOBALLOOKUP"},
114{ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP_FUNC), "WIN32_GLOBALLOOKUP_FUNC"},
115{ERR_FUNC(DSO_F_WIN32_JOINER), "WIN32_JOINER"},
116{ERR_FUNC(DSO_F_WIN32_LOAD), "WIN32_LOAD"},
117{ERR_FUNC(DSO_F_WIN32_MERGER), "WIN32_MERGER"},
118{ERR_FUNC(DSO_F_WIN32_NAME_CONVERTER), "WIN32_NAME_CONVERTER"},
119{ERR_FUNC(DSO_F_WIN32_PATHBYADDR), "WIN32_PATHBYADDR"},
120{ERR_FUNC(DSO_F_WIN32_SPLITTER), "WIN32_SPLITTER"},
121{ERR_FUNC(DSO_F_WIN32_UNLOAD), "WIN32_UNLOAD"},
122{0,NULL}
123 };
124
125static ERR_STRING_DATA DSO_str_reasons[]=
126 {
127{ERR_REASON(DSO_R_CTRL_FAILED) ,"control command failed"},
128{ERR_REASON(DSO_R_DSO_ALREADY_LOADED) ,"dso already loaded"},
129{ERR_REASON(DSO_R_EMPTY_FILE_STRUCTURE) ,"empty file structure"},
130{ERR_REASON(DSO_R_FAILURE) ,"failure"},
131{ERR_REASON(DSO_R_FILENAME_TOO_BIG) ,"filename too big"},
132{ERR_REASON(DSO_R_FINISH_FAILED) ,"cleanup method function failed"},
133{ERR_REASON(DSO_R_INCORRECT_FILE_SYNTAX) ,"incorrect file syntax"},
134{ERR_REASON(DSO_R_LOAD_FAILED) ,"could not load the shared library"},
135{ERR_REASON(DSO_R_NAME_TRANSLATION_FAILED),"name translation failed"},
136{ERR_REASON(DSO_R_NO_FILENAME) ,"no filename"},
137{ERR_REASON(DSO_R_NO_FILE_SPECIFICATION) ,"no file specification"},
138{ERR_REASON(DSO_R_NULL_HANDLE) ,"a null shared library handle was used"},
139{ERR_REASON(DSO_R_SET_FILENAME_FAILED) ,"set filename failed"},
140{ERR_REASON(DSO_R_STACK_ERROR) ,"the meth_data stack is corrupt"},
141{ERR_REASON(DSO_R_SYM_FAILURE) ,"could not bind to the requested symbol name"},
142{ERR_REASON(DSO_R_UNLOAD_FAILED) ,"could not unload the shared library"},
143{ERR_REASON(DSO_R_UNSUPPORTED) ,"functionality not supported"},
144{0,NULL}
145 };
146
147#endif
148
149void ERR_load_DSO_strings(void)
150 {
151#ifndef OPENSSL_NO_ERR
152
153 if (ERR_func_error_string(DSO_str_functs[0].error) == NULL)
154 {
155 ERR_load_strings(0,DSO_str_functs);
156 ERR_load_strings(0,DSO_str_reasons);
157 }
158#endif
159 }
diff --git a/src/lib/libcrypto/dso/dso_lib.c b/src/lib/libcrypto/dso/dso_lib.c
deleted file mode 100644
index 8a15b794ab..0000000000
--- a/src/lib/libcrypto/dso/dso_lib.c
+++ /dev/null
@@ -1,483 +0,0 @@
1/* dso_lib.c -*- mode:C; c-file-style: "eay" -*- */
2/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
3 * project 2000.
4 */
5/* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59#include <stdio.h>
60#include <openssl/crypto.h>
61#include "cryptlib.h"
62#include <openssl/dso.h>
63
64static DSO_METHOD *default_DSO_meth = NULL;
65
66DSO *DSO_new(void)
67 {
68 return(DSO_new_method(NULL));
69 }
70
71void DSO_set_default_method(DSO_METHOD *meth)
72 {
73 default_DSO_meth = meth;
74 }
75
76DSO_METHOD *DSO_get_default_method(void)
77 {
78 return(default_DSO_meth);
79 }
80
81DSO_METHOD *DSO_get_method(DSO *dso)
82 {
83 return(dso->meth);
84 }
85
86DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth)
87 {
88 DSO_METHOD *mtmp;
89 mtmp = dso->meth;
90 dso->meth = meth;
91 return(mtmp);
92 }
93
94DSO *DSO_new_method(DSO_METHOD *meth)
95 {
96 DSO *ret;
97
98 if(default_DSO_meth == NULL)
99 /* We default to DSO_METH_openssl() which in turn defaults
100 * to stealing the "best available" method. Will fallback
101 * to DSO_METH_null() in the worst case. */
102 default_DSO_meth = DSO_METHOD_openssl();
103 ret = (DSO *)OPENSSL_malloc(sizeof(DSO));
104 if(ret == NULL)
105 {
106 DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
107 return(NULL);
108 }
109 memset(ret, 0, sizeof(DSO));
110 ret->meth_data = sk_void_new_null();
111 if(ret->meth_data == NULL)
112 {
113 /* sk_new doesn't generate any errors so we do */
114 DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE);
115 OPENSSL_free(ret);
116 return(NULL);
117 }
118 if(meth == NULL)
119 ret->meth = default_DSO_meth;
120 else
121 ret->meth = meth;
122 ret->references = 1;
123 if((ret->meth->init != NULL) && !ret->meth->init(ret))
124 {
125 OPENSSL_free(ret);
126 ret=NULL;
127 }
128 return(ret);
129 }
130
131int DSO_free(DSO *dso)
132 {
133 int i;
134
135 if(dso == NULL)
136 {
137 DSOerr(DSO_F_DSO_FREE,ERR_R_PASSED_NULL_PARAMETER);
138 return(0);
139 }
140
141 i=CRYPTO_add(&dso->references,-1,CRYPTO_LOCK_DSO);
142#ifdef REF_PRINT
143 REF_PRINT("DSO",dso);
144#endif
145 if(i > 0) return(1);
146#ifdef REF_CHECK
147 if(i < 0)
148 {
149 fprintf(stderr,"DSO_free, bad reference count\n");
150 abort();
151 }
152#endif
153
154 if((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso))
155 {
156 DSOerr(DSO_F_DSO_FREE,DSO_R_UNLOAD_FAILED);
157 return(0);
158 }
159
160 if((dso->meth->finish != NULL) && !dso->meth->finish(dso))
161 {
162 DSOerr(DSO_F_DSO_FREE,DSO_R_FINISH_FAILED);
163 return(0);
164 }
165
166 sk_void_free(dso->meth_data);
167 if(dso->filename != NULL)
168 OPENSSL_free(dso->filename);
169 if(dso->loaded_filename != NULL)
170 OPENSSL_free(dso->loaded_filename);
171
172 OPENSSL_free(dso);
173 return(1);
174 }
175
176int DSO_flags(DSO *dso)
177 {
178 return((dso == NULL) ? 0 : dso->flags);
179 }
180
181
182int DSO_up_ref(DSO *dso)
183 {
184 if (dso == NULL)
185 {
186 DSOerr(DSO_F_DSO_UP_REF,ERR_R_PASSED_NULL_PARAMETER);
187 return(0);
188 }
189
190 CRYPTO_add(&dso->references,1,CRYPTO_LOCK_DSO);
191 return(1);
192 }
193
194DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
195 {
196 DSO *ret;
197 int allocated = 0;
198
199 if(dso == NULL)
200 {
201 ret = DSO_new_method(meth);
202 if(ret == NULL)
203 {
204 DSOerr(DSO_F_DSO_LOAD,ERR_R_MALLOC_FAILURE);
205 goto err;
206 }
207 allocated = 1;
208 /* Pass the provided flags to the new DSO object */
209 if(DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0)
210 {
211 DSOerr(DSO_F_DSO_LOAD,DSO_R_CTRL_FAILED);
212 goto err;
213 }
214 }
215 else
216 ret = dso;
217 /* Don't load if we're currently already loaded */
218 if(ret->filename != NULL)
219 {
220 DSOerr(DSO_F_DSO_LOAD,DSO_R_DSO_ALREADY_LOADED);
221 goto err;
222 }
223 /* filename can only be NULL if we were passed a dso that already has
224 * one set. */
225 if(filename != NULL)
226 if(!DSO_set_filename(ret, filename))
227 {
228 DSOerr(DSO_F_DSO_LOAD,DSO_R_SET_FILENAME_FAILED);
229 goto err;
230 }
231 filename = ret->filename;
232 if(filename == NULL)
233 {
234 DSOerr(DSO_F_DSO_LOAD,DSO_R_NO_FILENAME);
235 goto err;
236 }
237 if(ret->meth->dso_load == NULL)
238 {
239 DSOerr(DSO_F_DSO_LOAD,DSO_R_UNSUPPORTED);
240 goto err;
241 }
242 if(!ret->meth->dso_load(ret))
243 {
244 DSOerr(DSO_F_DSO_LOAD,DSO_R_LOAD_FAILED);
245 goto err;
246 }
247 /* Load succeeded */
248 return(ret);
249err:
250 if(allocated)
251 DSO_free(ret);
252 return(NULL);
253 }
254
255void *DSO_bind_var(DSO *dso, const char *symname)
256 {
257 void *ret = NULL;
258
259 if((dso == NULL) || (symname == NULL))
260 {
261 DSOerr(DSO_F_DSO_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
262 return(NULL);
263 }
264 if(dso->meth->dso_bind_var == NULL)
265 {
266 DSOerr(DSO_F_DSO_BIND_VAR,DSO_R_UNSUPPORTED);
267 return(NULL);
268 }
269 if((ret = dso->meth->dso_bind_var(dso, symname)) == NULL)
270 {
271 DSOerr(DSO_F_DSO_BIND_VAR,DSO_R_SYM_FAILURE);
272 return(NULL);
273 }
274 /* Success */
275 return(ret);
276 }
277
278DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname)
279 {
280 DSO_FUNC_TYPE ret = NULL;
281
282 if((dso == NULL) || (symname == NULL))
283 {
284 DSOerr(DSO_F_DSO_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
285 return(NULL);
286 }
287 if(dso->meth->dso_bind_func == NULL)
288 {
289 DSOerr(DSO_F_DSO_BIND_FUNC,DSO_R_UNSUPPORTED);
290 return(NULL);
291 }
292 if((ret = dso->meth->dso_bind_func(dso, symname)) == NULL)
293 {
294 DSOerr(DSO_F_DSO_BIND_FUNC,DSO_R_SYM_FAILURE);
295 return(NULL);
296 }
297 /* Success */
298 return(ret);
299 }
300
301/* I don't really like these *_ctrl functions very much to be perfectly
302 * honest. For one thing, I think I have to return a negative value for
303 * any error because possible DSO_ctrl() commands may return values
304 * such as "size"s that can legitimately be zero (making the standard
305 * "if(DSO_cmd(...))" form that works almost everywhere else fail at
306 * odd times. I'd prefer "output" values to be passed by reference and
307 * the return value as success/failure like usual ... but we conform
308 * when we must... :-) */
309long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg)
310 {
311 if(dso == NULL)
312 {
313 DSOerr(DSO_F_DSO_CTRL,ERR_R_PASSED_NULL_PARAMETER);
314 return(-1);
315 }
316 /* We should intercept certain generic commands and only pass control
317 * to the method-specific ctrl() function if it's something we don't
318 * handle. */
319 switch(cmd)
320 {
321 case DSO_CTRL_GET_FLAGS:
322 return dso->flags;
323 case DSO_CTRL_SET_FLAGS:
324 dso->flags = (int)larg;
325 return(0);
326 case DSO_CTRL_OR_FLAGS:
327 dso->flags |= (int)larg;
328 return(0);
329 default:
330 break;
331 }
332 if((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL))
333 {
334 DSOerr(DSO_F_DSO_CTRL,DSO_R_UNSUPPORTED);
335 return(-1);
336 }
337 return(dso->meth->dso_ctrl(dso,cmd,larg,parg));
338 }
339
340int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
341 DSO_NAME_CONVERTER_FUNC *oldcb)
342 {
343 if(dso == NULL)
344 {
345 DSOerr(DSO_F_DSO_SET_NAME_CONVERTER,
346 ERR_R_PASSED_NULL_PARAMETER);
347 return(0);
348 }
349 if(oldcb)
350 *oldcb = dso->name_converter;
351 dso->name_converter = cb;
352 return(1);
353 }
354
355const char *DSO_get_filename(DSO *dso)
356 {
357 if(dso == NULL)
358 {
359 DSOerr(DSO_F_DSO_GET_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
360 return(NULL);
361 }
362 return(dso->filename);
363 }
364
365int DSO_set_filename(DSO *dso, const char *filename)
366 {
367 char *copied;
368
369 if((dso == NULL) || (filename == NULL))
370 {
371 DSOerr(DSO_F_DSO_SET_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
372 return(0);
373 }
374 if(dso->loaded_filename)
375 {
376 DSOerr(DSO_F_DSO_SET_FILENAME,DSO_R_DSO_ALREADY_LOADED);
377 return(0);
378 }
379 /* We'll duplicate filename */
380 copied = OPENSSL_malloc(strlen(filename) + 1);
381 if(copied == NULL)
382 {
383 DSOerr(DSO_F_DSO_SET_FILENAME,ERR_R_MALLOC_FAILURE);
384 return(0);
385 }
386 BUF_strlcpy(copied, filename, strlen(filename) + 1);
387 if(dso->filename)
388 OPENSSL_free(dso->filename);
389 dso->filename = copied;
390 return(1);
391 }
392
393char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2)
394 {
395 char *result = NULL;
396
397 if(dso == NULL || filespec1 == NULL)
398 {
399 DSOerr(DSO_F_DSO_MERGE,ERR_R_PASSED_NULL_PARAMETER);
400 return(NULL);
401 }
402 if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
403 {
404 if(dso->merger != NULL)
405 result = dso->merger(dso, filespec1, filespec2);
406 else if(dso->meth->dso_merger != NULL)
407 result = dso->meth->dso_merger(dso,
408 filespec1, filespec2);
409 }
410 return(result);
411 }
412
413char *DSO_convert_filename(DSO *dso, const char *filename)
414 {
415 char *result = NULL;
416
417 if(dso == NULL)
418 {
419 DSOerr(DSO_F_DSO_CONVERT_FILENAME,ERR_R_PASSED_NULL_PARAMETER);
420 return(NULL);
421 }
422 if(filename == NULL)
423 filename = dso->filename;
424 if(filename == NULL)
425 {
426 DSOerr(DSO_F_DSO_CONVERT_FILENAME,DSO_R_NO_FILENAME);
427 return(NULL);
428 }
429 if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0)
430 {
431 if(dso->name_converter != NULL)
432 result = dso->name_converter(dso, filename);
433 else if(dso->meth->dso_name_converter != NULL)
434 result = dso->meth->dso_name_converter(dso, filename);
435 }
436 if(result == NULL)
437 {
438 result = OPENSSL_malloc(strlen(filename) + 1);
439 if(result == NULL)
440 {
441 DSOerr(DSO_F_DSO_CONVERT_FILENAME,
442 ERR_R_MALLOC_FAILURE);
443 return(NULL);
444 }
445 BUF_strlcpy(result, filename, strlen(filename) + 1);
446 }
447 return(result);
448 }
449
450const char *DSO_get_loaded_filename(DSO *dso)
451 {
452 if(dso == NULL)
453 {
454 DSOerr(DSO_F_DSO_GET_LOADED_FILENAME,
455 ERR_R_PASSED_NULL_PARAMETER);
456 return(NULL);
457 }
458 return(dso->loaded_filename);
459 }
460
461int DSO_pathbyaddr(void *addr,char *path,int sz)
462 {
463 DSO_METHOD *meth = default_DSO_meth;
464 if (meth == NULL) meth = DSO_METHOD_openssl();
465 if (meth->pathbyaddr == NULL)
466 {
467 DSOerr(DSO_F_DSO_PATHBYADDR,DSO_R_UNSUPPORTED);
468 return -1;
469 }
470 return (*meth->pathbyaddr)(addr,path,sz);
471 }
472
473void *DSO_global_lookup(const char *name)
474 {
475 DSO_METHOD *meth = default_DSO_meth;
476 if (meth == NULL) meth = DSO_METHOD_openssl();
477 if (meth->globallookup == NULL)
478 {
479 DSOerr(DSO_F_DSO_GLOBAL_LOOKUP,DSO_R_UNSUPPORTED);
480 return NULL;
481 }
482 return (*meth->globallookup)(name);
483 }
diff --git a/src/lib/libcrypto/dso/dso_null.c b/src/lib/libcrypto/dso/dso_null.c
deleted file mode 100644
index 49d842d1f5..0000000000
--- a/src/lib/libcrypto/dso/dso_null.c
+++ /dev/null
@@ -1,90 +0,0 @@
1/* dso_null.c */
2/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
3 * project 2000.
4 */
5/* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59/* This "NULL" method is provided as the fallback for systems that have
60 * no appropriate support for "shared-libraries". */
61
62#include <stdio.h>
63#include "cryptlib.h"
64#include <openssl/dso.h>
65
66static DSO_METHOD dso_meth_null = {
67 "NULL shared library method",
68 NULL, /* load */
69 NULL, /* unload */
70 NULL, /* bind_var */
71 NULL, /* bind_func */
72/* For now, "unbind" doesn't exist */
73#if 0
74 NULL, /* unbind_var */
75 NULL, /* unbind_func */
76#endif
77 NULL, /* ctrl */
78 NULL, /* dso_name_converter */
79 NULL, /* dso_merger */
80 NULL, /* init */
81 NULL, /* finish */
82 NULL, /* pathbyaddr */
83 NULL /* globallookup */
84 };
85
86DSO_METHOD *DSO_METHOD_null(void)
87 {
88 return(&dso_meth_null);
89 }
90
diff --git a/src/lib/libcrypto/dso/dso_openssl.c b/src/lib/libcrypto/dso/dso_openssl.c
deleted file mode 100644
index b17e8e8e9e..0000000000
--- a/src/lib/libcrypto/dso/dso_openssl.c
+++ /dev/null
@@ -1,83 +0,0 @@
1/* dso_openssl.c */
2/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
3 * project 2000.
4 */
5/* ====================================================================
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58
59#include <stdio.h>
60#include "cryptlib.h"
61#include <openssl/dso.h>
62
63/* We just pinch the method from an appropriate "default" method. */
64
65DSO_METHOD *DSO_METHOD_openssl(void)
66 {
67#ifdef DEF_DSO_METHOD
68 return(DEF_DSO_METHOD());
69#elif defined(DSO_DLFCN)
70 return(DSO_METHOD_dlfcn());
71#elif defined(DSO_DL)
72 return(DSO_METHOD_dl());
73#elif defined(DSO_WIN32)
74 return(DSO_METHOD_win32());
75#elif defined(DSO_VMS)
76 return(DSO_METHOD_vms());
77#elif defined(DSO_BEOS)
78 return(DSO_METHOD_beos());
79#else
80 return(DSO_METHOD_null());
81#endif
82 }
83