tMigrate from OpenSSL to LibreSSL. - rohrpost - A commandline mail client to change the world as we see it.
 (HTM) git clone git://r-36.net/rohrpost
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit fecee315e0cd0f1f1397285fbf3a1797bdc3c425
 (DIR) parent 64065c2cb6fa4cf275f26dc5079df8e7cda8c7a5
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun,  7 Jun 2020 12:52:27 +0200
       
       Migrate from OpenSSL to LibreSSL.
       
       Remove *blocking calls. They are not used and this needs to be handled
       differently in case of LibreSSL libtls.
       
       Diffstat:
         Makefile                            |       2 +-
         net.c                               |      95 +++++++++----------------------
         net.h                               |       3 ---
       
       3 files changed, 29 insertions(+), 71 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -13,7 +13,7 @@ MANPREFIX = ${PREFIX}/share/man
        
        # includes and libs
        INCS = -I. -I/usr/include
       -LIBS = -L/usr/lib -lc -lssl -lcrypto
       +LIBS = -L/usr/lib -lc -ltls
        # OpenBSD
        #LIBS = -L/usr/lib -lc -lssl -lcrypto -liconv
        
 (DIR) diff --git a/net.c b/net.c
       t@@ -16,8 +16,7 @@
        #include <sys/socket.h>
        #include <netdb.h>
        
       -#include <openssl/ssl.h>
       -#include <openssl/err.h>
       +#include <tls.h>
        
        #include "ind.h"
        #include "net.h"
       t@@ -111,6 +110,12 @@ netnewerror:
        void
        net_free(net_t *net)
        {
       +        switch (net->type) {
       +        case NET_TCPS:
       +                tls_free((struct tls *)net->data[0]);
       +                tls_config_free((struct tls_config *)net->data[1]);
       +        }
       +
                if (net->net != NULL)
                        free(net->net);
                if (net->addr != NULL)
       t@@ -120,44 +125,6 @@ net_free(net_t *net)
                free(net);
        }
        
       -void
       -net_setnonblocking(net_t *net)
       -{
       -        int fd;
       -
       -        switch (net->type) {
       -        case NET_NET:
       -        case NET_TCP:
       -                setnonblocking(net->fd);
       -                break;
       -        case NET_TCPS:
       -                if ((fd = SSL_get_rfd(net->data[0])))
       -                        setnonblocking(fd);
       -                if ((fd = SSL_get_wfd(net->data[0])))
       -                        setnonblocking(fd);
       -                break;
       -        }
       -}
       -
       -void
       -net_setblocking(net_t *net)
       -{
       -        int fd;
       -
       -        switch (net->type) {
       -        case NET_NET:
       -        case NET_TCP:
       -                setblocking(net->fd);
       -                break;
       -        case NET_TCPS:
       -                if ((fd = SSL_get_rfd(net->data[0])))
       -                        setblocking(fd);
       -                if ((fd = SSL_get_wfd(net->data[0])))
       -                        setblocking(fd);
       -                break;
       -        }
       -}
       -
        int
        net_connecttcp(net_t *net)
        {
       t@@ -195,21 +162,22 @@ net_connecttcp(net_t *net)
        int
        net_addssl(net_t *net)
        {
       -        SSL *sfd;
       -
       -        SSL_library_init();
       -        OpenSSL_add_all_algorithms();
       -        net->data[1] = SSL_CTX_new(SSLv23_method());
       -        if (net->data[1] == NULL)
       -                goto netaddsslerr;
       -        SSL_CTX_set_options((SSL_CTX *)net->data[1],
       -                        SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3);
       -
       -        if ((sfd = SSL_new((SSL_CTX *)net->data[1])) == NULL)
       -                goto netaddsslerr;
       -        SSL_set_fd(sfd, net->fd);
       -        if (SSL_connect(sfd) < 1)
       -                goto netaddsslerr;
       +        struct tls *tls = NULL;
       +        struct tls_config *config = NULL;
       +
       +        tls_init();
       +        tls = tls_client();
       +        config = tls_config_new();
       +        tls_config_insecure_noverifycert(config);
       +        tls_config_insecure_noverifyname(config);
       +        tls_configure(tls, config);
       +
       +        if (tls_connect_socket(tls, net->fd, net->addr) < 0) {
       +                fprintf(stderr, "tls_connect_socket %s\n", tls_error(tls));
       +                tls_free(tls);
       +                tls_config_free(config);
       +                return 1;
       +        }
        
                switch (net->type) {
                case NET_NET:
       t@@ -222,14 +190,10 @@ net_addssl(net_t *net)
                        break;
                }
        
       -        net->data[0] = sfd;
       +        net->data[0] = tls;
       +        net->data[1] = config;
        
                return 0;
       -netaddsslerr:
       -        SSL_load_error_strings();
       -        ERR_print_errors_fp(stderr);
       -        ERR_free_strings();
       -        return 1;
        }
        
        int
       t@@ -268,10 +232,7 @@ net_closetcp(net_t *net)
        void
        net_closetcps(net_t *net)
        {
       -        SSL_CTX_free((SSL_CTX *)net->data[1]);
       -        SSL_free((SSL *)net->data[0]);
       -        EVP_cleanup();
       -        CRYPTO_cleanup_all_ex_data();
       +        tls_close((struct tls *)net->data[0]);
        }
        
        void
       t@@ -297,7 +258,7 @@ net_writetcp(net_t *net, char *buf, int len)
        int
        net_writetcps(net_t *net, char *buf, int len)
        {
       -        return SSL_write((SSL *)net->data[0], buf, len);
       +        return tls_write((struct tls *)net->data[0], buf, len);
        }
        
        int
       t@@ -357,7 +318,7 @@ net_readtcp(net_t *net, char *buf, int len)
        int
        net_readtcps(net_t *net, char *buf, int len)
        {
       -        return SSL_read((SSL *)net->data[0], buf, len);
       +        return tls_read((struct tls *)net->data[0], buf, len);
        }
        
        int
 (DIR) diff --git a/net.h b/net.h
       t@@ -22,9 +22,6 @@ struct net_t {
        net_t *net_new(char *desc);
        void net_free(net_t *net);
        
       -void net_setnonblocking(net_t *net);
       -void net_setblocking(net_t *net);
       -
        int net_getnetname(char *str);
        int net_addssl(net_t *net);
        int net_connect(net_t *net);