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