Browse Source

Refine APIs for auto-blocking

pull/946/head
Max Lv 8 years ago
parent
commit
1ed725daf8
3 changed files with 21 additions and 5 deletions
  1. 18
      src/acl.c
  2. 3
      src/acl.h
  3. 5
      src/server.c

18
src/acl.c

@ -259,7 +259,23 @@ clear_block_list()
}
int
check_block_list(char *addr, int err_level)
check_block_list(char *addr)
{
size_t addr_len = strlen(addr);
if (cache_key_exist(block_list, addr, addr_len)) {
int *count = NULL;
cache_lookup(block_list, addr, addr_len, &count);
if (count != NULL && *count > MAX_TRIES)
return 1;
}
return 0;
}
int
update_block_list(char *addr, int err_level)
{
size_t addr_len = strlen(addr);

3
src/acl.h

@ -44,7 +44,8 @@ int get_acl_mode(void);
void init_block_list();
void free_block_list();
int check_block_list(char *addr, int err_level);
int check_block_list(char *addr);
int update_block_list(char *addr, int err_level);
int remove_from_block_list(char *addr);
int outbound_block_match_host(const char *host);

5
src/server.c

@ -327,8 +327,7 @@ report_addr(int fd, int err_level)
peer_name = get_peer_name(fd);
if (peer_name != NULL) {
LOGE("failed to handshake with %s", peer_name);
// Block all requests from this IP, if the err# exceeds 128.
if (check_block_list(peer_name, err_level)) {
if (update_block_list(peer_name, err_level)) {
LOGE("add %s to block list", peer_name);
}
}
@ -1499,7 +1498,7 @@ accept_cb(EV_P_ ev_io *w, int revents)
in_white_list = 1;
}
}
if (!in_white_list && check_block_list(peer_name, 0)) {
if (!in_white_list && check_block_list(peer_name)) {
LOGE("block all requests from %s", peer_name);
close(serverfd);
return;

Loading…
Cancel
Save