diff options
| -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); - |
