diff options
| -rw-r--r-- | src/openssl.c | 109 |
1 files changed, 101 insertions, 8 deletions
diff --git a/src/openssl.c b/src/openssl.c index c5c692f..7addaa1 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
| @@ -250,6 +250,10 @@ | |||
| 250 | #define HAVE_SSL_CLIENT_VERSION OPENSSL_PREREQ(1,1,0) | 250 | #define HAVE_SSL_CLIENT_VERSION OPENSSL_PREREQ(1,1,0) |
| 251 | #endif | 251 | #endif |
| 252 | 252 | ||
| 253 | #ifndef HAVE_SSL_CTX_GET0_PARAM | ||
| 254 | #define HAVE_SSL_CTX_GET0_PARAM OPENSSL_PREREQ(1,0,2) | ||
| 255 | #endif | ||
| 256 | |||
| 253 | #ifndef HAVE_SSL_CTX_SET_ALPN_PROTOS | 257 | #ifndef HAVE_SSL_CTX_SET_ALPN_PROTOS |
| 254 | #define HAVE_SSL_CTX_SET_ALPN_PROTOS (OPENSSL_PREREQ(1,0,2) || LIBRESSL_PREREQ(2,1,3)) | 258 | #define HAVE_SSL_CTX_SET_ALPN_PROTOS (OPENSSL_PREREQ(1,0,2) || LIBRESSL_PREREQ(2,1,3)) |
| 255 | #endif | 259 | #endif |
| @@ -262,16 +266,28 @@ | |||
| 262 | #define HAVE_SSL_CTX_SET1_CERT_STORE (HAVE_SSL_CTX_set1_cert_store || 0) /* backwards compatible with old macro name */ | 266 | #define HAVE_SSL_CTX_SET1_CERT_STORE (HAVE_SSL_CTX_set1_cert_store || 0) /* backwards compatible with old macro name */ |
| 263 | #endif | 267 | #endif |
| 264 | 268 | ||
| 269 | #ifndef HAVE_SSL_CTX_SET1_PARAM | ||
| 270 | #define HAVE_SSL_CTX_SET1_PARAM (OPENSSL_PREREQ(1,0,2) || LIBRESSL_PREREQ(2,1,0)) | ||
| 271 | #endif | ||
| 272 | |||
| 265 | #ifndef HAVE_SSL_CTX_CERT_STORE | 273 | #ifndef HAVE_SSL_CTX_CERT_STORE |
| 266 | #define HAVE_SSL_CTX_CERT_STORE (!OPENSSL_PREREQ(1,1,0)) | 274 | #define HAVE_SSL_CTX_CERT_STORE (!OPENSSL_PREREQ(1,1,0)) |
| 267 | #endif | 275 | #endif |
| 268 | 276 | ||
| 277 | #ifndef HAVE_SSL_GET0_ALPN_SELECTED | ||
| 278 | #define HAVE_SSL_GET0_ALPN_SELECTED HAVE_SSL_CTX_SET_ALPN_PROTOS | ||
| 279 | #endif | ||
| 280 | |||
| 281 | #ifndef HAVE_SSL_GET0_PARAM | ||
| 282 | #define HAVE_SSL_GET0_PARAM OPENSSL_PREREQ(1,0,2) | ||
| 283 | #endif | ||
| 284 | |||
| 269 | #ifndef HAVE_SSL_SET_ALPN_PROTOS | 285 | #ifndef HAVE_SSL_SET_ALPN_PROTOS |
| 270 | #define HAVE_SSL_SET_ALPN_PROTOS HAVE_SSL_CTX_SET_ALPN_PROTOS | 286 | #define HAVE_SSL_SET_ALPN_PROTOS HAVE_SSL_CTX_SET_ALPN_PROTOS |
| 271 | #endif | 287 | #endif |
| 272 | 288 | ||
| 273 | #ifndef HAVE_SSL_GET0_ALPN_SELECTED | 289 | #ifndef HAVE_SSL_SET1_PARAM |
| 274 | #define HAVE_SSL_GET0_ALPN_SELECTED HAVE_SSL_CTX_SET_ALPN_PROTOS | 290 | #define HAVE_SSL_SET1_PARAM OPENSSL_PREREQ(1,0,2) |
| 275 | #endif | 291 | #endif |
| 276 | 292 | ||
| 277 | #ifndef HAVE_SSL_UP_REF | 293 | #ifndef HAVE_SSL_UP_REF |
| @@ -286,10 +302,6 @@ | |||
| 286 | #define HAVE_SSLV2_SERVER_METHOD (!OPENSSL_PREREQ(1,1,0) && !defined OPENSSL_NO_SSL2) | 302 | #define HAVE_SSLV2_SERVER_METHOD (!OPENSSL_PREREQ(1,1,0) && !defined OPENSSL_NO_SSL2) |
| 287 | #endif | 303 | #endif |
| 288 | 304 | ||
| 289 | #ifndef HAVE_X509_AUTH_LEVEL | ||
| 290 | #define HAVE_X509_AUTH_LEVEL OPENSSL_PREREQ(1,1,0) | ||
| 291 | #endif | ||
| 292 | |||
| 293 | #ifndef HAVE_X509_STORE_REFERENCES | 305 | #ifndef HAVE_X509_STORE_REFERENCES |
| 294 | #define HAVE_X509_STORE_REFERENCES (!OPENSSL_PREREQ(1,1,0)) | 306 | #define HAVE_X509_STORE_REFERENCES (!OPENSSL_PREREQ(1,1,0)) |
| 295 | #endif | 307 | #endif |
| @@ -302,6 +314,26 @@ | |||
| 302 | #define HAVE_X509_UP_REF OPENSSL_PREREQ(1,1,0) | 314 | #define HAVE_X509_UP_REF OPENSSL_PREREQ(1,1,0) |
| 303 | #endif | 315 | #endif |
| 304 | 316 | ||
| 317 | #ifndef HAVE_X509_VERIFY_PARAM_ADD1_HOST | ||
| 318 | #define HAVE_X509_VERIFY_PARAM_ADD1_HOST OPENSSL_PREREQ(1,0,2) | ||
| 319 | #endif | ||
| 320 | |||
| 321 | #ifndef HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL | ||
| 322 | #define HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL OPENSSL_PREREQ(1,1,0) | ||
| 323 | #endif | ||
| 324 | |||
| 325 | #ifndef HAVE_X509_VERIFY_PARAM_SET1_EMAIL | ||
| 326 | #define HAVE_X509_VERIFY_PARAM_SET1_EMAIL OPENSSL_PREREQ(1,0,2) | ||
| 327 | #endif | ||
| 328 | |||
| 329 | #ifndef HAVE_X509_VERIFY_PARAM_SET1_HOST | ||
| 330 | #define HAVE_X509_VERIFY_PARAM_SET1_HOST OPENSSL_PREREQ(1,0,2) | ||
| 331 | #endif | ||
| 332 | |||
| 333 | #ifndef HAVE_X509_VERIFY_PARAM_SET1_IP_ASC | ||
| 334 | #define HAVE_X509_VERIFY_PARAM_SET1_IP_ASC OPENSSL_PREREQ(1,0,2) | ||
| 335 | #endif | ||
| 336 | |||
| 305 | #ifndef HMAC_INIT_EX_INT | 337 | #ifndef HMAC_INIT_EX_INT |
| 306 | #define HMAC_INIT_EX_INT OPENSSL_PREREQ(1,0,0) | 338 | #define HMAC_INIT_EX_INT OPENSSL_PREREQ(1,0,0) |
| 307 | #endif | 339 | #endif |
| @@ -1535,6 +1567,22 @@ static int compat_SSL_client_version(const SSL *ssl) { | |||
| 1535 | } /* compat_SSL_client_version() */ | 1567 | } /* compat_SSL_client_version() */ |
| 1536 | #endif | 1568 | #endif |
| 1537 | 1569 | ||
| 1570 | #if !HAVE_SSL_GET0_PARAM | ||
| 1571 | #define SSL_get0_param(ssl) compat_SSL_get0_param((ssl)) | ||
| 1572 | |||
| 1573 | static X509_VERIFY_PARAM *compat_SSL_get0_param(SSL *ssl) { | ||
| 1574 | return ssl->param; | ||
| 1575 | } /* compat_SSL_get0_param() */ | ||
| 1576 | #endif | ||
| 1577 | |||
| 1578 | #if !HAVE_SSL_SET1_PARAM | ||
| 1579 | #define SSL_set1_param(ssl, vpm) compat_SSL_set1_param((ssl), (vpm)) | ||
| 1580 | |||
| 1581 | static int compat_SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) { | ||
| 1582 | return X509_VERIFY_PARAM_set1(ssl->param, vpm); | ||
| 1583 | } /* compat_SSL_set1_param() */ | ||
| 1584 | #endif | ||
| 1585 | |||
| 1538 | #if !HAVE_SSL_UP_REF | 1586 | #if !HAVE_SSL_UP_REF |
| 1539 | #define SSL_up_ref(...) compat_SSL_up_ref(__VA_ARGS__) | 1587 | #define SSL_up_ref(...) compat_SSL_up_ref(__VA_ARGS__) |
| 1540 | 1588 | ||
| @@ -1547,6 +1595,22 @@ static int compat_SSL_up_ref(SSL *ssl) { | |||
| 1547 | } /* compat_SSL_up_ref() */ | 1595 | } /* compat_SSL_up_ref() */ |
| 1548 | #endif | 1596 | #endif |
| 1549 | 1597 | ||
| 1598 | #if !HAVE_SSL_CTX_GET0_PARAM | ||
| 1599 | #define SSL_CTX_get0_param(ctx) compat_SSL_CTX_get0_param((ctx)) | ||
| 1600 | |||
| 1601 | static X509_VERIFY_PARAM *compat_SSL_CTX_get0_param(SSL_CTX *ctx) { | ||
| 1602 | return ctx->param; | ||
| 1603 | } /* compat_SSL_CTX_get0_param() */ | ||
| 1604 | #endif | ||
| 1605 | |||
| 1606 | #if !HAVE_SSL_CTX_SET1_PARAM | ||
| 1607 | #define SSL_CTX_set1_param(ctx, vpm) compat_SSL_CTX_set1_param((ctx), (vpm)) | ||
| 1608 | |||
| 1609 | static int compat_SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) { | ||
| 1610 | return X509_VERIFY_PARAM_set1(ctx->param, vpm); | ||
| 1611 | } /* compat_SSL_CTX_set1_param() */ | ||
| 1612 | #endif | ||
| 1613 | |||
| 1550 | #if !HAVE_X509_GET0_EXT | 1614 | #if !HAVE_X509_GET0_EXT |
| 1551 | #define X509_get0_ext(crt, i) X509_get_ext((crt), (i)) | 1615 | #define X509_get0_ext(crt, i) X509_get_ext((crt), (i)) |
| 1552 | #endif | 1616 | #endif |
| @@ -1667,6 +1731,19 @@ static int compat_X509_up_ref(X509 *crt) { | |||
| 1667 | } /* compat_X509_up_ref() */ | 1731 | } /* compat_X509_up_ref() */ |
| 1668 | #endif | 1732 | #endif |
| 1669 | 1733 | ||
| 1734 | #if !HAVE_X509_VERIFY_PARAM_SET1_EMAIL | ||
| 1735 | /* | ||
| 1736 | * NB: Cannot emulate. Requires dereferencing X509_VERIFY_PARAM_ID objects, | ||
| 1737 | * which were always opaque. | ||
| 1738 | */ | ||
| 1739 | #endif | ||
| 1740 | |||
| 1741 | #if !HAVE_X509_VERIFY_PARAM_SET1_HOST | ||
| 1742 | /* | ||
| 1743 | * NB: See HAVE_X509_VERIFY_PARAM_SET1_EMAIL. | ||
| 1744 | */ | ||
| 1745 | #endif | ||
| 1746 | |||
| 1670 | static int compat_init(void) { | 1747 | static int compat_init(void) { |
| 1671 | static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; | 1748 | static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; |
| 1672 | static int store_index = -1, ssl_ctx_index = -1, done; | 1749 | static int store_index = -1, ssl_ctx_index = -1, done; |
| @@ -8364,7 +8441,7 @@ static int xp_getDepth(lua_State *L) { | |||
| 8364 | } /* xp_getDepth() */ | 8441 | } /* xp_getDepth() */ |
| 8365 | 8442 | ||
| 8366 | 8443 | ||
| 8367 | #if HAVE_X509_AUTH_LEVEL | 8444 | #if HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL |
| 8368 | static int xp_setAuthLevel(lua_State *L) { | 8445 | static int xp_setAuthLevel(lua_State *L) { |
| 8369 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); | 8446 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); |
| 8370 | int auth_level = luaL_checkinteger(L, 2); | 8447 | int auth_level = luaL_checkinteger(L, 2); |
| @@ -8387,6 +8464,7 @@ static int xp_getAuthLevel(lua_State *L) { | |||
| 8387 | #endif | 8464 | #endif |
| 8388 | 8465 | ||
| 8389 | 8466 | ||
| 8467 | #if HAVE_X509_VERIFY_PARAM_SET1_HOST | ||
| 8390 | static int xp_setHost(lua_State *L) { | 8468 | static int xp_setHost(lua_State *L) { |
| 8391 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); | 8469 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); |
| 8392 | size_t len; | 8470 | size_t len; |
| @@ -8399,8 +8477,10 @@ static int xp_setHost(lua_State *L) { | |||
| 8399 | lua_pushboolean(L, 1); | 8477 | lua_pushboolean(L, 1); |
| 8400 | return 1; | 8478 | return 1; |
| 8401 | } /* xp_setHost() */ | 8479 | } /* xp_setHost() */ |
| 8480 | #endif | ||
| 8402 | 8481 | ||
| 8403 | 8482 | ||
| 8483 | #if HAVE_X509_VERIFY_PARAM_ADD1_HOST | ||
| 8404 | static int xp_addHost(lua_State *L) { | 8484 | static int xp_addHost(lua_State *L) { |
| 8405 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); | 8485 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); |
| 8406 | size_t len; | 8486 | size_t len; |
| @@ -8413,8 +8493,10 @@ static int xp_addHost(lua_State *L) { | |||
| 8413 | lua_pushboolean(L, 1); | 8493 | lua_pushboolean(L, 1); |
| 8414 | return 1; | 8494 | return 1; |
| 8415 | } /* xp_addHost() */ | 8495 | } /* xp_addHost() */ |
| 8496 | #endif | ||
| 8416 | 8497 | ||
| 8417 | 8498 | ||
| 8499 | #if HAVE_X509_VERIFY_PARAM_SET1_EMAIL | ||
| 8418 | static int xp_setEmail(lua_State *L) { | 8500 | static int xp_setEmail(lua_State *L) { |
| 8419 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); | 8501 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); |
| 8420 | size_t len; | 8502 | size_t len; |
| @@ -8427,8 +8509,10 @@ static int xp_setEmail(lua_State *L) { | |||
| 8427 | lua_pushboolean(L, 1); | 8509 | lua_pushboolean(L, 1); |
| 8428 | return 1; | 8510 | return 1; |
| 8429 | } /* xp_setEmail() */ | 8511 | } /* xp_setEmail() */ |
| 8512 | #endif | ||
| 8430 | 8513 | ||
| 8431 | 8514 | ||
| 8515 | #if HAVE_X509_VERIFY_PARAM_SET1_IP_ASC | ||
| 8432 | static int xp_setIP(lua_State *L) { | 8516 | static int xp_setIP(lua_State *L) { |
| 8433 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); | 8517 | X509_VERIFY_PARAM *xp = checksimple(L, 1, X509_VERIFY_PARAM_CLASS); |
| 8434 | const char *str = luaL_checkstring(L, 2); | 8518 | const char *str = luaL_checkstring(L, 2); |
| @@ -8440,6 +8524,7 @@ static int xp_setIP(lua_State *L) { | |||
| 8440 | lua_pushboolean(L, 1); | 8524 | lua_pushboolean(L, 1); |
| 8441 | return 1; | 8525 | return 1; |
| 8442 | } /* xp_setIP() */ | 8526 | } /* xp_setIP() */ |
| 8527 | #endif | ||
| 8443 | 8528 | ||
| 8444 | 8529 | ||
| 8445 | static int xp__gc(lua_State *L) { | 8530 | static int xp__gc(lua_State *L) { |
| @@ -8458,14 +8543,22 @@ static const auxL_Reg xp_methods[] = { | |||
| 8458 | { "setTime", &xp_setTime }, | 8543 | { "setTime", &xp_setTime }, |
| 8459 | { "setDepth", &xp_setDepth }, | 8544 | { "setDepth", &xp_setDepth }, |
| 8460 | { "getDepth", &xp_getDepth }, | 8545 | { "getDepth", &xp_getDepth }, |
| 8461 | #if HAVE_X509_AUTH_LEVEL | 8546 | #if HAVE_X509_VERIFY_PARAM_SET_AUTH_LEVEL |
| 8462 | { "setAuthLevel", &xp_setAuthLevel }, | 8547 | { "setAuthLevel", &xp_setAuthLevel }, |
| 8463 | { "getAuthLevel", &xp_getAuthLevel }, | 8548 | { "getAuthLevel", &xp_getAuthLevel }, |
| 8464 | #endif | 8549 | #endif |
| 8550 | #if HAVE_X509_VERIFY_PARAM_SET1_HOST | ||
| 8465 | { "setHost", &xp_setHost }, | 8551 | { "setHost", &xp_setHost }, |
| 8552 | #endif | ||
| 8553 | #if HAVE_X509_VERIFY_PARAM_ADD1_HOST | ||
| 8466 | { "addHost", &xp_addHost }, | 8554 | { "addHost", &xp_addHost }, |
| 8555 | #endif | ||
| 8556 | #if HAVE_X509_VERIFY_PARAM_SET1_EMAIL | ||
| 8467 | { "setEmail", &xp_setEmail }, | 8557 | { "setEmail", &xp_setEmail }, |
| 8558 | #endif | ||
| 8559 | #if HAVE_X509_VERIFY_PARAM_SET1_IP_ASC | ||
| 8468 | { "setIP", &xp_setIP }, | 8560 | { "setIP", &xp_setIP }, |
| 8561 | #endif | ||
| 8469 | { NULL, NULL }, | 8562 | { NULL, NULL }, |
| 8470 | }; | 8563 | }; |
| 8471 | 8564 | ||
