From: Nishi Date: Fri, 11 Oct 2024 16:38:06 +0000 (+0000) Subject: adding config parser X-Git-Url: https://git.chaotic.ninja/gitweb/nishi/?a=commitdiff_plain;h=d7fc87cc82d50d4243bd96e1de5665df04255ede;p=rbuild.git adding config parser git-svn-id: file:///raid/svn-personal/rbuild/trunk@7 c68d3453-7f82-0740-9748-1d72386a946b --- diff --git a/Platform/generic.mk b/Platform/generic.mk index d4470ef..9f8a832 100644 --- a/Platform/generic.mk +++ b/Platform/generic.mk @@ -2,7 +2,7 @@ CC = cc AR = ar -CFLAGS = -I $(PWD)/Common +CFLAGS = -I $(PWD)/Common -DHAS_PLAIN_AUTH -DHAS_NONE_AUTH LDFLAGS = LIBS = EXEC = diff --git a/Platform/netbsd.mk b/Platform/netbsd.mk new file mode 100644 index 0000000..79a0c95 --- /dev/null +++ b/Platform/netbsd.mk @@ -0,0 +1,8 @@ +# $Id$ + +CC = cc +AR = ar +CFLAGS = -I $(PWD)/Common -DHAS_PLAIN_AUTH -DHAS_NONE_AUTH -DHAS_PAM_AUTH -DHAS_CRYPT_AUTH +LDFLAGS = +LIBS = -lcrypt -lpam +EXEC = diff --git a/Platform/win32.mk b/Platform/win32.mk index 629662a..879febd 100644 --- a/Platform/win32.mk +++ b/Platform/win32.mk @@ -2,7 +2,7 @@ CC = i686-w64-mingw32-gcc AR = i686-w64-mingw32-ar -CFLAGS = -I $(PWD)/Common +CFLAGS = -I $(PWD)/Common -DHAS_PLAIN_AUTH -DHAS_NONE_AUTH LDFLAGS = LIBS = -lws2_32 EXEC = .exe diff --git a/Platform/win64.mk b/Platform/win64.mk index 2e9a91d..6df6dbd 100644 --- a/Platform/win64.mk +++ b/Platform/win64.mk @@ -2,7 +2,7 @@ CC = x86_64-w64-mingw32-gcc AR = x86_64-w64-mingw32-ar -CFLAGS = -I $(PWD)/Common +CFLAGS = -I $(PWD)/Common -DHAS_PLAIN_AUTH -DHAS_NONE_AUTH LDFLAGS = LIBS = -lws2_32 EXEC = .exe diff --git a/Server/Makefile b/Server/Makefile index 10de383..807a9f7 100644 --- a/Server/Makefile +++ b/Server/Makefile @@ -5,7 +5,7 @@ include $(PWD)/Platform/$(PLATFORM).mk .PHONY: all clean .SUFFIXES: .c .o -OBJS = main.o server.o +OBJS = main.o server.o auth.o config.o OBJS += ../Common/common.a all: rbuild-server$(EXEC) diff --git a/Server/auth.c b/Server/auth.c new file mode 100644 index 0000000..c196dcb --- /dev/null +++ b/Server/auth.c @@ -0,0 +1,39 @@ +/* $Id$ */ + +#include "rbs_auth.h" + +#ifdef HAS_PAM_AUTH +#include +#endif + +const char* rbs_pam_auth = +#ifdef HAS_PAM_AUTH +"available" +#else +"not available" +#endif +; + +const char* rbs_plain_auth = +#ifdef HAS_PLAIN_AUTH +"available" +#else +"not available" +#endif +; + +const char* rbs_crypt_auth = +#ifdef HAS_CRYPT_AUTH +"available" +#else +"not available" +#endif +; + +const char* rbs_none_auth = +#ifdef HAS_NONE_AUTH +"available" +#else +"not available" +#endif +; diff --git a/Server/config.c b/Server/config.c new file mode 100644 index 0000000..cbf772c --- /dev/null +++ b/Server/config.c @@ -0,0 +1,23 @@ +/* $Id$ */ + +#include "rbs_config.h" + +#include + +#include + +extern char* rbs_config; + +void rbs_config_init(void){ +} + +CMBOOL rbs_config_parse(void){ + FILE* f = fopen(rbs_config, "r"); + if(f != NULL){ + fclose(f); + return CMTRUE; + }else{ + fprintf(stderr, "Could not open the config\n"); + return CMFALSE; + } +} diff --git a/Server/main.c b/Server/main.c index 50ce894..0a38e6a 100644 --- a/Server/main.c +++ b/Server/main.c @@ -1,14 +1,23 @@ /* $Id$ */ +#include "../config.h" + #include #include #include "rbs_server.h" +#include "rbs_config.h" #include extern CMBOOL run_inetd; +char* rbs_config = NULL; +extern const char* rbs_none_auth; +extern const char* rbs_crypt_auth; +extern const char* rbs_plain_auth; +extern const char* rbs_pam_auth; + int main(int argc, char** argv){ int i; for(i = 1; i < argc; i++){ @@ -21,6 +30,15 @@ int main(int argc, char** argv){ fprintf(stderr, "Missing argument\n"); return 1; } + rbs_config = argv[i]; + }else if(strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-V") == 0){ + printf("rbuild-server version %s\n", RBUILD_VERSION); + printf("Authentication methods:\n"); + printf("\tNone : %s\n", rbs_none_auth); + printf("\tCrypt : %s\n", rbs_crypt_auth); + printf("\tPlain : %s\n", rbs_plain_auth); + printf("\tPAM : %s\n", rbs_pam_auth); + return 0; }else{ fprintf(stderr, "Unknown option: %s\n", argv[i]); return 1; @@ -28,6 +46,15 @@ int main(int argc, char** argv){ }else{ } } + if(rbs_config == NULL){ + fprintf(stderr, "Config is required\n"); + return 1; + } + rbs_config_init(); + if(!rbs_config_parse()){ + fprintf(stderr, "Failed to parse config\n"); + return 1; + } if(!rbs_server_init()){ fprintf(stderr, "Failed to initialize\n"); return 1; diff --git a/Server/rbs_auth.h b/Server/rbs_auth.h new file mode 100644 index 0000000..e811914 --- /dev/null +++ b/Server/rbs_auth.h @@ -0,0 +1,6 @@ +/* $Id$ */ + +#ifndef __RBS_AUTH_H__ +#define __RBS_AUTH_H__ + +#endif diff --git a/Server/rbs_config.h b/Server/rbs_config.h new file mode 100644 index 0000000..538601b --- /dev/null +++ b/Server/rbs_config.h @@ -0,0 +1,11 @@ +/* $Id$ */ + +#ifndef __RBS_CONFIG_H__ +#define __RBS_CONFIG_H__ + +#include + +void rbs_config_init(void); +CMBOOL rbs_config_parse(void); + +#endif diff --git a/Server/server.c b/Server/server.c index 8a56461..6ce96c4 100644 --- a/Server/server.c +++ b/Server/server.c @@ -1,6 +1,9 @@ /* $Id$ */ +#include "../config.h" + #include "rbs_server.h" +#include "rbs_auth.h" #include #include @@ -17,10 +20,13 @@ #include #include #include +#include #endif +#include #include +char* ready; CMBOOL run_inetd = CMFALSE; int server_socket; int port = 7980; @@ -87,7 +93,30 @@ void rbs_server_handler(void* sockptr){ sock = *(int*)sockptr; free(sockptr); } - rbs_write(sock, "Hello\n", 6); + rbs_write(sock, "READY ", 6); + rbs_write(sock, ready, strlen(ready)); + rbs_write(sock, "\n", 1); + + while(1){ + fd_set rfds; + struct timeval tv; + int ret; + + FD_ZERO(&rfds); + FD_SET(sock, &rfds); + tv.tv_sec = 5; + tv.tv_usec = 0; + + ret = select(1, &rfds, NULL, NULL, &tv); + + if(ret < 0){ + break; + }else if(ret == 0){ + rbs_write(sock, "TIMEOUT\n", 8); + break; + }else{ + } + } rbs_close(sock); #ifdef WINSOCK @@ -99,6 +128,7 @@ CMBOOL rbs_server_loop(void){ if(run_inetd){ rbs_server_handler(NULL); }else{ + ready = cm_strdup(RBUILD_VERSION); #ifndef WINSOCK signal(SIGCHLD, SIG_IGN); #endif