|
|
- diff --git a/lib/net_mosq.c b/lib/net_mosq.c
- index bdcaa19..f207e32 100644
- --- a/lib/net_mosq.c
- +++ b/lib/net_mosq.c
- @@ -141,7 +141,9 @@ int net__init(void)
- | OPENSSL_INIT_ADD_ALL_DIGESTS \
- | OPENSSL_INIT_LOAD_CONFIG, NULL);
- # endif
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_load_builtin_engines();
- +#endif
- setup_ui_method();
- if(tls_ex_index_mosq == -1){
- tls_ex_index_mosq = SSL_get_ex_new_index(0, "client context", NULL, NULL, NULL);
- @@ -599,6 +601,7 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- SSL_CTX_set_mode(mosq->ssl_ctx, SSL_MODE_RELEASE_BUFFERS);
- #endif
-
- +#if !defined(OPENSSL_NO_ENGINE)
- if(mosq->tls_engine){
- engine = ENGINE_by_id(mosq->tls_engine);
- if(!engine){
- @@ -615,12 +618,15 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- ENGINE_set_default(engine, ENGINE_METHOD_ALL);
- ENGINE_free(engine); /* release the structural reference from ENGINE_by_id() */
- }
- +#endif
-
- if(mosq->tls_ciphers){
- ret = SSL_CTX_set_cipher_list(mosq->ssl_ctx, mosq->tls_ciphers);
- if(ret == 0){
- log__printf(mosq, MOSQ_LOG_ERR, "Error: Unable to set TLS ciphers. Check cipher list \"%s\".", mosq->tls_ciphers);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- COMPAT_CLOSE(mosq->sock);
- mosq->sock = INVALID_SOCKET;
- net__print_ssl_error(mosq);
- @@ -647,7 +653,9 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- log__printf(mosq, MOSQ_LOG_ERR, "Error: Unable to load CA certificates, check capath \"%s\".", mosq->tls_capath);
- }
- #endif
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- COMPAT_CLOSE(mosq->sock);
- mosq->sock = INVALID_SOCKET;
- net__print_ssl_error(mosq);
- @@ -672,7 +680,9 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- #else
- log__printf(mosq, MOSQ_LOG_ERR, "Error: Unable to load client certificate \"%s\".", mosq->tls_certfile);
- #endif
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- COMPAT_CLOSE(mosq->sock);
- mosq->sock = INVALID_SOCKET;
- net__print_ssl_error(mosq);
- @@ -681,6 +691,7 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- }
- if(mosq->tls_keyfile){
- if(mosq->tls_keyform == mosq_k_engine){
- +#if !defined(OPENSSL_NO_ENGINE)
- UI_METHOD *ui_method = net__get_ui_method();
- if(mosq->tls_engine_kpass_sha1){
- if(!ENGINE_ctrl_cmd(engine, ENGINE_SECRET_MODE, ENGINE_SECRET_MODE_SHA, NULL, NULL, 0)){
- @@ -714,6 +725,7 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- net__print_ssl_error(mosq);
- return MOSQ_ERR_TLS;
- }
- +#endif
- }else{
- ret = SSL_CTX_use_PrivateKey_file(mosq->ssl_ctx, mosq->tls_keyfile, SSL_FILETYPE_PEM);
- if(ret != 1){
- @@ -722,7 +734,9 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- #else
- log__printf(mosq, MOSQ_LOG_ERR, "Error: Unable to load client key file \"%s\".", mosq->tls_keyfile);
- #endif
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- COMPAT_CLOSE(mosq->sock);
- mosq->sock = INVALID_SOCKET;
- net__print_ssl_error(mosq);
- @@ -732,7 +746,9 @@ static int net__init_ssl_ctx(struct mosquitto *mosq)
- ret = SSL_CTX_check_private_key(mosq->ssl_ctx);
- if(ret != 1){
- log__printf(mosq, MOSQ_LOG_ERR, "Error: Client certificate/key are inconsistent.");
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- COMPAT_CLOSE(mosq->sock);
- mosq->sock = INVALID_SOCKET;
- net__print_ssl_error(mosq);
- diff --git a/lib/options.c b/lib/options.c
- index 005b781..6dc4262 100644
- --- a/lib/options.c
- +++ b/lib/options.c
- @@ -255,6 +255,7 @@ int mosquitto_string_option(struct mosquitto *mosq, enum mosq_opt_t option, cons
- switch(option){
- case MOSQ_OPT_TLS_ENGINE:
- #ifdef WITH_TLS
- +# if !defined(OPENSSL_NO_ENGINE)
- eng = ENGINE_by_id(value);
- if(!eng){
- return MOSQ_ERR_INVAL;
- @@ -265,6 +266,7 @@ int mosquitto_string_option(struct mosquitto *mosq, enum mosq_opt_t option, cons
- return MOSQ_ERR_NOMEM;
- }
- return MOSQ_ERR_SUCCESS;
- +#endif
- #else
- return MOSQ_ERR_NOT_SUPPORTED;
- #endif
- diff --git a/src/net.c b/src/net.c
- index 74b4ee8..495f8b2 100644
- --- a/src/net.c
- +++ b/src/net.c
- @@ -534,6 +534,7 @@ int net__socket_listen(struct mosquitto__listener *listener)
- return 1;
- }
- if(listener->tls_engine){
- +#if !defined(OPENSSL_NO_ENGINE)
- engine = ENGINE_by_id(listener->tls_engine);
- if(!engine){
- log__printf(NULL, MOSQ_LOG_ERR, "Error loading %s engine\n", listener->tls_engine);
- @@ -548,6 +549,7 @@ int net__socket_listen(struct mosquitto__listener *listener)
- }
- ENGINE_set_default(engine, ENGINE_METHOD_ALL);
- ENGINE_free(engine); /* release the structural reference from ENGINE_by_id() */
- +#endif
- }
- /* FIXME user data? */
- if(listener->require_certificate){
- @@ -560,10 +562,13 @@ int net__socket_listen(struct mosquitto__listener *listener)
- log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to load server certificate \"%s\". Check certfile.", listener->certfile);
- net__print_error(MOSQ_LOG_ERR, "Error: %s");
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- if(listener->tls_keyform == mosq_k_engine){
- +#if !defined(OPENSSL_NO_ENGINE)
- UI_METHOD *ui_method = net__get_ui_method();
- if(listener->tls_engine_kpass_sha1){
- if(!ENGINE_ctrl_cmd(engine, ENGINE_SECRET_MODE, ENGINE_SECRET_MODE_SHA, NULL, NULL, 0)){
- @@ -593,13 +598,16 @@ int net__socket_listen(struct mosquitto__listener *listener)
- ENGINE_FINISH(engine);
- return 1;
- }
- +#endif
- }else{
- rc = SSL_CTX_use_PrivateKey_file(listener->ssl_ctx, listener->keyfile, SSL_FILETYPE_PEM);
- if(rc != 1){
- log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to load server key file \"%s\". Check keyfile.", listener->keyfile);
- net__print_error(MOSQ_LOG_ERR, "Error: %s");
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- }
- @@ -608,7 +616,9 @@ int net__socket_listen(struct mosquitto__listener *listener)
- log__printf(NULL, MOSQ_LOG_ERR, "Error: Server certificate/key are inconsistent.");
- net__print_error(MOSQ_LOG_ERR, "Error: %s");
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- /* Load CRLs if they exist. */
- @@ -618,7 +628,9 @@ int net__socket_listen(struct mosquitto__listener *listener)
- log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to obtain TLS store.");
- net__print_error(MOSQ_LOG_ERR, "Error: %s");
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
- @@ -627,7 +639,9 @@ int net__socket_listen(struct mosquitto__listener *listener)
- log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to load certificate revocation file \"%s\". Check crlfile.", listener->crlfile);
- net__print_error(MOSQ_LOG_ERR, "Error: %s");
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK);
- @@ -644,7 +658,9 @@ int net__socket_listen(struct mosquitto__listener *listener)
-
- if(mosquitto__tls_server_ctx(listener)){
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- SSL_CTX_set_psk_server_callback(listener->ssl_ctx, psk_server_callback);
- @@ -654,7 +670,9 @@ int net__socket_listen(struct mosquitto__listener *listener)
- log__printf(NULL, MOSQ_LOG_ERR, "Error: Unable to set TLS PSK hint.");
- net__print_error(MOSQ_LOG_ERR, "Error: %s");
- COMPAT_CLOSE(sock);
- +#if !defined(OPENSSL_NO_ENGINE)
- ENGINE_FINISH(engine);
- +#endif
- return 1;
- }
- }
|