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);
|
bzero(buffer, BUFSIZE);
|
||||||
int status = recv(connection_socket, buffer, BUFSIZE, MSG_WAITALL);
|
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)
|
if (check_banlist(data.ip_address) != NULL)
|
||||||
{
|
{
|
||||||
printf("Rejected connection from banned user.\n");
|
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)
|
char *check_banlist(char *ip_address)
|
||||||
{
|
{
|
||||||
load_banlist(BANFILE);
|
load_list(BANFILE, 0);
|
||||||
return strstr(BANLIST, ip_address);
|
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");
|
FILE *fp = fopen(file_path, "r");
|
||||||
fseek(fp, 0, SEEK_END);
|
fseek(fp, 0, SEEK_END);
|
||||||
@@ -189,12 +206,15 @@ void load_banlist(char *file_path)
|
|||||||
fseek(fp, 0, SEEK_SET);
|
fseek(fp, 0, SEEK_SET);
|
||||||
|
|
||||||
char *buffer = malloc(fsize + 1);
|
char *buffer = malloc(fsize + 1);
|
||||||
|
|
||||||
fread(buffer, fsize, 1, fp);
|
fread(buffer, fsize, 1, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
buffer[fsize] = 0;
|
buffer[fsize] = 0;
|
||||||
BANLIST = buffer;
|
|
||||||
|
if (type == 0)
|
||||||
|
BANLIST = buffer;
|
||||||
|
else
|
||||||
|
WHITELIST = buffer;
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
@@ -330,7 +350,7 @@ void parse_parameters(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
BANFILE = optarg;
|
BANFILE = optarg;
|
||||||
load_banlist(BANFILE);
|
load_list(BANFILE, 0);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
SLUG_SIZE = atoi(optarg);
|
SLUG_SIZE = atoi(optarg);
|
||||||
@@ -349,7 +369,8 @@ void parse_parameters(int argc, char **argv)
|
|||||||
set_uid_gid(optarg);
|
set_uid_gid(optarg);
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
WHITELIST = optarg;
|
WHITEFILE = optarg;
|
||||||
|
load_list(WHITEFILE, 1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("usage: fiche [-bdpqs].\n");
|
printf("usage: fiche [-bdpqs].\n");
|
||||||
|
|||||||
4
fiche.h
4
fiche.h
@@ -47,6 +47,7 @@ char *LOG;
|
|||||||
char *BASEDIR;
|
char *BASEDIR;
|
||||||
char *BANLIST;
|
char *BANLIST;
|
||||||
char *BANFILE;
|
char *BANFILE;
|
||||||
|
char *WHITEFILE;
|
||||||
char *WHITELIST;
|
char *WHITELIST;
|
||||||
int PORT = 9999;
|
int PORT = 9999;
|
||||||
int SLUG_SIZE = 4;
|
int SLUG_SIZE = 4;
|
||||||
@@ -69,7 +70,7 @@ void generate_url(char *buffer, char *slug);
|
|||||||
void save_to_file(char *buffer, char *slug);
|
void save_to_file(char *buffer, char *slug);
|
||||||
void startup_message();
|
void startup_message();
|
||||||
void set_basedir();
|
void set_basedir();
|
||||||
void load_banlist();
|
void load_list(char *file_path, int type);
|
||||||
void parse_parameters(int argc, char **argv);
|
void parse_parameters(int argc, char **argv);
|
||||||
void save_log(char *slug, char *hostaddrp, char *h_name);
|
void save_log(char *slug, char *hostaddrp, char *h_name);
|
||||||
void change_owner(char *directory);
|
void change_owner(char *directory);
|
||||||
@@ -77,6 +78,7 @@ void set_uid_gid();
|
|||||||
|
|
||||||
char *return_line(){return("\n====================================");}
|
char *return_line(){return("\n====================================");}
|
||||||
char *check_banlist(char *ip_address);
|
char *check_banlist(char *ip_address);
|
||||||
|
char *check_whitelist(char *ip_address);
|
||||||
char *get_date();
|
char *get_date();
|
||||||
|
|
||||||
struct sockaddr_in set_address(struct sockaddr_in serveraddr);
|
struct sockaddr_in set_address(struct sockaddr_in serveraddr);
|
||||||
|
|||||||
Reference in New Issue
Block a user