summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes9
-rw-r--r--Changes.lang7
-rwxr-xr-xConfig2
-rw-r--r--configure.in18
-rw-r--r--docs/IRCD309
-rw-r--r--include/rageircd.h13
-rw-r--r--lang/cat.l5
-rw-r--r--lang/de.l4
-rw-r--r--lang/en_us.l5
-rw-r--r--lang/es.l5
-rw-r--r--lang/fr.l5
-rw-r--r--lang/gr.l5
-rw-r--r--lang/hun.l6
-rw-r--r--lang/it.l5
-rw-r--r--lang/nl.l5
-rw-r--r--lang/pl.l5
-rw-r--r--lang/pt.l5
-rw-r--r--lang/ru.l5
-rw-r--r--lang/tr.l5
-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
-rw-r--r--version.log6
42 files changed, 2149 insertions, 613 deletions
diff --git a/Changes b/Changes
index ab3b94a3a..3adc6f5a7 100644
--- a/Changes
+++ b/Changes
@@ -6,6 +6,15 @@ Provided by Anope Dev. <dev@anope.org> - 2004
Provided by Trystan <trystan@nomadirc.net> - 2004
08/23 A New protocol independent design (aka anope-capab). [ #00]
+08/28 A New IRCD document for adding new ircd support to new design. [ #00]
+08/28 F Channel registration handling for non chanops. [#142]
+08/28 F Protection from accessing unavailable struct data. [#152]
+08/28 F Rage2 mode +M/+A channel support. [#154]
+08/28 F Rage2 Beta6 support. [#155]
+08/28 F Undefined references on botserv.c upon compilation. [#156]
+08/28 F Memory leaks taken care of. [#157]
+08/28 F Buffer preparation for vsnprintf() call. [#158]
+
Anope Version 1.7.5
-------------------
diff --git a/Changes.lang b/Changes.lang
index 19bc817f0..ae72d1347 100644
--- a/Changes.lang
+++ b/Changes.lang
@@ -2,6 +2,13 @@ Anope Version S V N
-------------------
*** New Strings:
+ CHAN_REGISTER_NONE_CHANNEL
+ CHAN_SYMBOL_REQUIRED
+ OPER_SVSNICK_UNSUPPORTED
+ OPER_SQLINE_UNSUPPORTED
+ OPER_SVSO_UNSUPPORTED
+ OPER_UMODE_UNSUPPORTED
+
*** Mod Strings:
*** Del Strings:
diff --git a/Config b/Config
index 657d55681..27aebfb10 100755
--- a/Config
+++ b/Config
@@ -220,7 +220,7 @@ echo " 5) UltimateIRCd 3.0.0 [alpha26 or later]"
echo " 6) Hybrid IRCd 7.0 [experimental]"
echo " 7) ViagraIRCd 1.3.x [or later]"
echo " 8) PTlink 6.15.0 [experimental]"
-echo " 9) RageIRCd 2.0 [beta-3 or later]"
+echo " 9) RageIRCd 2.0.0 [beta-6 or later]"
echo " 10) Unreal 3.2 [Unreal 3.2 beta19 or later]"
diff --git a/configure.in b/configure.in
index c574760e1..9a1cf41e8 100644
--- a/configure.in
+++ b/configure.in
@@ -191,24 +191,22 @@ AC_ARG_WITH(ircd, [ --with-ircd=ircd Specify the first ircd type], [
elif test "$withval" = "IRC_BAHAMUT"; then
AC_DEFINE(IRC_BAHAMUT,1,"First IRCD type")
elif test "$withval" = "IRC_UNREAL"; then
- AC_DEFINE(IRC_DREAMFORGE,1,"First IRCD type")
- AC_DEFINE(IRC_UNREAL,1,"Second IRCD type")
+ AC_DEFINE(IRC_UNREAL31,1,"First IRCD type")
elif test "$withval" = "IRC_ULTIMATE"; then
- AC_DEFINE(IRC_DREAMFORGE,1,"First IRCD type")
- AC_DEFINE(IRC_ULTIMATE,1,"Second IRCD type")
+ AC_DEFINE(IRC_ULTIMATE,1,"First IRCD type")
elif test "$withval" = "IRC_ULTIMATE3"; then
- AC_DEFINE(IRC_DREAMFORGE,1,"First IRCD type")
- AC_DEFINE(IRC_ULTIMATE3,1,"Second IRCD type")
+ AC_DEFINE(IRC_ULTIMATE3,1,"First IRCD type")
elif test "$withval" = "IRC_HYBRID"; then
AC_DEFINE(IRC_HYBRID,1,"First IRCD type")
elif test "$withval" = "IRC_VIAGRA"; then
- AC_DEFINE(IRC_BAHAMUT,1,"First IRCD type")
- AC_DEFINE(IRC_VIAGRA,1,"Second IRCD type")
+ AC_DEFINE(IRC_VIAGRA,1,"First IRCD type")
elif test "$withval" = "IRC_PTLINK"; then
AC_DEFINE(IRC_PTLINK,1,"First IRCD type")
elif test "$withval" = "IRC_RAGE2"; then
- AC_DEFINE(IRC_BAHAMUT,1,"First IRCD type")
- AC_DEFINE(IRC_RAGE2,1,"Second IRCD type")
+ AC_DEFINE(IRC_RAGE2,1,"First IRCD type")
+ elif test "$withval" = "IRC_UNREAL32"; then
+ AC_DEFINE(IRC_UNREAL32,1,"First IRCD type")
+
fi
])
diff --git a/docs/IRCD b/docs/IRCD
new file mode 100644
index 000000000..d09d4ce2f
--- /dev/null
+++ b/docs/IRCD
@@ -0,0 +1,309 @@
+HOW TO ADD IRCD SUPPORT
+
+1. Files to edit
+2. Structure
+3. Functions / Events
+4. CAPAB/PROTOCTL
+
+1. FILES TO EDIT
+
+When preparing to add support to Anope for your ircd, you need to edit the
+following files.
+
+A. Make a copy of the .c and .h file of the IRCD that closely matches the ircd
+ that you are attempting to add support for.
+B. Make a backup copy of services.h
+C. Make a backup copy of Config, and src/Makefile
+
+
+2. STRUCTURE
+To allow for easy code change to support your ircd. There are two structs that
+make up the simplest variables to allow you to quickly change out your ircd
+without much work.
+
+IRCDVar ircd[] = { }
+
+This contains your basic ircd functions, here is a brief description of the
+usage of each.
+
+1. Name : this member tells Anope about the ircds name, it may contain text about its
+ name and version. This is used to identify the build on startup.
+
+2. NickServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+3. ChanServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+4. MemoServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+5. HostServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag. - note if your ircd does not support hostserv,
+ you can make this NULL or +, as there is a check used before bringing hostserv online
+
+6. OperServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+7. BotServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+8. HelpServ Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of helper flag, or service flag.
+
+9. Dev/Null Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of user flag, or service flag.
+
+10. Global Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+11. NickServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+12. ChanServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+13. MemoServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+14. HostServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag. - note if your ircd does not support hostserv,
+ you can make this NULL or +, as there is a check used before bringing hostserv online
+
+15. OperServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+16. BotServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+17. HelpServ Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of helper flag, or service flag.
+
+18. Dev/Null Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of user flag, or service flag.
+
+19. Global Alias Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of oper flag, or service flag.
+
+20. BotServ's Bots Mode : this is the user mode set by Anope, normally you want this to be a
+ some form of service flag, you can use + for no mode at all
+
+20. Max Channel Mode Symbols : this is the total number of possible, channel modes that can
+ appears before a nick. Remember to count each possible mode, so +ov is 2
+
+21. Modes to Remove : this is every mode that Anope should remove when stripping channel modes
+
+22. Mode used by BotServ bots : When a BotServ bot joins a channel, this is the mode set on them
+ normally you want them to protected and oped (+o)
+
+23. SVSNICK : can the ircd use svsnick to change someones nick, otherwise kill is used, 1 = yes
+ 0 = no
+
+24. VHOST : can change a users host on the fly - enabling this will allow hostserv online, 1 = yes
+ 0 = no
+
+25. OWNER : has a channel umode for owning the channel, example Unreal has +q, 1 = yes
+ 0 = no
+
+26. OWNER MODE SET : what mode to set to make someone the owner, if the ircd doesn't support owners, set
+ this to NULL
+
+27. OWNER MODE UNSET : what mode to unset to take away someone as owner, if the ircd doesn't support
+ owners, set this to NULL
+
+28. Mode on Nick Register : what mode to set on NickServ registration if your ircd doesn't set a mode, set
+ this to NULL
+
+29. Mode on Nick Unregister : what mode to set on NickServ unregistration if your ircd doesn't set a mode, set
+ this to NULL
+
+30. Mode on Nick Change : what mode to set on nick change if your ircd doesn't set a mode, set
+ this to NULL
+
+31. SGLINE : realname (geocs) bans, 1 = yes 0 = no
+
+32. SQLINE : nick bans, 1 = yes 0 = no
+
+33. SZLINE : szline bans, 1 = yes 0 = no
+
+34. HALFOP : channel mode +h, 1 = yes 0 = no
+
+35. Number of Server Args : when an ircd connects this is the number of parameters that are passed
+
+36. Join to Set : services must join the channel to set modes, 1 = yes 0 = no
+
+37. Join to Message : services must join the channel to send messages (can not override +n), 1 = yes 0 = no
+
+38. Exceptions : channel mode +e, 1 = yes 0 = no
+
+39. Time Stamp on topics Forward : Unreal ircds like their topic ts set forward by +1, 1 = yes 0 = no
+
+40. Time Stamp on topics backwards : old dreamforge likes their topics with a ts that is set back by -1, 1 = yes 0 = no
+
+41. Protected Umode : UMODE_ that defines the protected Umode, 0 = no, or the UMODE_
+
+42. Admin : channel admin (Ultimate ircds), 1 = yes 0 = no
+
+43. SQline Channels : sqline to ban channel names, 1 = yes 0 = no
+
+44. Quit On Kill : when a user is killed a quit message is sent, 1 = yes 0 = no
+
+45. SVSMODE -b : can use svsmode to unban addresses, 1 = yes 0 = no
+
+46. Protect : channel protect +a (Unreal/Viagra ircds), 1 = yes 0 = no
+
+47. Reverse : can do a reverse check when unbanning, dreamforge based ircds, 1 = yes 0 = no
+
+48. Register Channels : supports setting a channel as registered, 1 = yes 0 = no
+
+49. Registered Mode : mode to set set when registered CMODE_ , 0 = No
+
+50. vident : vhost a users ident, 1 = yes 0 = no
+
+51. svshold : instead of svsnick or kill, we can hold the nick, 1 = yes 0 = no
+
+52. timestamp on mode : needs to send time stamp when modes are changed, 1 = yes 0 = no
+
+53. NICKIP : on NICK the users IP address is sent, 1 = yes 0 = no
+
+54. Umode : can use OperServ to change a users mode, 1 = yes 0 = no
+
+55. O:line : can use OperServ to give a temp oline, 1 = yes 0 = no
+
+56. Vhost On Nick : on NICK it sends the VHOST, 1 = yes 0 = no
+
+57. Change Realname : change real name, 1 = yes 0 = no
+
+58. Extra Help : if the ircd has more help use the language file value here, 0 = no
+
+59. No Knock : CMODE_ that defines NO KNOCK, 0 = no
+
+60. Admin Only : CMODE_ that defines Admin Only, 0 = no
+
+61. Default Mlock : modes to default the mlock to, 0 = no
+
+62. Vhost Umode : UMODE_ that defines vhost is enabled, 0 = no
+
+63. Flood Mode : has flood mode, 1 = yes 0 = no
+
+64. Link Mode : has linked mode, 1 = yes 0 = no
+
+65. Cmode F : CMODE_ that defines flood mode, 0 = no
+
+66. Cmode L : CMODE_ that defines Linked Mode, 0 = no
+
+
+IRCDCAPAB ircdcap[] = { }
+
+This struct is based of the CAPAB defines, you should review the the CAPAB table
+below for how this to be done.
+
+
+3. FUNCTIONS AND EVENTS
+
+A brief word about functions and events. All events are captured via the
+
+void moduleAddIRCDMsgs(void) {
+ m = createMessage("NICK", anope_event_nick);
+ addCoreMessage(IRCD,m);
+}
+
+Each event should have a event handler if its important enough to process by services.
+All event functions should be formed like so
+
+int anope_event_capab(char *source, int ac, char **av)
+{
+ return MOD_CONT;
+}
+
+they will receive the source, this can be NULL at times depending on the event. AC is the
+number of arguments that are in the event. and AV holds the values for each, so av[0] is
+the first variable. Events are likely to pass to various upper level event handlers, see
+the previous ircd source for how they handle these events.
+
+All commands are formed like so
+
+void anope_cmd_svsnoop(char *server, int set)
+{
+ send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
+}
+
+they may take any number of arguments, and come to a send_cmd() this root function is how
+commands are sent to the ircd.
+
+
+4. CAPAB/PROTOCTL
+
+Most IRCD send a CAPAB or PROTOCTL line so that they can work out what each is
+capable of doing. Anope has a function to read these lines and set itself up
+to to hand these events better. When adding support for your ircd. Take the
+following steps
+
+1. in the ircd.c find the function anope_cmd_capab() this function will send
+ the CAPAB/PROTOCTL line (consult your ircd documentation for which to send)
+ then in a single line type in the tokens that anope must send. Here is an
+ example of Hybrid's capab line
+
+ /* CAPAB */
+ void anope_cmd_capab()
+ {
+ send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS");
+ }
+
+2. in the ircd.h file make sure to place the defines (see below) that match your
+ ircds tokens, only use the ones that matter to your ircd. Should your ircd add
+ new features not covered in the defined, please contact the Anope Dev team
+ before doing so.
+
+3. Ensure that the CAPAB/PROTOCTL event his handled correctly.
+
+ a. in the function "moduleAddIRCDMsgs" making sure that you have the following
+ two lines
+
+ m = createMessage("CAPAB", anope_event_capab);
+ addCoreMessage(IRCD,m);
+
+ b. Add the function to handle the event
+
+ int anope_event_capab(char *source, int ac, char **av)
+ {
+ capab_parse(ac, av);
+ return MOD_CONT;
+ }
+
+ this function
+
+
+
+Define Table
+======================================================================================================
+DEFINE WORD | VALUE | TOKEN | IRCD Meaning
+======================================================================================================
+CAPAB_NOQUIT | 0x00000001 | NOQUIT | Supports NOQUIT
+CAPAB_TSMODE | 0x00000002 | TS | Channel modes are TimeStamped (normal sent during PASS)
+CAPAB_UNCONNECT | 0x00000004 | UNCONNECT | Supports UNCONNECT
+CAPAB_NICKIP | 0x00000008 | NICKIP | IP in the NICK line
+CAPAB_NSJOIN | 0x00000010 | SSJOIN | smart sjoin SSJOIN
+CAPAB_ZIP | 0x00000020 | ZIP | server supports gz'd links
+CAPAB_BURST | 0x00000040 | BURST | server supports BURST command
+CAPAB_TS3 | 0x00000080 | TS3 | Supports the TS3 Protocol
+CAPAB_TS5 | 0x00000100 | TS5 | Supports the TS5 Protocol
+CAPAB_DKEY | 0x00000200 | DKEY | server supports dh-key exchange using "DKEY"
+CAPAB_DOZIP | 0x00000400 | ZIP | output to this link shall be gzipped
+CAPAB_DODKEY | 0x00000800 | DKEY | do I do dkey with this link?
+CAPAB_QS | 0x00001000 | QS | Can handle quit storm removal
+CAPAB_SCS | 0x00002000 | SCS | Supports String Cache System
+CAPAB_PT4 | 0x00004000 | PT4 | PT4 Protocol Support
+CAPAB_UID | 0x00008000 | UID | Can do UIDs
+CAPAB_KNOCK | 0x00010000 | KNOCK | supports KNOCK
+CAPAB_CLIENT | 0x00020000 | CLIENT | Supports CLIENT
+CAPAB_IPV6 | 0x00040000 | IPV6 | Server is able to handle ipv6 address masks
+CAPAB_SSJ5 | 0x00080000 | SSJ5 | Server supports smart join protocol 5
+CAPAB_SN2 | 0x00100000 | SN2 | Supports SN2 protocol (SNICK 2)
+CAPAB_VHOST | 0x00200000 | VHOST | Supports VHOST protocol
+CAPAB_TOKEN | 0x00400000 | TOKEN | Supports tokenized server<->server commands
+CAPAB_SSJ3 | 0x00800000 | SSJ3 | Server supports smart join protocol 3
+CAPAB_NICK2 | 0x01000000 | NICK2 | supports the extended NICK command (version 2)
+CAPAB_UMODE2 | 0x02000000 | UMODE2 | support for the UMODE2 command
+CAPAB_VL | 0x04000000 | VL | Vline information is included in the info field
+CAPAB_TLKEXT | 0x08000000 | TLKEXT | This allows 10 instead of 8 parameters in TKL's
diff --git a/include/rageircd.h b/include/rageircd.h
index e130e6756..769424207 100644
--- a/include/rageircd.h
+++ b/include/rageircd.h
@@ -41,16 +41,15 @@
#define CMODE_t 0x00000020
#define CMODE_k 0x00000040 /* These two used only by ChanServ */
#define CMODE_l 0x00000080
-#define CMODE_A 0x00000800
+#define CMODE_R 0x00000100 /* Only identified users can join */
+#define CMODE_r 0x00000200 /* Set for all registered channels */
+#define CMODE_c 0x00000400 /* Colors can't be used */
+#define CMODE_M 0x00000800 /* Non-regged nicks can't send messages */
#define CMODE_N 0x00001000
#define CMODE_S 0x00002000
#define CMODE_C 0x00004000
-#define CMODE_c 0x00000400 /* Colors can't be used */
-#define CMODE_M 0x00000800 /* Non-regged nicks can't send messages */
-#define CMODE_O 0x00008000 /* Only opers can join */
-#define CMODE_R 0x00000100 /* Only identified users can join */
-#define CMODE_r 0x00000200 /* Set for all registered channels */
-#define CMODE_I 0x08000000
+#define CMODE_A 0x00008000
+#define CMODE_O 0x00010000 /* Only opers can join */
#define DEFAULT_MLOCK CMODE_n | CMODE_t | CMODE_r
diff --git a/lang/cat.l b/lang/cat.l
index c4a548dc1..0041ad2b8 100644
--- a/lang/cat.l
+++ b/lang/cat.l
@@ -868,6 +868,11 @@ CHAN_REGISTERED
El canal %s esta registrat sota el teu nickname: %s
CHAN_PASSWORD_IS
La teva clau pel canal es %s - Recorda-la per un us futur.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/de.l b/lang/de.l
index 92aac52d7..e96a92dde 100644
--- a/lang/de.l
+++ b/lang/de.l
@@ -874,6 +874,10 @@ CHAN_REGISTERED
Channel %s ist registriert unter deinem Nicknamen: %s
CHAN_PASSWORD_IS
Dein Channel-Passwort ist %s - behalte es für spätere Benutzung.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/en_us.l b/lang/en_us.l
index 674b1d988..dc49d71fb 100644
--- a/lang/en_us.l
+++ b/lang/en_us.l
@@ -853,6 +853,11 @@ CHAN_REGISTERED
Channel %s registered under your nickname: %s
CHAN_PASSWORD_IS
Your channel password is %s - remember it for later use.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/es.l b/lang/es.l
index 74723aef9..3e56a7b0d 100644
--- a/lang/es.l
+++ b/lang/es.l
@@ -866,6 +866,11 @@ CHAN_REGISTERED
El canal %s esta registrado bajo tu nickname: %s
CHAN_PASSWORD_IS
Tu clave para el canal es %s - Recuerdala para uso futuro.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/fr.l b/lang/fr.l
index c435953a6..a225353b2 100644
--- a/lang/fr.l
+++ b/lang/fr.l
@@ -869,6 +869,11 @@ CHAN_REGISTERED
Le channel %s a été enregistré sous votre nick: %s
CHAN_PASSWORD_IS
Le mot de passe du channel est %s - notez le pour une utilisation ultérieure.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/gr.l b/lang/gr.l
index 041d4577e..003a42389 100644
--- a/lang/gr.l
+++ b/lang/gr.l
@@ -865,6 +865,11 @@ CHAN_REGISTERED
Ôï êáíÜëé %s åßíáé êáôï÷õñùìÝíï áðü ôï øåõäþíõìü óïõ: %s
CHAN_PASSWORD_IS
Ï êùäéêüò ôïõ êáíáëéïý åßíáé %s - èõìÞóïõ ôïí ãéáôß èá ôïí ÷ñåéáóôåßò ìåôÜ.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/hun.l b/lang/hun.l
index a849be40b..299edf724 100644
--- a/lang/hun.l
+++ b/lang/hun.l
@@ -70,7 +70,6 @@ LANG_NAME
# %b = Hónap neve (rövid) %M = perc
# %d = nap a hónapban %S = másodperc
# %Y = év %Z = idõ zóne
-# %A = hónap neve %B = nap neve
# ezt a formát használd az strftime() mikor a dátum és idõ
# együtt szükséges.
@@ -859,6 +858,11 @@ CHAN_REGISTERED
Regisztráltam a %s csatornát a (%s) nickre.
CHAN_PASSWORD_IS
Csatorna jelszava: %s - Jegyezd fel a késõbbi használathoz.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY válaszok
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/it.l b/lang/it.l
index 5709594e4..780d22217 100644
--- a/lang/it.l
+++ b/lang/it.l
@@ -867,6 +867,11 @@ CHAN_REGISTERED
Il canale %s è stato registrato sotto il tuo nick: %s.
CHAN_PASSWORD_IS
La tua password di canale è %s - non dimenticarla!
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/nl.l b/lang/nl.l
index d2fdbcae0..09b647d7f 100644
--- a/lang/nl.l
+++ b/lang/nl.l
@@ -862,6 +862,11 @@ CHAN_REGISTERED
Kanaal %s is geregistreerd onder jouw nickname: %s
CHAN_PASSWORD_IS
Het wachtwoord van je kanaal is %s - onthoudt dit voor later gebruik.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/pl.l b/lang/pl.l
index b9c823ec5..0f003be63 100644
--- a/lang/pl.l
+++ b/lang/pl.l
@@ -943,6 +943,11 @@ CHAN_REGISTERED
CHAN_PASSWORD_IS
Has³o Twojego kana³u to %s
Zapamiêtaj do przysz³ego u¿ytku.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/pt.l b/lang/pt.l
index 94b7f12f2..614954c5d 100644
--- a/lang/pt.l
+++ b/lang/pt.l
@@ -867,6 +867,11 @@ CHAN_REGISTERED
O canal %s está registrado sob seu nick: %s
CHAN_PASSWORD_IS
A senha do seu canal é %s - guarde ela para uso posterior.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/ru.l b/lang/ru.l
index 181bf44f3..492f065ab 100644
--- a/lang/ru.l
+++ b/lang/ru.l
@@ -861,6 +861,11 @@ CHAN_REGISTERED
Êàíàë %s çàðåãèñòðèðîâàí íà Âàñ: %s
CHAN_PASSWORD_IS
Ïàðîëü Âàøåãî êàíàëà - %s - íå çàáûâàéòå åãî!
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
diff --git a/lang/tr.l b/lang/tr.l
index 9e96e8676..e6959b0cb 100644
--- a/lang/tr.l
+++ b/lang/tr.l
@@ -871,6 +871,11 @@ CHAN_REGISTERED
%s kanalý bu nicke kayýt edildi: %s
CHAN_PASSWORD_IS
Kanal þifreniz %s - ilerde kullanacaðýnýz için unutmayýnýz ve kimseye söylemeyiniz.
+CHAN_REGISTER_NONE_CHANNEL
+ You have attempted to register a none existant channel %s
+CHAN_SYMBOL_REQUIRED
+ Please use the symbol of # or & when attempting to register
+
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
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
diff --git a/version.log b/version.log
index 88a6798e6..eaf50e1d2 100644
--- a/version.log
+++ b/version.log
@@ -8,10 +8,14 @@
VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="5"
-VERSION_BUILD="334"
+VERSION_BUILD="335"
# $Log$
#
+# BUILD : 1.7.5 (335)
+# BUGS : 142, 152, 154, 155, 156, 157, 158
+# NOTES : Applied bugfix bundle patch from Trystan.
+#
# BUILD : 1.7.5 (334)
# BUGS :
# NOTES : Oops in the Changes file... (bad me)