From b5229cbf8e4be28593fe8c580b3a79bf2e451291 Mon Sep 17 00:00:00 2001 From: Nishi Date: Fri, 11 Oct 2024 19:44:34 +0000 Subject: [PATCH] format git-svn-id: file:///raid/svn-personal/rbuild/trunk@10 c68d3453-7f82-0740-9748-1d72386a946b --- .clang-format | 15 ++++ Client/main.c | 3 +- Common/cm_bool.h | 2 +- Makefile | 5 +- Server/auth.c | 183 ++++++++++++++++++++++++++++++++++++++--------- Server/config.c | 40 +++++------ Server/main.c | 28 ++++---- Server/server.c | 84 +++++++++++----------- 8 files changed, 246 insertions(+), 114 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..f09c9d2 --- /dev/null +++ b/.clang-format @@ -0,0 +1,15 @@ +--- +# $Id$ +Language: Cpp +UseTab: Always +TabWidth: 8 +IndentWidth: 8 +PointerAlignment: Left +ColumnLimit: 1024 +AllowShortIfStatementsOnASingleLine: Always +AllowShortBlocksOnASingleLine: Never +AllowShortLoopsOnASingleLine: true +SpaceBeforeParens: Never +AlignEscapedNewlines: DontAlign +SortIncludes: false +AllowShortEnumsOnASingleLine: false diff --git a/Client/main.c b/Client/main.c index 989daf6..db19da6 100644 --- a/Client/main.c +++ b/Client/main.c @@ -1,4 +1,3 @@ /* $Id$ */ -int main(){ -} +int main() {} diff --git a/Common/cm_bool.h b/Common/cm_bool.h index f5ee229..e1dccef 100644 --- a/Common/cm_bool.h +++ b/Common/cm_bool.h @@ -5,7 +5,7 @@ typedef unsigned char CMBOOL; -#define CMTRUE 1 +#define CMTRUE 1 #define CMFALSE 0 #endif diff --git a/Makefile b/Makefile index 6cd4790..062b73a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ PWD = `pwd` FLAGS = PWD=$(PWD) PLATFORM=$(PLATFORM) -.PHONY: all ./Common ./Server ./Client clean +.PHONY: all ./Common ./Server ./Client clean format all: ./Common ./Server ./Client @@ -22,3 +22,6 @@ clean: $(MAKE) -C ./Common clean $(FLAGS) $(MAKE) -C ./Server clean $(FLAGS) $(MAKE) -C ./Client clean $(FLAGS) + +format: + clang-format --verbose -i `find . -name "*.c" -or -name "*.h"` diff --git a/Server/auth.c b/Server/auth.c index b82ee7f..8c72e63 100644 --- a/Server/auth.c +++ b/Server/auth.c @@ -4,8 +4,11 @@ #include "rbs_config.h" +#include +#include #include #include +#include #include #include @@ -14,44 +17,154 @@ #include #endif +#ifdef HAS_CRYPT_AUTH +#ifdef __linux__ +#include +#endif +#endif + const char* rbs_pam_auth = #ifdef HAS_PAM_AUTH -"available" + "available" #else -"not available" + "not available" #endif -; + ; const char* rbs_plain_auth = #ifdef HAS_PLAIN_AUTH -"available" + "available" #else -"not available" + "not available" #endif -; + ; const char* rbs_crypt_auth = #ifdef HAS_CRYPT_AUTH -"available" + "available" #else -"not available" + "not available" #endif -; + ; const char* rbs_none_auth = #ifdef HAS_NONE_AUTH -"available" + "available" #else -"not available" + "not available" +#endif + ; + +#ifdef HAS_PLAIN_AUTH +CMBOOL rbs_auth_plain(const char* fn, const char* username, const char* password) { + FILE* f; + struct stat s; + char* buffer; + int i; + int incr = 0; + int state = CMFALSE; + if(fn == NULL) return CMFALSE; + f = fopen(fn, "r"); + if(f == NULL) return CMFALSE; + if(stat(fn, &s) != 0) { + fclose(f); + return CMFALSE; + } + + buffer = malloc(s.st_size + 1); + buffer[s.st_size] = 0; + + fread(buffer, 1, s.st_size, f); + for(i = 0;; i++) { + if(buffer[i] == 0 || buffer[i] == '\n') { + char oldc = buffer[i]; + char* line = buffer + incr; + buffer[i] = 0; + + if(strlen(line) > 0 && line[0] != '#') { + int j; + for(j = 0; line[j] != 0; j++) { + if(line[j] == ':') { + line[j] = 0; + if(strcmp(username, line) == 0 && strcmp(password, line + j + 1) == 0) { + state = CMTRUE; + } + break; + } + } + } + + incr = i + 1; + if(oldc == 0 || state) break; + } else if(buffer[i] == '\r') { + buffer[i] = 0; + } + } + + free(buffer); + fclose(f); + return state; +} +#endif + +#ifdef HAS_CRYPT_AUTH +CMBOOL rbs_auth_crypt(const char* fn, const char* username, const char* password) { + FILE* f; + struct stat s; + char* buffer; + int i; + int incr = 0; + int state = CMFALSE; + if(fn == NULL) return CMFALSE; + f = fopen(fn, "r"); + if(f == NULL) return CMFALSE; + if(stat(fn, &s) != 0) { + fclose(f); + return CMFALSE; + } + + buffer = malloc(s.st_size + 1); + buffer[s.st_size] = 0; + + fread(buffer, 1, s.st_size, f); + for(i = 0;; i++) { + if(buffer[i] == 0 || buffer[i] == '\n') { + char oldc = buffer[i]; + char* line = buffer + incr; + buffer[i] = 0; + + if(strlen(line) > 0 && line[0] != '#') { + int j; + for(j = 0; line[j] != 0; j++) { + if(line[j] == ':') { + line[j] = 0; + if(strcmp(username, line) == 0 && strcmp(crypt(password, line + j + 1), line + j + 1) == 0) { + state = CMTRUE; + } + break; + } + } + } + + incr = i + 1; + if(oldc == 0 || state) break; + } else if(buffer[i] == '\r') { + buffer[i] = 0; + } + } + + free(buffer); + fclose(f); + return state; +} #endif -; #ifdef HAS_PAM_AUTH -int rbs_pam_conv(int nmsg, const struct pam_message** msg, struct pam_response** resp, void* appdata){ +int rbs_pam_conv(int nmsg, const struct pam_message** msg, struct pam_response** resp, void* appdata) { int i; *resp = malloc(sizeof(**resp) * nmsg); - for(i = 0; i < nmsg; i++){ - if((*msg)[i].msg_style == PAM_PROMPT_ECHO_OFF || (*msg)[i].msg_style == PAM_PROMPT_ECHO_ON){ + for(i = 0; i < nmsg; i++) { + if((*msg)[i].msg_style == PAM_PROMPT_ECHO_OFF || (*msg)[i].msg_style == PAM_PROMPT_ECHO_ON) { (*resp)[i].resp = cm_strdup((const char*)appdata); (*resp)[i].resp_retcode = 0; } @@ -59,24 +172,21 @@ int rbs_pam_conv(int nmsg, const struct pam_message** msg, struct pam_response** return PAM_SUCCESS; } -CMBOOL rbs_auth_pam(const char* username, const char* password){ +CMBOOL rbs_auth_pam(const char* arg, const char* username, const char* password) { CMBOOL state = CMFALSE; struct pam_conv conv; pam_handle_t* pamh = NULL; int retval; conv.conv = rbs_pam_conv; conv.appdata_ptr = (void*)password; - retval = pam_start("rbuild", NULL, &conv, &pamh); - if(retval == PAM_SUCCESS){ - retval = pam_set_item(pamh, PAM_USER, username); - } - if(retval == PAM_SUCCESS){ + retval = pam_start(arg == NULL ? "rbuild" : arg, username, &conv, &pamh); + if(retval == PAM_SUCCESS) { retval = pam_authenticate(pamh, 0); } - if(retval == PAM_SUCCESS){ + if(retval == PAM_SUCCESS) { retval = pam_acct_mgmt(pamh, 0); } - if(retval == PAM_SUCCESS){ + if(retval == PAM_SUCCESS) { state = CMTRUE; } pam_end(pamh, retval); @@ -84,34 +194,39 @@ CMBOOL rbs_auth_pam(const char* username, const char* password){ } #endif -CMBOOL rbs_auth(const char* section, const char* username, const char* password){ +CMBOOL rbs_auth(const char* section, const char* username, const char* password) { char* auth = cm_strdup(rbs_config_get(section, "auth")); int i; char* arg = NULL; CMBOOL state = CMFALSE; - for(i = 0; auth[i] != 0; i++){ - if(auth[i] == ':'){ + for(i = 0; auth[i] != 0; i++) { + if(auth[i] == ':') { arg = auth + i + 1; auth[i] = 0; break; } } #ifdef HAS_NONE_AUTH - if(strcmp(auth, "none") == 0){ + if(strcmp(auth, "none") == 0) { state = CMTRUE; - }else + } else #endif #ifdef HAS_PAM_AUTH - if(strcmp(auth, "pam") == 0){ - state = rbs_auth_pam(username, password); - }else + if(strcmp(auth, "pam") == 0) { + state = rbs_auth_pam(arg, username, password); + } else #endif #ifdef HAS_PLAIN_AUTH - if(strcmp(auth, "plain") == 0 && arg != NULL){ + if(strcmp(auth, "plain") == 0) { state = rbs_auth_plain(arg, username, password); - }else + } else +#endif +#ifdef HAS_PLAIN_AUTH + if(strcmp(auth, "crypt") == 0) { + state = rbs_auth_crypt(arg, username, password); + } else #endif - if(1){ + if(1) { free(auth); return CMFALSE; } diff --git a/Server/config.c b/Server/config.c index b757eca..3d12529 100644 --- a/Server/config.c +++ b/Server/config.c @@ -17,11 +17,11 @@ int used_sections = -1; extern char* rbs_config; -void rbs_config_init(void){ +void rbs_config_init(void) { int i; - for(i = 0; i <= used_sections; i++){ + for(i = 0; i <= used_sections; i++) { int j; - for(j = 0; j < sections[i].used; j++){ + for(j = 0; j < sections[i].used; j++) { free(sections[i].attr[j].key); free(sections[i].attr[j].value); } @@ -30,12 +30,12 @@ void rbs_config_init(void){ used_sections = -1; } -char* rbs_config_get(const char* section, const char* key){ +char* rbs_config_get(const char* section, const char* key) { int i; - for(i = 0; i <= used_sections; i++){ - if(strcmp(sections[i].name, section) == 0){ + for(i = 0; i <= used_sections; i++) { + if(strcmp(sections[i].name, section) == 0) { int j; - for(j = 0; j < sections[i].used; j++){ + for(j = 0; j < sections[i].used; j++) { if(strcmp(sections[i].attr[j].key, key) == 0) return sections[i].attr[j].value; } } @@ -43,35 +43,35 @@ char* rbs_config_get(const char* section, const char* key){ return ""; } -CMBOOL rbs_config_parse(void){ +CMBOOL rbs_config_parse(void) { FILE* f = fopen(rbs_config, "r"); - if(f != NULL){ + if(f != NULL) { struct stat s; - if(stat(rbs_config, &s) == 0){ + if(stat(rbs_config, &s) == 0) { char* buf = malloc(s.st_size + 1); int i; int incr = 0; buf[s.st_size] = 0; fread(buf, 1, s.st_size, f); - for(i = 0;; i++){ - if(buf[i] == 0 || buf[i] == '\n'){ + for(i = 0;; i++) { + if(buf[i] == 0 || buf[i] == '\n') { char oldc = buf[i]; char* line; buf[i] = 0; line = buf + incr; - if(strlen(line) > 0 && line[0] != '#'){ - if(line[0] == '[' && line[strlen(line) - 1] == ']'){ + if(strlen(line) > 0 && line[0] != '#') { + if(line[0] == '[' && line[strlen(line) - 1] == ']') { line[strlen(line) - 1] = 0; used_sections++; sections[used_sections].name = cm_strdup(line + 1); sections[used_sections].used = 0; if(!run_inetd) printf("Adding section `%s'\n", line + 1); - }else if(used_sections == -1){ - }else{ + } else if(used_sections == -1) { + } else { int j; - for(j = 0; line[j] != 0; j++){ - if(line[j] == '='){ + for(j = 0; line[j] != 0; j++) { + if(line[j] == '=') { line[j] = 0; sections[used_sections].attr[sections[used_sections].used].key = cm_strdup(line); sections[used_sections].attr[sections[used_sections].used].value = cm_strdup(line + j + 1); @@ -85,7 +85,7 @@ CMBOOL rbs_config_parse(void){ incr = i + 1; if(oldc == 0) break; - }else if(buf[i] == '\r'){ + } else if(buf[i] == '\r') { buf[i] = 0; } } @@ -94,7 +94,7 @@ CMBOOL rbs_config_parse(void){ fclose(f); if(used_sections == -1) return CMFALSE; return CMTRUE; - }else{ + } else { fprintf(stderr, "Could not open the config\n"); return CMFALSE; } diff --git a/Server/main.c b/Server/main.c index 6f02e21..b41bb4c 100644 --- a/Server/main.c +++ b/Server/main.c @@ -18,23 +18,23 @@ 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 main(int argc, char** argv) { int i; CMBOOL dryrun = CMFALSE; - for(i = 1; i < argc; i++){ - if(argv[i][0] == '-'){ - if(strcmp(argv[i], "--inetd") == 0 || strcmp(argv[i], "-i") == 0){ + for(i = 1; i < argc; i++) { + if(argv[i][0] == '-') { + if(strcmp(argv[i], "--inetd") == 0 || strcmp(argv[i], "-i") == 0) { run_inetd = CMTRUE; - }else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0){ + } else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0) { i++; - if(argv[i] == NULL){ + if(argv[i] == NULL) { fprintf(stderr, "Missing argument\n"); return 1; } rbs_config = argv[i]; - }else if(strcmp(argv[i], "--dry-run") == 0 || strcmp(argv[i], "-d") == 0){ + } else if(strcmp(argv[i], "--dry-run") == 0 || strcmp(argv[i], "-d") == 0) { dryrun = CMTRUE; - }else if(strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-V") == 0){ + } 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); @@ -42,28 +42,28 @@ int main(int argc, char** argv){ printf("\tPlain : %s\n", rbs_plain_auth); printf("\tPAM : %s\n", rbs_pam_auth); return 0; - }else{ + } else { fprintf(stderr, "Unknown option: %s\n", argv[i]); return 1; } - }else{ + } else { } } - if(rbs_config == NULL){ + if(rbs_config == NULL) { fprintf(stderr, "Config is required\n"); return 1; } rbs_config_init(); - if(!rbs_config_parse()){ + if(!rbs_config_parse()) { fprintf(stderr, "Failed to parse config\n"); return 1; } if(dryrun) return 0; - if(!rbs_server_init()){ + if(!rbs_server_init()) { fprintf(stderr, "Failed to initialize\n"); return 1; } - if(!rbs_server_loop()){ + if(!rbs_server_loop()) { return 1; } return 0; diff --git a/Server/server.c b/Server/server.c index ea9c36e..cddfed4 100644 --- a/Server/server.c +++ b/Server/server.c @@ -32,11 +32,11 @@ CMBOOL run_inetd = CMFALSE; int server_socket; int port = 7980; -CMBOOL rbs_server_init(void){ +CMBOOL rbs_server_init(void) { ready = cm_strdup(RBUILD_VERSION); - if(run_inetd){ + if(run_inetd) { return CMTRUE; - }else{ + } else { struct sockaddr_in server_address; int yes = 1; #ifdef WINSOCK @@ -49,7 +49,7 @@ CMBOOL rbs_server_init(void){ #else if(server_socket < 0) return CMFALSE; #endif - if(setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(yes)) < 0){ + if(setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(yes)) < 0) { close(server_socket); return CMFALSE; } @@ -57,12 +57,12 @@ CMBOOL rbs_server_init(void){ server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = INADDR_ANY; server_address.sin_port = htons(port); - if(bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0){ + if(bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) { close(server_socket); fprintf(stderr, "Bind fail\n"); return CMFALSE; } - if(listen(server_socket, 128) < 0){ + if(listen(server_socket, 128) < 0) { close(server_socket); fprintf(stderr, "Listen fail\n"); return CMFALSE; @@ -72,16 +72,16 @@ CMBOOL rbs_server_init(void){ } } -void rbs_write(int sock, unsigned char* data, unsigned int size){ - if(run_inetd){ +void rbs_write(int sock, unsigned char* data, unsigned int size) { + if(run_inetd) { fwrite(data, 1, size, stdout); fflush(stdout); - }else{ + } else { send(sock, data, size, 0); } } -void rbs_close(int sock){ +void rbs_close(int sock) { #ifdef WINSOCK closesocket(sock); #else @@ -89,12 +89,12 @@ void rbs_close(int sock){ #endif } -char* rbs_readline(int sock){ +char* rbs_readline(int sock) { char cbuf[2]; char* line; cbuf[1] = 0; line = cm_strdup(""); - do{ + do { fd_set rfds; struct timeval tv; int ret; @@ -105,31 +105,31 @@ char* rbs_readline(int sock){ tv.tv_usec = 0; ret = select(FD_SETSIZE, &rfds, NULL, NULL, &tv); - if(ret <= 0){ + if(ret <= 0) { free(line); return NULL; } - if(run_inetd){ + if(run_inetd) { fread(cbuf, 1, 1, stdin); - }else{ + } else { recv(sock, cbuf, 1, 0); } - if(cbuf[0] != '\n' && cbuf[0] != '\r'){ + if(cbuf[0] != '\n' && cbuf[0] != '\r') { char* tmp = line; line = cm_strcat(tmp, cbuf); free(tmp); } - }while(cbuf[0] != '\n'); + } while(cbuf[0] != '\n'); return line; } -void rbs_server_handler(void* sockptr){ +void rbs_server_handler(void* sockptr) { int sock = 0; char* user = NULL; char* pass = NULL; char* section = NULL; CMBOOL authed = CMFALSE; - if(sockptr != NULL){ + if(sockptr != NULL) { sock = *(int*)sockptr; free(sockptr); } @@ -137,7 +137,7 @@ void rbs_server_handler(void* sockptr){ rbs_write(sock, ready, strlen(ready)); rbs_write(sock, "\n", 1); - while(1){ + while(1) { fd_set rfds; struct timeval tv; int ret; @@ -149,55 +149,55 @@ void rbs_server_handler(void* sockptr){ ret = select(FD_SETSIZE, &rfds, NULL, NULL, &tv); - if(ret < 0){ + if(ret < 0) { break; - }else if(ret == 0){ + } else if(ret == 0) { break; - }else{ + } else { char* line = rbs_readline(sock); int i; char* arg = NULL; char* cmd = line; - if(line == NULL){ + if(line == NULL) { break; } - for(i = 0; line[i] != 0; i++){ - if(line[i] == ' '){ + for(i = 0; line[i] != 0; i++) { + if(line[i] == ' ') { line[i] = 0; arg = line + i + 1; break; } } - if(strcmp(cmd, "QUIT") == 0){ + if(strcmp(cmd, "QUIT") == 0) { free(line); break; - }else if(strcmp(cmd, "SECTION") == 0 && arg != NULL){ - if(strcmp(rbs_config_get(arg, "auth"), "") == 0 || section != NULL){ + } else if(strcmp(cmd, "SECTION") == 0 && arg != NULL) { + if(strcmp(rbs_config_get(arg, "auth"), "") == 0 || section != NULL) { free(line); break; } section = cm_strdup(arg); - }else if(strcmp(cmd, "USER") == 0 && arg != NULL){ - if(section == NULL || user != NULL){ + } else if(strcmp(cmd, "USER") == 0 && arg != NULL) { + if(section == NULL || user != NULL) { free(line); break; } user = cm_strdup(arg); - }else if(strcmp(cmd, "PASS") == 0 && arg != NULL){ - if(user == NULL || pass != NULL){ + } else if(strcmp(cmd, "PASS") == 0 && arg != NULL) { + if(user == NULL || pass != NULL) { free(line); break; } pass = cm_strdup(arg); - if(rbs_auth(section, user, pass)){ + if(rbs_auth(section, user, pass)) { rbs_write(sock, "SUCCESS\n", 8); authed = CMTRUE; - }else{ + } else { rbs_write(sock, "FAIL\n", 5); free(line); break; } - }else{ + } else { free(line); break; } @@ -211,15 +211,15 @@ void rbs_server_handler(void* sockptr){ #endif } -CMBOOL rbs_server_loop(void){ - if(run_inetd){ +CMBOOL rbs_server_loop(void) { + if(run_inetd) { setvbuf(stdin, NULL, _IONBF, 0); rbs_server_handler(NULL); - }else{ + } else { #ifndef WINSOCK signal(SIGCHLD, SIG_IGN); #endif - while(1){ + while(1) { struct sockaddr_in claddr; int clen = sizeof(claddr); int sock = accept(server_socket, (struct sockaddr*)&claddr, &clen); @@ -229,12 +229,12 @@ CMBOOL rbs_server_loop(void){ _beginthread(rbs_server_handler, 0, sockptr); #else pid_t p = fork(); - if(p == 0){ + if(p == 0) { int* sockptr = malloc(sizeof(*sockptr)); *sockptr = sock; rbs_server_handler(sockptr); _exit(0); - }else{ + } else { rbs_close(sock); } #endif -- 2.45.2