mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-07-10 05:43:12 +02:00
- Implement support for TCP_DEFER_ACCEPT (synflood-hardening). (#4096)
This commit is contained in:
+24
-2
@@ -337,7 +337,7 @@ static void listener_accept(int fd, int revents, void *data)
|
||||
int inetport(ConfigItem_listen *listener, char *name, int port)
|
||||
{
|
||||
static struct SOCKADDR_IN server;
|
||||
int ad[4], len = sizeof(server);
|
||||
int ad[4], len = sizeof(server), result;
|
||||
char ipname[64];
|
||||
|
||||
if (BadPtr(name))
|
||||
@@ -441,7 +441,29 @@ int inetport(ConfigItem_listen *listener, char *name, int port)
|
||||
return -1;
|
||||
}
|
||||
|
||||
(void)listen(listener->fd, LISTEN_SIZE);
|
||||
result = listen(listener->fd, LISTEN_SIZE);
|
||||
|
||||
#ifdef TCP_DEFER_ACCEPT
|
||||
if ((listener->flags & LISTENER_DEFER_ACCEPT) && !result)
|
||||
{
|
||||
int true = 1;
|
||||
|
||||
setsockopt(listener->fd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &true, sizeof(int));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SO_ACCEPTFILTER
|
||||
if ((listener->flags & LISTENER_DEFER_ACCEPT) && !result)
|
||||
{
|
||||
struct accept_filter_arg afa;
|
||||
|
||||
memset(&afa, '\0', sizeof afa);
|
||||
strlcpy(afa.af_name, "dataready", sizeof afa.af_name);
|
||||
(void) setsockopt(listener->fd, SOL_SOCKET, SO_ACCEPTFILTER, &afa,
|
||||
sizeof afa);
|
||||
}
|
||||
#endif
|
||||
|
||||
fd_setselect(listener->fd, FD_SELECT_READ, listener_accept, listener);
|
||||
|
||||
return 0;
|
||||
|
||||
+8
-7
@@ -246,13 +246,14 @@ static OperFlag _OperFlags[] = {
|
||||
|
||||
/* This MUST be alphabetized */
|
||||
static OperFlag _ListenerFlags[] = {
|
||||
{ LISTENER_CLIENTSONLY, "clientsonly"},
|
||||
{ LISTENER_JAVACLIENT, "java"},
|
||||
{ LISTENER_MASK, "mask"},
|
||||
{ LISTENER_REMOTEADMIN, "remoteadmin"},
|
||||
{ LISTENER_SERVERSONLY, "serversonly"},
|
||||
{ LISTENER_SSL, "ssl"},
|
||||
{ LISTENER_NORMAL, "standard"},
|
||||
{ LISTENER_CLIENTSONLY, "clientsonly"},
|
||||
{ LISTENER_DEFER_ACCEPT, "defer-accept"},
|
||||
{ LISTENER_JAVACLIENT, "java"},
|
||||
{ LISTENER_MASK, "mask"},
|
||||
{ LISTENER_REMOTEADMIN, "remoteadmin"},
|
||||
{ LISTENER_SERVERSONLY, "serversonly"},
|
||||
{ LISTENER_SSL, "ssl"},
|
||||
{ LISTENER_NORMAL, "standard"},
|
||||
};
|
||||
|
||||
/* This MUST be alphabetized */
|
||||
|
||||
Reference in New Issue
Block a user