1
0
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:
William Pitcock
2013-05-06 04:49:24 +00:00
parent 71c471fb33
commit f09c6ef567
4 changed files with 47 additions and 10 deletions
+24 -2
View File
@@ -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
View File
@@ -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 */