1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Change the way we load default CA certificates so it works with Capsicum.

Signed-off-by: Edward Tomasz Napierala <trasz@FreeBSD.org>
This commit is contained in:
Edward Tomasz Napierala 2017-08-01 01:47:45 +01:00
parent aeaa420ad3
commit 96f4fe10c6
3 changed files with 34 additions and 3 deletions

View File

@ -28,6 +28,7 @@
#include "log.h" #include "log.h"
#include "misc.h" #include "misc.h"
#include "network.h" #include "network.h"
#include "network-openssl.h"
#include "settings.h" #include "settings.h"
#include "signals.h" #include "signals.h"
@ -361,6 +362,7 @@ static void cmd_capsicum(const char *data, SERVER_REC *server, void *item)
static void cmd_capsicum_enter(void) static void cmd_capsicum_enter(void)
{ {
u_int mode; u_int mode;
gboolean inited;
int error; int error;
error = cap_getmode(&mode); error = cap_getmode(&mode);
@ -369,6 +371,12 @@ static void cmd_capsicum_enter(void)
return; return;
} }
inited = irssi_ssl_init();
if (!inited) {
signal_emit("capability mode failed", 1, strerror(errno));
return;
}
port_min = settings_get_int("capsicum_port_min"); port_min = settings_get_int("capsicum_port_min");
port_max = settings_get_int("capsicum_port_max"); port_max = settings_get_int("capsicum_port_max");

View File

@ -20,6 +20,7 @@
#include "module.h" #include "module.h"
#include "network.h" #include "network.h"
#include "network-openssl.h"
#include "net-sendbuffer.h" #include "net-sendbuffer.h"
#include "misc.h" #include "misc.h"
#include "servers.h" #include "servers.h"
@ -58,6 +59,7 @@ typedef struct
} GIOSSLChannel; } GIOSSLChannel;
static int ssl_inited = FALSE; static int ssl_inited = FALSE;
static X509_STORE *store = NULL;
static void irssi_ssl_free(GIOChannel *handle) static void irssi_ssl_free(GIOChannel *handle)
{ {
@ -362,8 +364,10 @@ static GIOFuncs irssi_ssl_channel_funcs = {
irssi_ssl_get_flags irssi_ssl_get_flags
}; };
static gboolean irssi_ssl_init(void) gboolean irssi_ssl_init(void)
{ {
int success;
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
if (!OPENSSL_init_ssl(OPENSSL_INIT_SSL_DEFAULT, NULL)) { if (!OPENSSL_init_ssl(OPENSSL_INIT_SSL_DEFAULT, NULL)) {
g_error("Could not initialize OpenSSL"); g_error("Could not initialize OpenSSL");
@ -374,6 +378,20 @@ static gboolean irssi_ssl_init(void)
SSL_load_error_strings(); SSL_load_error_strings();
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
#endif #endif
store = X509_STORE_new();
if (store == NULL) {
g_error("Could not initialize OpenSSL: X509_STORE_new() failed");
return FALSE;
}
success = X509_STORE_set_default_paths(store);
if (success == 0) {
g_error("Could not load default certificates");
X509_STORE_free(store);
store = NULL;
return FALSE;
}
ssl_inited = TRUE; ssl_inited = TRUE;
return TRUE; return TRUE;
@ -492,8 +510,7 @@ static GIOChannel *irssi_ssl_get_iochannel(GIOChannel *handle, int port, SERVER_
g_free(scapath); g_free(scapath);
verify = TRUE; verify = TRUE;
} else { } else {
if (!SSL_CTX_set_default_verify_paths(ctx)) SSL_CTX_set_cert_store(ctx, store);
g_warning("Could not load default certificates");
} }
if(!(ssl = SSL_new(ctx))) if(!(ssl = SSL_new(ctx)))

View File

@ -0,0 +1,6 @@
#ifndef __NETWORK_OPENSSL_H
#define __NETWORK_OPENSSL_H
gboolean irssi_ssl_init(void);
#endif /* !__NETWORK_OPENSSL_H */