diff --git a/src/ngircd/client.c b/src/ngircd/client.c index c565830a..671bf6ce 100644 --- a/src/ngircd/client.c +++ b/src/ngircd/client.c @@ -1136,6 +1136,9 @@ Destroy_UserOrService(CLIENT *Client, const char *Txt, const char *FwdMsg, bool "%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 */ diff --git a/src/ngircd/defines.h b/src/ngircd/defines.h index 94c7dd1e..b463c5f9 100644 --- a/src/ngircd/defines.h +++ b/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. */ diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index c8b44dbc..8e77e7fe 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -840,10 +840,16 @@ Introduce_Client(CLIENT *From, CLIENT *Client, int Type) 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, diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c index d22d32f0..cd470863 100644 --- a/src/ngircd/irc-mode.c +++ b/src/ngircd/irc-mode.c @@ -172,6 +172,16 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target ) 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 )) {