From 4d8bc89134c2b5e2fec10d1cfbcfe27473a15412 Mon Sep 17 00:00:00 2001 From: Nishi Date: Wed, 18 Sep 2024 09:19:03 +0000 Subject: [PATCH] add NO_SSL git-svn-id: file:///raid/svn-personal/tewi/trunk@43 8739d7e6-ffea-ec47-b151-bdff447c6205 --- Makefile | 10 +++++++--- Platform/win32.mk | 4 ++-- Platform/win64.mk | 4 ++-- Server/Makefile | 4 ++-- Server/http.c | 6 ++++++ Server/main.c | 8 ++++++++ Server/option.c | 31 +++++++++++++++++++++++++++++++ Server/server.c | 22 ++++++++++++++++++++++ Server/tw_http.h | 8 ++++++++ Server/tw_server.h | 12 ++++++++++++ config.h | 14 ++++++++++++++ 11 files changed, 114 insertions(+), 9 deletions(-) create mode 100644 Server/option.c create mode 100644 config.h diff --git a/Makefile b/Makefile index 9af3eba..3caeb4c 100644 --- a/Makefile +++ b/Makefile @@ -12,8 +12,11 @@ FLAGS = PWD=$(PWD) PLATFORM=$(PLATFORM) PREFIX=$(PREFIX) all: ./Server ./Module ./Manpage -./Server:: ./Common - $(MAKE) -C $@ $(FLAGS) +./Server/option: ./Server/option.c + cc -o $@ ./Server/option.c + +./Server:: ./Common ./Server/option + $(MAKE) -C $@ $(FLAGS) EXTOBJS=`./Server/option objs ../` EXTLIBS=`./Server/option libs ../` ./Module:: ./Common $(MAKE) -C $@ $(FLAGS) @@ -25,10 +28,11 @@ all: ./Server ./Module ./Manpage $(MAKE) -C $@ $(FLAGS) format: - clang-format --verbose -i `find ./Server ./Common ./Module "(" -name "*.c" -or -name "*.h" ")" -and -not -name "strptime.*"` + clang-format --verbose -i `find ./Server ./Common ./Module "(" -name "*.c" -or -name "*.h" ")" -and -not -name "strptime.*"` config.h clean: $(MAKE) -C ./Server $(FLAGS) clean $(MAKE) -C ./Module $(FLAGS) clean $(MAKE) -C ./Common $(FLAGS) clean $(MAKE) -C ./Manpage $(FLAGS) clean + rm -f ./Server/option diff --git a/Platform/win32.mk b/Platform/win32.mk index d7c96c0..2b0f554 100644 --- a/Platform/win32.mk +++ b/Platform/win32.mk @@ -4,8 +4,8 @@ PREFIX = C:/Tewi CC = i686-w64-mingw32-gcc AR = i686-w64-mingw32-ar -CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -I $(PWD)/openssl/include -fPIC -LDFLAGS = -L $(PWD)/openssl/lib32 +CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -fPIC +LDFLAGS = LIBS = -lws2_32 EXEC = .exe LIB = .dll diff --git a/Platform/win64.mk b/Platform/win64.mk index 304b0db..f3faf76 100644 --- a/Platform/win64.mk +++ b/Platform/win64.mk @@ -4,8 +4,8 @@ PREFIX = C:/Tewi CC = x86_64-w64-mingw32-gcc AR = x86_64-w64-mingw32-ar -CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -I $(PWD)/openssl/include -fPIC -LDFLAGS = -L $(PWD)/openssl/lib64 +CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -fPIC +LDFLAGS = LIBS = -lws2_32 EXEC = .exe LIB = .dll diff --git a/Server/Makefile b/Server/Makefile index 557460f..3bffd0f 100644 --- a/Server/Makefile +++ b/Server/Makefile @@ -5,12 +5,12 @@ include $(PWD)/Platform/$(PLATFORM).mk .PHONY: all clean .SUFFIXES: .c .o -OBJS = version.o main.o config.o server.o ssl.o http.o module.o strptime.o +OBJS = version.o main.o config.o server.o http.o module.o strptime.o $(EXTOBJS) all: tewi$(EXEC) tewi$(EXEC): $(OBJS) ../Common/common.a - $(CC) $(LDFLAGS) -o $@ $(OBJS) -lssl -lcrypto $(LIBS) ../Common/common.a + $(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTLIBS) $(LIBS) ../Common/common.a .c.o: $(CC) $(CFLAGS) -c -o $@ $< diff --git a/Server/http.c b/Server/http.c index aa39a21..fdfa00e 100644 --- a/Server/http.c +++ b/Server/http.c @@ -2,6 +2,8 @@ #define SOURCE +#include "../config.h" + #include "tw_http.h" #include "tw_server.h" @@ -59,14 +61,18 @@ int tw_http_parse(SSL* ssl, int sock, struct tw_http_request* req) { struct timeval tv; tv.tv_sec = 5; tv.tv_usec = 0; +#ifndef NO_SSL if(ssl == NULL || !SSL_has_pending(ssl)) { +#endif int n = select(FD_SETSIZE, &fds, NULL, NULL, &tv); if(n <= 0) { free(header); tw_free_request(req); return -1; } +#ifndef NO_SSL } +#endif int len = tw_read(ssl, sock, buffer, 512); if(len <= 0) break; int i; diff --git a/Server/main.c b/Server/main.c index 0208019..967b6f7 100644 --- a/Server/main.c +++ b/Server/main.c @@ -2,12 +2,16 @@ #define SOURCE +#include "../config.h" + #include #include #include #include +#ifndef NO_SSL #include +#endif #include @@ -28,7 +32,11 @@ int main(int argc, char** argv) { if(strcmp(argv[i], "--verbose") == 0 || strcmp(argv[i], "-v") == 0) { if(!cm_do_log) { cm_do_log = true; +#ifndef NO_SSL cm_log("", "This is Tewi HTTPd, version %s, using %s", tw_get_version(), OPENSSL_VERSION_TEXT); +#else + cm_log("", "This is Tewi HTTPd, version %s", tw_get_version()); +#endif } else { cm_do_log = true; } diff --git a/Server/option.c b/Server/option.c new file mode 100644 index 0000000..b756c58 --- /dev/null +++ b/Server/option.c @@ -0,0 +1,31 @@ +/* $Id$ */ +/* This file is not intended to be in the server. */ + +#include +#include + +#include "../config.h" + +int main(int argc, char** argv) { + if(argc < 3) { + return 1; + } + if(strcmp(argv[1], "cflags") == 0) { +#ifndef NO_SSL + printf("-I %s/openssl/include", argv[2]); +#endif + } else if(strcmp(argv[1], "ldflags") == 0) { +#ifndef NO_SSL + printf("-I %s/openssl/lib", argv[2]); +#endif + } else if(strcmp(argv[1], "objs") == 0) { +#ifndef NO_SSL + printf("ssl.o"); +#endif + } else if(strcmp(argv[1], "libs") == 0) { +#ifndef NO_SSL + printf("-lssl -lcrypto"); +#endif + } + printf("\n"); +} diff --git a/Server/server.c b/Server/server.c index ed6ee5b..367d3ac 100644 --- a/Server/server.c +++ b/Server/server.c @@ -2,9 +2,14 @@ #define SOURCE +#include "../config.h" + #include "tw_server.h" +#ifndef NO_SSL #include "tw_ssl.h" +#endif + #include "tw_config.h" #include "tw_http.h" #include "tw_module.h" @@ -14,6 +19,8 @@ #include #include #include +#include +#include #include #include @@ -142,19 +149,27 @@ int tw_server_init(void) { } size_t tw_read(SSL* ssl, int s, void* data, size_t len) { +#ifndef NO_SSL if(ssl == NULL) { return recv(s, data, len, 0); } else { return SSL_read(ssl, data, len); } +#else + return recv(s, data, len, 0); +#endif } size_t tw_write(SSL* ssl, int s, void* data, size_t len) { +#ifndef NO_SSL if(ssl == NULL) { return send(s, data, len, 0); } else { return SSL_write(ssl, data, len); } +#else + return send(s, data, len, 0); +#endif } #define ERROR_HTML \ @@ -388,6 +403,7 @@ void tw_server_pass(int sock, bool ssl, int port, SOCKADDR addr) { #endif char* name = config.hostname; +#ifndef NO_SSL SSL_CTX* ctx = NULL; SSL* s = NULL; bool sslworks = false; @@ -398,6 +414,9 @@ void tw_server_pass(int sock, bool ssl, int port, SOCKADDR addr) { if(SSL_accept(s) <= 0) goto cleanup; sslworks = true; } +#else + void* s = NULL; +#endif struct tw_http_request req; struct tw_http_response res; struct tw_tool tools; @@ -660,14 +679,17 @@ void tw_server_pass(int sock, bool ssl, int port, SOCKADDR addr) { tw_http_error(s, sock, 400, name, port); } cleanup: +#ifndef NO_SSL if(sslworks) { SSL_shutdown(s); } SSL_free(s); close_socket(sock); +#endif #ifdef __MINGW32__ _endthreadex(0); #endif + ; } void tw_server_loop(void) { diff --git a/Server/tw_http.h b/Server/tw_http.h index 32d8291..1a249b3 100644 --- a/Server/tw_http.h +++ b/Server/tw_http.h @@ -5,6 +5,8 @@ #include +#include "../config.h" + struct tw_http_request { char* method; char* path; @@ -21,9 +23,15 @@ struct tw_http_response { }; #ifdef SOURCE +#ifndef NO_SSL #include +#endif void tw_free_request(struct tw_http_request* req); +#ifndef NO_SSL int tw_http_parse(SSL* ssl, int sock, struct tw_http_request* req); +#else +int tw_http_parse(void* ssl, int sock, struct tw_http_request* req); +#endif #endif #endif diff --git a/Server/tw_server.h b/Server/tw_server.h index eecb72c..bf75fd2 100644 --- a/Server/tw_server.h +++ b/Server/tw_server.h @@ -3,11 +3,23 @@ #ifndef __TW_SERVER_H__ #define __TW_SERVER_H__ +#include "../config.h" + +#include + +#ifndef NO_SSL #include +#endif int tw_server_init(void); void tw_server_loop(void); + +#ifndef NO_SSL size_t tw_read(SSL* ssl, int s, void* data, size_t len); size_t tw_write(SSL* ssl, int s, void* data, size_t len); +#else +size_t tw_read(void* ssl, int s, void* data, size_t len); +size_t tw_write(void* ssl, int s, void* data, size_t len); +#endif #endif diff --git a/config.h b/config.h new file mode 100644 index 0000000..7d9d770 --- /dev/null +++ b/config.h @@ -0,0 +1,14 @@ +/* $Id$ */ + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#undef NO_SSL + +/* DO NOT EDIT BELOW THIS LINE */ + +#ifdef NO_SSL +#define SSL void +#endif + +#endif