]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conn.c
Added support for TCP Wrappers.
[ngircd-alex.git] / src / ngircd / conn.c
index e3f88011b178731f8a2e4c70ab2d82e4dfd09622..4b48ffb842288c62f1265ef3ea7507debb3e89e4 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: conn.c,v 1.117 2003/02/23 12:04:05 alex Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.118 2003/03/07 14:35:52 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -40,7 +40,11 @@ static char UNUSED id[] = "$Id: conn.c,v 1.117 2003/02/23 12:04:05 alex Exp $";
 #endif
 
 #ifdef HAVE_STDINT_H
-#include <stdint.h>                    /* u.a. fuer Mac OS X */
+#include <stdint.h>                    /* e.g. for Mac OS X */
+#endif
+
+#ifdef USE_TCPWRAP
+#include <tcpd.h>                      /* for TCP Wrappers */
 #endif
 
 #include "defines.h"
@@ -87,6 +91,11 @@ LOCAL fd_set My_Listeners;
 LOCAL fd_set My_Sockets;
 LOCAL fd_set My_Connects;
 
+#ifdef USE_TCPWRAP
+INT allow_severity = LOG_INFO;
+INT deny_severity = LOG_ERR;
+#endif
+
 
 GLOBAL VOID
 Conn_Init( VOID )
@@ -836,6 +845,9 @@ New_Connection( INT Sock )
        /* Neue Client-Verbindung von Listen-Socket annehmen und
         * CLIENT-Struktur anlegen. */
 
+#ifdef USE_TCPWRAP
+       struct request_info req;
+#endif
        struct sockaddr_in new_addr;
        INT new_sock, new_sock_len;
        RES_STAT *s;
@@ -854,6 +866,18 @@ New_Connection( INT Sock )
                Log( LOG_CRIT, "Can't accept connection: %s!", strerror( errno ));
                return;
        }
+       
+#ifdef USE_TCPWRAP
+       /* Validate socket using TCP Wrappers */
+       request_init( &req, RQ_DAEMON, PACKAGE, RQ_FILE, new_sock, RQ_CLIENT_SIN, &new_addr, NULL );
+       if( ! hosts_access( &req ))
+       {
+               /* Access denied! */
+               Log( deny_severity, "Refused connection from %s (by TCP Wrappers)!", inet_ntoa( new_addr.sin_addr ));
+               close( new_sock );
+               return;
+       }
+#endif
 
        /* Socket initialisieren */
        Init_Socket( new_sock );