commit f76e0a1db689dadfe32f211002248d03416b3982 from: Alexander Barton date: Thu Jun 24 22:33:01 2010 UTC Implement user mode "c": receive connect/disconnect NOTICEs Users having the user mode "c" set receive NOTICE messages on each new client connection to the local server as well as disconnects. Only IRC operators (users having the mode "o" set) are allowed to set the 'c' user mode. These connect/disconnect messages can be useful for open proxy scanners -- BOPM (http://wiki.blitzed.org/BOPM) is now functional with ngIRCd, for example. commit - 51ed74205432036f729d96bf5683ca858aae9f10 commit + f76e0a1db689dadfe32f211002248d03416b3982 blob - c565830a6b82957c8cc0287046c2175b7459b60c blob + 671bf6cef5b5fed0e6f855baa2b98d5b8a447aaa --- src/ngircd/client.c +++ src/ngircd/client.c @@ -1136,6 +1136,9 @@ Destroy_UserOrService(CLIENT *Client, const char *Txt, "%s \"%s\" unregistered (connection %d): %s", Client_TypeText(Client), Client_Mask(Client), Client->conn_id, Txt); + Log_ServerNotice('c', "Client exiting: %s (%s@%s) [%s]", + Client_ID(Client), Client_User(Client), + Client_Hostname(Client), Txt); if (SendQuit) { /* Inforam all the other servers */ blob - 94c7dd1e92a393ae24478cb037af1755cb25e334 blob + b463c5f9f54006fb0fde6539c508c666569775ea --- src/ngircd/defines.h +++ src/ngircd/defines.h @@ -80,7 +80,7 @@ #define RECONNECT_DELAY 3 /* Time to delay re-connect attempts in seconds. */ -#define USERMODES "aiorsw" /* Supported user modes. */ +#define USERMODES "aciorsw" /* Supported user modes. */ #define CHANMODES "biIklmnoPstvz" /* Supported channel modes. */ #define CONNECTED true /* Internal status codes. */ blob - c8b44dbc1653723d0a32cddd4f63300c8e906a60 blob + 8e77e7fe34ddcefde11788fd00a5e15c0c7e77f9 --- src/ngircd/irc-login.c +++ src/ngircd/irc-login.c @@ -840,10 +840,16 @@ Introduce_Client(CLIENT *From, CLIENT *Client, int Typ Client_Modes(Client), Client_ID(From), Client_ID(Client_Introducer(Client)), Client_Hops(Client), Client_Hops(Client) > 1 ? "s": ""); - } else + } else { Log(LOG_NOTICE, "%s \"%s\" registered (connection %d).", Client_TypeText(Client), Client_Mask(Client), Client_Conn(Client)); + Log_ServerNotice('c', "Client connecting: %s (%s@%s) [%s] - %s", + Client_ID(Client), Client_User(Client), + Client_Hostname(Client), + Conn_IPA(Client_Conn(Client)), + Client_TypeText(Client)); + } /* Inform other servers */ IRC_WriteStrServersPrefixFlag_CB(From, blob - d22d32f01acc3c82a787ecc375a6fe041cc57e39 blob + cd470863aa2edea492a9e818cce5103c1d50af72 --- src/ngircd/irc-mode.c +++ src/ngircd/irc-mode.c @@ -172,6 +172,16 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Ori else ok = IRC_WriteStrClient( Origin, ERR_NOPRIVILEGES_MSG, Client_ID( Origin )); break; + case 'c': /* Receive connect notices + * (only settable by IRC operators!) */ + if(!set || Client_OperByMe(Origin) + || Client_Type(Client) == CLIENT_SERVER) + x[0] = 'c'; + else + ok = IRC_WriteStrClient(Origin, + ERR_NOPRIVILEGES_MSG, + Client_ID(Origin)); + break; case 'o': /* IRC operator (only unsettable!) */ if(( ! set ) || ( Client_Type( Client ) == CLIENT_SERVER )) {