X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/2125182293262c2b32b7f3796b37b4b588b89484..a92275551218402bf4969a7fe613cab27416c4ef:/modules/core/m_nick.c diff --git a/modules/core/m_nick.c b/modules/core/m_nick.c index 56f047f9..a5b94d59 100644 --- a/modules/core/m_nick.c +++ b/modules/core/m_nick.c @@ -20,8 +20,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA - * - * $Id: m_nick.c 3518 2007-06-22 21:59:09Z jilles $ */ #include "stdinc.h" @@ -42,7 +40,6 @@ #include "msg.h" #include "parse.h" #include "modules.h" -#include "common.h" #include "packet.h" #include "scache.h" #include "s_newconf.h" @@ -56,78 +53,86 @@ */ #define SAVE_NICKTS 100 -static int mr_nick(struct Client *, struct Client *, int, const char **); -static int m_nick(struct Client *, struct Client *, int, const char **); -static int mc_nick(struct Client *, struct Client *, int, const char **); -static int ms_nick(struct Client *, struct Client *, int, const char **); -static int ms_uid(struct Client *, struct Client *, int, const char **); -static int ms_euid(struct Client *, struct Client *, int, const char **); -static int ms_save(struct Client *, struct Client *, int, const char **); -static int can_save(struct Client *); +static void mr_nick(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static void m_nick(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static void mc_nick(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static void ms_nick(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static void ms_uid(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static void ms_euid(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static void ms_save(struct MsgBuf *, struct Client *, struct Client *, int, const char **); +static bool can_save(struct Client *); static void save_user(struct Client *, struct Client *, struct Client *); static void bad_nickname(struct Client *, const char *); +static void change_remote_nick(struct Client *, struct Client *, time_t, + const char *, int); +static bool clean_username(const char *); +static bool clean_host(const char *); +static bool clean_uid(const char *uid, const char *sid); + +static void set_initial_nick(struct Client *client_p, struct Client *source_p, char *nick); +static void change_local_nick(struct Client *client_p, struct Client *source_p, char *nick, int); +static void register_client(struct Client *client_p, struct Client *server, + const char *nick, time_t newts, int parc, const char *parv[]); +static void perform_nick_collides(struct Client *, struct Client *, + struct Client *, int, const char **, + time_t, const char *, const char *); +static void perform_nickchange_collides(struct Client *, struct Client *, + struct Client *, int, const char **, time_t, const char *); + +static int h_local_nick_change; +static int h_remote_nick_change; struct Message nick_msgtab = { - "NICK", 0, 0, 0, MFLG_SLOW, + "NICK", 0, 0, 0, 0, {{mr_nick, 0}, {m_nick, 0}, {mc_nick, 3}, {ms_nick, 0}, mg_ignore, {m_nick, 0}} }; struct Message uid_msgtab = { - "UID", 0, 0, 0, MFLG_SLOW, + "UID", 0, 0, 0, 0, {mg_ignore, mg_ignore, mg_ignore, {ms_uid, 9}, mg_ignore, mg_ignore} }; struct Message euid_msgtab = { - "EUID", 0, 0, 0, MFLG_SLOW, + "EUID", 0, 0, 0, 0, {mg_ignore, mg_ignore, mg_ignore, {ms_euid, 12}, mg_ignore, mg_ignore} }; struct Message save_msgtab = { - "SAVE", 0, 0, 0, MFLG_SLOW, + "SAVE", 0, 0, 0, 0, {mg_ignore, mg_ignore, mg_ignore, {ms_save, 3}, mg_ignore, mg_ignore} }; mapi_clist_av1 nick_clist[] = { &nick_msgtab, &uid_msgtab, &euid_msgtab, &save_msgtab, NULL }; -DECLARE_MODULE_AV1(nick, NULL, NULL, nick_clist, NULL, NULL, "$Revision: 3518 $"); +mapi_hlist_av1 nick_hlist[] = { + { "local_nick_change", &h_local_nick_change }, + { "remote_nick_change", &h_remote_nick_change }, + { NULL, NULL } +}; -static int change_remote_nick(struct Client *, struct Client *, time_t, - const char *, int); +static const char nick_desc[] = + "Provides the NICK client and server commands as well as the UID, EUID, and SAVE TS6 server commands"; -static int clean_nick(const char *, int loc_client); -static int clean_username(const char *); -static int clean_host(const char *); -static int clean_uid(const char *uid, const char *sid); - -static void set_initial_nick(struct Client *client_p, struct Client *source_p, char *nick); -static void change_local_nick(struct Client *client_p, struct Client *source_p, char *nick, int); -static int register_client(struct Client *client_p, struct Client *server, - const char *nick, time_t newts, int parc, const char *parv[]); - -static int perform_nick_collides(struct Client *, struct Client *, - struct Client *, int, const char **, - time_t, const char *, const char *); -static int perform_nickchange_collides(struct Client *, struct Client *, - struct Client *, int, const char **, time_t, const char *); +DECLARE_MODULE_AV2(nick, NULL, NULL, nick_clist, nick_hlist, NULL, NULL, NULL, nick_desc); /* mr_nick() * parv[1] = nickname */ -static int -mr_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +mr_nick(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; char nick[NICKLEN]; - if (strlen(client_p->id) == 3) + if (strlen(client_p->id) == 3 || (source_p->preClient && !EmptyString(source_p->preClient->id))) { exit_client(client_p, client_p, client_p, "Mixing client and server protocol"); - return 0; + return; } if(parc < 2 || EmptyString(parv[1])) { sendto_one(source_p, form_str(ERR_NONICKNAMEGIVEN), me.name, EmptyString(source_p->name) ? "*" : source_p->name); - return 0; + return; } /* copy the nick and terminate it */ @@ -138,7 +143,7 @@ mr_nick(struct Client *client_p, struct Client *source_p, int parc, const char * { sendto_one(source_p, form_str(ERR_ERRONEUSNICKNAME), me.name, EmptyString(source_p->name) ? "*" : source_p->name, parv[1]); - return 0; + return; } /* check if the nick is resv'd */ @@ -146,31 +151,29 @@ mr_nick(struct Client *client_p, struct Client *source_p, int parc, const char * { sendto_one(source_p, form_str(ERR_ERRONEUSNICKNAME), me.name, EmptyString(source_p->name) ? "*" : source_p->name, nick); - return 0; + return; } - if(irc_dictionary_find(nd_dict, nick)) + if(rb_dictionary_find(nd_dict, nick)) { sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE), me.name, EmptyString(source_p->name) ? "*" : source_p->name, nick); - return 0; + return; } if((target_p = find_named_client(nick)) == NULL) set_initial_nick(client_p, source_p, nick); else if(source_p == target_p) - strcpy(source_p->name, nick); + rb_strlcpy(source_p->name, nick, sizeof(source_p->name)); else sendto_one(source_p, form_str(ERR_NICKNAMEINUSE), me.name, "*", nick); - - return 0; } /* m_nick() * parv[1] = nickname */ -static int -m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +m_nick(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; char nick[NICKLEN]; @@ -178,7 +181,7 @@ m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *p if(parc < 2 || EmptyString(parv[1])) { sendto_one(source_p, form_str(ERR_NONICKNAMEGIVEN), me.name, source_p->name); - return 0; + return; } /* mark end of grace period, to prevent nickflooding */ @@ -192,20 +195,20 @@ m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *p if(!clean_nick(nick, 1)) { sendto_one(source_p, form_str(ERR_ERRONEUSNICKNAME), me.name, source_p->name, nick); - return 0; + return; } if(!IsExemptResv(source_p) && find_nick_resv(nick)) { sendto_one(source_p, form_str(ERR_ERRONEUSNICKNAME), me.name, source_p->name, nick); - return 0; + return; } - if(irc_dictionary_find(nd_dict, nick)) + if(rb_dictionary_find(nd_dict, nick)) { sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE), me.name, EmptyString(source_p->name) ? "*" : source_p->name, nick); - return 0; + return; } if((target_p = find_named_client(nick))) @@ -230,12 +233,10 @@ m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *p else sendto_one(source_p, form_str(ERR_NICKNAMEINUSE), me.name, source_p->name, nick); - return 0; + return; } else change_local_nick(client_p, source_p, nick, 1); - - return 0; } /* mc_nick() @@ -244,8 +245,8 @@ m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *p * parv[1] = nickname * parv[2] = TS when nick change */ -static int -mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +mc_nick(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; time_t newts = 0; @@ -254,7 +255,7 @@ mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char * if(!clean_nick(parv[1], 0)) { bad_nickname(client_p, parv[1]); - return 0; + return; } newts = atol(parv[2]); @@ -280,12 +281,10 @@ mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char * else perform_nickchange_collides(source_p, client_p, target_p, parc, parv, newts, parv[1]); - - return 0; } -static int -ms_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +ms_nick(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { const char *nick, *server; @@ -302,8 +301,6 @@ ms_nick(struct Client *client_p, struct Client *source_p, int parc, const char * client_p->name, nick, server); exit_client(client_p, client_p, &me, "TS5 nickname introduced"); - - return 0; } /* ms_uid() @@ -317,8 +314,8 @@ ms_nick(struct Client *client_p, struct Client *source_p, int parc, const char * * parv[8] - UID * parv[9] - gecos */ -static int -ms_uid(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +ms_uid(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; time_t newts = 0; @@ -328,49 +325,49 @@ ms_uid(struct Client *client_p, struct Client *source_p, int parc, const char *p if(parc != 10) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Dropping server %s due to (invalid) command 'UID' " "with %d arguments (expecting 10)", client_p->name, parc); ilog(L_SERVER, "Excess parameters (%d) for command 'UID' from %s.", parc, client_p->name); - rb_snprintf(squitreason, sizeof squitreason, + snprintf(squitreason, sizeof squitreason, "Excess parameters (%d) to %s command, expecting %d", parc, "UID", 10); exit_client(client_p, client_p, client_p, squitreason); - return 0; + return; } /* if nicks erroneous, or too long, kill */ if(!clean_nick(parv[1], 0)) { bad_nickname(client_p, parv[1]); - return 0; + return; } if(!clean_uid(parv[8], source_p->id)) { - rb_snprintf(squitreason, sizeof squitreason, + snprintf(squitreason, sizeof squitreason, "Invalid UID %s for nick %s on %s/%s", parv[8], parv[1], source_p->name, source_p->id); exit_client(client_p, client_p, client_p, squitreason); - return 0; + return; } if(!clean_username(parv[5]) || !clean_host(parv[6])) { ServerStats.is_kill++; - sendto_realops_snomask(SNO_DEBUG, L_ALL, + sendto_realops_snomask(SNO_DEBUG, L_NETWIDE, "Bad user@host: %s@%s From: %s(via %s)", parv[5], parv[6], source_p->name, client_p->name); sendto_one(client_p, ":%s KILL %s :%s (Bad user@host)", me.id, parv[8], me.name); - return 0; + return; } /* check length of clients gecos */ if(strlen(parv[9]) > REALLEN) { char *s = LOCAL_COPY(parv[9]); - sendto_realops_snomask(SNO_GENERAL, L_ALL, "Long realname from server %s for %s", + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Long realname from server %s for %s", source_p->name, parv[1]); s[REALLEN] = '\0'; parv[9] = s; @@ -391,8 +388,6 @@ ms_uid(struct Client *client_p, struct Client *source_p, int parc, const char *p else perform_nick_collides(source_p, client_p, target_p, parc, parv, newts, parv[1], parv[8]); - - return 0; } /* ms_euid() @@ -408,8 +403,8 @@ ms_uid(struct Client *client_p, struct Client *source_p, int parc, const char *p * parv[10] - account * parv[11] - gecos */ -static int -ms_euid(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +ms_euid(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; time_t newts = 0; @@ -419,59 +414,59 @@ ms_euid(struct Client *client_p, struct Client *source_p, int parc, const char * if(parc != 12) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Dropping server %s due to (invalid) command 'EUID' " "with %d arguments (expecting 12)", client_p->name, parc); ilog(L_SERVER, "Excess parameters (%d) for command 'EUID' from %s.", parc, client_p->name); - rb_snprintf(squitreason, sizeof squitreason, + snprintf(squitreason, sizeof squitreason, "Excess parameters (%d) to %s command, expecting %d", parc, "EUID", 12); exit_client(client_p, client_p, client_p, squitreason); - return 0; + return; } /* if nicks erroneous, or too long, kill */ if(!clean_nick(parv[1], 0)) { bad_nickname(client_p, parv[1]); - return 0; + return; } if(!clean_uid(parv[8], source_p->id)) { - rb_snprintf(squitreason, sizeof squitreason, + snprintf(squitreason, sizeof squitreason, "Invalid UID %s for nick %s on %s/%s", parv[8], parv[1], source_p->name, source_p->id); exit_client(client_p, client_p, client_p, squitreason); - return 0; + return; } if(!clean_username(parv[5]) || !clean_host(parv[6])) { ServerStats.is_kill++; - sendto_realops_snomask(SNO_DEBUG, L_ALL, + sendto_realops_snomask(SNO_DEBUG, L_NETWIDE, "Bad user@host: %s@%s From: %s(via %s)", parv[5], parv[6], source_p->name, client_p->name); sendto_one(client_p, ":%s KILL %s :%s (Bad user@host)", me.id, parv[8], me.name); - return 0; + return; } if(strcmp(parv[9], "*") && !clean_host(parv[9])) { ServerStats.is_kill++; - sendto_realops_snomask(SNO_DEBUG, L_ALL, + sendto_realops_snomask(SNO_DEBUG, L_NETWIDE, "Bad realhost: %s From: %s(via %s)", parv[9], source_p->name, client_p->name); sendto_one(client_p, ":%s KILL %s :%s (Bad user@host)", me.id, parv[8], me.name); - return 0; + return; } /* check length of clients gecos */ if(strlen(parv[11]) > REALLEN) { char *s = LOCAL_COPY(parv[11]); - sendto_realops_snomask(SNO_GENERAL, L_ALL, "Long realname from server %s for %s", + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Long realname from server %s for %s", source_p->name, parv[1]); s[REALLEN] = '\0'; parv[11] = s; @@ -492,22 +487,20 @@ ms_euid(struct Client *client_p, struct Client *source_p, int parc, const char * else perform_nick_collides(source_p, client_p, target_p, parc, parv, newts, parv[1], parv[8]); - - return 0; } /* ms_save() * parv[1] - UID * parv[2] - TS */ -static int -ms_save(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) +static void +ms_save(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; target_p = find_id(parv[1]); if (target_p == NULL) - return 0; + return; if (!IsPerson(target_p)) sendto_realops_snomask(SNO_GENERAL, L_ALL, "Ignored SAVE message for non-person %s from %s", @@ -522,48 +515,15 @@ ms_save(struct Client *client_p, struct Client *source_p, int parc, const char * sendto_realops_snomask(SNO_SKILL, L_ALL, "Ignored SAVE message for %s from %s", target_p->name, source_p->name); - return 0; -} - -/* clean_nick() - * - * input - nickname to check - * output - 0 if erroneous, else 1 - * side effects - - */ -static int -clean_nick(const char *nick, int loc_client) -{ - int len = 0; - - /* nicks cant start with a digit or -, and must have a length */ - if(*nick == '-' || *nick == '\0') - return 0; - - if(loc_client && IsDigit(*nick)) - return 0; - - for(; *nick; nick++) - { - len++; - if(!IsNickChar(*nick)) - return 0; - } - - /* nicklen is +1 */ - if(len >= NICKLEN && (unsigned int)len >= ConfigFileEntry.nicklen) - return 0; - - return 1; } /* clean_username() * * input - username to check - * output - 0 if erroneous, else 0 + * output - false if erroneous, else true * side effects - */ -static int +static bool clean_username(const char *username) { int len = 0; @@ -573,22 +533,22 @@ clean_username(const char *username) len++; if(!IsUserChar(*username)) - return 0; + return false; } if(len > USERLEN) - return 0; + return false; - return 1; + return true; } /* clean_host() * * input - host to check - * output - 0 if erroneous, else 0 + * output - false if erroneous, else true * side effects - */ -static int +static bool clean_host(const char *host) { int len = 0; @@ -598,38 +558,38 @@ clean_host(const char *host) len++; if(!IsHostChar(*host)) - return 0; + return false; } if(len > HOSTLEN) - return 0; + return false; - return 1; + return true; } -static int +static bool clean_uid(const char *uid, const char *sid) { int len = 1; if(strncmp(uid, sid, strlen(sid))) - return 0; + return false; if(!IsDigit(*uid++)) - return 0; + return false; for(; *uid; uid++) { len++; if(!IsIdChar(*uid)) - return 0; + return false; } if(len != IDLEN - 1) - return 0; + return false; - return 1; + return true; } static void @@ -642,10 +602,10 @@ set_initial_nick(struct Client *client_p, struct Client *source_p, char *nick) if(source_p->name[0]) del_from_client_hash(source_p->name, source_p); - strcpy(source_p->name, nick); + rb_strlcpy(source_p->name, nick, sizeof(source_p->name)); add_to_client_hash(nick, source_p); - rb_snprintf(note, sizeof(note), "Nick: %s", nick); + snprintf(note, sizeof(note), "Nick: %s", nick); rb_note(client_p->localClient->F, note); if(source_p->flags & FLAGS_SENTUSER) @@ -664,6 +624,7 @@ change_local_nick(struct Client *client_p, struct Client *source_p, struct Channel *chptr; char note[NICKLEN + 10]; int samenick; + hook_cdata hook_info; if (dosend) { @@ -681,7 +642,7 @@ change_local_nick(struct Client *client_p, struct Client *source_p, source_p->localClient->last_nick_change = rb_current_time(); source_p->localClient->number_of_nick_changes++; - if(ConfigFileEntry.anti_nick_flood && !IsOper(source_p) && + if(ConfigFileEntry.anti_nick_flood && !IsOperGeneral(source_p) && source_p->localClient->number_of_nick_changes > ConfigFileEntry.max_nick_changes) { sendto_one(source_p, form_str(ERR_NICKTOOFAST), @@ -707,18 +668,23 @@ change_local_nick(struct Client *client_p, struct Client *source_p, invalidate_bancache_user(source_p); } + hook_info.client = source_p; + hook_info.arg1 = source_p->name; + hook_info.arg2 = nick; + call_hook(h_local_nick_change, &hook_info); + sendto_realops_snomask(SNO_NCHANGE, L_ALL, "Nick change: From %s to %s [%s@%s]", source_p->name, nick, source_p->username, source_p->host); /* send the nick change to the users channels */ - sendto_common_channels_local(source_p, NOCAPS, ":%s!%s@%s NICK :%s", + sendto_common_channels_local(source_p, NOCAPS, NOCAPS, ":%s!%s@%s NICK :%s", source_p->name, source_p->username, source_p->host, nick); /* send the nick change to servers.. */ if(source_p->user) { - add_history(source_p, 1); + whowas_add_history(source_p, 1); if (dosend) { @@ -729,7 +695,7 @@ change_local_nick(struct Client *client_p, struct Client *source_p, /* Finally, add to hash */ del_from_client_hash(source_p->name, source_p); - strcpy(source_p->name, nick); + rb_strlcpy(source_p->name, nick, sizeof(source_p->name)); add_to_client_hash(nick, source_p); if(!samenick) @@ -750,7 +716,7 @@ change_local_nick(struct Client *client_p, struct Client *source_p, rb_dlinkDestroy(ptr, &source_p->on_allow_list); } - rb_snprintf(note, sizeof(note), "Nick: %s", nick); + snprintf(note, sizeof(note), "Nick: %s", nick); rb_note(client_p->localClient->F, note); return; @@ -759,12 +725,13 @@ change_local_nick(struct Client *client_p, struct Client *source_p, /* * change_remote_nick() */ -static int +static void change_remote_nick(struct Client *client_p, struct Client *source_p, time_t newts, const char *nick, int dosend) { struct nd_entry *nd; int samenick = irccmp(source_p->name, nick) ? 0 : 1; + hook_cdata hook_info; /* client changing their nick - dont reset ts if its same */ if(!samenick) @@ -773,12 +740,17 @@ change_remote_nick(struct Client *client_p, struct Client *source_p, monitor_signoff(source_p); } - sendto_common_channels_local(source_p, NOCAPS, ":%s!%s@%s NICK :%s", + hook_info.client = source_p; + hook_info.arg1 = source_p->name; + hook_info.arg2 = nick; + call_hook(h_remote_nick_change, &hook_info); + + sendto_common_channels_local(source_p, NOCAPS, NOCAPS, ":%s!%s@%s NICK :%s", source_p->name, source_p->username, source_p->host, nick); if(source_p->user) { - add_history(source_p, 1); + whowas_add_history(source_p, 1); if (dosend) { sendto_server(client_p, NULL, CAP_TS6, NOCAPS, ":%s NICK %s :%ld", @@ -789,10 +761,10 @@ change_remote_nick(struct Client *client_p, struct Client *source_p, del_from_client_hash(source_p->name, source_p); /* invalidate nick delay when a remote client uses the nick.. */ - if((nd = irc_dictionary_retrieve(nd_dict, nick))) + if((nd = rb_dictionary_retrieve(nd_dict, nick))) free_nd_entry(nd); - strcpy(source_p->name, nick); + rb_strlcpy(source_p->name, nick, sizeof(source_p->name)); add_to_client_hash(nick, source_p); if(!samenick) @@ -800,11 +772,9 @@ change_remote_nick(struct Client *client_p, struct Client *source_p, /* remove all accepts pointing to the client */ del_all_accepts(source_p); - - return 0; } -static int +static void perform_nick_collides(struct Client *source_p, struct Client *client_p, struct Client *target_p, int parc, const char *parv[], time_t newts, const char *nick, const char *uid) @@ -820,7 +790,7 @@ perform_nick_collides(struct Client *source_p, struct Client *client_p, /* if we dont have a ts, or their TS's are the same, kill both */ if(!newts || !target_p->tsinfo || (newts == target_p->tsinfo)) { - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick collision on %s(%s <- %s)(both %s)", target_p->name, target_p->from->name, client_p->name, action); @@ -852,7 +822,7 @@ perform_nick_collides(struct Client *source_p, struct Client *client_p, target_p->flags |= FLAGS_KILLED; exit_client(client_p, target_p, &me, "Nick collision (new)"); } - return 0; + return; } /* the timestamps are different */ else @@ -878,17 +848,17 @@ perform_nick_collides(struct Client *source_p, struct Client *client_p, sendto_one(client_p, ":%s KILL %s :%s (Nick collision (new))", me.id, uid, me.name); - return 0; + return; } else { if(sameuser) - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick collision on %s(%s <- %s)(older %s)", target_p->name, target_p->from->name, client_p->name, action); else - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick collision on %s(%s <- %s)(newer %s)", target_p->name, target_p->from->name, client_p->name, action); @@ -914,14 +884,12 @@ perform_nick_collides(struct Client *source_p, struct Client *client_p, register_client(client_p, source_p, nick, newts, parc, parv); - - return 0; } } } -static int +static void perform_nickchange_collides(struct Client *source_p, struct Client *client_p, struct Client *target_p, int parc, const char *parv[], time_t newts, const char *nick) @@ -937,7 +905,7 @@ perform_nickchange_collides(struct Client *source_p, struct Client *client_p, /* its a client changing nick and causing a collide */ if(!newts || !target_p->tsinfo || (newts == target_p->tsinfo) || !source_p->user) { - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick change collision from %s to %s(%s <- %s)(both %s)", source_p->name, target_p->name, target_p->from->name, client_p->name, action); @@ -969,7 +937,7 @@ perform_nickchange_collides(struct Client *source_p, struct Client *client_p, source_p->flags |= FLAGS_KILLED; exit_client(client_p, source_p, &me, "Nick collision(old)"); } - return 0; + return; } else { @@ -980,12 +948,12 @@ perform_nickchange_collides(struct Client *source_p, struct Client *client_p, (!sameuser && newts > target_p->tsinfo)) { if(sameuser) - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick change collision from %s to %s(%s <- %s)(older %s)", source_p->name, target_p->name, target_p->from->name, client_p->name, action); else - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick change collision from %s to %s(%s <- %s)(newer %s)", source_p->name, target_p->name, target_p->from->name, client_p->name, action); @@ -1020,17 +988,17 @@ perform_nickchange_collides(struct Client *source_p, struct Client *client_p, else exit_client(client_p, source_p, &me, "Nick collision(new)"); } - return 0; + return; } else { if(sameuser) - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick collision on %s(%s <- %s)(older %s)", target_p->name, target_p->from->name, client_p->name, action); else - sendto_realops_snomask(SNO_SKILL, L_ALL, + sendto_realops_snomask(SNO_SKILL, L_NETWIDE, "Nick collision on %s(%s <- %s)(newer %s)", target_p->name, target_p->from->name, client_p->name, action); @@ -1057,11 +1025,9 @@ perform_nickchange_collides(struct Client *source_p, struct Client *client_p, } change_remote_nick(client_p, source_p, newts, nick, 1); - - return 0; } -static int +static void register_client(struct Client *client_p, struct Client *server, const char *nick, time_t newts, int parc, const char *parv[]) { @@ -1078,7 +1044,7 @@ register_client(struct Client *client_p, struct Client *server, source_p->hopcount = atoi(parv[2]); source_p->tsinfo = newts; - strcpy(source_p->name, nick); + rb_strlcpy(source_p->name, nick, sizeof(source_p->name)); rb_strlcpy(source_p->username, parv[5], sizeof(source_p->username)); rb_strlcpy(source_p->host, parv[6], sizeof(source_p->host)); rb_strlcpy(source_p->orighost, source_p->host, sizeof(source_p->orighost)); @@ -1111,7 +1077,7 @@ register_client(struct Client *client_p, struct Client *server, } /* remove any nd entries for this nick */ - if((nd = irc_dictionary_retrieve(nd_dict, nick))) + if((nd = rb_dictionary_retrieve(nd_dict, nick))) free_nd_entry(nd); add_to_client_hash(nick, source_p); @@ -1170,25 +1136,25 @@ register_client(struct Client *client_p, struct Client *server, call_hook(h_new_remote_user, source_p); - return (introduce_client(client_p, source_p, user, nick, parc == 12)); + introduce_client(client_p, source_p, user, nick, parc == 12); } /* Check if we can do SAVE. target_p can be a client to save or a * server introducing a client -- jilles */ -static int +static bool can_save(struct Client *target_p) { struct Client *serv_p; if (MyClient(target_p)) - return 1; + return true; if (!has_id(target_p)) - return 0; + return false; serv_p = IsServer(target_p) ? target_p : target_p->servptr; while (serv_p != NULL && serv_p != &me) { if (!(serv_p->serv->caps & CAP_SAVE)) - return 0; + return false; serv_p = serv_p->servptr; } return serv_p == &me; @@ -1202,7 +1168,7 @@ save_user(struct Client *client_p, struct Client *source_p, { /* This shouldn't happen */ /* Note we only need SAVE support in this direction */ - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Killed %s!%s@%s for nick collision detected by %s (%s does not support SAVE)", target_p->name, target_p->username, target_p->host, source_p->name, target_p->from->name); kill_client_serv_butone(NULL, target_p, "%s (Nick collision (no SAVE support))", me.name); @@ -1244,7 +1210,7 @@ static void bad_nickname(struct Client *client_p, const char *nick) ilog(L_SERVER, "Link %s cancelled, bad nickname %s sent (NICKLEN mismatch?)", client_p->name, nick); - rb_snprintf(squitreason, sizeof squitreason, + snprintf(squitreason, sizeof squitreason, "Bad nickname introduced [%s]", nick); exit_client(client_p, client_p, &me, squitreason); }