xref: /OK3568_Linux_fs/buildroot/package/pound/0002-fix-openssl-1.1.0.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom a2c9dde4d055ea8942afb150b7fc3a807d4e5d60 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Sergey Poznyakoff <gray@gnu.org>
3*4882a593SmuzhiyunDate: Wed, 28 Feb 2018 13:44:01 +0000
4*4882a593SmuzhiyunSubject: [PATCH] Support for Openssl 1.1
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunFixes
7*4882a593Smuzhiyunhttp://autobuild.buildroot.net/results/ef2/ef2de6c280bf8622a00d4573bc5bd143e3baa002
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunDownloaded from github fork:
10*4882a593Smuzhiyunhttps://github.com/graygnuorg/pound/commit/a2c9dde4d055ea8942afb150b7fc3a807d4e5d60
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunThis patch was announced on the upstream mailinglist:
13*4882a593Smuzhiyunhttp://www.apsis.ch/pound/pound_list/archive/2018/2018-03/1519920322000
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunSigned-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
16*4882a593Smuzhiyun---
17*4882a593Smuzhiyun .gitignore |  15 ++++++++
18*4882a593Smuzhiyun config.c   |  17 +++++++--
19*4882a593Smuzhiyun http.c     |  12 ++++++-
20*4882a593Smuzhiyun pound.h    |   4 ++-
21*4882a593Smuzhiyun svc.c      | 101 +++++++++++++++++++++++++++++++++++++++++++----------
22*4882a593Smuzhiyun 5 files changed, 125 insertions(+), 24 deletions(-)
23*4882a593Smuzhiyun create mode 100644 .gitignore
24*4882a593Smuzhiyun
25*4882a593Smuzhiyundiff --git a/config.c b/config.c
26*4882a593Smuzhiyunindex d41a3ee..e8fec0f 100644
27*4882a593Smuzhiyun--- a/config.c
28*4882a593Smuzhiyun+++ b/config.c
29*4882a593Smuzhiyun@@ -174,6 +174,16 @@ conf_fgets(char *buf, const int max)
30*4882a593Smuzhiyun     }
31*4882a593Smuzhiyun }
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
34*4882a593Smuzhiyun+# define general_name_string(n) \
35*4882a593Smuzhiyun+	strndup(ASN1_STRING_get0_data(n->d.dNSName),	\
36*4882a593Smuzhiyun+	        ASN1_STRING_length(n->d.dNSName) + 1)
37*4882a593Smuzhiyun+#else
38*4882a593Smuzhiyun+# define general_name_string(n) \
39*4882a593Smuzhiyun+	strndup(ASN1_STRING_data(n->d.dNSName),	\
40*4882a593Smuzhiyun+	       ASN1_STRING_length(n->d.dNSName) + 1)
41*4882a593Smuzhiyun+#endif
42*4882a593Smuzhiyun+
43*4882a593Smuzhiyun unsigned char **
44*4882a593Smuzhiyun get_subjectaltnames(X509 *x509, unsigned int *count)
45*4882a593Smuzhiyun {
46*4882a593Smuzhiyun@@ -194,8 +204,7 @@ get_subjectaltnames(X509 *x509, unsigned int *count)
47*4882a593Smuzhiyun         name = sk_GENERAL_NAME_pop(san_stack);
48*4882a593Smuzhiyun         switch(name->type) {
49*4882a593Smuzhiyun             case GEN_DNS:
50*4882a593Smuzhiyun-                temp[local_count] = strndup(ASN1_STRING_data(name->d.dNSName), ASN1_STRING_length(name->d.dNSName)
51*4882a593Smuzhiyun-                                    + 1);
52*4882a593Smuzhiyun+ 	        temp[local_count] = general_name_string(name);
53*4882a593Smuzhiyun                 if(temp[local_count] == NULL)
54*4882a593Smuzhiyun                     conf_err("out of memory");
55*4882a593Smuzhiyun                 local_count++;
56*4882a593Smuzhiyun@@ -565,7 +574,9 @@ parse_service(const char *svc_name)
57*4882a593Smuzhiyun     pthread_mutex_init(&res->mut, NULL);
58*4882a593Smuzhiyun     if(svc_name)
59*4882a593Smuzhiyun         strncpy(res->name, svc_name, KEY_SIZE);
60*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
61*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
62*4882a593Smuzhiyun+    if((res->sessions = lh_TABNODE_new(t_hash, t_cmp)) == NULL)
63*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
64*4882a593Smuzhiyun     if((res->sessions = LHM_lh_new(TABNODE, t)) == NULL)
65*4882a593Smuzhiyun #else
66*4882a593Smuzhiyun     if((res->sessions = lh_new(LHASH_HASH_FN(t_hash), LHASH_COMP_FN(t_cmp))) == NULL)
67*4882a593Smuzhiyundiff --git a/http.c b/http.c
68*4882a593Smuzhiyunindex dd211e4..c8e756a 100644
69*4882a593Smuzhiyun--- a/http.c
70*4882a593Smuzhiyun+++ b/http.c
71*4882a593Smuzhiyun@@ -527,12 +527,22 @@ log_bytes(char *res, const LONG cnt)
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun /* Cleanup code. This should really be in the pthread_cleanup_push, except for bugs in some implementations */
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
76*4882a593Smuzhiyun+# define clear_error()
77*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
78*4882a593Smuzhiyun+# define clear_error() \
79*4882a593Smuzhiyun+	if(ssl != NULL) { ERR_clear_error(); ERR_remove_thread_state(NULL); }
80*4882a593Smuzhiyun+#else
81*4882a593Smuzhiyun+# define clear_error() \
82*4882a593Smuzhiyun+	if(ssl != NULL) { ERR_clear_error(); ERR_remove_state(0); }
83*4882a593Smuzhiyun+#endif
84*4882a593Smuzhiyun+
85*4882a593Smuzhiyun #define clean_all() {   \
86*4882a593Smuzhiyun     if(ssl != NULL) { BIO_ssl_shutdown(cl); } \
87*4882a593Smuzhiyun     if(be != NULL) { BIO_flush(be); BIO_reset(be); BIO_free_all(be); be = NULL; } \
88*4882a593Smuzhiyun     if(cl != NULL) { BIO_flush(cl); BIO_reset(cl); BIO_free_all(cl); cl = NULL; } \
89*4882a593Smuzhiyun     if(x509 != NULL) { X509_free(x509); x509 = NULL; } \
90*4882a593Smuzhiyun-    if(ssl != NULL) { ERR_clear_error(); ERR_remove_state(0); } \
91*4882a593Smuzhiyun+    clear_error(); \
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun /*
95*4882a593Smuzhiyundiff --git a/pound.h b/pound.h
96*4882a593Smuzhiyunindex fa22c36..9603b91 100644
97*4882a593Smuzhiyun--- a/pound.h
98*4882a593Smuzhiyun+++ b/pound.h
99*4882a593Smuzhiyun@@ -344,7 +344,9 @@ typedef struct _tn {
100*4882a593Smuzhiyun /* maximal session key size */
101*4882a593Smuzhiyun #define KEY_SIZE    127
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
104*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
105*4882a593Smuzhiyun+  DEFINE_LHASH_OF(TABNODE);
106*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
107*4882a593Smuzhiyun DECLARE_LHASH_OF(TABNODE);
108*4882a593Smuzhiyun #endif
109*4882a593Smuzhiyun
110*4882a593Smuzhiyundiff --git a/svc.c b/svc.c
111*4882a593Smuzhiyunindex 60ba488..063b92c 100644
112*4882a593Smuzhiyun--- a/svc.c
113*4882a593Smuzhiyun+++ b/svc.c
114*4882a593Smuzhiyun@@ -27,10 +27,17 @@
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun #include    "pound.h"
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
119*4882a593Smuzhiyun+# define TABNODE_GET_DOWN_LOAD(t) lh_TABNODE_get_down_load(t)
120*4882a593Smuzhiyun+# define TABNODE_SET_DOWN_LOAD(t,n) lh_TABNODE_set_down_load(t,n)
121*4882a593Smuzhiyun+#else
122*4882a593Smuzhiyun #ifndef LHASH_OF
123*4882a593Smuzhiyun #define LHASH_OF(x) LHASH
124*4882a593Smuzhiyun #define CHECKED_LHASH_OF(type, h) h
125*4882a593Smuzhiyun #endif
126*4882a593Smuzhiyun+# define TABNODE_GET_DOWN_LOAD(t) (CHECKED_LHASH_OF(TABNODE, t)->down_load)
127*4882a593Smuzhiyun+# define TABNODE_SET_DOWN_LOAD(t,n) (CHECKED_LHASH_OF(TABNODE, t)->down_load = n)
128*4882a593Smuzhiyun+#endif
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun /*
131*4882a593Smuzhiyun  * Add a new key/content pair to a hash table
132*4882a593Smuzhiyun@@ -58,7 +65,9 @@ t_add(LHASH_OF(TABNODE) *const tab, const char *key, const void *content, const
133*4882a593Smuzhiyun     }
134*4882a593Smuzhiyun     memcpy(t->content, content, cont_len);
135*4882a593Smuzhiyun     t->last_acc = time(NULL);
136*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
137*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
138*4882a593Smuzhiyun+    if((old = lh_TABNODE_insert(tab, t)) != NULL) {
139*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
140*4882a593Smuzhiyun     if((old = LHM_lh_insert(TABNODE, tab, t)) != NULL) {
141*4882a593Smuzhiyun #else
142*4882a593Smuzhiyun     if((old = (TABNODE *)lh_insert(tab, t)) != NULL) {
143*4882a593Smuzhiyun@@ -82,7 +91,9 @@ t_find(LHASH_OF(TABNODE) *const tab, char *const key)
144*4882a593Smuzhiyun     TABNODE t, *res;
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun     t.key = key;
147*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
148*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
149*4882a593Smuzhiyun+    if((res = lh_TABNODE_retrieve(tab, &t)) != NULL) {
150*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
151*4882a593Smuzhiyun     if((res = (TABNODE *)LHM_lh_retrieve(TABNODE, tab, &t)) != NULL) {
152*4882a593Smuzhiyun #else
153*4882a593Smuzhiyun     if((res = (TABNODE *)lh_retrieve(tab, &t)) != NULL) {
154*4882a593Smuzhiyun@@ -102,7 +113,9 @@ t_remove(LHASH_OF(TABNODE) *const tab, char *const key)
155*4882a593Smuzhiyun     TABNODE t, *res;
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun     t.key = key;
158*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
159*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
160*4882a593Smuzhiyun+    if((res = lh_TABNODE_delete(tab, &t)) != NULL) {
161*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
162*4882a593Smuzhiyun     if((res = LHM_lh_delete(TABNODE, tab, &t)) != NULL) {
163*4882a593Smuzhiyun #else
164*4882a593Smuzhiyun     if((res = (TABNODE *)lh_delete(tab, &t)) != NULL) {
165*4882a593Smuzhiyun@@ -127,7 +140,9 @@ t_old_doall_arg(TABNODE *t, ALL_ARG *a)
166*4882a593Smuzhiyun     TABNODE *res;
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun     if(t->last_acc < a->lim)
169*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
170*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
171*4882a593Smuzhiyun+        if((res = lh_TABNODE_delete(a->tab, t)) != NULL) {
172*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
173*4882a593Smuzhiyun         if((res = LHM_lh_delete(TABNODE, a->tab, t)) != NULL) {
174*4882a593Smuzhiyun #else
175*4882a593Smuzhiyun         if((res = lh_delete(a->tab, t)) != NULL) {
176*4882a593Smuzhiyun@@ -145,6 +160,10 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE, ALL_ARG)
177*4882a593Smuzhiyun IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE *, ALL_ARG *)
178*4882a593Smuzhiyun #endif
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
181*4882a593Smuzhiyun+IMPLEMENT_LHASH_DOALL_ARG(TABNODE,ALL_ARG);
182*4882a593Smuzhiyun+#endif
183*4882a593Smuzhiyun+
184*4882a593Smuzhiyun /*
185*4882a593Smuzhiyun  * Expire all old nodes
186*4882a593Smuzhiyun  */
187*4882a593Smuzhiyun@@ -156,14 +175,16 @@ t_expire(LHASH_OF(TABNODE) *const tab, const time_t lim)
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun     a.tab = tab;
190*4882a593Smuzhiyun     a.lim = lim;
191*4882a593Smuzhiyun-    down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load;
192*4882a593Smuzhiyun-    CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0;
193*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
194*4882a593Smuzhiyun+    down_load = TABNODE_GET_DOWN_LOAD(tab);
195*4882a593Smuzhiyun+    TABNODE_SET_DOWN_LOAD(tab, 0);
196*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
197*4882a593Smuzhiyun+    lh_TABNODE_doall_ALL_ARG(tab, t_old_doall_arg, &a);
198*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
199*4882a593Smuzhiyun     LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_old), ALL_ARG, &a);
200*4882a593Smuzhiyun #else
201*4882a593Smuzhiyun     lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_old), &a);
202*4882a593Smuzhiyun #endif
203*4882a593Smuzhiyun-    CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load;
204*4882a593Smuzhiyun+    TABNODE_SET_DOWN_LOAD(tab, down_load);
205*4882a593Smuzhiyun     return;
206*4882a593Smuzhiyun }
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun@@ -173,7 +194,9 @@ t_cont_doall_arg(TABNODE *t, ALL_ARG *arg)
209*4882a593Smuzhiyun     TABNODE *res;
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun     if(memcmp(t->content, arg->content, arg->cont_len) == 0)
212*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
213*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
214*4882a593Smuzhiyun+        if((res = lh_TABNODE_delete(arg->tab, t)) != NULL) {
215*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
216*4882a593Smuzhiyun         if((res = LHM_lh_delete(TABNODE, arg->tab, t)) != NULL) {
217*4882a593Smuzhiyun #else
218*4882a593Smuzhiyun         if((res = lh_delete(arg->tab, t)) != NULL) {
219*4882a593Smuzhiyun@@ -203,15 +226,16 @@ t_clean(LHASH_OF(TABNODE) *const tab, void *const content, const size_t cont_len
220*4882a593Smuzhiyun     a.tab = tab;
221*4882a593Smuzhiyun     a.content = content;
222*4882a593Smuzhiyun     a.cont_len = cont_len;
223*4882a593Smuzhiyun-    down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load;
224*4882a593Smuzhiyun-    CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0;
225*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
226*4882a593Smuzhiyun+    down_load = TABNODE_GET_DOWN_LOAD(tab);
227*4882a593Smuzhiyun+    TABNODE_SET_DOWN_LOAD(tab, 0);
228*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
229*4882a593Smuzhiyun+    lh_TABNODE_doall_ALL_ARG(tab, t_cont_doall_arg, &a);
230*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
231*4882a593Smuzhiyun     LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_cont), ALL_ARG, &a);
232*4882a593Smuzhiyun #else
233*4882a593Smuzhiyun     lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_cont), &a);
234*4882a593Smuzhiyun #endif
235*4882a593Smuzhiyun-    CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load;
236*4882a593Smuzhiyun-    return;
237*4882a593Smuzhiyun+    TABNODE_SET_DOWN_LOAD(tab, down_load);
238*4882a593Smuzhiyun }
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun /*
241*4882a593Smuzhiyun@@ -1262,6 +1286,31 @@ RSA_tmp_callback(/* not used */SSL *ssl, /* not used */int is_export, int keylen
242*4882a593Smuzhiyun     return res;
243*4882a593Smuzhiyun }
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun+static int
246*4882a593Smuzhiyun+generate_key(RSA **ret_rsa, unsigned long bits)
247*4882a593Smuzhiyun+{
248*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER > 0x00908000L
249*4882a593Smuzhiyun+    int rc = 0;
250*4882a593Smuzhiyun+    RSA *rsa;
251*4882a593Smuzhiyun+
252*4882a593Smuzhiyun+    rsa = RSA_new();
253*4882a593Smuzhiyun+    if (rsa) {
254*4882a593Smuzhiyun+	BIGNUM *bne = BN_new();
255*4882a593Smuzhiyun+	if (BN_set_word(bne, RSA_F4))
256*4882a593Smuzhiyun+	    rc = RSA_generate_key_ex(rsa, bits, bne, NULL);
257*4882a593Smuzhiyun+	BN_free(bne);
258*4882a593Smuzhiyun+	if (rc)
259*4882a593Smuzhiyun+	    *ret_rsa = rsa;
260*4882a593Smuzhiyun+	else
261*4882a593Smuzhiyun+	    RSA_free(rsa);
262*4882a593Smuzhiyun+    }
263*4882a593Smuzhiyun+    return rc;
264*4882a593Smuzhiyun+#else
265*4882a593Smuzhiyun+    *ret_rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL);
266*4882a593Smuzhiyun+    return *ret_rsa != NULL;
267*4882a593Smuzhiyun+#endif
268*4882a593Smuzhiyun+}
269*4882a593Smuzhiyun+
270*4882a593Smuzhiyun /*
271*4882a593Smuzhiyun  * Periodically regenerate ephemeral RSA keys
272*4882a593Smuzhiyun  * runs every T_RSA_KEYS seconds
273*4882a593Smuzhiyun@@ -1274,8 +1323,9 @@ do_RSAgen(void)
274*4882a593Smuzhiyun     RSA *t_RSA1024_keys[N_RSA_KEYS];
275*4882a593Smuzhiyun
276*4882a593Smuzhiyun     for(n = 0; n < N_RSA_KEYS; n++) {
277*4882a593Smuzhiyun-        t_RSA512_keys[n] = RSA_generate_key(512, RSA_F4, NULL, NULL);
278*4882a593Smuzhiyun-        t_RSA1024_keys[n] = RSA_generate_key(1024, RSA_F4, NULL, NULL);
279*4882a593Smuzhiyun+        /* FIXME: Error handling */
280*4882a593Smuzhiyun+        generate_key(&t_RSA512_keys[n], 512);
281*4882a593Smuzhiyun+	generate_key(&t_RSA1024_keys[n], 1024);
282*4882a593Smuzhiyun     }
283*4882a593Smuzhiyun     if(ret_val = pthread_mutex_lock(&RSA_mut))
284*4882a593Smuzhiyun         logmsg(LOG_WARNING, "thr_RSAgen() lock: %s", strerror(ret_val));
285*4882a593Smuzhiyun@@ -1329,11 +1379,11 @@ init_timer(void)
286*4882a593Smuzhiyun      * Pre-generate ephemeral RSA keys
287*4882a593Smuzhiyun      */
288*4882a593Smuzhiyun     for(n = 0; n < N_RSA_KEYS; n++) {
289*4882a593Smuzhiyun-        if((RSA512_keys[n] = RSA_generate_key(512, RSA_F4, NULL, NULL)) == NULL) {
290*4882a593Smuzhiyun+        if(!generate_key(&RSA512_keys[n], 512)) {
291*4882a593Smuzhiyun             logmsg(LOG_WARNING,"RSA_generate(%d, 512) failed", n);
292*4882a593Smuzhiyun             return;
293*4882a593Smuzhiyun         }
294*4882a593Smuzhiyun-        if((RSA1024_keys[n] = RSA_generate_key(1024, RSA_F4, NULL, NULL)) == NULL) {
295*4882a593Smuzhiyun+        if(!generate_key(&RSA1024_keys[n], 1024)) {
296*4882a593Smuzhiyun             logmsg(LOG_WARNING,"RSA_generate(%d, 1024) failed", n);
297*4882a593Smuzhiyun             return;
298*4882a593Smuzhiyun         }
299*4882a593Smuzhiyun@@ -1420,6 +1470,10 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE, DUMP_ARG)
300*4882a593Smuzhiyun IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE *, DUMP_ARG *)
301*4882a593Smuzhiyun #endif
302*4882a593Smuzhiyun
303*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
304*4882a593Smuzhiyun+IMPLEMENT_LHASH_DOALL_ARG(TABNODE,DUMP_ARG);
305*4882a593Smuzhiyun+#endif
306*4882a593Smuzhiyun+
307*4882a593Smuzhiyun /*
308*4882a593Smuzhiyun  * write sessions to the control socket
309*4882a593Smuzhiyun  */
310*4882a593Smuzhiyun@@ -1430,7 +1484,9 @@ dump_sess(const int control_sock, LHASH_OF(TABNODE) *const sess, BACKEND *const
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun     a.control_sock = control_sock;
313*4882a593Smuzhiyun     a.backends = backends;
314*4882a593Smuzhiyun-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
315*4882a593Smuzhiyun+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
316*4882a593Smuzhiyun+    lh_TABNODE_doall_DUMP_ARG(sess, t_dump_doall_arg, &a);
317*4882a593Smuzhiyun+#elif OPENSSL_VERSION_NUMBER >= 0x10000000L
318*4882a593Smuzhiyun     LHM_lh_doall_arg(TABNODE, sess, LHASH_DOALL_ARG_FN(t_dump), DUMP_ARG, &a);
319*4882a593Smuzhiyun #else
320*4882a593Smuzhiyun     lh_doall_arg(sess, LHASH_DOALL_ARG_FN(t_dump), &a);
321*4882a593Smuzhiyun@@ -1664,6 +1720,13 @@ thr_control(void *arg)
322*4882a593Smuzhiyun     }
323*4882a593Smuzhiyun }
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun+#ifndef SSL3_ST_SR_CLNT_HELLO_A
326*4882a593Smuzhiyun+# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT)
327*4882a593Smuzhiyun+#endif
328*4882a593Smuzhiyun+#ifndef SSL23_ST_SR_CLNT_HELLO_A
329*4882a593Smuzhiyun+# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT)
330*4882a593Smuzhiyun+#endif
331*4882a593Smuzhiyun+
332*4882a593Smuzhiyun void
333*4882a593Smuzhiyun SSLINFO_callback(const SSL *ssl, int where, int rc)
334*4882a593Smuzhiyun {
335