1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
$NetBSD: patch-bt,v 1.3 2002/08/25 18:40:36 jlam Exp $
--- kssl/kopenssl.cc.orig Wed Sep 5 00:08:18 2001
+++ kssl/kopenssl.cc
@@ -92,6 +92,7 @@ static int (*K_SSL_CTX_use_certificate)
static int (*K_SSL_get_error) (SSL*, int) = NULL;
static STACK_OF(X509)* (*K_SSL_get_peer_cert_chain) (SSL*) = NULL;
static void (*K_X509_STORE_CTX_set_chain) (X509_STORE_CTX *, STACK_OF(X509)*) = NULL;
+static void (*K_X509_STORE_CTX_set_purpose) (X509_STORE_CTX *, int) = NULL;
static void (*K_sk_free) (STACK*) = NULL;
static int (*K_sk_num) (STACK*) = NULL;
static char* (*K_sk_value) (STACK*, int) = NULL;
@@ -117,7 +118,7 @@ void KOpenSSLProxy::destroy() {
_me = NULL;
}
-#ifdef __OpenBSD__
+#if defined(__OpenBSD__) || defined(__NetBSD__)
#include <qdir.h>
#include <qstring.h>
#include <qstringlist.h>
@@ -180,20 +181,16 @@ KConfig *cfg;
delete cfg;
-#ifdef __OpenBSD__
- {
- QString libname = findMostRecentLib("/usr/lib", "crypto");
- if (!libname.isNull())
- _cryptoLib = ll->globalLibrary(libname.latin1());
- }
-#else
- libpaths << "/usr/lib/"
- << "/usr/local/lib/"
+ libpaths << "/usr/lib/";
+#if !defined(__OpenBSD__) && !defined(__NetBSD__)
+ libpaths << "/usr/local/lib/"
<< "/usr/local/openssl/lib/"
<< "/usr/local/ssl/lib/"
<< "/opt/openssl/lib/"
- << "";
+#endif
+ libpaths << "";
+#if !defined(__OpenBSD__) && !defined(__NetBSD__)
// FIXME: #define here for the various OS types to optimize
libnamess << "libssl.so.0"
<< "libssl.so"
@@ -202,10 +199,16 @@ KConfig *cfg;
libnamesc << "libcrypto.so.0"
<< "libcrypto.so"
<< "libcrypto.sl";
+#endif
for (QStringList::Iterator it = libpaths.begin();
it != libpaths.end();
++it) {
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+ QString libname = findMostRecentLib(*it, "crypto");
+ if (!libname.isNull())
+ _cryptoLib = ll->globalLibrary(libname.latin1());
+#else
for (QStringList::Iterator shit = libnamesc.begin();
shit != libnamesc.end();
++shit) {
@@ -213,9 +216,9 @@ KConfig *cfg;
_cryptoLib = ll->globalLibrary(alib.latin1());
if (_cryptoLib) break;
}
+#endif
if (_cryptoLib) break;
}
-#endif
if (_cryptoLib) {
#ifdef HAVE_SSL
@@ -254,6 +257,7 @@ KConfig *cfg;
X509**, STACK_OF(X509)**)) _cryptoLib->symbol("PKCS12_parse");
K_EVP_PKEY_free = (void (*) (EVP_PKEY *)) _cryptoLib->symbol("EVP_PKEY_free");
K_X509_STORE_CTX_set_chain = (void (*)(X509_STORE_CTX *, STACK_OF(X509)*)) _cryptoLib->symbol("X509_STORE_CTX_set_chain");
+ K_X509_STORE_CTX_set_purpose = (void (*)(X509_STORE_CTX *, int)) _cryptoLib->symbol("X509_STORE_CTX_set_purpose");
K_sk_free = (void (*) (STACK *)) _cryptoLib->symbol("sk_free");
K_sk_num = (int (*) (STACK *)) _cryptoLib->symbol("sk_num");
K_sk_value = (char* (*) (STACK *, int)) _cryptoLib->symbol("sk_value");
@@ -263,16 +267,14 @@ KConfig *cfg;
#endif
}
-#ifdef __OpenBSD__
- {
- QString libname = findMostRecentLib("/usr/lib", "ssl");
- if (!libname.isNull())
- _sslLib = ll->globalLibrary(libname.latin1());
- }
-#else
for (QStringList::Iterator it = libpaths.begin();
it != libpaths.end();
++it) {
+#if defined(__OpenBSD__) || defined(__NetBSD__)
+ QString libname = findMostRecentLib(*it, "ssl");
+ if (!libname.isNull())
+ _sslLib = ll->globalLibrary(libname.latin1());
+#else
for (QStringList::Iterator shit = libnamess.begin();
shit != libnamess.end();
++shit) {
@@ -280,9 +282,9 @@ KConfig *cfg;
_sslLib = ll->globalLibrary(alib.latin1());
if (_sslLib) break;
}
+#endif
if (_sslLib) break;
}
-#endif
if (_sslLib) {
#ifdef HAVE_SSL
@@ -742,6 +744,10 @@ char *KOpenSSLProxy::sk_value(STACK *s,
void KOpenSSLProxy::X509_STORE_CTX_set_chain(X509_STORE_CTX *v, STACK_OF(X509)* x) {
if (K_X509_STORE_CTX_set_chain) (K_X509_STORE_CTX_set_chain)(v,x);
+}
+
+void KOpenSSLProxy::X509_STORE_CTX_set_purpose(X509_STORE_CTX *v, int purpose) {
+ if (K_X509_STORE_CTX_set_purpose) (K_X509_STORE_CTX_set_purpose)(v,purpose);
}
|