From d29e389779dfeda52cb42e8b8f2cf36c4bd9cd56 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Fri, 25 Mar 2011 12:08:36 +0100 Subject: [PATCH 1/3] New configuration option "NoticeAuth": send NOTICE AUTH on connect When enabling "NoticeAuth" in the [Features] section, ngircd will send "NOTICE AUTH" messages on client connect like e.g. snircd (QuakeNet) does. --- src/ngircd/conf.c | 7 +++++++ src/ngircd/conf.h | 3 +++ src/ngircd/conn.c | 22 +++++++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index 32461f35..85e42335 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -359,6 +359,7 @@ Conf_Test( void ) printf(" DNS = %s\n", yesno_to_str(Conf_DNS)); printf(" Ident = %s\n", yesno_to_str(Conf_Ident)); printf(" PAM = %s\n", yesno_to_str(Conf_PAM)); + printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth)); puts(""); opers_puts(); @@ -614,6 +615,7 @@ Set_Defaults(bool InitServers) Conf_PongTimeout = 20; Conf_ConnectRetry = 60; Conf_DNS = true; + Conf_NoticeAuth = false; Conf_Oper_Count = 0; Conf_Channel_Count = 0; @@ -1278,6 +1280,11 @@ Handle_FEATURES(int Line, char *Var, char *Arg) WarnPAM(Line); return; } + if(strcasecmp(Var, "NoticeAuth") == 0) { + /* send NOTICE AUTH messages to clients on connect */ + Conf_NoticeAuth = Check_ArgIsTrue(Arg); + return; + } Config_Error(LOG_ERR, "%s, line %d (section \"Features\"): Unknown variable \"%s\"!", diff --git a/src/ngircd/conf.h b/src/ngircd/conf.h index 305ccaa1..1633bc99 100644 --- a/src/ngircd/conf.h +++ b/src/ngircd/conf.h @@ -178,6 +178,9 @@ GLOBAL bool Conf_Ident; /** Enable all usage of PAM, even when compiled with support for it */ GLOBAL bool Conf_PAM; +/** Enable NOTICE AUTH messages on connect */ +GLOBAL bool Conf_NoticeAuth; + /* * try to connect to remote systems using the ipv6 protocol, * if they have an ipv6 address? (default yes) diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 63093c25..9d17a738 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -1444,9 +1444,20 @@ New_Connection(int Sock) if (!Conf_Ident) identsock = -1; #endif - if (Conf_DNS) + if (Conf_DNS) { + if (Conf_NoticeAuth) { +#ifdef IDENTAUTH + if (Conf_Ident) + (void)Conn_WriteStr(new_sock, + "NOTICE AUTH :*** Looking up your hostname and checking ident"); + else +#endif + (void)Conn_WriteStr(new_sock, + "NOTICE AUTH :*** Looking up your hostname"); + } Resolve_Addr(&My_Connections[new_sock].proc_stat, &new_addr, identsock, cb_Read_Resolver_Result); + } Account_Connection(); return new_sock; @@ -2175,13 +2186,22 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events ) strlcpy(My_Connections[i].host, readbuf, sizeof(My_Connections[i].host)); Client_SetHostname(c, readbuf); + if (Conf_NoticeAuth) + (void)Conn_WriteStr(i, + "NOTICE AUTH :*** Found your hostname"); #ifdef IDENTAUTH ++identptr; if (*identptr) { Log(LOG_INFO, "IDENT lookup for connection %d: \"%s\".", i, identptr); Client_SetUser(c, identptr, true); + if (Conf_NoticeAuth) + (void)Conn_WriteStr(i, + "NOTICE AUTH :*** Got ident response"); } else { Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i); + if (Conf_NoticeAuth && Conf_Ident) + (void)Conn_WriteStr(i, + "NOTICE AUTH :*** No ident response"); } #endif } From f99d33ddd93b41eca3fd113ba5308cffdba58142 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sat, 26 Mar 2011 17:11:44 +0100 Subject: [PATCH 2/3] Configuration: move "NoticeAuth" to GLOBAL section --- src/ngircd/conf.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index 85e42335..568b9e7a 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -352,6 +352,7 @@ Conf_Test( void ) printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP); printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1); printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1); + printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth)); printf(" CloakHost = %s\n", Conf_CloakHost); printf(" CloakUserToNick = %s\n\n", yesno_to_str(Conf_CloakUserToNick)); @@ -359,7 +360,6 @@ Conf_Test( void ) printf(" DNS = %s\n", yesno_to_str(Conf_DNS)); printf(" Ident = %s\n", yesno_to_str(Conf_Ident)); printf(" PAM = %s\n", yesno_to_str(Conf_PAM)); - printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth)); puts(""); opers_puts(); @@ -1194,6 +1194,11 @@ Handle_GLOBAL( int Line, char *Var, char *Arg ) Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg); return; } + if(strcasecmp(Var, "NoticeAuth") == 0) { + /* send NOTICE AUTH messages to clients on connect */ + Conf_NoticeAuth = Check_ArgIsTrue(Arg); + return; + } if( strcasecmp( Var, "Listen" ) == 0 ) { /* IP-Address to bind sockets */ @@ -1280,11 +1285,6 @@ Handle_FEATURES(int Line, char *Var, char *Arg) WarnPAM(Line); return; } - if(strcasecmp(Var, "NoticeAuth") == 0) { - /* send NOTICE AUTH messages to clients on connect */ - Conf_NoticeAuth = Check_ArgIsTrue(Arg); - return; - } Config_Error(LOG_ERR, "%s, line %d (section \"Features\"): Unknown variable \"%s\"!", From 680db6755bdd7904a5aaae8290e074cb008425b5 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sun, 27 Mar 2011 20:40:28 +0200 Subject: [PATCH 3/3] Add documentation for "NoticeAuth" configuration option --- doc/sample-ngircd.conf.tmpl | 5 +++++ man/ngircd.conf.5.tmpl | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl index e07b5205..f9c96562 100644 --- a/doc/sample-ngircd.conf.tmpl +++ b/doc/sample-ngircd.conf.tmpl @@ -154,6 +154,11 @@ # maximum nick name length! ;MaxNickLength = 9 + # Normally ngIRCd doesn't send any messages to a client until it is + # registered. Enable this option to let the daemon send "NOTICE AUTH" + # messages to clients while connecting. + ;NoticeAuth = no + # Set this hostname for every client instead of the real one. # Please note: don't use the percentage sign ("%"), it is reserved for # future extensions! diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl index e53cf3cc..5d6f0e0b 100644 --- a/man/ngircd.conf.5.tmpl +++ b/man/ngircd.conf.5.tmpl @@ -251,6 +251,11 @@ Maximum length of an user nick name (Default: 9, as in RFC 2812). Please note that all servers in an IRC network MUST use the same maximum nick name length! .TP +\fBNoticeAuth\fR (boolean) +Normally ngIRCd doesn't send any messages to a client until it is registered. +Enable this option to let the daemon send "NOTICE AUTH" messages to clients +while connecting. Default: no. +.TP \fBCloakHost\fR Set this hostname for every client instead of the real one. Default: empty, don't change.