From 69a121278fcdebbf56fbf3127f25e577c55ff4fb Mon Sep 17 00:00:00 2001 From: Bram Matthys Date: Sat, 12 Sep 2015 11:16:02 +0200 Subject: [PATCH] De-duplicate code. Make sendto_serv_butone_nickcmd() use sendto_one_nickcmd(). Fixes bug reported by Adam. --- include/h.h | 4 +--- src/modules/m_nick.c | 6 +---- src/send.c | 57 ++++++++++++++++---------------------------- 3 files changed, 23 insertions(+), 44 deletions(-) diff --git a/include/h.h b/include/h.h index 9fcaa4ed0..fcdec6860 100644 --- a/include/h.h +++ b/include/h.h @@ -255,9 +255,7 @@ extern void *MyMallocEx(size_t size); extern int advanced_check(char *userhost, int ipstat); extern int send_queued(aClient *); extern void sendto_connectnotice(aClient *sptr, int disconnect, char *comment); -extern void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, char *nick, int hopcount, -long lastnick, char *username, char *realhost, char *server, char *svid, char *info, char *umodes, -char *virthost); +extern void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, char *umodes); extern void sendto_message_one(aClient *to, aClient *from, char *sender, char *cmd, char *nick, char *msg); #define PREFIX_ALL 0 diff --git a/src/modules/m_nick.c b/src/modules/m_nick.c index 946ae907a..3d471d089 100644 --- a/src/modules/m_nick.c +++ b/src/modules/m_nick.c @@ -1517,11 +1517,7 @@ int _register_user(aClient *cptr, aClient *sptr, char *nick, char *username, cha send_umode(NULL, sptr, 0, SEND_UMODES|UMODE_SERVNOTICE, buf); /* NICKv2 Servers ! */ - sendto_serv_butone_nickcmd(cptr, sptr, nick, - sptr->hopcount + 1, sptr->lastnick, user->username, user->realhost, - user->server, user->svid, sptr->info, - (*buf == '\0' ? "+" : buf), - sptr->umodes & UMODE_SETHOST ? sptr->user->virthost : NULL); + sendto_serv_butone_nickcmd(cptr, sptr, (*buf == '\0' ? "+" : buf)); if (MyConnect(sptr)) { diff --git a/src/send.c b/src/send.c index 026229ee6..73bcae737 100644 --- a/src/send.c +++ b/src/send.c @@ -1270,51 +1270,36 @@ void sendto_fconnectnotice(aClient *acptr, int disconnect, char *comment) } } -/* - * sendto_server_butone_nickcmd - * - * Send a message to all connected servers except the client 'one'. +/** Introduce user to NICKv2-capable and SID-capable servers. + * @param cptr Server to skip + * @param sptr Client to introduce + * @param umodes User modes of client */ -void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, - char *nick, int hopcount, - long lastnick, char *username, char *realhost, char *server, - char *svid, char *info, char *umodes, char *virthost) +void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, char *umodes) { aClient *cptr; - char *vhost; - if (!*umodes) + if (BadPtr(umodes)) umodes = "+"; - - if (IsHidden(sptr)) - vhost = sptr->user->virthost; - else - vhost = sptr->user->realhost; - - if (*sptr->id) + + list_for_each_entry(cptr, &server_list, special_node) { - sendto_server(one, PROTO_SID, 0, - ":%s UID %s %d %ld %s %s %s %s %s %s %s %s :%s", - sptr->srvptr->id, nick, hopcount, lastnick, username, - realhost, sptr->id, svid, umodes, vhost, getcloak(sptr), - encode_ip(sptr->ip), info); - } + va_list vl; - /* Hmmm this code had PROTO_NICKv2|PROTO_VHP as 2nd argument which - * caused NICK messages not to be sent to non-SID servers. - * I removed PROTO_VHP here seeing nenolod already ripped out the - * SupportVHP() check ~20 lines up. Double check if this is OK? - */ - sendto_server(one, PROTO_NICKv2, *sptr->id ? PROTO_SID : 0, - "NICK %s %d %ld %s %s %s %s %s %s %s %s :%s", - nick, hopcount, lastnick, username, - realhost, server, svid, umodes, vhost, getcloak(sptr), - encode_ip(sptr->ip), info); + if (one && cptr == one->from) + continue; + + if (!CHECKPROTO(cptr, PROTO_SID) && !CHECKPROTO(cptr, PROTO_NICKv2)) + continue; + + sendto_one_nickcmd(cptr, sptr, umodes); + } } -/* - * sendto_one_nickcmd - * +/** Introduce user to NICKv2-capable and SID-capable servers. + * @param cptr Server to send to (locally connected!) + * @param sptr Client to introduce + * @param umodes User modes of client */ void sendto_one_nickcmd(aClient *cptr, aClient *sptr, char *umodes) {