added whitelist
This commit is contained in:
35
fiche.c
35
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");
|
||||
|
||||
4
fiche.h
4
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);
|
||||
|
||||
Reference in New Issue
Block a user