summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dso/dso_dlfcn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dso/dso_dlfcn.c')
-rw-r--r--src/lib/libcrypto/dso/dso_dlfcn.c42
1 files changed, 5 insertions, 37 deletions
diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c
index 0422a4859a..2e72969431 100644
--- a/src/lib/libcrypto/dso/dso_dlfcn.c
+++ b/src/lib/libcrypto/dso/dso_dlfcn.c
@@ -56,10 +56,6 @@
56 * 56 *
57 */ 57 */
58 58
59#ifdef __linux
60#define _GNU_SOURCE
61#endif
62
63#include <stdio.h> 59#include <stdio.h>
64#include "cryptlib.h" 60#include "cryptlib.h"
65#include <openssl/dso.h> 61#include <openssl/dso.h>
@@ -232,7 +228,7 @@ static void *dlfcn_bind_var(DSO *dso, const char *symname)
232static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname) 228static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)
233 { 229 {
234 void *ptr; 230 void *ptr;
235 DSO_FUNC_TYPE sym, *tsym = &sym; 231 DSO_FUNC_TYPE sym;
236 232
237 if((dso == NULL) || (symname == NULL)) 233 if((dso == NULL) || (symname == NULL))
238 { 234 {
@@ -250,7 +246,7 @@ static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)
250 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE); 246 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_NULL_HANDLE);
251 return(NULL); 247 return(NULL);
252 } 248 }
253 *(void**)(tsym) = dlsym(ptr, symname); 249 sym = (DSO_FUNC_TYPE)dlsym(ptr, symname);
254 if(sym == NULL) 250 if(sym == NULL)
255 { 251 {
256 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE); 252 DSOerr(DSO_F_DLFCN_BIND_FUNC,DSO_R_SYM_FAILURE);
@@ -285,41 +281,13 @@ static char *dlfcn_name_converter(DSO *dso, const char *filename)
285 if(transform) 281 if(transform)
286 { 282 {
287 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) 283 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
288 sprintf(translated, "lib%s.so", filename); 284 snprintf(translated, rsize, "lib%s.so", filename);
289 else 285 else
290 sprintf(translated, "%s.so", filename); 286 snprintf(translated, rsize, "%s.so", filename);
291 } 287 }
292 else 288 else
293 sprintf(translated, "%s", filename); 289 snprintf(translated, rsize, "%s", filename);
294 return(translated); 290 return(translated);
295 } 291 }
296 292
297#ifdef OPENSSL_FIPS
298static void dlfcn_ref_point(){}
299
300int DSO_pathbyaddr(void *addr,char *path,int sz)
301 {
302 Dl_info dli;
303 int len;
304
305 if (addr == NULL)
306 {
307 union { void(*f)(void); void *p; } t = { dlfcn_ref_point };
308 addr = t.p;
309 }
310
311 if (dladdr(addr,&dli))
312 {
313 len = (int)strlen(dli.dli_fname);
314 if (sz <= 0) return len+1;
315 if (len >= sz) len=sz-1;
316 memcpy(path,dli.dli_fname,len);
317 path[len++]=0;
318 return len;
319 }
320
321 ERR_add_error_data(4, "dlfcn_pathbyaddr(): ", dlerror());
322 return -1;
323 }
324#endif
325#endif /* DSO_DLFCN */ 293#endif /* DSO_DLFCN */