added whitelist - fiche - A pastebin adjusted for gopher use | |
git clone git://vernunftzentrum.de/fiche.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 0eedbf68c00f142e8db1d438bf506a6af37d3010 | |
parent d1a66efe6e498d93f7319a2cea8071a340c756d1 | |
Author: solusipse <[email protected]> | |
Date: Sat, 14 Sep 2013 00:17:26 +0200 | |
added whitelist | |
Diffstat: | |
fiche.c | 35 +++++++++++++++++++++++++------- | |
fiche.h | 4 +++- | |
2 files changed, 31 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/fiche.c b/fiche.c | |
@@ -60,7 +60,18 @@ void *thread_connection(void *args) | |
bzero(buffer, BUFSIZE); | |
int status = recv(connection_socket, buffer, BUFSIZE, MSG_WAITALL); | |
- if (BANLIST != NULL) | |
+ if (WHITELIST != NULL) | |
+ if (check_whitelist(data.ip_address) == NULL) | |
+ { | |
+ printf("Rejected connection from unknown user.\n"); | |
+ display_line(); | |
+ save_log(NULL, data.ip_address, data.hostname); | |
+ write(connection_socket, "You are not whitelisted!\n", 17); | |
+ close(connection_socket); | |
+ pthread_exit(NULL); | |
+ } | |
+ | |
+ if ((BANLIST != NULL)) | |
if (check_banlist(data.ip_address) != NULL) | |
{ | |
printf("Rejected connection from banned user.\n"); | |
@@ -177,11 +188,17 @@ void save_log(char *slug, char *hostaddrp, char *h_name) | |
char *check_banlist(char *ip_address) | |
{ | |
- load_banlist(BANFILE); | |
+ load_list(BANFILE, 0); | |
return strstr(BANLIST, ip_address); | |
} | |
-void load_banlist(char *file_path) | |
+char *check_whitelist(char *ip_address) | |
+{ | |
+ load_list(WHITEFILE, 1); | |
+ return strstr(WHITELIST, ip_address); | |
+} | |
+ | |
+void load_list(char *file_path, int type) | |
{ | |
FILE *fp = fopen(file_path, "r"); | |
fseek(fp, 0, SEEK_END); | |
@@ -189,12 +206,15 @@ void load_banlist(char *file_path) | |
fseek(fp, 0, SEEK_SET); | |
char *buffer = malloc(fsize + 1); | |
- | |
fread(buffer, fsize, 1, fp); | |
fclose(fp); | |
buffer[fsize] = 0; | |
- BANLIST = buffer; | |
+ | |
+ if (type == 0) | |
+ BANLIST = buffer; | |
+ else | |
+ WHITELIST = buffer; | |
free(buffer); | |
} | |
@@ -330,7 +350,7 @@ void parse_parameters(int argc, char **argv) | |
break; | |
case 'b': | |
BANFILE = optarg; | |
- load_banlist(BANFILE); | |
+ load_list(BANFILE, 0); | |
break; | |
case 's': | |
SLUG_SIZE = atoi(optarg); | |
@@ -349,7 +369,8 @@ void parse_parameters(int argc, char **argv) | |
set_uid_gid(optarg); | |
break; | |
case 'w': | |
- WHITELIST = optarg; | |
+ WHITEFILE = optarg; | |
+ load_list(WHITEFILE, 1); | |
break; | |
default: | |
printf("usage: fiche [-bdpqs].\n"); | |
diff --git a/fiche.h b/fiche.h | |
@@ -47,6 +47,7 @@ char *LOG; | |
char *BASEDIR; | |
char *BANLIST; | |
char *BANFILE; | |
+char *WHITEFILE; | |
char *WHITELIST; | |
int PORT = 9999; | |
int SLUG_SIZE = 4; | |
@@ -69,7 +70,7 @@ void generate_url(char *buffer, char *slug); | |
void save_to_file(char *buffer, char *slug); | |
void startup_message(); | |
void set_basedir(); | |
-void load_banlist(); | |
+void load_list(char *file_path, int type); | |
void parse_parameters(int argc, char **argv); | |
void save_log(char *slug, char *hostaddrp, char *h_name); | |
void change_owner(char *directory); | |
@@ -77,6 +78,7 @@ void set_uid_gid(); | |
char *return_line(){return("\n====================================");} | |
char *check_banlist(char *ip_address); | |
+char *check_whitelist(char *ip_address); | |
char *get_date(); | |
struct sockaddr_in set_address(struct sockaddr_in serveraddr); |