diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bahamut.c | 203 | ||||
-rw-r--r-- | src/botserv.c | 3 | ||||
-rw-r--r-- | src/channels.c | 11 | ||||
-rw-r--r-- | src/chanserv.c | 18 | ||||
-rw-r--r-- | src/compat.c | 1 | ||||
-rw-r--r-- | src/config.c | 2 | ||||
-rw-r--r-- | src/dreamforge.c | 194 | ||||
-rw-r--r-- | src/hybrid.c | 193 | ||||
-rw-r--r-- | src/log.c | 13 | ||||
-rw-r--r-- | src/misc.c | 3 | ||||
-rw-r--r-- | src/mysql.c | 6 | ||||
-rw-r--r-- | src/nickserv.c | 26 | ||||
-rw-r--r-- | src/protocol.c | 168 | ||||
-rw-r--r-- | src/ptlink.c | 197 | ||||
-rw-r--r-- | src/rageircd.c | 251 | ||||
-rw-r--r-- | src/send.c | 111 | ||||
-rw-r--r-- | src/sockutil.c | 1 | ||||
-rw-r--r-- | src/ultimate2.c | 182 | ||||
-rw-r--r-- | src/ultimate3.c | 185 | ||||
-rw-r--r-- | src/unreal31.c | 183 | ||||
-rw-r--r-- | src/unreal32.c | 181 | ||||
-rw-r--r-- | src/viagra.c | 201 |
22 files changed, 1740 insertions, 593 deletions
diff --git a/src/bahamut.c b/src/bahamut.c index b605924d7..16c41795e 100644 --- a/src/bahamut.c +++ b/src/bahamut.c @@ -402,18 +402,26 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + + if (!buf) { + return; + } - if (ircdcap->tsmode) { - if (uplink_capab & ircdcap->tsmode) { - send_cmd(source, "MODE %s 0 %s", dest, buf); + if (ircdcap->tsmode) { + if (uplink_capab & ircdcap->tsmode) { + send_cmd(source, "MODE %s 0 %s", dest, buf); + } else { + send_cmd(source, "MODE %s %s", dest, buf); + } } else { send_cmd(source, "MODE %s %s", dest, buf); } - } else { - send_cmd(source, "MODE %s %s", dest, buf); } } @@ -652,9 +660,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -714,13 +726,19 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - if (!source || !user) { + if (!source || !user || !fmt) { return; } va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + + if (!buf) { + return; + } send_cmd(source, "SVSKILL %s :%s", user, buf); } @@ -921,10 +939,18 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); - send_cmd(NULL, "NOTICE @%s :%s", dest, buf); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + + if (!buf) { + return; + } + send_cmd(NULL, "NOTICE @%s :%s", dest, buf); + } } /* NOTICE */ @@ -932,9 +958,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -952,9 +985,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -979,9 +1019,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } @@ -1000,9 +1047,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -1012,9 +1066,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -1024,9 +1085,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -1036,9 +1104,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -1048,9 +1123,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -1094,9 +1176,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -1105,9 +1195,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -1117,9 +1214,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -1135,9 +1240,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -1183,9 +1292,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -1296,4 +1409,14 @@ void anope_cmd_svid_umode3(User * u, char *ts) } } +/* NICK <newnick> */ +void anope_cmd_chg_nick(char *oldnick, char *newnick) +{ + if (!oldnick || !newnick) { + return; + } + + send_cmd(oldnick, "NICK %s", newnick); +} + #endif diff --git a/src/botserv.c b/src/botserv.c index 361662a31..03fdafdf5 100644 --- a/src/botserv.c +++ b/src/botserv.c @@ -6,7 +6,7 @@ * Please read COPYING and README for furhter details. * * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. + * Based on the original code of Services by Andy Church. * * $Id$ * @@ -1025,6 +1025,7 @@ static void bot_kick(ChannelInfo * ci, User * u, int message, ...) if (!fmt) return; vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); av[0] = ci->name; av[1] = u->nick; diff --git a/src/channels.c b/src/channels.c index acb0caad8..9e32629e3 100644 --- a/src/channels.c +++ b/src/channels.c @@ -140,10 +140,15 @@ int chan_has_user_status(Channel * chan, User * user, int16 status) { struct u_chanlist *uc; - for (uc = user->chans; uc; uc = uc->next) - if (uc->chan == chan) + for (uc = user->chans; uc; uc = uc->next) { + if (uc->chan == chan) { + if (debug) { + alog("chan_has_user_status wanted %d the user is %d", + status, uc->status); + } return (uc->status & status); - + } + } return 0; } diff --git a/src/chanserv.c b/src/chanserv.c index 63f9bfeca..b3948cd25 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -2515,6 +2515,21 @@ static int do_register(User * u) return MOD_CONT; } + /* Confirm that the channel is in the RFC spec */ + if (*chan != '#' || *chan == '&') { + /* RFC says channels start with & or # so if the first is not # complain */ + notice_lang(s_ChanServ, u, CHAN_SYMBOL_REQUIRED); + return MOD_CONT; + } + + /* Throw a message that the channel is non existant */ + if (!(c = findchan(chan))) { + alog("%s: %s attempted to register a non-existant channel [%s] ", + s_ChanServ, u->nick, chan); + notice_lang(s_NickServ, u, CHAN_REGISTER_NONE_CHANNEL, chan); + return MOD_CONT; + } + if (!desc) { syntax_error(s_ChanServ, u, "REGISTER", CHAN_REGISTER_SYNTAX); } else if (*chan == '&') { @@ -2533,8 +2548,7 @@ static int do_register(User * u) } } else if (!stricmp(chan, "#")) { notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan); - } else if (!(c = findchan(chan)) - || !chan_has_user_status(c, u, CUS_OP)) { + } else if (!chan_has_user_status(c, u, CUS_OP)) { notice_lang(s_ChanServ, u, CHAN_MUST_BE_CHANOP); } else if (!is_servadmin && nc->channelmax > 0 diff --git a/src/compat.c b/src/compat.c index 15e99529b..65140933e 100644 --- a/src/compat.c +++ b/src/compat.c @@ -43,6 +43,7 @@ int snprintf(char *buf, size_t len, const char *fmt, ...) va_start(args, fmt); return vsnprintf(buf, len, fmt, args); + /* Again should have va_end() here */ } #endif /* !HAVE_SNPRINTF */ diff --git a/src/config.c b/src/config.c index e2d09f9e3..9a9209db6 100644 --- a/src/config.c +++ b/src/config.c @@ -655,6 +655,8 @@ void error(int linenum, char *message, ...) va_start(args, message); vsnprintf(buf, sizeof(buf), message, args); + va_end(args); + #ifndef NOT_MAIN if (linenum) alog("%s:%d: %s", SERVICES_CONF, linenum, buf); diff --git a/src/dreamforge.c b/src/dreamforge.c index e9c90aa5c..365ddf466 100644 --- a/src/dreamforge.c +++ b/src/dreamforge.c @@ -484,9 +484,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -521,13 +525,20 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - if (!source || !user) { + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { return; } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!source || !user) { + return; + } send_cmd(source, "KILL %s :%s", user, buf); } @@ -582,9 +593,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } @@ -680,9 +698,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } @@ -690,9 +716,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -701,9 +735,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -721,9 +762,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -755,9 +803,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -780,9 +832,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -792,9 +851,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -804,9 +870,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -816,9 +889,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -828,9 +908,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -874,9 +961,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -885,9 +980,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -897,9 +999,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -916,9 +1026,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -1120,4 +1234,14 @@ void anope_cmd_svid_umode3(User * u, char *ts) // not used } +/* NICK <newnick> */ +void anope_cmd_chg_nick(char *oldnick, char *newnick) +{ + if (!oldnick || !newnick) { + return; + } + + send_cmd(oldnick, "NICK %s", newnick); +} + #endif diff --git a/src/hybrid.c b/src/hybrid.c index 1a290f30b..53900431c 100644 --- a/src/hybrid.c +++ b/src/hybrid.c @@ -391,9 +391,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -411,9 +418,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -438,9 +452,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "WALLOPS :%s", buf); } @@ -629,13 +650,20 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - if (!source || !user) { + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { return; } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!source || !user) { + return; + } send_cmd(source, "KILL %s :%s", user, buf); } @@ -696,11 +724,15 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; - + *buf = '\0'; if (fmt) { va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (buf) { send_cmd(nick, "PART %s :%s", chan, buf); } else { send_cmd(nick, "PART %s", chan); @@ -850,9 +882,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -862,9 +901,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -874,9 +920,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -886,9 +939,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -898,9 +958,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -944,9 +1011,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -955,9 +1030,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -967,9 +1049,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -977,9 +1067,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } @@ -994,9 +1092,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -1009,9 +1111,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -1025,9 +1135,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -1150,5 +1264,14 @@ void anope_cmd_svid_umode3(User * u, char *ts) // not used } +/* NICK <newnick> */ +void anope_cmd_chg_nick(char *oldnick, char *newnick) +{ + if (!oldnick || !newnick) { + return; + } + + send_cmd(oldnick, "NICK %s", newnick); +} #endif @@ -125,6 +125,10 @@ void alog(const char *fmt, ...) checkday(); + if (!fmt) { + return; + } + va_start(args, fmt); time(&t); tm = *localtime(&t); @@ -160,6 +164,7 @@ void alog(const char *fmt, ...) privmsg(s_GlobalNoticer, LogChannel, str); } + va_end(args); errno = errno_save; } @@ -178,6 +183,10 @@ void log_perror(const char *fmt, ...) checkday(); + if (!fmt) { + return; + } + va_start(args, fmt); time(&t); tm = *localtime(&t); @@ -207,6 +216,7 @@ void log_perror(const char *fmt, ...) fprintf(stderr, ": %s\n", strerror(errno_save)); } errno = errno_save; + va_end(args); } /*************************************************************************/ @@ -249,6 +259,8 @@ void fatal(const char *fmt, ...) fprintf(stderr, "%sFATAL: %s\n", buf, buf2); if (servsock >= 0) anope_cmd_global(NULL, "FATAL ERROR! %s", buf2); + + va_end(args); exit(1); } @@ -293,6 +305,7 @@ void fatal_perror(const char *fmt, ...) if (servsock >= 0) anope_cmd_global(NULL, "FATAL ERROR! %s: %s", buf2, strerror(errno_save)); + va_end(args); exit(1); } diff --git a/src/misc.c b/src/misc.c index 4a2236b7d..6b3369341 100644 --- a/src/misc.c +++ b/src/misc.c @@ -257,6 +257,9 @@ int process_numlist(const char *numstr, int *count_ret, } if (count_ret) *count_ret = count; + + va_end(args); + return retval; } diff --git a/src/mysql.c b/src/mysql.c index 64b538776..932b6a5db 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -232,8 +232,10 @@ char *db_mysql_secure(char *pass) memset(epass, '\0', BUFSIZE); #ifdef USE_ENCRYPTION - /* If we use the builtin encryption don't double encrypt! */ - snprintf(epass, sizeof(epass), "'%s'", pass); + if (pass) { + /* If we use the builtin encryption don't double encrypt! */ + snprintf(epass, sizeof(epass), "'%s'", pass); + } #else if (!pass) { diff --git a/src/nickserv.c b/src/nickserv.c index 34cc88339..924c90bca 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -1154,7 +1154,18 @@ void cancel_user(User * u) int nick_identified(User * u) { - return u->na && (u->na->status & NS_IDENTIFIED); + if (u) { + if (u->na) { + if (u->na->status) { + return (u->na->status & NS_IDENTIFIED); + } else { + return 0; + } + } else { + return 0; + } + } + return 0; } /*************************************************************************/ @@ -1163,7 +1174,18 @@ int nick_identified(User * u) int nick_recognized(User * u) { - return u->na && (u->na->status & (NS_IDENTIFIED | NS_RECOGNIZED)); + if (u) { + if (u->na) { + if (u->na->status) { + return (u->na->status & (NS_IDENTIFIED | NS_RECOGNIZED)); + } else { + return 0; + } + } else { + return 0; + } + } + return 0; } /*************************************************************************/ diff --git a/src/protocol.c b/src/protocol.c deleted file mode 100644 index ba021bf3f..000000000 --- a/src/protocol.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Simple interfaces to various protocols. - * - * (C) 2003 Anope Team - * Contact us at info@anope.org - * - * Please read COPYING and README for furhter details. - * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. - * - * $Id$ - * - */ - -#include "services.h" - -/* Makes an permanent ban from all the servers. Assumes that the matching clients are killed. */ - -void s_akill(char *user, char *host, char *who, time_t when, - time_t expires, char *reason) -{ -#if defined(IRC_BAHAMUT) - /* send_cmd(NULL, "AKILL %s %s %d %s %ld :%s", host, user, 86400*2, who, when, reason); */ - send_cmd(NULL, "AKILL %s %s %d %s %ld :%s", host, user, - 86400 * 2, who, time(NULL), reason); - -#elif defined(IRC_UNREAL) - send_cmd(NULL, "TKL + G %s %s %s %ld %ld :%s", user, host, who, time(NULL) + 86400 * 2, /* Avoids filling the akill list of servers too much */ - when, reason); -#elif defined(IRC_DREAMFORGE) - send_cmd(NULL, "AKILL %s %s :%s", host, user, reason); -#elif defined(IRC_PTLINK) - send_cmd(ServerName, "GLINE %s@%s %i %s :%s", user, host, 86400 * 2, - who, reason); -#elif defined(IRC_HYBRID) - send_cmd(s_OperServ, "KLINE * %ld %s %s :%s", - (expires - (long) time(NULL)), user, host, reason); -#endif -} - -/*************************************************************************/ - -/* Removes a permanent ban from all the servers. */ - -void s_rakill(char *user, char *host) -{ -#if defined(IRC_PTLINK) - send_cmd(NULL, "UNGLINE %s@%s", user, host); -#elif defined(IRC_UNREAL) - send_cmd(NULL, "TKL - G %s %s %s", user, host, s_OperServ); -#elif !defined(IRC_HYBRID) - send_cmd(NULL, "RAKILL %s %s", host, user); -#endif -} - -/*************************************************************************/ - -void s_sgline(char *mask, char *reason) -{ -#ifdef IRC_BAHAMUT - /* User *u; */ - - send_cmd(NULL, "SGLINE %d :%s:%s", strlen(mask), mask, reason); - - /* Do things properly: kill all corresponding users as this is - unfortunately not done by the IRCds :/ */ - /* Breaks things currently! */ - /* for (u = firstuser(); u; u = nextuser()) - if (match_wild_nocase(mask, u->realname)) - send_cmd(NULL, "SVSKILL %s :G-Lined: %s", u->nick, reason); */ -#endif -} - -/*************************************************************************/ - -void s_sqline(char *mask, char *reason) -{ -#ifdef IRC_BAHAMUT - if (*mask == '#') { - int i; - Channel *c, *next; - - char *av[3]; - struct c_userlist *cu, *cunext; - - send_cmd(NULL, "SQLINE %s :%s", mask, reason); - - for (i = 0; i < 1024; i++) { - for (c = chanlist[i]; c; c = next) { - next = c->next; - - if (!match_wild_nocase(mask, c->name)) - continue; - - for (cu = c->users; cu; cu = cunext) { - cunext = cu->next; - - if (is_oper(cu->user)) - continue; - - av[0] = c->name; - av[1] = cu->user->nick; - av[2] = reason; - send_cmd(s_OperServ, "KICK %s %s :Q-Lined: %s", av[0], - av[1], av[2]); - do_kick(s_ChanServ, 3, av); - } - } - } - } else { -#endif - send_cmd(NULL, "SQLINE %s :%s", mask, reason); - -#ifdef IRC_BAHAMUT - } -#endif -} - -/*************************************************************************/ - -void s_svsnoop(char *server, int set) -{ -#ifndef IRC_HYBRID -#ifdef IRC_PTLINK - send_cmd(NULL, "SVSADMIN %s :%s", server, set ? "noopers" : "rehash"); -#else - send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-")); -#endif -#endif -} - -/*************************************************************************/ - -void s_szline(char *mask, char *reason) -{ -#ifdef IRC_BAHAMUT - send_cmd(NULL, "SZLINE %s :%s", mask, reason); -#endif -} - -/*************************************************************************/ - -void s_unsgline(char *mask) -{ -#ifdef IRC_BAHAMUT - send_cmd(NULL, "UNSGLINE 0 :%s", mask); -#endif -} - -/*************************************************************************/ - -void s_unsqline(char *mask) -{ -#ifdef IRC_BAHAMUT - send_cmd(NULL, "UNSQLINE 0 %s", mask); -#else - send_cmd(NULL, "UNSQLINE %s", mask); -#endif -} - -/*************************************************************************/ - -void s_unszline(char *mask) -{ -#ifdef IRC_BAHAMUT - send_cmd(NULL, "UNSZLINE 0 %s", mask); -#endif -} diff --git a/src/ptlink.c b/src/ptlink.c index a57ebbf6b..d33a44792 100644 --- a/src/ptlink.c +++ b/src/ptlink.c @@ -541,13 +541,20 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - if (!source || !user) { + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { return; } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!source || !user) { + return; + } send_cmd(source, "KILL %s :%s", user, buf); } @@ -709,9 +716,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -720,9 +735,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -740,9 +762,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -767,9 +796,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } @@ -788,9 +824,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -800,9 +843,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -812,9 +862,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -824,9 +881,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -836,9 +900,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -882,9 +953,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -893,9 +972,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -905,9 +991,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -915,9 +1009,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } @@ -934,9 +1036,16 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -950,9 +1059,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -965,11 +1078,15 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; - + *buf = '\0'; if (fmt) { va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (buf) { send_cmd(nick, "PART %s :%s", chan, buf); } else { send_cmd(nick, "PART %s", chan); @@ -1213,5 +1330,15 @@ void anope_cmd_svid_umode3(User * u, char *ts) /* Bahamuts have this extra one, since they can check on even nick changes */ } +/* NICK <newnick> */ +void anope_cmd_chg_nick(char *oldnick, char *newnick) +{ + if (!oldnick || !newnick) { + return; + } + + send_cmd(oldnick, "NICK %s", newnick); +} + #endif diff --git a/src/rageircd.c b/src/rageircd.c index 617b75696..f398f2894 100644 --- a/src/rageircd.c +++ b/src/rageircd.c @@ -20,15 +20,15 @@ const char version_protocol[] = "RageIRCd 2.0.x"; IRCDVar ircd[] = { {"RageIRCd 2.0.*", /* ircd name */ - "+dS", /* nickserv mode */ - "+dS", /* chanserv mode */ - "+dS", /* memoserv mode */ - "+dS", /* hostserv mode */ - "+diS", /* operserv mode */ - "+dS", /* botserv mode */ - "+dSh", /* helpserv mode */ - "+diS", /* Dev/Null mode */ - "+diS", /* Global mode */ + "+d", /* nickserv mode */ + "+d", /* chanserv mode */ + "+d", /* memoserv mode */ + "+d", /* hostserv mode */ + "+di", /* operserv mode */ + "+d", /* botserv mode */ + "+dh", /* helpserv mode */ + "+di", /* Dev/Null mode */ + "+di", /* Global mode */ "+o", /* nickserv alias mode */ "+o", /* chanserv alias mode */ "+o", /* memoserv alias mode */ @@ -38,9 +38,9 @@ IRCDVar ircd[] = { "+o", /* helpserv alias mode */ "+i", /* Dev/Null alias mode */ "+io", /* Global alias mode */ - "+S", /* Used by BotServ Bots */ + "+", /* Used by BotServ Bots */ 3, /* Chan Max Symbols */ - "-iklmnpRstcOASCNM", /* Modes to Remove */ + "-iklmnpRstcOACNM", /* Modes to Remove */ "+o", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ @@ -52,38 +52,38 @@ IRCDVar ircd[] = { "-r+d", /* Mode on Nick Change */ 1, /* Supports SGlines */ 1, /* Supports SQlines */ - 1, /* Supports SZlines */ + 0, /* Supports SZlines */ 1, /* Supports Halfop +h */ 3, /* Number of server args */ 0, /* Join 2 Set */ 0, /* Join 2 Message */ 1, /* Has exceptions +e */ 0, /* TS Topic Forward */ - 0, /* TS Topci Backward */ + 0, /* TS Topic Backward */ 0, /* Protected Umode */ 1, /* Has Admin */ 1, /* Chan SQlines */ 1, /* Quit on Kill */ - 1, /* SVSMODE unban */ + 0, /* SVSMODE unban */ 0, /* Has Protect */ 0, /* Reverse */ 1, /* Chan Reg */ CMODE_r, /* Channel Mode */ 0, /* vidents */ - 0, /* svshold */ + 1, /* svshold */ 1, /* time stamp on mode */ - 0, /* NICKIP */ + 1, /* NICKIP */ 0, /* UMODE */ 0, /* O:LINE */ 1, /* VHOST ON NICK */ 0, /* Change RealName */ - CHAN_HELP_ULTIMATE3, /* ChanServ extra */ - 0, /* No Knock */ - CMODE_A, /* Admin Only */ - DEFAULT_MLOCK, /* Default MLOCK */ - UMODE_x, /* Vhost Mode */ - 0, /* +f */ - 0, /* +L */ + CHAN_HELP_ULTIMATE3, /* ChanServ extra */ + CMODE_p, /* No Knock */ + CMODE_A, /* Admin Only */ + DEFAULT_MLOCK, /* Default MLOCK */ + UMODE_x, /* Vhost Mode */ + 0, /* +f */ + 0, /* +L */ 0, 0, 1, @@ -282,7 +282,6 @@ CBModeInfo cbmodeinfos[] = { {'N', CMODE_N, 0, NULL, NULL}, {'O', CMODE_O, 0, NULL, NULL}, {'R', CMODE_R, 0, NULL, NULL}, - {'S', CMODE_S, 0, NULL, NULL}, {0} }; @@ -534,9 +533,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -557,12 +560,12 @@ void anope_cmd_topic(char *whosets, char *chan, char *whosetit, void anope_cmd_vhost_off(char *nick) { - send_cmd(s_HostServ, "SVSMODE %s -z", nick); + send_cmd(s_HostServ, "SVSMODE %s -x", nick); } void anope_cmd_vhost_on(char *nick, char *vIdent, char *vhost) { - send_cmd(s_HostServ, "SVSMODE %s +z", nick); + send_cmd(s_HostServ, "SVSMODE %s +x", nick); send_cmd(ServerName, "VHOST %s %s", nick, vhost); } @@ -587,12 +590,20 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (!source || !user) { return; } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "SVSKILL %s :%s", user, buf); } @@ -711,9 +722,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } @@ -722,9 +740,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -733,9 +759,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -753,9 +786,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -806,9 +846,16 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (ircdcap->tsmode) { if (uplink_capab & ircdcap->tsmode) { @@ -827,9 +874,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -884,9 +935,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -896,9 +954,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -908,9 +973,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -920,9 +992,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -932,9 +1011,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -978,9 +1064,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -989,9 +1083,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -1001,9 +1102,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -1060,9 +1169,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -1208,13 +1321,14 @@ void anope_cmd_pass(char *pass) /* SVSHOLD - set */ void anope_cmd_svshold(char *nick) { - /* Not supported */ + send_cmd(ServerName, "SVSHOLD %s %d :%s", nick, NSReleaseTimeout, + "Being held for registered user"); } /* SVSHOLD - release */ void anope_cmd_relase_svshold(char *nick) { - /* Not supported */ + send_cmd(ServerName, "SVSHOLD %s 0", nick); } void anope_cmd_svsnick(char *source, char *guest, time_t when) @@ -1228,8 +1342,8 @@ void anope_cmd_svsnick(char *source, char *guest, time_t when) void anope_cmd_guest_nick(char *nick, char *user, char *host, char *real, char *modes) { - send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 %s * :%s", nick, time(NULL), - user, host, ServerName, modes, real); + send_cmd(NULL, "SNICK %s %ld 1 %s %s 0 * %s 0 %s :%s", nick, + time(NULL), user, host, ServerName, modes, real); } @@ -1268,6 +1382,15 @@ void anope_cmd_svid_umode3(User * u, char *ts) } } +/* NICK <newnick> */ +void anope_cmd_chg_nick(char *oldnick, char *newnick) +{ + if (!oldnick || !newnick) { + return; + } + + send_cmd(oldnick, "NICK %s", newnick); +} #endif diff --git a/src/send.c b/src/send.c index ec7bc66ee..c90f45b24 100644 --- a/src/send.c +++ b/src/send.c @@ -23,24 +23,34 @@ void send_cmd(const char *source, const char *fmt, ...) { va_list args; - va_start(args, fmt); - vsend_cmd(source, fmt, args); - va_end(args); + if (fmt) { + va_start(args, fmt); + vsend_cmd(source, fmt, args); + va_end(args); + } } void vsend_cmd(const char *source, const char *fmt, va_list args) { char buf[BUFSIZE]; + *buf = '\0'; - vsnprintf(buf, sizeof(buf), fmt, args); - if (source) { - sockprintf(servsock, ":%s %s\r\n", source, buf); - if (debug) - alog("debug: Sent: :%s %s", source, buf); - } else { - sockprintf(servsock, "%s\r\n", buf); - if (debug) - alog("debug: Sent: %s", buf); + if (fmt) { + vsnprintf(buf, BUFSIZE - 1, fmt, args); + + if (!buf) { + return; + } + + if (source) { + sockprintf(servsock, ":%s %s\r\n", source, buf); + if (debug) + alog("debug: Sent: :%s %s", source, buf); + } else { + sockprintf(servsock, "%s\r\n", buf); + if (debug) + alog("debug: Sent: %s", buf); + } } } @@ -50,14 +60,22 @@ void notice_server(char *source, Server * s, char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); - vsnprintf(buf, sizeof(buf), fmt, args); - if (UsePrivmsg) { - anope_cmd_serv_privmsg(source, s->name, buf); - } else { - anope_cmd_serv_notice(source, s->name, buf); + if (!buf) { + return; + } + + if (UsePrivmsg) { + anope_cmd_serv_privmsg(source, s->name, buf); + } else { + anope_cmd_serv_notice(source, s->name, buf); + } + va_end(args); } } @@ -67,14 +85,22 @@ void notice_user(char *source, User * u, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); - vsnprintf(buf, sizeof(buf), fmt, args); - if (UsePrivmsg && (!u->na || (u->na->nc->flags & NI_MSG))) { - anope_cmd_privmsg2(source, u->nick, buf); - } else { - anope_cmd_notice2(source, u->nick, buf); + if (!buf) { + return; + } + + if (UsePrivmsg && (!u->na || (u->na->nc->flags & NI_MSG))) { + anope_cmd_privmsg2(source, u->nick, buf); + } else { + anope_cmd_notice2(source, u->nick, buf); + } + va_end(args); } } @@ -105,7 +131,7 @@ void notice_lang(char *source, User * dest, int message, ...) char buf[4096]; /* because messages can be really big */ char *s, *t; const char *fmt; - if (!dest) + if (!dest || !message) return; va_start(args, message); fmt = getstring(dest->na, message); @@ -125,6 +151,7 @@ void notice_lang(char *source, User * dest, int message, ...) anope_cmd_notice2(source, dest->nick, *t ? t : " "); } } + va_end(args); } /*************************************************************************/ @@ -140,7 +167,7 @@ void notice_help(char *source, User * dest, int message, ...) char *s, *t; const char *fmt; - if (!dest) + if (!dest || !message) return; va_start(args, message); fmt = getstring(dest->na, message); @@ -166,6 +193,7 @@ void notice_help(char *source, User * dest, int message, ...) anope_cmd_notice2(source, dest->nick, *outbuf ? outbuf : " "); } } + va_end(args); } /*************************************************************************/ @@ -175,14 +203,22 @@ void notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); - vsnprintf(buf, sizeof(buf), fmt, args); - if (UsePrivmsg) { - anope_cmd_privmsg2(source, dest, buf); - } else { - anope_cmd_notice2(source, dest, buf); + if (!buf) { + return; + } + + if (UsePrivmsg) { + anope_cmd_privmsg2(source, dest, buf); + } else { + anope_cmd_notice2(source, dest, buf); + } + va_end(args); } } @@ -193,9 +229,16 @@ void privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } anope_cmd_privmsg2(source, dest, buf); } diff --git a/src/sockutil.c b/src/sockutil.c index 2ce091c2d..b2a552cf7 100644 --- a/src/sockutil.c +++ b/src/sockutil.c @@ -439,6 +439,7 @@ int sockprintf(int s, char *fmt, ...) va_start(args, fmt); return buffered_write(s, buf, vsnprintf(buf, sizeof(buf), fmt, args)); + /* no va_end() but not sure how to squeeze it in here */ } /*************************************************************************/ diff --git a/src/ultimate2.c b/src/ultimate2.c index c58d876fc..4273b7123 100644 --- a/src/ultimate2.c +++ b/src/ultimate2.c @@ -672,9 +672,16 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "KILL %s :%s", user, buf); } @@ -748,9 +755,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -777,9 +788,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -789,9 +807,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -801,9 +826,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -813,9 +845,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -825,9 +864,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -871,9 +917,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -882,9 +936,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -894,9 +955,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -905,9 +974,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } @@ -1089,9 +1165,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -1104,9 +1184,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -1115,9 +1203,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -1135,9 +1230,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -1177,9 +1279,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -1192,9 +1298,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } diff --git a/src/ultimate3.c b/src/ultimate3.c index fb866d447..8cce51154 100644 --- a/src/ultimate3.c +++ b/src/ultimate3.c @@ -654,9 +654,16 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "SVSKILL %s :%s", user, buf); } @@ -974,9 +981,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } @@ -993,9 +1008,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -1008,9 +1027,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -1019,9 +1046,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -1039,9 +1073,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -1078,9 +1119,16 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -1156,9 +1204,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -1185,9 +1237,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -1197,9 +1256,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -1209,9 +1275,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -1221,9 +1294,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -1233,9 +1313,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -1279,9 +1366,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -1290,9 +1385,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -1302,9 +1404,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -1313,9 +1423,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } diff --git a/src/unreal31.c b/src/unreal31.c index 72e30ff1f..dc745f210 100644 --- a/src/unreal31.c +++ b/src/unreal31.c @@ -493,6 +493,16 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (!source || !user) { return; @@ -500,6 +510,7 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) va_start(args, fmt); vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); send_cmd(source, "KILL %s :%s", user, buf); } @@ -551,9 +562,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } @@ -570,9 +589,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -585,9 +608,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -596,9 +627,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -616,9 +654,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -639,7 +684,6 @@ void anope_cmd_serv_privmsg(char *source, char *dest, char *msg) } - void anope_cmd_bot_chan_mode(char *nick, char *chan) { anope_cmd_mode(nick, chan, "%s %s %s", ircd->botchanumode, nick, nick); @@ -657,9 +701,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -747,9 +795,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -776,9 +828,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -788,9 +847,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -800,9 +866,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -812,9 +885,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -824,9 +904,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -870,9 +957,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -881,9 +976,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -893,9 +995,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -904,9 +1014,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } diff --git a/src/unreal32.c b/src/unreal32.c index a48fa0b94..b0d3a006c 100644 --- a/src/unreal32.c +++ b/src/unreal32.c @@ -495,13 +495,19 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - if (!source || !user) { + if (!source || !user || !fmt) { return; } va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + + if (!buf) { + return; + } send_cmd(source, "KILL %s :%s", user, buf); } @@ -553,9 +559,17 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(source, "MODE %s %s", dest, buf); } @@ -572,9 +586,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -587,9 +605,17 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "NOTICE @%s :%s", dest, buf); } @@ -598,9 +624,16 @@ void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -618,9 +651,16 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -657,9 +697,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -747,9 +791,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -776,9 +824,16 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -788,9 +843,16 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -800,9 +862,16 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -812,9 +881,16 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -824,9 +900,16 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -870,9 +953,17 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -881,9 +972,16 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -893,9 +991,17 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -904,9 +1010,16 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } diff --git a/src/viagra.c b/src/viagra.c index c47278057..ee34e6401 100644 --- a/src/viagra.c +++ b/src/viagra.c @@ -664,9 +664,13 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (!nick || !chan) { return; @@ -720,24 +724,36 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; if (!source || !user) { return; } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); - - send_cmd(source, "SVSKILL %s :%s", user, buf); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + send_cmd(source, "SVSKILL %s :%s", user, buf); + } + return; } void anope_cmd_mode(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } if (ircdcap->tsmode) { if (uplink_capab & ircdcap->tsmode) { @@ -755,9 +771,13 @@ void anope_cmd_quit(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "QUIT :%s", buf); @@ -994,19 +1014,32 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); - send_cmd(NULL, "NOTICE @%s :%s", dest, buf); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + send_cmd(NULL, "NOTICE @%s :%s", dest, buf); + } + return; } void anope_cmd_notice(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (!buf) { + return; + } if (UsePrivmsg) { anope_cmd_privmsg2(source, dest, buf); @@ -1024,9 +1057,17 @@ void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } send_cmd(source, "PRIVMSG %s :%s", dest, buf); } @@ -1051,9 +1092,17 @@ void anope_cmd_global(char *source, const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } send_cmd(source ? source : ServerName, "GLOBOPS :%s", buf); } @@ -1072,9 +1121,17 @@ void anope_cmd_250(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (!buf) { + return; + } send_cmd(NULL, "250 %s ", buf); } @@ -1084,9 +1141,17 @@ void anope_cmd_307(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (!buf) { + return; + } send_cmd(ServerName, "307 %s ", buf); } @@ -1096,9 +1161,17 @@ void anope_cmd_311(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } send_cmd(ServerName, "311 %s ", buf); } @@ -1108,9 +1181,17 @@ void anope_cmd_312(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } send_cmd(ServerName, "312 %s ", buf); } @@ -1120,9 +1201,17 @@ void anope_cmd_317(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (!buf) { + return; + } send_cmd(ServerName, "317 %s ", buf); } @@ -1166,9 +1255,18 @@ void anope_cmd_242(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "242 %s ", buf); } @@ -1177,9 +1275,17 @@ void anope_cmd_243(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (!buf) { + return; + } send_cmd(NULL, "243 %s ", buf); } @@ -1189,9 +1295,18 @@ void anope_cmd_211(const char *fmt, ...) { va_list args; char buf[BUFSIZE]; + *buf = '\0'; + + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } + + if (!buf) { + return; + } - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); send_cmd(NULL, "211 %s ", buf); } @@ -1215,9 +1330,13 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt, { va_list args; char buf[BUFSIZE]; + *buf = '\0'; - va_start(args, fmt); - vsnprintf(buf, sizeof(buf), fmt, args); + if (fmt) { + va_start(args, fmt); + vsnprintf(buf, BUFSIZE - 1, fmt, args); + va_end(args); + } if (buf) { send_cmd(source, "KICK %s %s :%s", chan, user, buf); @@ -1344,6 +1463,14 @@ void anope_cmd_svid_umode3(User * u, char *ts) } } +/* NICK <newnick> */ +void anope_cmd_chg_nick(char *oldnick, char *newnick) +{ + if (!oldnick || !newnick) { + return; + } + send_cmd(oldnick, "NICK %s", newnick); +} #endif |