diff options
Diffstat (limited to 'src/lib/libcrypto/dso/dso_dl.c')
-rw-r--r-- | src/lib/libcrypto/dso/dso_dl.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/lib/libcrypto/dso/dso_dl.c b/src/lib/libcrypto/dso/dso_dl.c index 69810fc3bb..455bd66ecf 100644 --- a/src/lib/libcrypto/dso/dso_dl.c +++ b/src/lib/libcrypto/dso/dso_dl.c | |||
@@ -82,7 +82,7 @@ static int dl_unbind_func(DSO *dso, char *symname, DSO_FUNC_TYPE symptr); | |||
82 | static int dl_init(DSO *dso); | 82 | static int dl_init(DSO *dso); |
83 | static int dl_finish(DSO *dso); | 83 | static int dl_finish(DSO *dso); |
84 | #endif | 84 | #endif |
85 | static int dl_ctrl(DSO *dso, int cmd, long larg, void *parg); | 85 | static long dl_ctrl(DSO *dso, int cmd, long larg, void *parg); |
86 | 86 | ||
87 | static DSO_METHOD dso_meth_dl = { | 87 | static DSO_METHOD dso_meth_dl = { |
88 | "OpenSSL 'dl' shared library method", | 88 | "OpenSSL 'dl' shared library method", |
@@ -111,6 +111,11 @@ DSO_METHOD *DSO_METHOD_dl(void) | |||
111 | * type so the cast is safe. | 111 | * type so the cast is safe. |
112 | */ | 112 | */ |
113 | 113 | ||
114 | #if defined(__hpux) | ||
115 | static const char extension[] = ".sl"; | ||
116 | #else | ||
117 | static const char extension[] = ".so"; | ||
118 | #endif | ||
114 | static int dl_load(DSO *dso, const char *filename) | 119 | static int dl_load(DSO *dso, const char *filename) |
115 | { | 120 | { |
116 | shl_t ptr; | 121 | shl_t ptr; |
@@ -118,12 +123,12 @@ static int dl_load(DSO *dso, const char *filename) | |||
118 | int len; | 123 | int len; |
119 | 124 | ||
120 | /* The same comment as in dlfcn_load applies here. bleurgh. */ | 125 | /* The same comment as in dlfcn_load applies here. bleurgh. */ |
121 | len = strlen(filename); | 126 | len = strlen(filename) + strlen(extension); |
122 | if((dso->flags & DSO_FLAG_NAME_TRANSLATION) && | 127 | if((dso->flags & DSO_FLAG_NAME_TRANSLATION) && |
123 | (len + 6 < DSO_MAX_TRANSLATED_SIZE) && | 128 | (len + 3 < DSO_MAX_TRANSLATED_SIZE) && |
124 | (strstr(filename, "/") == NULL)) | 129 | (strstr(filename, "/") == NULL)) |
125 | { | 130 | { |
126 | sprintf(translated, "lib%s.so", filename); | 131 | sprintf(translated, "lib%s%s", filename, extension); |
127 | ptr = shl_load(translated, BIND_IMMEDIATE, NULL); | 132 | ptr = shl_load(translated, BIND_IMMEDIATE, NULL); |
128 | } | 133 | } |
129 | else | 134 | else |
@@ -187,7 +192,7 @@ static void *dl_bind_var(DSO *dso, const char *symname) | |||
187 | DSOerr(DSO_F_DL_BIND_VAR,DSO_R_NULL_HANDLE); | 192 | DSOerr(DSO_F_DL_BIND_VAR,DSO_R_NULL_HANDLE); |
188 | return(NULL); | 193 | return(NULL); |
189 | } | 194 | } |
190 | if (shl_findsym(ptr, symname, TYPE_UNDEFINED, &sym) < 0) | 195 | if (shl_findsym(&ptr, symname, TYPE_UNDEFINED, &sym) < 0) |
191 | { | 196 | { |
192 | DSOerr(DSO_F_DL_BIND_VAR,DSO_R_SYM_FAILURE); | 197 | DSOerr(DSO_F_DL_BIND_VAR,DSO_R_SYM_FAILURE); |
193 | return(NULL); | 198 | return(NULL); |
@@ -216,7 +221,7 @@ static DSO_FUNC_TYPE dl_bind_func(DSO *dso, const char *symname) | |||
216 | DSOerr(DSO_F_DL_BIND_FUNC,DSO_R_NULL_HANDLE); | 221 | DSOerr(DSO_F_DL_BIND_FUNC,DSO_R_NULL_HANDLE); |
217 | return(NULL); | 222 | return(NULL); |
218 | } | 223 | } |
219 | if (shl_findsym(ptr, symname, TYPE_UNDEFINED, &sym) < 0) | 224 | if (shl_findsym(&ptr, symname, TYPE_UNDEFINED, &sym) < 0) |
220 | { | 225 | { |
221 | DSOerr(DSO_F_DL_BIND_FUNC,DSO_R_SYM_FAILURE); | 226 | DSOerr(DSO_F_DL_BIND_FUNC,DSO_R_SYM_FAILURE); |
222 | return(NULL); | 227 | return(NULL); |
@@ -224,7 +229,7 @@ static DSO_FUNC_TYPE dl_bind_func(DSO *dso, const char *symname) | |||
224 | return((DSO_FUNC_TYPE)sym); | 229 | return((DSO_FUNC_TYPE)sym); |
225 | } | 230 | } |
226 | 231 | ||
227 | static int dl_ctrl(DSO *dso, int cmd, long larg, void *parg) | 232 | static long dl_ctrl(DSO *dso, int cmd, long larg, void *parg) |
228 | { | 233 | { |
229 | if(dso == NULL) | 234 | if(dso == NULL) |
230 | { | 235 | { |
@@ -236,10 +241,10 @@ static int dl_ctrl(DSO *dso, int cmd, long larg, void *parg) | |||
236 | case DSO_CTRL_GET_FLAGS: | 241 | case DSO_CTRL_GET_FLAGS: |
237 | return dso->flags; | 242 | return dso->flags; |
238 | case DSO_CTRL_SET_FLAGS: | 243 | case DSO_CTRL_SET_FLAGS: |
239 | dso->flags = (int)larg; | 244 | dso->flags = larg; |
240 | return(0); | 245 | return(0); |
241 | case DSO_CTRL_OR_FLAGS: | 246 | case DSO_CTRL_OR_FLAGS: |
242 | dso->flags |= (int)larg; | 247 | dso->flags |= larg; |
243 | return(0); | 248 | return(0); |
244 | default: | 249 | default: |
245 | break; | 250 | break; |