mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-30 13:13:44 +00:00
Refine error levels
This commit is contained in:
+14
-14
@@ -299,7 +299,7 @@ get_peer_name(int fd)
|
||||
}
|
||||
|
||||
static void
|
||||
report_addr(int fd)
|
||||
report_addr(int fd, int err_level)
|
||||
{
|
||||
char *peer_name;
|
||||
peer_name = get_peer_name(fd);
|
||||
@@ -307,7 +307,7 @@ report_addr(int fd)
|
||||
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, 128)) {
|
||||
if (check_block_list(peer_name, err_level)) {
|
||||
LOGE("block all requests from %s", peer_name);
|
||||
}
|
||||
}
|
||||
@@ -610,7 +610,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
if (err) {
|
||||
LOGE("invalid password or cipher");
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, ATTACK);
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -652,7 +652,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
if (server->stage == 5) {
|
||||
if (server->auth && !ss_check_hash(remote->buf, server->chunk, server->d_ctx, BUF_SIZE)) {
|
||||
LOGE("hash error");
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, BAD);
|
||||
close_and_free_server(EV_A_ server);
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
return;
|
||||
@@ -721,14 +721,14 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
size_t len = server->buf->len;
|
||||
|
||||
if (len < offset + header_len + ONETIMEAUTH_BYTES) {
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
|
||||
server->buf->len = offset + header_len + ONETIMEAUTH_BYTES;
|
||||
if (ss_onetimeauth_verify(server->buf, server->d_ctx->evp.iv)) {
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, BAD);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -750,7 +750,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
offset += in_addr_len;
|
||||
} else {
|
||||
LOGE("invalid header with addr type %d", atyp);
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -768,7 +768,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
offset += name_len + 1;
|
||||
} else {
|
||||
LOGE("invalid name length: %d", name_len);
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -796,7 +796,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
} else {
|
||||
if (!validate_hostname(host, name_len)) {
|
||||
LOGE("invalid host name");
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -814,7 +814,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
offset += in6_addr_len;
|
||||
} else {
|
||||
LOGE("invalid header with addr type %d", atyp);
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -828,7 +828,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
if (offset == 1) {
|
||||
LOGE("invalid header with addr type %d", atyp);
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -842,7 +842,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
}
|
||||
|
||||
if (server->buf->len < offset) {
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, MALFORMED);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
} else {
|
||||
@@ -859,7 +859,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
if (server->auth && !ss_check_hash(server->buf, server->chunk, server->d_ctx, BUF_SIZE)) {
|
||||
LOGE("hash error");
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, BAD);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
}
|
||||
@@ -990,7 +990,7 @@ server_timeout_cb(EV_P_ ev_timer *watcher, int revents)
|
||||
LOGI("incomplete header: %zu", len);
|
||||
#endif
|
||||
}
|
||||
report_addr(server->fd);
|
||||
report_addr(server->fd, ATTACK);
|
||||
}
|
||||
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
|
||||
Reference in New Issue
Block a user