From 6f5a991d81971b9c7120695d9d878a773a8f102d Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 14 Oct 2012 22:22:38 +0000 Subject: [PATCH] Moving OpenSSL support to a separate folder (should fix embedded builds) --- Makefile | 1 - data/libApp.pc.in | 2 +- src/transport/Makefile | 17 +-- src/transport/openssl.c | 209 ------------------------------------- src/transport/project.conf | 10 +- 5 files changed, 4 insertions(+), 235 deletions(-) delete mode 100644 src/transport/openssl.c diff --git a/Makefile b/Makefile index faf75ce..339b413 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,6 @@ dist: $(PACKAGE)-$(VERSION)/src/apptransport.h \ $(PACKAGE)-$(VERSION)/src/common.h \ $(PACKAGE)-$(VERSION)/src/project.conf \ - $(PACKAGE)-$(VERSION)/src/transport/openssl.c \ $(PACKAGE)-$(VERSION)/src/transport/tcp.c \ $(PACKAGE)-$(VERSION)/src/transport/udp.c \ $(PACKAGE)-$(VERSION)/src/transport/project.conf \ diff --git a/data/libApp.pc.in b/data/libApp.pc.in index 4e0b8b9..7fb1f3a 100644 --- a/data/libApp.pc.in +++ b/data/libApp.pc.in @@ -1,5 +1,5 @@ prefix=@PREFIX@ -includedir=${prefix}/include +includedir=${prefix}/include/System exec_prefix=${prefix} libdir=${exec_prefix}/lib diff --git a/src/transport/Makefile b/src/transport/Makefile index f500d63..70b972a 100644 --- a/src/transport/Makefile +++ b/src/transport/Makefile @@ -1,4 +1,4 @@ -TARGETS = openssl.so tcp.so udp.so +TARGETS = tcp.so udp.so PREFIX = /usr/local DESTDIR = LIBDIR = $(PREFIX)/lib @@ -18,13 +18,6 @@ INSTALL ?= install all: $(TARGETS) -openssl_OBJS = openssl.o -openssl_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) -openssl_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) - -openssl.so: $(openssl_OBJS) - $(CCSHARED) -o openssl.so $(openssl_OBJS) $(openssl_LDFLAGS) - tcp_OBJS = tcp.o tcp_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) tcp_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) @@ -39,9 +32,6 @@ udp_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) udp.so: $(udp_OBJS) $(CCSHARED) -o udp.so $(udp_OBJS) $(udp_LDFLAGS) -openssl.o: openssl.c ../../config.h - $(CC) $(openssl_CFLAGS) -c openssl.c - tcp.o: tcp.c $(CC) $(tcp_CFLAGS) -c tcp.c @@ -49,21 +39,18 @@ udp.o: udp.c $(CC) $(udp_CFLAGS) -c udp.c clean: - $(RM) -- $(openssl_OBJS) $(tcp_OBJS) $(udp_OBJS) + $(RM) -- $(tcp_OBJS) $(udp_OBJS) distclean: clean $(RM) -- $(TARGETS) install: $(TARGETS) - $(MKDIR) $(DESTDIR)$(LIBDIR)/App/transport - $(INSTALL) -m 0644 -- openssl.so $(DESTDIR)$(LIBDIR)/App/transport/openssl.so $(MKDIR) $(DESTDIR)$(LIBDIR)/App/transport $(INSTALL) -m 0644 -- tcp.so $(DESTDIR)$(LIBDIR)/App/transport/tcp.so $(MKDIR) $(DESTDIR)$(LIBDIR)/App/transport $(INSTALL) -m 0644 -- udp.so $(DESTDIR)$(LIBDIR)/App/transport/udp.so uninstall: - $(RM) -- $(DESTDIR)$(LIBDIR)/App/transport/openssl.so $(RM) -- $(DESTDIR)$(LIBDIR)/App/transport/tcp.so $(RM) -- $(DESTDIR)$(LIBDIR)/App/transport/udp.so diff --git a/src/transport/openssl.c b/src/transport/openssl.c deleted file mode 100644 index d28953a..0000000 --- a/src/transport/openssl.c +++ /dev/null @@ -1,209 +0,0 @@ -/* $Id$ */ -/* Copyright (c) 2012 Pierre Pronchery */ -/* This file is part of DeforaOS System libApp */ -/* This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include "App/apptransport.h" -#include "../../config.h" - -#ifndef PREFIX -# define PREFIX "/usr/local" -#endif -#ifndef SYSCONFDIR -# define SYSCONFDIR PREFIX "/etc" -#endif - - -/* OpenSSL */ -/* private */ -/* types */ -typedef struct _AppTransportPlugin OpenSSL; - -struct _AppTransportPlugin -{ - AppTransportPluginHelper * helper; - int fd; - SSL_CTX * ssl_ctx; - /* client */ - SSL * ssl; -}; - - -/* protected */ -/* prototypes */ -/* plug-in */ -static OpenSSL * _openssl_init(AppTransportPluginHelper * helper, - AppTransportMode mode, char const * name); -static void _openssl_destroy(OpenSSL * openssl); - - -/* private */ -/* prototypes */ -static int _openssl_error(char const * message, int code); -static int _openssl_error_ssl(int code); - -/* callbacks */ -static int _openssl_callback_accept(int fd, OpenSSL * openssl); - - -/* public */ -/* constants */ -/* plug-in */ -AppTransportPluginDefinition definition = -{ - "OpenSSL", - NULL, - _openssl_init, - _openssl_destroy, - NULL -}; - - -/* protected */ -/* functions */ -/* plug-in */ -/* openssl_init */ -static int _init_client(OpenSSL * openssl, char const * name); -static int _init_server(OpenSSL * openssl, char const * name); - -static OpenSSL * _openssl_init(AppTransportPluginHelper * helper, - AppTransportMode mode, char const * name) -{ - OpenSSL * openssl; - int res = -1; - - if((openssl = object_new(sizeof(*openssl))) == NULL) - return NULL; - openssl->helper = helper; - openssl->fd = -1; - openssl->ssl_ctx = NULL; - openssl->ssl = NULL; - switch(mode) - { - case ATM_CLIENT: - res = _init_client(openssl, name); - break; - case ATM_SERVER: - res = _init_server(openssl, name); - break; - } - /* check for errors */ - if(res != 0) - { - _openssl_destroy(openssl); - return NULL; - } - return openssl; -} - -static int _init_client(OpenSSL * openssl, char const * name) -{ - if((openssl->ssl_ctx = SSL_CTX_new(SSLv3_client_method())) == NULL - || SSL_CTX_set_cipher_list(openssl->ssl_ctx, - SSL_DEFAULT_CIPHER_LIST) != 1 - || (openssl->ssl = SSL_new(openssl->ssl_ctx)) == NULL) - return -_openssl_error_ssl(1); - if((openssl->fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) - return -_openssl_error("socket", 1); - /* FIXME implement the rest */ - return 0; -} - -static int _init_server(OpenSSL * openssl, char const * name) -{ - String * crt; - struct sockaddr_in sa; - - if((crt = string_new_append(SYSCONFDIR, "/AppServer/", name, ".crt")) - == NULL) - return -1; - 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) - { - string_delete(crt); - return -_openssl_error_ssl(1); - } - string_delete(crt); - if((openssl->fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) - return -_openssl_error("socket", 1); - sa.sin_family = AF_INET; - sa.sin_port = htons(4242); /* XXX hard-coded */ - sa.sin_addr.s_addr = htonl(INADDR_ANY); - if(bind(openssl->fd, (struct sockaddr *)&sa, sizeof(sa)) != 0) - return -_openssl_error("bind", 1); - if(listen(openssl->fd, 5) != 0) - return -_openssl_error("listen", 1); - event_register_io_read(openssl->helper->event, openssl->fd, - (EventIOFunc)_openssl_callback_accept, openssl); - return 0; -} - -/* openssl_destroy */ -static void _openssl_destroy(OpenSSL * openssl) -{ - if(openssl->ssl != NULL) - SSL_free(openssl->ssl); - if(openssl->fd != -1) - close(openssl->fd); - if(openssl->ssl_ctx != NULL) - SSL_CTX_free(openssl->ssl_ctx); - object_delete(openssl); -} - - -/* private */ -/* functions */ -/* openssl_error */ -static int _openssl_error(char const * message, int code) -{ - return error_set_code(code, "%s%s%s", (message != NULL) ? message : "", - (message != NULL) ? ": " : "", strerror(errno)); -} - - -/* openssl_error_ssl */ -static int _openssl_error_ssl(int code) -{ - return error_set_code(code, "%s", ERR_error_string(ERR_get_error(), - NULL)); -} - - -/* callbacks */ -static int _openssl_callback_accept(int fd, OpenSSL * openssl) -{ - struct sockaddr_in sa; - socklen_t sa_size = sizeof(sa); - int newfd; - - if((newfd = accept(fd, (struct sockaddr *)&sa, &sa_size)) < 0) - return error_set_code(1, "%s%s", "accept: ", strerror(errno)); - /* FIXME really implement */ - close(newfd); - return 0; -} diff --git a/src/transport/project.conf b/src/transport/project.conf index 846b934..a6f04b6 100644 --- a/src/transport/project.conf +++ b/src/transport/project.conf @@ -1,16 +1,8 @@ -targets=openssl,tcp,udp +targets=tcp,udp cppflags=-I ../../include cflags_force=-W cflags=-Wall -g -O2 -pedantic -fPIC -[openssl] -type=plugin -sources=openssl.c -install=$(LIBDIR)/App/transport - -[openssl.c] -depends=../../config.h - [tcp] type=plugin sources=tcp.c