diff options
author | dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2004-08-26 14:26:06 +0000 |
---|---|---|
committer | dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2004-08-26 14:26:06 +0000 |
commit | 5c3ee8a19acbdc26f191386776207fb7fefb4930 (patch) | |
tree | 6c577835b47bcd7a5f7db1f9d7f1fe33b319770d | |
parent | b05797bb10efec25579bda27ff4338f0b7803ac2 (diff) |
BUILD : 1.7.5 (335) BUGS : 142, 152, 154, 155, 156, 157, 158 NOTES : Applied bugfix bundle patch from Trystan.
git-svn-id: svn://svn.anope.org/anope/trunk@335 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@211 5417fbe8-f217-4b02-8779-1006273d7864
-rw-r--r-- | Changes | 9 | ||||
-rw-r--r-- | Changes.lang | 7 | ||||
-rwxr-xr-x | Config | 2 | ||||
-rw-r--r-- | configure.in | 18 | ||||
-rw-r--r-- | docs/IRCD | 309 | ||||
-rw-r--r-- | include/rageircd.h | 13 | ||||
-rw-r--r-- | lang/cat.l | 5 | ||||
-rw-r--r-- | lang/de.l | 4 | ||||
-rw-r--r-- | lang/en_us.l | 5 | ||||
-rw-r--r-- | lang/es.l | 5 | ||||
-rw-r--r-- | lang/fr.l | 5 | ||||
-rw-r--r-- | lang/gr.l | 5 | ||||
-rw-r--r-- | lang/hun.l | 6 | ||||
-rw-r--r-- | lang/it.l | 5 | ||||
-rw-r--r-- | lang/nl.l | 5 | ||||
-rw-r--r-- | lang/pl.l | 5 | ||||
-rw-r--r-- | lang/pt.l | 5 | ||||
-rw-r--r-- | lang/ru.l | 5 | ||||
-rw-r--r-- | lang/tr.l | 5 | ||||
-rw-r--r-- | src/bahamut.c | 203 | ||||
-rw-r--r-- | src/botserv.c | 3 | ||||
-rw-r--r-- | src/channels.c | 11 | ||||
-rw-r--r-- | src/chanserv.c | 18 | ||||
-rw-r--r-- | src/compat.c | 1 | ||||
-rw-r--r-- | src/config.c | 2 | ||||
-rw-r--r-- | src/dreamforge.c | 194 | ||||
-rw-r--r-- | src/hybrid.c | 193 | ||||
-rw-r--r-- | src/log.c | 13 | ||||
-rw-r--r-- | src/misc.c | 3 | ||||
-rw-r--r-- | src/mysql.c | 6 | ||||
-rw-r--r-- | src/nickserv.c | 26 | ||||
-rw-r--r-- | src/protocol.c | 168 | ||||
-rw-r--r-- | src/ptlink.c | 197 | ||||
-rw-r--r-- | src/rageircd.c | 251 | ||||
-rw-r--r-- | src/send.c | 111 | ||||
-rw-r--r-- | src/sockutil.c | 1 | ||||
-rw-r--r-- | src/ultimate2.c | 182 | ||||
-rw-r--r-- | src/ultimate3.c | 185 | ||||
-rw-r--r-- | src/unreal31.c | 183 | ||||
-rw-r--r-- | src/unreal32.c | 181 | ||||
-rw-r--r-- | src/viagra.c | 201 | ||||
-rw-r--r-- | version.log | 6 |
42 files changed, 2149 insertions, 613 deletions
@@ -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: @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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) |