openssl module working on windows, added configuration option for setting the ssl module

This commit is contained in:
Aaron Blakely 2024-03-14 04:06:33 -05:00
parent 50affd176a
commit 517394e7f9
6 changed files with 37 additions and 6 deletions

View File

@ -36,6 +36,7 @@ struct irc_conn
#else #else
FILE *srv_fd; FILE *srv_fd;
#endif #endif
char ssl_module[256];
char nick[50]; char nick[50];
char user[50]; char user[50];
char admin[256]; char admin[256];

Binary file not shown.

Binary file not shown.

View File

@ -15,8 +15,10 @@ int ssl_fd;
SSL *ssl; SSL *ssl;
SSL_CTX *ctx; SSL_CTX *ctx;
MY_API void sslmod_init(struct irc_conn *bot) MY_API void sslmod_init()
{ {
struct irc_conn *bot = get_bot();
SSL_library_init(); SSL_library_init();
SSL_load_error_strings(); SSL_load_error_strings();
ctx = SSL_CTX_new(SSLv23_client_method()); ctx = SSL_CTX_new(SSLv23_client_method());
@ -25,12 +27,14 @@ MY_API void sslmod_init(struct irc_conn *bot)
eprint("Error: Cannot create SSL context\n"); eprint("Error: Cannot create SSL context\n");
} }
if (bot->verify_ssl) if (bot->verify_ssl == true)
{ {
printf("SSL: Verifying server certificate\n");
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
} }
else else
{ {
printf("SSL: Not verifying server certificate\n");
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL); SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
} }
@ -42,12 +46,12 @@ MY_API void sslmod_init(struct irc_conn *bot)
MY_API int get_ssl_fd() MY_API int get_ssl_fd()
{ {
printf("ssl_fd: %d\n", ssl_fd);
return ssl_fd; return ssl_fd;
} }
MY_API void sslmod_connect() MY_API void sslmod_connect()
{ {
unsigned long ssl_err;
struct irc_conn *bot = get_bot(); struct irc_conn *bot = get_bot();
#ifdef _WIN32 #ifdef _WIN32
@ -62,6 +66,12 @@ MY_API void sslmod_connect()
if (SSL_connect(ssl) != 1) if (SSL_connect(ssl) != 1)
{ {
eprint("Error: Cannot connect to SSL server\n"); eprint("Error: Cannot connect to SSL server\n");
ssl_err = ERR_get_error();
if (ssl_err)
{
eprint("SSL error: %s\n", ERR_error_string(ssl_err, NULL));
}
} }
#ifdef _WIN32 #ifdef _WIN32

View File

@ -14,8 +14,9 @@ struct irc_conn read_config(struct irc_conn bot, char *file)
const char *base = (const char*)malloc(sizeof(char) * 1024); const char *base = (const char*)malloc(sizeof(char) * 1024);
const char *mod = NULL; const char *mod = NULL;
int boolbase; int boolbase;
char *modpath = (char *)malloc(sizeof(char) * 500);
bot.verify_ssl = 0;
bot.use_ssl = 0;
cf = &cfg; cf = &cfg;
config_init(cf); config_init(cf);
@ -90,6 +91,22 @@ void run_autoload(struct irc_conn *bot)
exit(-1); exit(-1);
} }
if (bot->use_ssl)
{
if (config_lookup_string(cf, "server.ssl_module", &base))
{
strlcpy(bot->ssl_module, base, sizeof bot->ssl_module);
// Load the SSL module
#ifdef _WIN32
sprintf(modpath, "./mods/%s.dll", bot->ssl_module);
#else
sprintf(modpath, "./mods/%s.so", bot->ssl_module);
#endif
load_module(bot, "main", "runtime", modpath);
}
}
autoload = config_lookup(cf, "mods.autoload"); autoload = config_lookup(cf, "mods.autoload");
count = config_setting_length(autoload); count = config_setting_length(autoload);
@ -105,4 +122,5 @@ void run_autoload(struct irc_conn *bot)
} }
config_destroy(cf); config_destroy(cf);
free(modpath);
} }

View File

@ -20,9 +20,11 @@ bot:
server: server:
{ {
host = "memphis.ephasic.org"; host = "memphis.ephasic.org";
port = "6667"; port = "6697";
ssl = false; # ssl options
ssl = true;
ssl_module = "openssl";
ssl_verify = false; ssl_verify = false;
}; };