summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bahamut.c203
-rw-r--r--src/botserv.c3
-rw-r--r--src/channels.c11
-rw-r--r--src/chanserv.c18
-rw-r--r--src/compat.c1
-rw-r--r--src/config.c2
-rw-r--r--src/dreamforge.c194
-rw-r--r--src/hybrid.c193
-rw-r--r--src/log.c13
-rw-r--r--src/misc.c3
-rw-r--r--src/mysql.c6
-rw-r--r--src/nickserv.c26
-rw-r--r--src/protocol.c168
-rw-r--r--src/ptlink.c197
-rw-r--r--src/rageircd.c251
-rw-r--r--src/send.c111
-rw-r--r--src/sockutil.c1
-rw-r--r--src/ultimate2.c182
-rw-r--r--src/ultimate3.c185
-rw-r--r--src/unreal31.c183
-rw-r--r--src/unreal32.c181
-rw-r--r--src/viagra.c201
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
diff --git a/src/log.c b/src/log.c
index 64e2e4b81..ec9ee2532 100644
--- a/src/log.c
+++ b/src/log.c
@@ -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