X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-login.c;h=67a0fbfd803603befe536bc7e61e94eb06ced5a0;hp=5ec6162ca548c99024b8dad14b0297ac86b36a39;hb=08f9d31d60220e8a389a2d24f42625be7749f090;hpb=757f3497bc594a5a950806279349d361be7a1515 diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 5ec6162c..67a0fbfd 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -33,6 +33,7 @@ #include "parse.h" #include "irc.h" #include "irc-info.h" +#include "irc-macros.h" #include "irc-write.h" #include "exp.h" @@ -42,15 +43,12 @@ static void Kill_Nick PARAMS((char *Nick, char *Reason)); static void Change_Nick PARAMS((CLIENT * Origin, CLIENT * Target, char *NewNick, bool InformClient)); - /** * Handler for the IRC "PASS" command. * - * See RFC 2813 section 4.1.1, and RFC 2812 section 3.1.1. - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_PASS( CLIENT *Client, REQUEST *Req ) @@ -63,7 +61,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req ) /* Return an error if this is not a local client */ if (Client_Conn(Client) <= NONE) - return IRC_WriteStrClient(Client, ERR_UNKNOWNCOMMAND_MSG, + return IRC_WriteErrClient(Client, ERR_UNKNOWNCOMMAND_MSG, Client_ID(Client), Req->command); if (Client_Type(Client) == CLIENT_UNKNOWN && Req->argc == 1) { @@ -83,11 +81,11 @@ IRC_PASS( CLIENT *Client, REQUEST *Req ) } else if (Client_Type(Client) == CLIENT_UNKNOWN || Client_Type(Client) == CLIENT_UNKNOWNSERVER) { /* Unregistered connection, but wrong number of arguments: */ - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); } else { /* Registered connection, PASS command is not allowed! */ - return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG, + return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG, Client_ID(Client)); } @@ -146,7 +144,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req ) } else flags = ""; Log(LOG_INFO, - "Peer on conenction %d announces itself as %s-%s using protocol %d.%d/IRC+ (flags: \"%s\").", + "Peer on connection %d announces itself as %s-%s using protocol %d.%d/IRC+ (flags: \"%s\").", Client_Conn(Client), impl, serverver, protohigh, protolow, flags); } else { @@ -167,19 +165,12 @@ IRC_PASS( CLIENT *Client, REQUEST *Req ) return CONNECTED; } /* IRC_PASS */ - /** * Handler for the IRC "NICK" command. * - * See RFC 2812, 3.1.2 "Nick message", and RFC 2813, 4.1.3 "Nick". - * - * This function implements the IRC command "NICK" which is used to register - * with the server, to change already registered nicknames and to introduce - * new users which are connected to other servers. - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_NICK( CLIENT *Client, REQUEST *Req ) @@ -204,31 +195,22 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) || (Client_Type(Client) == CLIENT_SERVER && Req->argc == 1)) { /* User registration or change of nickname */ - - /* Wrong number of arguments? */ - if( Req->argc != 1 ) - return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID( Client ), - Req->command ); + _IRC_ARGC_EQ_OR_RETURN_(Client, Req, 1) /* Search "target" client */ - if( Client_Type( Client ) == CLIENT_SERVER ) - { - target = Client_Search( Req->prefix ); - if( ! target ) - return IRC_WriteStrClient( Client, - ERR_NOSUCHNICK_MSG, - Client_ID( Client ), - Req->argv[0] ); - } - else - { + if (Client_Type(Client) == CLIENT_SERVER) { + target = Client_Search(Req->prefix); + if (!target) + return IRC_WriteErrClient(Client, + ERR_NOSUCHNICK_MSG, + Client_ID(Client), + Req->argv[0]); + } else { /* Is this a restricted client? */ - if( Client_HasMode( Client, 'r' )) - return IRC_WriteStrClient( Client, - ERR_RESTRICTED_MSG, - Client_ID( Client )); - + if (Client_HasMode(Client, 'r')) + return IRC_WriteErrClient(Client, + ERR_RESTRICTED_MSG, + Client_ID(Client)); target = Client; } @@ -237,15 +219,14 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) * do anything. This is how the original ircd behaves and some * clients (for example Snak) expect it to be like this. * But I doubt that this is "really the right thing" ... */ - if( strcmp( Client_ID( target ), Req->argv[0] ) == 0 ) + if (strcmp(Client_ID(target), Req->argv[0]) == 0) return CONNECTED; #endif /* Check that the new nickname is available. Special case: * the client only changes from/to upper to lower case. */ - if( strcasecmp( Client_ID( target ), Req->argv[0] ) != 0 ) - { - if( ! Client_CheckNick( target, Req->argv[0] )) + if (strcasecmp(Client_ID(target), Req->argv[0]) != 0) { + if (!Client_CheckNick(target, Req->argv[0])) return CONNECTED; } @@ -290,7 +271,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) /* Bad number of parameters? */ if (Req->argc != 2 && Req->argc != 7) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); if (Req->argc >= 7) { @@ -326,8 +307,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) /* Find the Server this client is connected to */ intr_c = Client_GetFromToken(Client, token); - if( ! intr_c ) - { + if (!intr_c) { Log( LOG_ERR, "Server %s introduces nick \"%s\" on unknown server!?", Client_ID( Client ), Req->argv[0] ); Kill_Nick( Req->argv[0], "Unknown server" ); return CONNECTED; @@ -335,11 +315,13 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) c = Client_NewRemoteUser(intr_c, nick, hops, user, hostname, token, modes, info, true); - if( ! c ) - { - /* out of memory, need to disconnect client to keep network state consistent */ - Log( LOG_ALERT, "Can't create client structure! (on connection %d)", Client_Conn( Client )); - Kill_Nick( Req->argv[0], "Server error" ); + if (!c) { + /* Out of memory, we need to disconnect client to keep + * network state consistent! */ + Log(LOG_ALERT, + "Can't create client structure! (on connection %d)", + Client_Conn(Client)); + Kill_Nick(Req->argv[0], "Server error"); return CONNECTED; } @@ -356,10 +338,11 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) return CONNECTED; } - else return IRC_WriteStrClient( Client, ERR_ALREADYREGISTRED_MSG, Client_ID( Client )); + else + return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG, + Client_ID(Client)); } /* IRC_NICK */ - /** * Handler for the IRC "SVSNICK" command. * @@ -375,10 +358,6 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req) assert(Client != NULL); assert(Req != NULL); - if (Req->argc != 2) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); - /* Search the originator */ from = Client_Search(Req->prefix); if (!from) @@ -387,7 +366,7 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req) /* Search the target */ target = Client_Search(Req->argv[0]); if (!target || Client_Type(target) != CLIENT_USER) { - return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->argv[0]); } @@ -411,11 +390,9 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req) /** * Handler for the IRC "USER" command. * - * See RFC 2812, 3.1.3 "User message". - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_USER(CLIENT * Client, REQUEST * Req) @@ -433,18 +410,14 @@ IRC_USER(CLIENT * Client, REQUEST * Req) Client_Type(Client) == CLIENT_GOTPASS) { /* New connection */ - if (Req->argc != 4) - return IRC_WriteStrClient(Client, - ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), - Req->command); + _IRC_ARGC_EQ_OR_RETURN_(Client, Req, 4) /* User name: only alphanumeric characters and limited punctuation is allowed.*/ ptr = Req->argv[0]; while (*ptr) { - if (!isalnum(*ptr) && - *ptr != '+' && *ptr != '-' && + if (!isalnum((int)*ptr) && + *ptr != '+' && *ptr != '-' && *ptr != '@' && *ptr != '.' && *ptr != '_') { Conn_Close(Client_Conn(Client), NULL, "Invalid user name", true); @@ -453,6 +426,13 @@ IRC_USER(CLIENT * Client, REQUEST * Req) ptr++; } + /* Save the received username for authentication, and use + * it up to the first '@' as default user name (like ircd2.11, + * bahamut, ircd-seven, ...), prefixed with '~', if needed: */ + Client_SetOrigUser(Client, Req->argv[0]); + ptr = strchr(Req->argv[0], '@'); + if (ptr) + *ptr = '\0'; #ifdef IDENTAUTH ptr = Client_User(Client); if (!ptr || !*ptr || *ptr == '~') @@ -460,7 +440,6 @@ IRC_USER(CLIENT * Client, REQUEST * Req) #else Client_SetUser(Client, Req->argv[0], false); #endif - Client_SetOrigUser(Client, Req->argv[0]); /* "Real name" or user info text: Don't set it to the empty * string, the original ircd can't deal with such "real names" @@ -481,14 +460,11 @@ IRC_USER(CLIENT * Client, REQUEST * Req) } else if (Client_Type(Client) == CLIENT_SERVER || Client_Type(Client) == CLIENT_SERVICE) { /* Server/service updating an user */ - if (Req->argc != 4) - return IRC_WriteStrClient(Client, - ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), - Req->command); + _IRC_ARGC_EQ_OR_RETURN_(Client, Req, 4) + c = Client_Search(Req->prefix); if (!c) - return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->prefix); @@ -508,29 +484,25 @@ IRC_USER(CLIENT * Client, REQUEST * Req) return CONNECTED; } else if (Client_Type(Client) == CLIENT_USER) { /* Already registered connection */ - return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG, + return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG, Client_ID(Client)); } else { /* Unexpected/invalid connection state? */ - return IRC_WriteStrClient(Client, ERR_NOTREGISTERED_MSG, + return IRC_WriteErrClient(Client, ERR_NOTREGISTERED_MSG, Client_ID(Client)); } } /* IRC_USER */ - /** * Handler for the IRC "SERVICE" command. * - * This function implements IRC Services registration using the SERVICE command - * defined in RFC 2812 3.1.6 and RFC 2813 4.1.4. - * * At the moment ngIRCd doesn't support directly linked services, so this * function returns ERR_ERRONEUSNICKNAME when the SERVICE command has not been * received from a peer server. * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED.. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_SERVICE(CLIENT *Client, REQUEST *Req) @@ -544,22 +516,13 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req) if (Client_Type(Client) != CLIENT_GOTPASS && Client_Type(Client) != CLIENT_SERVER) - return IRC_WriteStrClient(Client, ERR_ALREADYREGISTRED_MSG, + return IRC_WriteErrClient(Client, ERR_ALREADYREGISTRED_MSG, Client_ID(Client)); - if (Req->argc != 6) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); - if (Client_Type(Client) != CLIENT_SERVER) - return IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG, + return IRC_WriteErrClient(Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID(Client), Req->argv[0]); - /* Bad number of parameters? */ - if (Req->argc != 6) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); - nick = Req->argv[0]; user = NULL; host = NULL; token = atoi(Req->argv[1]); @@ -569,7 +532,7 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req) /* Validate service name ("nickname") */ c = Client_Search(nick); if(c) { - /* Nickname collission: disconnect (KILL) both clients! */ + /* Nickname collision: disconnect (KILL) both clients! */ Log(LOG_ERR, "Server %s introduces already registered service \"%s\"!", Client_ID(Client), nick); Kill_Nick(nick, "Nick collision"); @@ -621,27 +584,18 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req) return CONNECTED; } /* IRC_SERVICE */ - /** * Handler for the IRC "WEBIRC" command. * - * See doc/Protocol.txt, section II.4: - * "Update webchat/proxy client information". - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_WEBIRC(CLIENT *Client, REQUEST *Req) { - /* Exactly 4 parameters are requited */ - if (Req->argc != 4) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); - if (!Conf_WebircPwd[0] || strcmp(Req->argv[0], Conf_WebircPwd) != 0) - return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG, + return IRC_WriteErrClient(Client, ERR_PASSWDMISMATCH_MSG, Client_ID(Client)); LogDebug("Connection %d: got valid WEBIRC command: user=%s, host=%s, ip=%s", @@ -650,18 +604,17 @@ IRC_WEBIRC(CLIENT *Client, REQUEST *Req) Client_SetUser(Client, Req->argv[1], true); Client_SetOrigUser(Client, Req->argv[1]); Client_SetHostname(Client, Req->argv[2]); + Client_SetIPAText(Client, Req->argv[3]); + return CONNECTED; } /* IRC_WEBIRC */ - /** * Handler for the IRC "QUIT" command. * - * See RFC 2812, 3.1.7 "Quit", and RFC 2813, 4.1.5 "Quit". - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_QUIT( CLIENT *Client, REQUEST *Req ) @@ -672,11 +625,6 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req ) assert(Client != NULL); assert(Req != NULL); - /* Wrong number of arguments? */ - if (Req->argc > 1) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); - if (Req->argc == 1) strlcpy(quitmsg, Req->argv[0], sizeof quitmsg); @@ -691,11 +639,11 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req ) } if (target != Client) { - Client_Destroy(target, "Got QUIT command.", + Client_Destroy(target, "Got QUIT command", Req->argc == 1 ? quitmsg : NULL, true); return CONNECTED; } else { - Conn_Close(Client_Conn(Client), "Got QUIT command.", + Conn_Close(Client_Conn(Client), "Got QUIT command", Req->argc == 1 ? quitmsg : NULL, true); return DISCONNECTED; } @@ -708,14 +656,13 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req ) } /* User, Service, or not yet registered */ - Conn_Close(Client_Conn(Client), "Got QUIT command.", + Conn_Close(Client_Conn(Client), "Got QUIT command", Req->argc == 1 ? quitmsg : NULL, true); return DISCONNECTED; } } /* IRC_QUIT */ - #ifndef STRICT_RFC /** @@ -724,9 +671,9 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req ) * We handle these commands here to avoid the quite long timeout when * some user tries to access this IRC daemon using an web browser ... * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_QUIT_HTTP( CLIENT *Client, REQUEST *Req ) @@ -738,15 +685,12 @@ IRC_QUIT_HTTP( CLIENT *Client, REQUEST *Req ) #endif - /** * Handler for the IRC "PING" command. * - * See RFC 2812, 3.7.2 "Ping message". - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_PING(CLIENT *Client, REQUEST *Req) @@ -757,13 +701,11 @@ IRC_PING(CLIENT *Client, REQUEST *Req) assert(Req != NULL); if (Req->argc < 1) - return IRC_WriteStrClient(Client, ERR_NOORIGIN_MSG, + return IRC_WriteErrClient(Client, ERR_NOORIGIN_MSG, Client_ID(Client)); #ifdef STRICT_RFC /* Don't ignore additional arguments when in "strict" mode */ - if (Req->argc > 2) - return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), Req->command); + _IRC_ARGC_LE_OR_RETURN_(Client, Req, 2) #endif if (Req->argc > 1) { @@ -771,7 +713,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req) target = Client_Search(Req->argv[1]); if (!target || Client_Type(target) != CLIENT_SERVER) - return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG, Client_ID(Client), Req->argv[1]); if (target != Client_ThisServer()) { @@ -781,7 +723,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req) else from = Client; if (!from) - return IRC_WriteStrClient(Client, + return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG, Client_ID(Client), Req->prefix); @@ -799,7 +741,7 @@ IRC_PING(CLIENT *Client, REQUEST *Req) } else from = Client_ThisServer(); if (!from) - return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG, Client_ID(Client), Req->prefix); Log(LOG_DEBUG, "Connection %d: got PING, sending PONG ...", @@ -816,15 +758,12 @@ IRC_PING(CLIENT *Client, REQUEST *Req) #endif } /* IRC_PING */ - /** * Handler for the IRC "PONG" command. * - * See RFC 2812, 3.7.3 "Pong message". - * - * @param Client The client from which this command has been received. - * @param Req Request structure with prefix and all parameters. - * @returns CONNECTED or DISCONNECTED. + * @param Client The client from which this command has been received. + * @param Req Request structure with prefix and all parameters. + * @return CONNECTED or DISCONNECTED. */ GLOBAL bool IRC_PONG(CLIENT *Client, REQUEST *Req) @@ -842,26 +781,20 @@ IRC_PONG(CLIENT *Client, REQUEST *Req) /* Wrong number of arguments? */ if (Req->argc < 1) { if (Client_Type(Client) == CLIENT_USER) - return IRC_WriteStrClient(Client, ERR_NOORIGIN_MSG, + return IRC_WriteErrClient(Client, ERR_NOORIGIN_MSG, Client_ID(Client)); else return CONNECTED; } - if (Req->argc > 2) { - if (Client_Type(Client) == CLIENT_USER) - return IRC_WriteStrClient(Client, - ERR_NEEDMOREPARAMS_MSG, - Client_ID(Client), - Req->command); - else - return CONNECTED; + if (Client_Type(Client) == CLIENT_USER) { + _IRC_ARGC_LE_OR_RETURN_(Client, Req, 2) } /* Forward? */ if (Req->argc == 2 && Client_Type(Client) == CLIENT_SERVER) { target = Client_Search(Req->argv[0]); if (!target) - return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG, + return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG, Client_ID(Client), Req->argv[0]); from = Client_Search(Req->prefix); @@ -869,7 +802,7 @@ IRC_PONG(CLIENT *Client, REQUEST *Req) if (target != Client_ThisServer() && target != from) { /* Ok, we have to forward the message. */ if (!from) - return IRC_WriteStrClient(Client, + return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG, Client_ID(Client), Req->prefix); @@ -907,8 +840,9 @@ IRC_PONG(CLIENT *Client, REQUEST *Req) if (Client_Type(Client) == CLIENT_SERVER && Conn_LastPing(conn) == 0) { Log(LOG_INFO, - "Synchronization with \"%s\" done (connection %d): %ld seconds [%ld users, %ld channels]", + "Synchronization with \"%s\" done (connection %d): %ld second%s [%ld users, %ld channels].", Client_ID(Client), conn, time(NULL) - Conn_GetSignon(conn), + time(NULL) - Conn_GetSignon(conn) == 1 ? "" : "s", Client_UserCount(), Channel_CountVisible(NULL)); Conn_UpdatePing(conn); } else @@ -918,12 +852,11 @@ IRC_PONG(CLIENT *Client, REQUEST *Req) return CONNECTED; } /* IRC_PONG */ - /** * Kill all users with a specific nickname in the network. * - * @param Nick Nickname. - * @param Reason Reason for the KILL. + * @param Nick Nickname. + * @param Reason Reason for the KILL. */ static void Kill_Nick(char *Nick, char *Reason) @@ -938,13 +871,12 @@ Kill_Nick(char *Nick, char *Reason) r.argv[1] = Reason; r.argc = 2; - Log(LOG_ERR, "User(s) with nick \"%s\" will be disconnected: %s", + Log(LOG_ERR, "User(s) with nick \"%s\" will be disconnected: %s!", Nick, Reason); IRC_KILL(Client_ThisServer(), &r); } /* Kill_Nick */ - /** * Change the nickname of a client. * @@ -984,5 +916,4 @@ Change_Nick(CLIENT *Origin, CLIENT *Target, char *NewNick, bool InformClient) Client_SetID(Target, NewNick); } - /* -eof- */