Migrating OpenSSL support into its dedicated module
This commit is contained in:
parent
c488b89414
commit
68e062ff80
|
@ -39,7 +39,7 @@ udp_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
udp.so: $(udp_OBJS)
|
udp.so: $(udp_OBJS)
|
||||||
$(CCSHARED) -o udp.so $(udp_OBJS) $(udp_LDFLAGS)
|
$(CCSHARED) -o udp.so $(udp_OBJS) $(udp_LDFLAGS)
|
||||||
|
|
||||||
openssl.o: openssl.c
|
openssl.o: openssl.c ../../config.h
|
||||||
$(CC) $(openssl_CFLAGS) -c openssl.c
|
$(CC) $(openssl_CFLAGS) -c openssl.c
|
||||||
|
|
||||||
tcp.o: tcp.c
|
tcp.o: tcp.c
|
||||||
|
|
|
@ -15,8 +15,19 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
#include <System.h>
|
#include <System.h>
|
||||||
|
#include <openssl/ssl.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
#include "App/apptransport.h"
|
#include "App/apptransport.h"
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#ifndef PREFIX
|
||||||
|
# define PREFIX "/usr/local"
|
||||||
|
#endif
|
||||||
|
#ifndef SYSCONFDIR
|
||||||
|
# define SYSCONFDIR PREFIX "/etc"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* OpenSSL */
|
/* OpenSSL */
|
||||||
|
@ -28,6 +39,7 @@ struct _AppTransportPlugin
|
||||||
{
|
{
|
||||||
AppTransportPluginHelper * helper;
|
AppTransportPluginHelper * helper;
|
||||||
int fd;
|
int fd;
|
||||||
|
SSL_CTX * ssl_ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,6 +51,11 @@ static OpenSSL * _openssl_init(AppTransportPluginHelper * helper,
|
||||||
static void _openssl_destroy(OpenSSL * openssl);
|
static void _openssl_destroy(OpenSSL * openssl);
|
||||||
|
|
||||||
|
|
||||||
|
/* private */
|
||||||
|
/* prototypes */
|
||||||
|
static void _openssl_error(void);
|
||||||
|
|
||||||
|
|
||||||
/* public */
|
/* public */
|
||||||
/* constants */
|
/* constants */
|
||||||
/* plug-in */
|
/* plug-in */
|
||||||
|
@ -56,6 +73,8 @@ AppTransportPluginDefinition definition =
|
||||||
/* functions */
|
/* functions */
|
||||||
/* plug-in */
|
/* plug-in */
|
||||||
/* openssl_init */
|
/* openssl_init */
|
||||||
|
static void _init_server(OpenSSL * openssl, char const * name);
|
||||||
|
|
||||||
static OpenSSL * _openssl_init(AppTransportPluginHelper * helper,
|
static OpenSSL * _openssl_init(AppTransportPluginHelper * helper,
|
||||||
AppTransportMode mode, char const * name)
|
AppTransportMode mode, char const * name)
|
||||||
{
|
{
|
||||||
|
@ -65,14 +84,62 @@ static OpenSSL * _openssl_init(AppTransportPluginHelper * helper,
|
||||||
return NULL;
|
return NULL;
|
||||||
openssl->helper = helper;
|
openssl->helper = helper;
|
||||||
openssl->fd = -1;
|
openssl->fd = -1;
|
||||||
/* FIXME really implement */
|
openssl->ssl_ctx = NULL;
|
||||||
|
switch(mode)
|
||||||
|
{
|
||||||
|
case ATM_SERVER:
|
||||||
|
_init_server(openssl, name);
|
||||||
|
break;
|
||||||
|
/* FIXME implement the rest */
|
||||||
|
}
|
||||||
|
/* check for errors */
|
||||||
|
if(openssl->ssl_ctx == NULL)
|
||||||
|
{
|
||||||
|
_openssl_destroy(openssl);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return openssl;
|
return openssl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _init_server(OpenSSL * openssl, char const * name)
|
||||||
|
{
|
||||||
|
String * crt;
|
||||||
|
|
||||||
|
if((crt = string_new_append(SYSCONFDIR, "/AppServer/", name, ".crt"))
|
||||||
|
== NULL)
|
||||||
|
return;
|
||||||
|
if((openssl->ssl_ctx = SSL_CTX_new(SSLv3_server_method())) == NULL
|
||||||
|
|| SSL_CTX_set_cipher_list(openssl->ssl_ctx,
|
||||||
|
SSL_DEFAULT_CIPHER_LIST) != 1
|
||||||
|
|| SSL_CTX_use_certificate_file(openssl->ssl_ctx, crt,
|
||||||
|
SSL_FILETYPE_PEM) == 0
|
||||||
|
|| SSL_CTX_use_PrivateKey_file(openssl->ssl_ctx, crt,
|
||||||
|
SSL_FILETYPE_PEM) == 0)
|
||||||
|
{
|
||||||
|
_openssl_error();
|
||||||
|
string_delete(crt);
|
||||||
|
if(openssl->ssl_ctx != NULL)
|
||||||
|
SSL_CTX_free(openssl->ssl_ctx);
|
||||||
|
openssl->ssl_ctx = NULL;
|
||||||
|
}
|
||||||
|
string_delete(crt);
|
||||||
|
}
|
||||||
|
|
||||||
/* openssl_destroy */
|
/* openssl_destroy */
|
||||||
static void _openssl_destroy(OpenSSL * openssl)
|
static void _openssl_destroy(OpenSSL * openssl)
|
||||||
{
|
{
|
||||||
/* FIXME really implement */
|
if(openssl->fd != -1)
|
||||||
|
close(openssl->fd);
|
||||||
|
if(openssl->ssl_ctx != NULL)
|
||||||
|
SSL_CTX_free(openssl->ssl_ctx);
|
||||||
object_delete(openssl);
|
object_delete(openssl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* private */
|
||||||
|
/* functions */
|
||||||
|
/* openssl_error */
|
||||||
|
static void _openssl_error(void)
|
||||||
|
{
|
||||||
|
error_set("%s", ERR_error_string(ERR_get_error(), NULL));
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,9 @@ type=plugin
|
||||||
sources=openssl.c
|
sources=openssl.c
|
||||||
install=$(LIBDIR)/App/transport
|
install=$(LIBDIR)/App/transport
|
||||||
|
|
||||||
|
[openssl.c]
|
||||||
|
depends=../../config.h
|
||||||
|
|
||||||
[tcp]
|
[tcp]
|
||||||
type=plugin
|
type=plugin
|
||||||
sources=tcp.c
|
sources=tcp.c
|
||||||
|
|
Loading…
Reference in New Issue
Block a user