New configuration option "NoIdent" to disable IDENT lookups
authorAlexander Barton <alex@barton.de>
Wed, 19 Nov 2008 18:11:39 +0000 (19:11 +0100)
committerAlexander Barton <alex@barton.de>
Wed, 19 Nov 2008 18:11:39 +0000 (19:11 +0100)
The new configuration option "NoIdent" in ngircd.conf can be used to
disable IDENT lookups even when the ngIRCd daemon is compiled with IDENT
lookups enabled.

ChangeLog
NEWS
doc/sample-ngircd.conf
man/ngircd.conf.5.tmpl
src/ngircd/conf.c
src/ngircd/conf.h
src/ngircd/conn.c
src/ngircd/resolve.c
src/testsuite/ngircd-test1.conf
src/testsuite/ngircd-test2.conf

index ff9a75d597ca29acadcc04da48a1bf4e141fc6dd..ededa60f9d6e8ded04f320639eff203725912fd3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -34,6 +34,8 @@ ngIRCd-dev
   - More tests have been added to the test-suite ("make check"), and two
     servers are started for testing server-server linking.
   - Added a timestamp to log messages to the console.
   - More tests have been added to the test-suite ("make check"), and two
     servers are started for testing server-server linking.
   - Added a timestamp to log messages to the console.
+  - New configuration option "NoIdent" to disable IDENT lookups even if the
+    daemon is compiled with IDENT support.
 
 ngIRCd 0.12.1 (2008-07-09)
 
 
 ngIRCd 0.12.1 (2008-07-09)
 
diff --git a/NEWS b/NEWS
index 162d86ad9ebe1f3d0e2569e6fcc17c2768545f6e..0d77f0a81570302b8a1530d0d5cf5e92d0f71849 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,8 @@ ngIRCd-dev
     In addition ngIRCd creates a "special" channel &SERVER on startup and logs
     all the messages to it that a user with mode +s receives.
   - New make target "osxpkg" to build a Mac OS X installer package.
     In addition ngIRCd creates a "special" channel &SERVER on startup and logs
     all the messages to it that a user with mode +s receives.
   - New make target "osxpkg" to build a Mac OS X installer package.
+  - New configuration option "NoIdent" to disable IDENT lookups even if the
+    daemon is compiled with IDENT support.
 
 ngIRCd 0.12.1 (2008-07-09)
 
 
 ngIRCd 0.12.1 (2008-07-09)
 
index 459d51d4e1765054735c97430939f4178e8df61f..1ccc90c6898557d8b90b96bfed3c2e28eaaf03e8 100644 (file)
        # Don't do any DNS lookups when a client connects to the server.
        ;NoDNS = no
 
        # Don't do any DNS lookups when a client connects to the server.
        ;NoDNS = no
 
+       # Don't do any IDENT lookups, even if ngIRCd has been compiled
+       # with support for it.
+       ;NoIdent = no
+
        # try to connect to other irc servers using ipv4 and ipv6, if possible
        ;ConnectIPv6 = yes
        ;ConnectIPv4 = yes
        # try to connect to other irc servers using ipv4 and ipv6, if possible
        ;ConnectIPv6 = yes
        ;ConnectIPv4 = yes
index 14baf2090b6f3ee6f05ebba8ef386306efaa9f8c..0848c36bffaa76aedd13a0faa6a5f0f6330b136f 100644 (file)
@@ -178,10 +178,15 @@ the config file.
 Default: No.
 .TP
 \fBNoDNS\fR
 Default: No.
 .TP
 \fBNoDNS\fR
-If enabled, ngircd will not make DNS lookups when clients connect.
+If set to true, ngircd will not make DNS lookups when clients connect.
 If you configure ngircd to connect to other servers, ngircd may still
 perform a DNS lookup if required.
 If you configure ngircd to connect to other servers, ngircd may still
 perform a DNS lookup if required.
-Default: No.
+Default: false.
+.TP
+\fBNoIdent\fR
+If ngircd is compiled with IDENT support this can be used to disable IDENT
+lookups at run time.
+Default: false.
 .TP
 \fBConnectIPv4\fR
 Set this to no if you do not want ngircd to connect to other irc servers using ipv4.
 .TP
 \fBConnectIPv4\fR
 Set this to no if you do not want ngircd to connect to other irc servers using ipv4.
index 97ecb10ff0176edf525a99b05e87eb1661942dcc..fe0593803f1344c67831e48de3496cafd74a76d1 100644 (file)
@@ -259,6 +259,7 @@ Conf_Test( void )
        printf( "  OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode));
        printf( "  PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly));
        printf( "  NoDNS = %s\n", yesno_to_str(Conf_NoDNS));
        printf( "  OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode));
        printf( "  PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly));
        printf( "  NoDNS = %s\n", yesno_to_str(Conf_NoDNS));
+       printf( "  NoIdent = %s\n", yesno_to_str(Conf_NoIdent));
 
 #ifdef WANT_IPV6
        printf("  ConnectIPv4 = %s\n", yesno_to_str(Conf_ConnectIPv6));
 
 #ifdef WANT_IPV6
        printf("  ConnectIPv4 = %s\n", yesno_to_str(Conf_ConnectIPv6));
@@ -519,6 +520,7 @@ Set_Defaults( bool InitServers )
 
        Conf_OperCanMode = false;
        Conf_NoDNS = false;
 
        Conf_OperCanMode = false;
        Conf_NoDNS = false;
+       Conf_NoIdent = false;
        Conf_PredefChannelsOnly = false;
        Conf_OperServerMode = false;
 
        Conf_PredefChannelsOnly = false;
        Conf_OperServerMode = false;
 
@@ -903,6 +905,19 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
                Conf_NoDNS = Check_ArgIsTrue( Arg );
                return;
        }
                Conf_NoDNS = Check_ArgIsTrue( Arg );
                return;
        }
+       if (strcasecmp(Var, "NoIdent") == 0) {
+               /* don't do IDENT lookups when clients connect? */
+               Conf_NoIdent = Check_ArgIsTrue(Arg);
+#ifndef IDENTAUTH
+               if (!Conf_NoIdent) {
+                       /* user has enabled ident lookups explicitly, but ... */
+                       Config_Error(LOG_WARNING,
+                               "%s: line %d: NoIdent=False, but ngircd was built without IDENT support",
+                               NGIRCd_ConfFile, Line);
+               }
+#endif
+               return;
+       }
 #ifdef WANT_IPV6
        /* the default setting for all the WANT_IPV6 special options is 'true' */
        if( strcasecmp( Var, "ConnectIPv6" ) == 0 ) {
 #ifdef WANT_IPV6
        /* the default setting for all the WANT_IPV6 special options is 'true' */
        if( strcasecmp( Var, "ConnectIPv6" ) == 0 ) {
index af489edfc02b64fc484fd7b31a2e0b1f3c2255ff..5328465677c5939aa9718c03c5c0b24ab4846d3c 100644 (file)
@@ -143,6 +143,9 @@ GLOBAL bool Conf_OperCanMode;
 /* Disable all DNS functions? */
 GLOBAL bool Conf_NoDNS;
 
 /* Disable all DNS functions? */
 GLOBAL bool Conf_NoDNS;
 
+/* Disable IDENT lookups, even when compiled with support for it */
+GLOBAL bool Conf_NoIdent;
+
 /*
  * try to connect to remote systems using the ipv6 protocol,
  * if they have an ipv6 address? (default yes)
 /*
  * try to connect to remote systems using the ipv6 protocol,
  * if they have an ipv6 address? (default yes)
index f0a97f9cdddec0437f883d7f0716c24f4d6b9286..b29ad7e353dbb5042d94db35f97798b0ef26bb07 100644 (file)
@@ -1167,7 +1167,7 @@ New_Connection( int Sock )
 #endif
        ng_ipaddr_t new_addr;
        char ip_str[NG_INET_ADDRSTRLEN];
 #endif
        ng_ipaddr_t new_addr;
        char ip_str[NG_INET_ADDRSTRLEN];
-       int new_sock, new_sock_len;
+       int new_sock, new_sock_len, identsock;
        CLIENT *c;
        long cnt;
 
        CLIENT *c;
        long cnt;
 
@@ -1270,10 +1270,14 @@ New_Connection( int Sock )
 
        Client_SetHostname(c, My_Connections[new_sock].host);
 
 
        Client_SetHostname(c, My_Connections[new_sock].host);
 
+       identsock = new_sock;
+#ifdef IDENTAUTH
+       if (Conf_NoIdent)
+               identsock = -1;
+#endif
        if (!Conf_NoDNS)
                Resolve_Addr(&My_Connections[new_sock].res_stat, &new_addr,
        if (!Conf_NoDNS)
                Resolve_Addr(&My_Connections[new_sock].res_stat, &new_addr,
-                       My_Connections[new_sock].sock, cb_Read_Resolver_Result);
-
+                            identsock, cb_Read_Resolver_Result);
        Conn_SetPenalty(new_sock, 4);
        return new_sock;
 } /* New_Connection */
        Conn_SetPenalty(new_sock, 4);
        return new_sock;
 } /* New_Connection */
index 1eb35dd84e55156c30cd29b9a72f097f18c9e10a..999ef9906df241f3c3d195524df8fb86c1082907 100644 (file)
@@ -175,13 +175,12 @@ Do_IdentQuery(int identsock, array *resolved_addr)
 #ifdef IDENTAUTH
        char *res;
 
 #ifdef IDENTAUTH
        char *res;
 
-       assert(identsock >= 0);
+       if (identsock < 0)
+               return;
 
 #ifdef DEBUG
        Log_Resolver(LOG_DEBUG, "Doing IDENT lookup on socket %d ...", identsock);
 #endif
 
 #ifdef DEBUG
        Log_Resolver(LOG_DEBUG, "Doing IDENT lookup on socket %d ...", identsock);
 #endif
-       if (identsock < 0)
-               return;
        res = ident_id( identsock, 10 );
 #ifdef DEBUG
        Log_Resolver(LOG_DEBUG, "Ok, IDENT lookup on socket %d done: \"%s\"",
        res = ident_id( identsock, 10 );
 #ifdef DEBUG
        Log_Resolver(LOG_DEBUG, "Ok, IDENT lookup on socket %d done: \"%s\"",
index 299bf7ca2b1df0467dae95e82c4c7da62a4ee7c6..a12873fb69105911a3579c323dd3c4281e1f9452 100644 (file)
@@ -10,6 +10,7 @@
        MaxConnectionsIP = 0
        OperCanUseMode = yes
        MaxJoins = 4
        MaxConnectionsIP = 0
        OperCanUseMode = yes
        MaxJoins = 4
+       NoIdent = yes
 
 [Operator]
        Name = TestOp
 
 [Operator]
        Name = TestOp
index 3c2829bc80575125df63c1ffcff1e8ba2ea3aa19..e6d1696bc6d861997663105590503fb9ac327e2e 100644 (file)
@@ -10,6 +10,7 @@
        MaxConnectionsIP = 0
        OperCanUseMode = yes
        MaxJoins = 4
        MaxConnectionsIP = 0
        OperCanUseMode = yes
        MaxJoins = 4
+       NoIdent = yes
 
 [Operator]
        Name = TestOp
 
 [Operator]
        Name = TestOp