Skip to content

Commit 6a53b1b

Browse files
committed
bugfix: fixed compilation errors with OpenSSL older than 1.0.2.
1 parent 2805992 commit 6a53b1b

File tree

3 files changed

+108
-2
lines changed

3 files changed

+108
-2
lines changed

src/ngx_http_lua_common.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
#endif
3232

3333

34+
#if (!defined OPENSSL_NO_OCSP && defined SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB)
35+
# define NGX_HTTP_LUA_USE_OCSP 1
36+
#endif
37+
38+
3439
#ifndef MD5_DIGEST_LENGTH
3540
#define MD5_DIGEST_LENGTH 16
3641
#endif

src/ngx_http_lua_module.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,15 @@ ngx_http_lua_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
896896
return NGX_CONF_ERROR;
897897
}
898898

899+
#if OPENSSL_VERSION_NUMBER >= 0x1000205fL
900+
899901
SSL_CTX_set_cert_cb(sscf->ssl.ctx, ngx_http_lua_ssl_cert_handler, NULL);
902+
903+
#else
904+
905+
return NGX_CONF_ERROR;
906+
907+
#endif
900908
}
901909

902910
return NGX_CONF_OK;

src/ngx_http_lua_sslcertby.c

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ static u_char *ngx_http_lua_log_ssl_cert_error(ngx_log_t *log, u_char *buf,
2727
size_t len);
2828
static ngx_int_t ngx_http_lua_ssl_cert_by_chunk(lua_State *L,
2929
ngx_http_request_t *r);
30+
#ifdef NGX_HTTP_LUA_USE_OCSP
31+
static int ngx_http_lua_ssl_empty_status_callback(ngx_ssl_conn_t *ssl_conn,
32+
void *data);
33+
#endif
3034

3135

3236
ngx_int_t
@@ -75,13 +79,21 @@ char *
7579
ngx_http_lua_ssl_cert_by_lua(ngx_conf_t *cf, ngx_command_t *cmd,
7680
void *conf)
7781
{
82+
#if OPENSSL_VERSION_NUMBER < 0x1000205fL
83+
84+
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
85+
"at least OpenSSL 1.0.2e required but found "
86+
OPENSSL_VERSION_TEXT);
87+
88+
return NGX_CONF_ERROR;
89+
90+
#else
91+
7892
u_char *p;
7993
u_char *name;
8094
ngx_str_t *value;
8195
ngx_http_lua_srv_conf_t *lscf = conf;
8296

83-
dd("enter");
84-
8597
/* must specifiy a content handler */
8698
if (cmd->post == NULL) {
8799
return NGX_CONF_ERROR;
@@ -136,6 +148,8 @@ ngx_http_lua_ssl_cert_by_lua(ngx_conf_t *cf, ngx_command_t *cmd,
136148
}
137149

138150
return NGX_CONF_OK;
151+
152+
#endif /* OPENSSL_VERSION_NUMBER < 0x1000205fL */
139153
}
140154

141155

@@ -443,6 +457,13 @@ ngx_http_lua_ssl_cert_by_chunk(lua_State *L, ngx_http_request_t *r)
443457
int
444458
ngx_http_lua_ffi_ssl_get_tls1_version(ngx_http_request_t *r, char **err)
445459
{
460+
#ifndef TLS1_get_version
461+
462+
*err = "no TLS1 support";
463+
return NGX_ERROR;
464+
465+
#else
466+
446467
ngx_ssl_conn_t *ssl_conn;
447468

448469
if (r->connection == NULL || r->connection->ssl == NULL) {
@@ -459,12 +480,21 @@ ngx_http_lua_ffi_ssl_get_tls1_version(ngx_http_request_t *r, char **err)
459480
dd("tls1 ver: %d", (int) TLS1_get_version(ssl_conn));
460481

461482
return (int) TLS1_get_version(ssl_conn);
483+
484+
#endif
462485
}
463486

464487

465488
int
466489
ngx_http_lua_ffi_ssl_clear_certs(ngx_http_request_t *r, char **err)
467490
{
491+
#if OPENSSL_VERSION_NUMBER < 0x1000205fL
492+
493+
*err = "at least OpenSSL 1.0.2e required but found " OPENSSL_VERSION_TEXT;
494+
return NGX_ERROR;
495+
496+
#else
497+
468498
ngx_ssl_conn_t *ssl_conn;
469499

470500
if (r->connection == NULL || r->connection->ssl == NULL) {
@@ -480,13 +510,22 @@ ngx_http_lua_ffi_ssl_clear_certs(ngx_http_request_t *r, char **err)
480510

481511
SSL_certs_clear(ssl_conn);
482512
return NGX_OK;
513+
514+
#endif /* OPENSSL_VERSION_NUMBER < 0x1000205fL */
483515
}
484516

485517

486518
int
487519
ngx_http_lua_ffi_ssl_set_der_certificate(ngx_http_request_t *r,
488520
const char *data, size_t len, char **err)
489521
{
522+
#if OPENSSL_VERSION_NUMBER < 0x1000205fL
523+
524+
*err = "at least OpenSSL 1.0.2e required but found " OPENSSL_VERSION_TEXT;
525+
return NGX_ERROR;
526+
527+
#else
528+
490529
BIO *bio = NULL;
491530
X509 *x509 = NULL;
492531
ngx_ssl_conn_t *ssl_conn;
@@ -561,6 +600,8 @@ ngx_http_lua_ffi_ssl_set_der_certificate(ngx_http_request_t *r,
561600
}
562601

563602
return NGX_ERROR;
603+
604+
#endif /* OPENSSL_VERSION_NUMBER < 0x1000205fL */
564605
}
565606

566607

@@ -711,6 +752,8 @@ ngx_http_lua_ffi_ssl_server_name(ngx_http_request_t *r, char **name,
711752
return NGX_ERROR;
712753
}
713754

755+
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
756+
714757
*name = (char *) SSL_get_servername(ssl_conn, TLSEXT_NAMETYPE_host_name);
715758

716759
if (*name) {
@@ -719,6 +762,13 @@ ngx_http_lua_ffi_ssl_server_name(ngx_http_request_t *r, char **name,
719762
}
720763

721764
return NGX_DECLINED;
765+
766+
#else
767+
768+
*err = "no TLS extension support";
769+
return NGX_ERROR;
770+
771+
#endif
722772
}
723773

724774

@@ -799,6 +849,13 @@ ngx_http_lua_ffi_ssl_get_ocsp_responder_from_der_chain(
799849
const char *chain_data, size_t chain_len, unsigned char *out,
800850
size_t *out_size, char **err)
801851
{
852+
#ifndef NGX_HTTP_LUA_USE_OCSP
853+
854+
*err = "no OCSP support";
855+
return NGX_ERROR;
856+
857+
#else
858+
802859
int rc = NGX_OK;
803860
BIO *bio = NULL;
804861
char *s;
@@ -830,7 +887,11 @@ ngx_http_lua_ffi_ssl_get_ocsp_responder_from_der_chain(
830887
goto done;
831888
}
832889

890+
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
833891
s = sk_OPENSSL_STRING_value(aia, 0);
892+
#else
893+
s = sk_value(aia, 0);
894+
#endif
834895
if (s == NULL) {
835896
rc = NGX_DECLINED;
836897
goto done;
@@ -897,13 +958,22 @@ ngx_http_lua_ffi_ssl_get_ocsp_responder_from_der_chain(
897958
}
898959

899960
return rc;
961+
962+
#endif /* NGX_HTTP_LUA_USE_OCSP */
900963
}
901964

902965

903966
int
904967
ngx_http_lua_ffi_ssl_create_ocsp_request(const char *chain_data,
905968
size_t chain_len, unsigned char *out, size_t *out_size, char **err)
906969
{
970+
#ifndef NGX_HTTP_LUA_USE_OCSP
971+
972+
*err = "no OCSP support";
973+
return NGX_ERROR;
974+
975+
#else
976+
907977
int rc = NGX_ERROR;
908978
BIO *bio = NULL;
909979
X509 *cert = NULL, *issuer = NULL;
@@ -1000,6 +1070,8 @@ ngx_http_lua_ffi_ssl_create_ocsp_request(const char *chain_data,
10001070
}
10011071

10021072
return rc;
1073+
1074+
#endif /* NGX_HTTP_LUA_USE_OCSP */
10031075
}
10041076

10051077

@@ -1008,6 +1080,14 @@ ngx_http_lua_ffi_ssl_validate_ocsp_response(const u_char *resp,
10081080
size_t resp_len, const char *chain_data, size_t chain_len,
10091081
u_char *errbuf, size_t *errbuf_size)
10101082
{
1083+
#ifndef NGX_HTTP_LUA_USE_OCSP
1084+
1085+
*errbuf_size = ngx_snprintf(errbuf, *errbuf_size,
1086+
"no OCSP support") - errbuf;
1087+
return NGX_ERROR;
1088+
1089+
#else
1090+
10111091
int n;
10121092
BIO *bio = NULL;
10131093
X509 *cert = NULL, *issuer = NULL;
@@ -1162,20 +1242,31 @@ ngx_http_lua_ffi_ssl_validate_ocsp_response(const u_char *resp,
11621242
ERR_clear_error();
11631243

11641244
return NGX_ERROR;
1245+
1246+
#endif /* NGX_HTTP_LUA_USE_OCSP */
11651247
}
11661248

11671249

1250+
#ifdef NGX_HTTP_LUA_USE_OCSP
11681251
static int
11691252
ngx_http_lua_ssl_empty_status_callback(ngx_ssl_conn_t *ssl_conn, void *data)
11701253
{
11711254
return SSL_TLSEXT_ERR_OK;
11721255
}
1256+
#endif
11731257

11741258

11751259
int
11761260
ngx_http_lua_ffi_ssl_set_ocsp_status_resp(ngx_http_request_t *r,
11771261
const u_char *resp, size_t resp_len, char **err)
11781262
{
1263+
#ifndef NGX_HTTP_LUA_USE_OCSP
1264+
1265+
*err = "no OCSP support";
1266+
return NGX_ERROR;
1267+
1268+
#else
1269+
11791270
u_char *p;
11801271
SSL_CTX *ctx;
11811272
ngx_ssl_conn_t *ssl_conn;
@@ -1216,6 +1307,8 @@ ngx_http_lua_ffi_ssl_set_ocsp_status_resp(ngx_http_request_t *r,
12161307
ssl_conn->tlsext_status_expected = 1;
12171308

12181309
return NGX_OK;
1310+
1311+
#endif /* NGX_HTTP_LUA_USE_OCSP */
12191312
}
12201313

12211314
#endif /* NGX_LUA_NO_FFI_API */

0 commit comments

Comments
 (0)