summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dso
diff options
context:
space:
mode:
authorcvs2svn <admin@example.com>2011-02-12 15:54:20 +0000
committercvs2svn <admin@example.com>2011-02-12 15:54:20 +0000
commitb9388eba740387eaff0dcb9492cdefc1adcf40ff (patch)
tree26cf8fda7724fe56961aa26b7da50db9634c08a2 /src/lib/libcrypto/dso
parentd1c27f232cfde582e176b277933b485ea84ac845 (diff)
downloadopenbsd-OPENBSD_4_9.tar.gz
openbsd-OPENBSD_4_9.tar.bz2
openbsd-OPENBSD_4_9.zip
This commit was manufactured by cvs2git to create branch 'OPENBSD_4_9'.OPENBSD_4_9
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.c485
-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, 1709 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 578a20d91d..0000000000
--- a/src/lib/libcrypto/dso/dso_dlfcn.c
+++ /dev/null
@@ -1,485 +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(__OpenBSD__) && (!defined(__ELF__) || !defined(RTLD_SELF)))
89# undef HAVE_DLINFO
90# endif
91#endif
92
93/* Part of the hack in "dlfcn_load" ... */
94#define DSO_MAX_TRANSLATED_SIZE 256
95
96static int dlfcn_load(DSO *dso);
97static int dlfcn_unload(DSO *dso);
98static void *dlfcn_bind_var(DSO *dso, const char *symname);
99static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname);
100#if 0
101static int dlfcn_unbind(DSO *dso, char *symname, void *symptr);
102static int dlfcn_init(DSO *dso);
103static int dlfcn_finish(DSO *dso);
104static long dlfcn_ctrl(DSO *dso, int cmd, long larg, void *parg);
105#endif
106static char *dlfcn_name_converter(DSO *dso, const char *filename);
107static char *dlfcn_merger(DSO *dso, const char *filespec1,
108 const char *filespec2);
109static int dlfcn_pathbyaddr(void *addr,char *path,int sz);
110static void *dlfcn_globallookup(const char *name);
111
112static DSO_METHOD dso_meth_dlfcn = {
113 "OpenSSL 'dlfcn' shared library method",
114 dlfcn_load,
115 dlfcn_unload,
116 dlfcn_bind_var,
117 dlfcn_bind_func,
118/* For now, "unbind" doesn't exist */
119#if 0
120 NULL, /* unbind_var */
121 NULL, /* unbind_func */
122#endif
123 NULL, /* ctrl */
124 dlfcn_name_converter,
125 dlfcn_merger,
126 NULL, /* init */
127 NULL, /* finish */
128 dlfcn_pathbyaddr,
129 dlfcn_globallookup
130 };
131
132DSO_METHOD *DSO_METHOD_dlfcn(void)
133 {
134 return(&dso_meth_dlfcn);
135 }
136
137/* Prior to using the dlopen() function, we should decide on the flag
138 * we send. There's a few different ways of doing this and it's a
139 * messy venn-diagram to match up which platforms support what. So
140 * as we don't have autoconf yet, I'm implementing a hack that could
141 * be hacked further relatively easily to deal with cases as we find
142 * them. Initially this is to cope with OpenBSD. */
143#if defined(__OpenBSD__) || defined(__NetBSD__)
144# ifdef DL_LAZY
145# define DLOPEN_FLAG DL_LAZY
146# else
147# ifdef RTLD_NOW
148# define DLOPEN_FLAG RTLD_NOW
149# else
150# define DLOPEN_FLAG 0
151# endif
152# endif
153#else
154# ifdef OPENSSL_SYS_SUNOS
155# define DLOPEN_FLAG 1
156# else
157# define DLOPEN_FLAG RTLD_NOW /* Hope this works everywhere else */
158# endif
159#endif
160
161/* For this DSO_METHOD, our meth_data STACK will contain;
162 * (i) the handle (void*) returned from dlopen().
163 */
164
165static int dlfcn_load(DSO *dso)
166 {
167 void *ptr = NULL;
168 /* See applicable comments in dso_dl.c */
169 char *filename = DSO_convert_filename(dso, NULL);
170 int flags = DLOPEN_FLAG;
171
172 if(filename == NULL)
173 {
174 DSOerr(DSO_F_DLFCN_LOAD,DSO_R_NO_FILENAME);
175 goto err;
176 }
177
178#ifdef RTLD_GLOBAL
179 if (dso->flags & DSO_FLAG_GLOBAL_SYMBOLS)
180 flags |= RTLD_GLOBAL;
181#endif
182 ptr = dlopen(filename, flags);
183 if(ptr == NULL)
184 {
185 DSOerr(DSO_F_DLFCN_LOAD,DSO_R_LOAD_FAILED);
186 ERR_add_error_data(4, "filename(", filename, "): ", dlerror());
187 goto err;
188 }
189 if(!sk_void_push(dso->meth_data, (char *)ptr))
190 {
191 DSOerr(DSO_F_DLFCN_LOAD,DSO_R_STACK_ERROR);
192 goto err;
193 }
194 /* Success */
195 dso->loaded_filename = filename;
196 return(1);
197err:
198 /* Cleanup! */
199 if(filename != NULL)
200 OPENSSL_free(filename);
201 if(ptr != NULL)
202 dlclose(ptr);
203 return(0);
204}
205
206static int dlfcn_unload(DSO *dso)
207 {
208 void *ptr;
209 if(dso == NULL)
210 {
211 DSOerr(DSO_F_DLFCN_UNLOAD,ERR_R_PASSED_NULL_PARAMETER);
212 return(0);
213 }
214 if(sk_void_num(dso->meth_data) < 1)
215 return(1);
216 ptr = sk_void_pop(dso->meth_data);
217 if(ptr == NULL)
218 {
219 DSOerr(DSO_F_DLFCN_UNLOAD,DSO_R_NULL_HANDLE);
220 /* Should push the value back onto the stack in
221 * case of a retry. */
222 sk_void_push(dso->meth_data, ptr);
223 return(0);
224 }
225 /* For now I'm not aware of any errors associated with dlclose() */
226 dlclose(ptr);
227 return(1);
228 }
229
230static void *dlfcn_bind_var(DSO *dso, const char *symname)
231 {
232 void *ptr, *sym;
233
234 if((dso == NULL) || (symname == NULL))
235 {
236 DSOerr(DSO_F_DLFCN_BIND_VAR,ERR_R_PASSED_NULL_PARAMETER);
237 return(NULL);
238 }
239 if(sk_void_num(dso->meth_data) < 1)
240 {
241 DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_STACK_ERROR);
242 return(NULL);
243 }
244 ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
245 if(ptr == NULL)
246 {
247 DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_NULL_HANDLE);
248 return(NULL);
249 }
250 sym = dlsym(ptr, symname);
251 if(sym == NULL)
252 {
253 DSOerr(DSO_F_DLFCN_BIND_VAR,DSO_R_SYM_FAILURE);
254 ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
255 return(NULL);
256 }
257 return(sym);
258 }
259
260static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)
261 {
262 void *ptr;
263 union {
264 DSO_FUNC_TYPE sym;
265 void *dlret;
266 } u;
267
268 if((dso == NULL) || (symname == NULL))
269 {
270 DSOerr(DSO_F_DLFCN_BIND_FUNC,ERR_R_PASSED_NULL_PARAMETER);
271 return(NULL);
272 }
273 if(sk_void_num(dso->meth_data) < 1)
274 {
275 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_STACK_ERROR);
276 return(NULL);
277 }
278 ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);
279 if(ptr == NULL)
280 {
281 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE);
282 return(NULL);
283 }
284 u.dlret = dlsym(ptr, symname);
285 if(u.dlret == NULL)
286 {
287 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE);
288 ERR_add_error_data(4, "symname(", symname, "): ", dlerror());
289 return(NULL);
290 }
291 return u.sym;
292 }
293
294static char *dlfcn_merger(DSO *dso, const char *filespec1,
295 const char *filespec2)
296 {
297 char *merged;
298 size_t len;
299
300 if(!filespec1 && !filespec2)
301 {
302 DSOerr(DSO_F_DLFCN_MERGER,
303 ERR_R_PASSED_NULL_PARAMETER);
304 return(NULL);
305 }
306 /* If the first file specification is a rooted path, it rules.
307 same goes if the second file specification is missing. */
308 if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/'))
309 {
310 len = strlen(filespec1) + 1;
311 merged = OPENSSL_malloc(len);
312 if(!merged)
313 {
314 DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE);
315 return(NULL);
316 }
317 strlcpy(merged, filespec1, len);
318 }
319 /* If the first file specification is missing, the second one rules. */
320 else if (!filespec1)
321 {
322 len = strlen(filespec2) + 1;
323 merged = OPENSSL_malloc(strlen(filespec2) + 1);
324 if(!merged)
325 {
326 DSOerr(DSO_F_DLFCN_MERGER,
327 ERR_R_MALLOC_FAILURE);
328 return(NULL);
329 }
330 strlcpy(merged, filespec2, len);
331 }
332 else
333 /* This part isn't as trivial as it looks. It assumes that
334 the second file specification really is a directory, and
335 makes no checks whatsoever. Therefore, the result becomes
336 the concatenation of filespec2 followed by a slash followed
337 by filespec1. */
338 {
339 int spec2len, len;
340
341 spec2len = strlen(filespec2);
342 len = spec2len + (filespec1 ? strlen(filespec1) : 0);
343
344 if(filespec2 && filespec2[spec2len - 1] == '/')
345 {
346 spec2len--;
347 len--;
348 }
349 merged = OPENSSL_malloc(len + 2);
350 if(!merged)
351 {
352 DSOerr(DSO_F_DLFCN_MERGER,
353 ERR_R_MALLOC_FAILURE);
354 return(NULL);
355 }
356 strlcpy(merged, filespec2, len + 2);
357 merged[spec2len] = '/';
358 strlcpy(&merged[spec2len + 1], filespec1, len + 1 - spec2len);
359 }
360 return(merged);
361 }
362
363#ifdef OPENSSL_SYS_MACOSX
364#define DSO_ext ".dylib"
365#define DSO_extlen 6
366#else
367#define DSO_ext ".so"
368#define DSO_extlen 3
369#endif
370
371
372static char *dlfcn_name_converter(DSO *dso, const char *filename)
373 {
374 char *translated;
375 int len, rsize, transform;
376
377 len = strlen(filename);
378 rsize = len + 1;
379 transform = (strstr(filename, "/") == NULL);
380 if(transform)
381 {
382 /* We will convert this to "%s.so" or "lib%s.so" etc */
383 rsize += DSO_extlen; /* The length of ".so" */
384 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
385 rsize += 3; /* The length of "lib" */
386 }
387 translated = OPENSSL_malloc(rsize);
388 if(translated == NULL)
389 {
390 DSOerr(DSO_F_DLFCN_NAME_CONVERTER,
391 DSO_R_NAME_TRANSLATION_FAILED);
392 return(NULL);
393 }
394 if(transform)
395 {
396 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
397 snprintf(translated, rsize, "lib%s" DSO_ext, filename);
398 else
399 snprintf(translated, rsize, "%s" DSO_ext, filename);
400 }
401 else
402 snprintf(translated, rsize, "%s", filename);
403 return(translated);
404 }
405
406#if defined(__sgi) && !defined(__OpenBSD__)
407/*
408This is a quote from IRIX manual for dladdr(3c):
409
410 <dlfcn.h> does not contain a prototype for dladdr or definition of
411 Dl_info. The #include <dlfcn.h> in the SYNOPSIS line is traditional,
412 but contains no dladdr prototype and no IRIX library contains an
413 implementation. Write your own declaration based on the code below.
414
415 The following code is dependent on internal interfaces that are not
416 part of the IRIX compatibility guarantee; however, there is no future
417 intention to change this interface, so on a practical level, the code
418 below is safe to use on IRIX.
419*/
420#include <rld_interface.h>
421#ifndef _RLD_INTERFACE_DLFCN_H_DLADDR
422#define _RLD_INTERFACE_DLFCN_H_DLADDR
423typedef struct Dl_info {
424 const char * dli_fname;
425 void * dli_fbase;
426 const char * dli_sname;
427 void * dli_saddr;
428 int dli_version;
429 int dli_reserved1;
430 long dli_reserved[4];
431} Dl_info;
432#else
433typedef struct Dl_info Dl_info;
434#endif
435#define _RLD_DLADDR 14
436
437static int dladdr(void *address, Dl_info *dl)
438{
439 void *v;
440 v = _rld_new_interface(_RLD_DLADDR,address,dl);
441 return (int)v;
442}
443#endif /* __sgi */
444
445static int dlfcn_pathbyaddr(void *addr,char *path,int sz)
446 {
447#ifdef HAVE_DLINFO
448 Dl_info dli;
449 int len;
450
451 if (addr == NULL)
452 {
453 union { int(*f)(void*,char*,int); void *p; } t =
454 { dlfcn_pathbyaddr };
455 addr = t.p;
456 }
457
458 if (dladdr(addr,&dli))
459 {
460 len = (int)strlen(dli.dli_fname);
461 if (sz <= 0) return len+1;
462 if (len >= sz) len=sz-1;
463 memcpy(path,dli.dli_fname,len);
464 path[len++]=0;
465 return len;
466 }
467
468 ERR_add_error_data(4, "dlfcn_pathbyaddr(): ", dlerror());
469#endif
470 return -1;
471 }
472
473static void *dlfcn_globallookup(const char *name)
474 {
475 void *ret = NULL,*handle = dlopen(NULL,RTLD_LAZY);
476
477 if (handle)
478 {
479 ret = dlsym(handle,name);
480 dlclose(handle);
481 }
482
483 return ret;
484 }
485#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