1
0
mirror of https://github.com/anope/anope.git synced 2026-07-08 06:03:13 +02:00

BUILD : 1.7.5 (362) BUGS : 17 143 147 166 172 173 NOTES : Applied patch 927 provided by Trystan.

git-svn-id: svn://svn.anope.org/anope/trunk@362 31f1291d-b8d6-0310-a050-a5561fc1590b


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@233 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b
2004-09-29 20:19:18 +00:00
parent b6f83ea4db
commit 676b8eaf7f
57 changed files with 3185 additions and 594 deletions
+9
View File
@@ -17,10 +17,19 @@ Provided by Anope Dev. <dev@anope.org> - 2004
08/24 F Compile error with gcc2. [ #00]
Provided by Trystan <trystan@nomadirc.net> - 2004
08/28 A CSupport for +I channel mode. [ #00]
08/28 A Complete support for Unreal3.2 [ #00]
08/28 A New BASE64 general library. [ #00]
09/07 A Unreal32 channel mode +T support. [ #00]
09/07 A Ircd CHANMODE now trapped and stored. [ #00]
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]
09/27 F Verbose message for vident. [#173]
09/27 F Check and trap for forbidden nicks on HS. [#172]
09/27 F Tracking of IP address for simple checks. [#166]
09/27 F Proper deletion of added NS timeouts. [#143]
09/27 F Partial fix for +a compile error. [#147]
09/27 F Resolved longstanding NICKIP issue on AKILLs. [ #17]
09/07 F Handling of most Unknown Message from Server commands. [ #00]
09/07 F Several Hybrid support fixes and improvements. [ #00]
09/07 F Several Unreal support fixes and improvements. [ #00]
+12
View File
@@ -19,6 +19,18 @@ Anope Version S V N
# register NewTester or Tester123 unless you are an IRC operator.
#RestrictOperNicks
# UseTokens [OPTIONAL]
# Allows irc networks to use TOKEN commands instead of the
# standard commands. This saves bandwidth but can break older
# modules that are not set to trap for TOKEN - if you are using
# older modules do NOT use this option
#UseTokens
# UseSVS2MODE [OPTIONAL]
# On Unreal IRCD use SVS2MODE instead of SVSMODE, doing this will
# show services changing user modes.
#UseSVS2MODE
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
+2
View File
@@ -8,6 +8,8 @@ Anope Version S V N
OPER_SQLINE_UNSUPPORTED
OPER_SVSO_UNSUPPORTED
OPER_UMODE_UNSUPPORTED
CHAN_CLEARED_INVITES
NICK_INFO_VHOST2
*** Mod Strings:
+12
View File
@@ -464,6 +464,18 @@ GlobalOnCycleUP "Services are now back online - have a nice day"
# register NewTester or Tester123 unless you are an IRC operator.
#RestrictOperNicks
# UseTokens [OPTIONAL]
# Allows irc networks to use TOKEN commands instead of the
# standard commands. This saves bandwidth but can break older
# modules that are not set to trap for TOKEN - if you are using
# older modules do NOT use this option
#UseTokens
# UseSVS2MODE [OPTIONAL]
# On Unreal IRCD use SVS2MODE instead of SVSMODE, doing this will
# show services changing user modes.
#UseSVS2MODE
###########################################################################
#
# Mail-related options
+4 -2
View File
@@ -63,13 +63,15 @@ Anope credits:
Lucas Nussbaum <lucas@lucas-nussbaum.net>
Pieter Bootsma <geniusdex@anope.org>
Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
Trystan .S Lee <trystan@anope.org>
Trystan .S Lee <trystan@nomadirc.net>
openglx <openglx@brasnerd.com.br>
Anope Translations:
GeniusDex <geniusdex@anope.org> (nl.l)
Oleg Nikolaev aka Isot <isot@complife.ru> (ru.l)
Stuff <the.stuff@gmx.de> (de.l)
DrStein <gacevedo@anope.org> (es.l)
Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
Mateusz Szczyrzyca <annihilator@ircnet.pl> (pl.l)
2. PRESENTATION
@@ -130,7 +132,7 @@ Anope currently works with:
- ViagraIRCd 1.3 or later
- Hybrid 7 or later
- PTlink 6.15 or later
- RageIRCd 2.0 beta-3 or later
- RageIRCd 2.0 beta-6 or later
Anope could also work with some of the daemons derived by the ones
listed above, but there's no support for them if they work or don't
+28 -10
View File
@@ -16,7 +16,7 @@
#ifdef IRC_BAHAMUT
#define PROTECT_SET_MODE "+"
#define PROTECT_UNSET_MODE "+"
#define PROTECT_UNSET_MODE "-"
#define CS_CMD_PROTECT "PROTECT"
#define CS_CMD_DEPROTECT "DEPROTECT"
#define FANT_PROTECT_ADD "!protect"
@@ -25,15 +25,33 @@
#define LEVELINFO_PROTECT_WORD "PROTECT"
#define LEVELINFO_PROTECTME_WORD "PROTECTME"
#define UMODE_a 0x00000001
#define UMODE_h 0x00000002
#define UMODE_i 0x00000004
#define UMODE_o 0x00000008
#define UMODE_r 0x00000010
#define UMODE_w 0x00000020
#define UMODE_A 0x00000040
#define UMODE_R 0x80000000
#define UMODE_a 0x00000001 /* umode +a - Services Admin */
#define UMODE_h 0x00000002 /* umode +h - Helper */
#define UMODE_i 0x00000004 /* umode +i - Invisible */
#define UMODE_o 0x00000008 /* umode +o - Oper */
#define UMODE_r 0x00000010 /* umode +r - registered nick */
#define UMODE_w 0x00000020 /* umode +w - Get wallops */
#define UMODE_A 0x00000040 /* umode +A - Server Admin */
#define UMODE_x 0x00000080 /* umode +x - Squelch with notice */
#define UMODE_X 0x00000100 /* umode +X - Squelch without notice */
#define UMODE_F 0x00000200 /* umode +F - no cptr->since message rate throttle */
#define UMODE_j 0x00000400 /* umode +j - client rejection notices */
#define UMODE_K 0x00000800 /* umode +K - U: lined server kill messages */
#define UMODE_O 0x00001000 /* umode +O - Local Oper */
#define UMODE_s 0x00002000 /* umode +s - Server notices */
#define UMODE_c 0x00004000 /* umode +c - Client connections/exits */
#define UMODE_k 0x00008000 /* umode +k - Server kill messages */
#define UMODE_f 0x00010000 /* umode +f - Server flood messages */
#define UMODE_y 0x00020000 /* umode +y - Stats/links */
#define UMODE_d 0x00040000 /* umode +d - Debug info */
#define UMODE_g 0x00080000 /* umode +g - Globops */
#define UMODE_b 0x00100000 /* umode +b - Chatops */
#define UMODE_n 0x00200000 /* umode +n - Routing Notices */
#define UMODE_m 0x00400000 /* umode +m - spambot notices */
#define UMODE_e 0x00800000 /* umode +e - oper notices for the above +D */
#define UMODE_D 0x01000000 /* umode +D - Hidden dccallow umode */
#define UMODE_I 0x02000000 /* umode +I - invisible oper (masked) */
#define UMODE_R 0x80000000 /* unmode +R - No non registered msgs */
#define CMODE_i 0x00000001
#define CMODE_m 0x00000002
+14 -11
View File
@@ -13,10 +13,8 @@
#ifdef IRC_DREAMFORGE
#define OWNER_SET_MODE "+"
#define OWNER_UNSET_MODE "+"
#define PROTECT_SET_MODE "+"
#define PROTECT_UNSET_MODE "+"
#define PROTECT_UNSET_MODE "-"
#define CS_CMD_PROTECT "PROTECT"
#define CS_CMD_DEPROTECT "DEPROTECT"
#define FANT_PROTECT_ADD "!protect"
@@ -25,14 +23,19 @@
#define LEVELINFO_PROTECT_WORD "PROTECT"
#define LEVELINFO_PROTECTME_WORD "PROTECTME"
#define UMODE_a 0x00000001
#define UMODE_h 0x00000002
#define UMODE_i 0x00000004
#define UMODE_o 0x00000008
#define UMODE_r 0x00000010
#define UMODE_w 0x00000020
#define UMODE_A 0x00000040
#define UMODE_g 0x80000000
#define UMODE_a 0x00000001 /* Services Admin */
#define UMODE_h 0x00000002 /* Help system operator */
#define UMODE_i 0x00000004 /* makes user invisible */
#define UMODE_o 0x00000008 /* Operator */
#define UMODE_r 0x00000010 /* Nick set by services as registered */
#define UMODE_w 0x00000020 /* send wallops to them */
#define UMODE_A 0x00000040 /* Admin */
#define UMODE_O 0x00000080 /* Local operator */
#define UMODE_s 0x00000100 /* server notices such as kill */
#define UMODE_k 0x00000200 /* Show server-kills... */
#define UMODE_c 0x00000400 /* Show client information */
#define UMODE_f 0x00000800 /* Receive flood warnings */
#define UMODE_g 0x80000000 /* Shows some global messages */
#define CMODE_i 0x00000001
#define CMODE_m 0x00000002
+47 -4
View File
@@ -59,13 +59,14 @@ E CMMode cmmodes[128];
E unsigned long umodes[128];
E char csmodes[128];
extern void do_mass_mode(char *modes);
extern void add_ban(Channel * chan, char *mask);
extern void chan_adduser2(User * user, Channel * c);
extern void add_invite(Channel * chan, char *mask);
extern void chan_delete(Channel * c);
extern void del_ban(Channel * chan, char *mask);
extern void set_key(Channel * chan, char *value);
extern void set_limit(Channel * chan, char *value);
extern void del_invite(Channel * chan, char *mask);
extern char *get_key(Channel * chan);
extern char *get_limit(Channel * chan);
extern Channel *chan_create(char *chan);
@@ -291,7 +292,9 @@ E int DumpCore;
E int LogUsers;
E int NickRegDelay;
E int UseSVSHOLD;
E int UseSVS2MODE;
E int RestrictOperNicks;
E int UseTokens;
E char **HostSetters;
E int HostNumber;
@@ -508,6 +511,8 @@ E void helpserv_init(void);
/**** hostserv.c ****/
E void hostserv_init(void);
E void addHostCore(char *nick, char *vIdent, char *vhost, char *creator, int32 tmp_time);
E char *getvIdent(char *nick);
E char *getvHost(char *nick);
/**** init.c ****/
@@ -642,9 +647,10 @@ E char *myStrGetOnlyToken(const char *str, const char dilim,
E char *myStrSubString(const char *src, int start, int end);
E char *myStrGetTokenRemainder(const char *str, const char dilim,
int token_number);
E int myNumToken(const char *str, const char dilim);
E void doCleanBuffer(char *str);
E void EnforceQlinedNick(char *nick, char *killer);
E int nickIsServices(char *nick);
E int nickIsServices(char *nick, int bot);
E void add_entropy_userkeys(void);
E void rand_init(void);
@@ -705,6 +711,8 @@ E void nsStartNickTracking(User * u);
E void nsStopNickTracking(User * u);
E int nsCheckNickTracking(User *u);
E int group_identified(User * u, NickCore * nc);
E int is_on_access(User * u, NickCore * nc);
/**** operserv.c ****/
@@ -800,13 +808,14 @@ E Server *first_server(int flags);
E Server *next_server(int flags);
E Server *new_server(Server * uplink, const char *name, const char *desc,
uint16 flags);
uint16 flags, char *suid);
E Server *findserver(Server *s, const char *name);
E void do_server(const char *source, int ac, char **av);
E void do_server(const char *source, char *servername, char *hops, char *descript, char *numeric);
E void do_squit(const char *source, int ac, char **av);
E void capab_parse(int ac, char **av);
E int anope_check_sync(const char *name);
/**** sessions.c ****/
@@ -864,6 +873,7 @@ E User *do_nick(const char *source, char *nick, char *username, char *host,
char *server, char *realname, time_t ts, uint32 svid, uint32 ip, char *vhost, char *uid);
E void do_umode(const char *source, int ac, char **av);
E void do_umode2(const char *source, int ac, char **av);
E void do_quit(const char *source, int ac, char **av);
E void do_kill(char *source, char *reason);
@@ -874,6 +884,7 @@ E int is_excepted(ChannelInfo * ci, User * user);
E int is_excepted_mask(ChannelInfo * ci, char *mask);
E int match_usermask(const char *mask, User * user);
E int match_userip(const char *mask, User * user, char *host);
E void split_usermask(const char *mask, char **nick, char **user,
char **host);
E char *create_mask(User * u);
@@ -978,19 +989,27 @@ extern void anope_cmd_sqline(char *mask, char *reason);
extern void anope_cmd_szline(char *mask, char *reason); /* SZLINE */
extern void anope_cmd_squit(char *servname, char *message); /* SQUIT */
extern void anope_cmd_svinfo(); /* SVINFO */
extern void anope_cmd_svsadmin(char *server, int set); /* SVSADMIN */
extern void anope_cmd_svshold(char *nick); /* SVSHOLD */
extern void anope_cmd_release_svshold(char *nick); /* SVSHOLD */
extern void anope_cmd_svsinfo(); /* SVSINFO */
extern void anope_cmd_svsjoin(char *source, char *nick,char *chan); /* SVSJOIN */
extern void anope_cmd_svskill(char *source,char *user, const char *fmt, ...); /* SVSKILL */
extern void anope_cmd_svsmode(User * u, int ac, char **av); /* SVSMODE */
extern void anope_cmd_svsnick(char *nick,char *newnick, time_t when); /* SVSNICK */
extern void anope_cmd_svsnoop(char *server, int set); /* SVSNOOP */
extern void anope_cmd_svso(char *source,char *nick, char *flag); /* SVSO */
extern void anope_cmd_svspart(char *source, char *nick,char *chan); /* SVSPART */
extern void anope_cmd_swhois(char *source, char *who, char *mask); /* SWHOIS */
extern void anope_cmd_topic(char *whosets, char *chan, char *whosetit, char *topic, time_t when); /* TOPIC */
extern void anope_cmd_unsgline(char *mask); /* UNSGLINE */
extern void anope_cmd_unsqline(char *user); /* UNSQLINE */
extern void anope_cmd_unszline(char *mask); /* UNSZLINE */
extern void anope_cmd_eob(); /* EOB - end of burst */
extern void anope_cmd_burst(); /* BURST - use eob to send burst 0 */
extern void anope_cmd_svswatch(char *sender, char *nick, char *parm);
extern int anope_event_482(char *source, int ac, char **av);
extern int anope_event_436(char *source, int ac, char **av);
extern int anope_event_away(char *source, int ac, char **av);
extern int anope_event_ping(char *source, int ac, char **av);
@@ -1028,27 +1047,51 @@ extern int anope_event_snick(char *source, int ac, char **av);
extern int anope_event_vhost(char *source, int ac, char **av);
extern int anope_event_tkl(char *source, int ac, char **av);
extern int anope_event_eos(char *source, int ac, char **av);
extern int anope_event_eob(char *source, int ac, char **av);
extern int anope_event_pass(char *source, int ac, char **av);
extern int anope_event_netinfo(char *source, int ac, char **av);
extern int anope_event_error(char *source, int ac, char **av);
extern int anope_event_eb(char *source, int ac, char **av);
extern int anope_event_netctrl(char *source, int ac, char **av);
extern int anope_event_notice(char *source, int ac, char **av);
extern int anope_event_snotice(char *source, int ac, char **av);
extern int anope_event_sqline(char *source, int ac, char **av);
extern int anope_event_error(char *source, int ac, char **av);
extern int anope_event_smo(char *source, int ac, char **av);
extern int anope_event_myid(char *source, int ac, char **av);
extern int anope_event_vctrl(char *source, int ac, char **av);
extern int anope_event_tctrl(char *source, int ac, char **av);
extern int anope_event_netinfo(char *source, int ac, char **av);
extern int anope_event_snetinfo(char *source, int ac, char **av);
extern int anope_event_umode2(char *source, int ac, char **av);
extern int anope_event_globops(char *source, int ac, char **av);
extern int anope_event_swhois(char *source, int ac, char **av);
extern int anope_event_burst(char *source, int ac, char **av);
extern int anope_event_luserslock(char *source, int ac, char **av);
extern int anope_event_admin(char *source, int ac, char **av);
extern int anope_event_credits(char *source, int ac, char **av);
extern int anope_event_rehash(char *source, int ac, char **av);
extern int anope_event_sdesc(char *source, int ac, char **av);
extern int anope_event_netglobal(char *source, int ac, char **av);
extern int anope_event_invite(char *source, int ac, char **av);
extern void anope_set_umode(User * user, int ac, char **av);
extern void anope_cmd_svid_umode(char *nick, time_t ts);
extern void anope_cmd_svid_umode2(User *u, char *ts);
extern void anope_cmd_svid_umode3(User *u, char *ts);
extern void anope_cmd_nc_change(User *u);
extern int anope_flood_mode_check(char *value);
extern char *common_get_vident(User *u);
extern char *common_get_vhost(User *u);
extern char *send_token(char *token1, char *token2);
extern char *base64enc(long i);
extern long base64dec(char *b64);
extern long base64dects(char *ts);
#define Anope_Free(x) if ((x) != NULL) free(x)
extern char *host_resolve(char *host);
#endif /* EXTERN_H */
+29 -17
View File
@@ -14,7 +14,7 @@
#ifdef IRC_HYBRID
#define PROTECT_SET_MODE "+"
#define PROTECT_UNSET_MODE "+"
#define PROTECT_UNSET_MODE "-"
#define CS_CMD_PROTECT "PROTECT"
#define CS_CMD_DEPROTECT "DEPROTECT"
#define FANT_PROTECT_ADD "!protect"
@@ -23,23 +23,35 @@
#define LEVELINFO_PROTECT_WORD "PROTECT"
#define LEVELINFO_PROTECTME_WORD "PROTECTME"
#define UMODE_a 0x00000001
#define UMODE_h 0x00000002
#define UMODE_i 0x00000004
#define UMODE_o 0x00000008
#define UMODE_r 0x00000010
#define UMODE_w 0x00000020
#define UMODE_A 0x00000040
#define UMODE_a 0x00000001 /* Admin status */
#define UMODE_b 0x00000080 /* See bot and drone flooding notices */
#define UMODE_c 0x00000100 /* Client connection/quit notices */
#define UMODE_d 0x00000200 /* See debugging notices */
#define UMODE_f 0x00000400 /* See I: line full notices */
#define UMODE_g 0x00000800 /* Server Side Ignore */
#define UMODE_i 0x00000004 /* Not shown in NAMES or WHO unless you share a channel */
#define UMODE_k 0x00001000 /* See server generated KILL messages */
#define UMODE_l 0x00002000 /* See LOCOPS messages */
#define UMODE_n 0x00004000 /* See client nick changes */
#define UMODE_o 0x00000008 /* Operator status */
#define UMODE_r 0x00000010 /* See rejected client notices */
#define UMODE_s 0x00008000 /* See general server notices */
#define UMODE_u 0x00010000 /* See unauthorized client notices */
#define UMODE_w 0x00000020 /* See server generated WALLOPS */
#define UMODE_x 0x00020000 /* See remote server connection and split notices */
#define UMODE_y 0x00040000 /* See LINKS, STATS (if configured), TRACE notices */
#define UMODE_z 0x00080000 /* See oper generated WALLOPS */
#define CMODE_i 0x00000001 /* Invite only */
#define CMODE_m 0x00000002 /* Users without +v/h/o cannot send text to the channel */
#define CMODE_n 0x00000004 /* Users must be in the channel to send text to it */
#define CMODE_p 0x00000008 /* Private is obsolete, this now restricts KNOCK */
#define CMODE_s 0x00000010 /* The channel does not show up on NAMES or LIST */
#define CMODE_t 0x00000020 /* Only chanops can change the topic */
#define CMODE_k 0x00000040 /* Key/password for the channel. */
#define CMODE_l 0x00000080 /* Limit the number of users in a channel */
#define CMODE_a 0x00000400 /* Anonymous ops, chanops are hidden */
#define CMODE_i 0x00000001
#define CMODE_m 0x00000002
#define CMODE_n 0x00000004
#define CMODE_p 0x00000008
#define CMODE_s 0x00000010
#define CMODE_t 0x00000020
#define CMODE_k 0x00000040 /* These two used only by ChanServ */
#define CMODE_l 0x00000080
#define CMODE_a 0x00000400
#define DEFAULT_MLOCK CMODE_n | CMODE_t
+14
View File
@@ -30,6 +30,19 @@
#define UMODE_r 0x00000010
#define UMODE_w 0x00000020
#define UMODE_A 0x00000040
#define UMODE_B 0x00000080
#define UMODE_H 0x00000100
#define UMODE_N 0x00000200
#define UMODE_O 0x00000400
#define UMODE_p 0x00000800
#define UMODE_R 0x00001000
#define UMODE_s 0x00002000
#define UMODE_S 0x00004000
#define UMODE_T 0x00008000
#define UMODE_v 0x00001000
#define UMODE_y 0x00002000
#define UMODE_z 0x00004000
#define CMODE_i 0x00000001
@@ -52,6 +65,7 @@
#define CMODE_N 0x00080000
#define CMODE_R 0x00000100 /* Only identified users can join */
#define CMODE_r 0x00000200 /* Set for all registered channels */
#define CMODE_C 0x00100000
#define DEFAULT_MLOCK CMODE_n | CMODE_t | CMODE_r
+10 -2
View File
@@ -245,7 +245,11 @@ struct ircdvars_ {
uint32 chan_lmode; /* Mode */
int check_nick_id; /* On nick change check if they could be identified */
int knock_needs_i; /* Check if we needed +i when setting NOKNOCK */
char *chanmodes; /* If the ircd sends CHANMODE in CAPAB this is where we store it */
char *chanmodes; /* If the ircd sends CHANMODE in CAPAB this is where we store it */
int token; /* Does Anope support the tokens for the ircd */
int tokencaseless; /* TOKEN are not case senstive - most its Unreal that is case senstive */
int sjb64; /* Base 64 encode TIMESTAMP */
int invitemode; /* +I */
};
struct ircdcapab_ {
@@ -278,6 +282,7 @@ struct ircdcapab_ {
uint32 dodkey;
uint32 dozip;
uint32 chanmodes;
uint32 sjb64;
};
/*************************************************************************/
@@ -658,6 +663,7 @@ struct server_ {
char *desc; /* Server description */
uint16 flags; /* Some info flags, as defined below */
char *suid; /* Server Univeral ID */
int sync; /* Whether is synced or not */
Server *links; /* Linked list head for linked servers */
Server *uplink; /* Server which pretends to be the uplink */
@@ -800,6 +806,8 @@ struct channel_ {
char **bans;
int32 exceptcount, exceptsize;
char **excepts;
int32 invitecount, invitesize;
char **invite;
struct c_userlist {
struct c_userlist *next, *prev;
User *user;
@@ -1072,7 +1080,7 @@ struct hostcache_ {
#define CAPAB_VL 0x04000000
#define CAPAB_TLKEXT 0x08000000
#define CAPAB_CHANMODE 0x10000000
#define CAPAB_SJB64 0x20000000
/*************************************************************************/
+11 -4
View File
@@ -30,11 +30,17 @@
#define UMODE_r 0x00000010
#define UMODE_w 0x00000020
#define UMODE_A 0x00000040
#define UMODE_0 0x00000080
#define UMODE_Z 0x00000100 /* umode +Z - Services Root Admin */
#define UMODE_S 0x00000200 /* umode +S - Services Client */
#define UMODE_D 0x00000400 /* umode +D - has seen dcc warning message */
#define UMODE_d 0x00000800 /* umode +d - user is deaf to channel messages */
#define UMODE_W 0x00001000 /* umode +d - user is deaf to channel messages */
#define UMODE_p 0x04000000
#define UMODE_Z 0x08000000
#define UMODE_P 0x20000000
#define UMODE_R 0x80000000
#define UMODE_P 0x20000000 /* umode +P - Services Admin */
#define UMODE_x 0x40000000
#define UMODE_R 0x80000000
#define CMODE_i 0x00000001
#define CMODE_m 0x00000002
@@ -49,7 +55,8 @@
#define CMODE_S 0x00002000
#define CMODE_K 0x00004000
#define CMODE_c 0x00000400 /* Colors can't be used */
#define CMODE_M 0x00000800 /* Non-regged nicks can't send messages */
#define CMODE_M 0x00000800 /* Non-regged nicks can't send messages */
#define CMODE_q 0x00001000 /* No Quit Reason */
#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 */
+33 -11
View File
@@ -16,16 +16,34 @@
/*************************************************************************/
/* User Modes */
#define UMODE_a 0x00000001
#define UMODE_h 0x00000002
#define UMODE_i 0x00000004
#define UMODE_o 0x00000008
#define UMODE_r 0x00000010
#define UMODE_w 0x00000020
#define UMODE_A 0x00000040
#define UMODE_g 0x80000000
#define UMODE_x 0x40000000
#define UMODE_R 0x80000000
#define UMODE_a 0x00000001 /* a Services Admin */
#define UMODE_h 0x00000002 /* h Available for help (HelpOp) */
#define UMODE_i 0x00000004 /* i Invisible (not shown in /who) */
#define UMODE_o 0x00000008 /* o Global IRC Operator */
#define UMODE_r 0x00000010 /* r Identifies the nick as being registered */
#define UMODE_w 0x00000020 /* w Can listen to wallop messages */
#define UMODE_A 0x00000040 /* A Server Admin */
#define UMODE_N 0x00000080 /* N Network Administrator */
#define UMODE_O 0x00000100 /* O Local IRC Operator */
#define UMODE_C 0x00000200 /* C Co-Admin */
#define UMODE_d 0x00000400 /* d Makes it so you can not receive channel PRIVMSGs */
#define UMODE_p 0x00000800 /* Hides the channels you are in in a /whois reply */
#define UMODE_q 0x00001000 /* q Only U:Lines can kick you (Services Admins Only) */
#define UMODE_s 0x00002000 /* s Can listen to server notices */
#define UMODE_t 0x00004000 /* t Says you are using a /vhost */
#define UMODE_v 0x00008000 /* v Receives infected DCC Send Rejection notices */
#define UMODE_z 0x00010000 /* z Indicates that you are an SSL client */
#define UMODE_B 0x00020000 /* B Marks you as being a Bot */
#define UMODE_G 0x00040000 /* G Filters out all the bad words per configuration */
#define UMODE_H 0x00080000 /* H Hide IRCop Status (IRCop Only) */
#define UMODE_S 0x00100000 /* S services client */
#define UMODE_V 0x00200000 /* V Marks you as a WebTV user */
#define UMODE_W 0x00400000 /* W Lets you see when people do a /whois on you */
#define UMODE_T 0x00800000 /* T Prevents you from receiving CTCPs */
#define UMODE_g 0x20000000 /* g Can send & read globops and locops */
#define UMODE_x 0x40000000 /* x Gives user a hidden hostname */
#define UMODE_R 0x80000000 /* Allows you to only receive PRIVMSGs/NOTICEs from registered (+r) users */
/*************************************************************************/
@@ -43,7 +61,7 @@
#define CMODE_r 0x00000200 /* Set for all registered channels */
#define CMODE_c 0x00000400
#define CMODE_A 0x00000800
#define CMODE_H 0x00001000
/* #define CMODE_H 0x00001000 Was now +I may not join, but Unreal Removed it and it will not set in 3.2 */
#define CMODE_K 0x00002000
#define CMODE_L 0x00004000
#define CMODE_O 0x00008000
@@ -57,6 +75,7 @@
#define CMODE_z 0x00800000
#define CMODE_N 0x01000000
#define CMODE_T 0x02000000
#define CMODE_M 0x04000000
/*************************************************************************/
@@ -78,4 +97,7 @@
#define DEFAULT_MLOCK CMODE_n | CMODE_t | CMODE_r
#define SJOINBANNCHAR '&'
#define SJOINEXCEPTIONCHAR '\"'
#endif
+8 -4
View File
@@ -13,8 +13,8 @@
# messages need to take the same per ameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the per ameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -577,9 +577,11 @@ NICK_INFO_LAST_QUIT
NICK_INFO_URL
URL: %s
NICK_INFO_EMAIL
Adreça E-mail: %s
Adreça E-mail: %s
NICK_INFO_VHOST
vhost: %s
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1432,6 +1434,8 @@ CHAN_CLEARED_VOICES
Mode +v ha estat eliminat del canal %s.
CHAN_CLEARED_USERS
Tots els usuaris han estat kickegats del canal %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -24,8 +24,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -591,6 +591,8 @@ NICK_INFO_EMAIL
eMail-Adresse: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1428,6 +1430,8 @@ CHAN_CLEARED_VOICES
Alle Voice-Flatgs wurden im Channel %s entfernt.
CHAN_CLEARED_USERS
Alle User wurden aus Channel %s gekicked.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -13,8 +13,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -570,6 +570,8 @@ NICK_INFO_EMAIL
E-mail address: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1409,6 +1411,8 @@ CHAN_CLEARED_VOICES
Mode +v has been cleared from channel %s.
CHAN_CLEARED_USERS
All users have been kicked from channel %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -13,8 +13,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -584,6 +584,8 @@ NICK_INFO_EMAIL
Direccion E-mail: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1430,6 +1432,8 @@ CHAN_CLEARED_VOICES
Modo +v ha sido removido del canal %s.
CHAN_CLEARED_USERS
Todos los usuarios han sido kickeados del canal %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -16,8 +16,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -582,6 +582,8 @@ NICK_INFO_EMAIL
Adresse e-mail: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
Numéro ICQ: %d
NICK_INFO_GREET
@@ -1431,6 +1433,8 @@ CHAN_CLEARED_VOICES
Tous les voices du channel %s ont été enlevés.
CHAN_CLEARED_USERS
Tous les utilisateurs du channel %s ont été kickés.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -13,8 +13,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -578,6 +578,8 @@ NICK_INFO_EMAIL
E-mail äéåýèõíóç: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1421,6 +1423,8 @@ CHAN_CLEARED_VOICES
¼ëá ôá Mode +v Ý÷åé êáèáñéóôåß áðü ôï êáíÜëé %s.
CHAN_CLEARED_USERS
¼ëïé ïé ÷ñÞóôåò Ýãéíáí kick áðü ôï êáíÜëé %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -19,8 +19,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -577,6 +577,8 @@ NICK_INFO_EMAIL
E-mail cím: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1419,6 +1421,8 @@ CHAN_CLEARED_VOICES
A (%s) csatornán minden +v mód levéve.
CHAN_CLEARED_USERS
A (%s) csatornáról minden felhasználó ki lett rúgva.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS válaszok
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -15,8 +15,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -579,6 +579,8 @@ NICK_INFO_EMAIL
Indirizzo e-mail: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
Numero ICQ: %d
NICK_INFO_GREET
@@ -1422,6 +1424,8 @@ CHAN_CLEARED_VOICES
Il modo +v è stato rimosso da tutti gli utenti di %s.
CHAN_CLEARED_USERS
Tutti gli utenti sono stati kickati dal canale %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -15,8 +15,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -581,6 +581,8 @@ NICK_INFO_EMAIL
E-mail adres: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1419,6 +1421,8 @@ CHAN_CLEARED_VOICES
Mode +v is verwijderd van kanaal %s.
CHAN_CLEARED_USERS
Alle users zijn gekicked van kanaal %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -22,8 +22,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -631,6 +631,8 @@ NICK_INFO_EMAIL
Adres e-mail: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
Numer ICQ: %d
NICK_INFO_GREET
@@ -1535,6 +1537,8 @@ CHAN_CLEARED_VOICES
Tryby +v zosta³y wyczyszczone na %s.
CHAN_CLEARED_USERS
Wszyscy u¿ytkownicy zostali wykopani z %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -13,8 +13,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -578,6 +578,8 @@ NICK_INFO_EMAIL
E-mail: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ: %d
NICK_INFO_GREET
@@ -1423,6 +1425,8 @@ CHAN_CLEARED_VOICES
Mode +v foi retirado do canal %s.
CHAN_CLEARED_USERS
Todos os usuários foram kickados do canal %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -19,8 +19,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -578,6 +578,8 @@ NICK_INFO_EMAIL
àäðåñ E-mail: %s
NICK_INFO_VHOST
Âèðòóàëüíûé õîñò: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1417,6 +1419,8 @@ CHAN_CLEARED_VOICES
Âñå âîéñû áûëè ñíÿòû íà êàíàëå %s.
CHAN_CLEARED_USERS
Âñå ïîëüçîâàòåëè áûëè âûêèíóòû ñ êàíàëà %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+6 -2
View File
@@ -13,8 +13,8 @@
# messages need to take the same parameters in the same order as the
# English messages do. (Obviously, this doesn't hold for the strftime()
# format lines immediately below.) If you can't get a natural translation
# of a message without changing the order of the parameters, let me know
# (achurch@dragonfire.net) which message is causing a problem and I'll see
# of a message without changing the order of the parameters, let us know
# (dev@anope.org) which message is causing a problem and I'll see
# what I can do.
#
# In help messages, "%S" (capital S, not lowercase) refers to the name of
@@ -584,6 +584,8 @@ NICK_INFO_EMAIL
E-mail adresi: %s
NICK_INFO_VHOST
vhost: %s
NICK_INFO_VHOST2
vhost: %s@%s
NICK_INFO_ICQ
ICQ #: %d
NICK_INFO_GREET
@@ -1427,6 +1429,8 @@ CHAN_CLEARED_VOICES
Mod +v %s kanalýnda temizlendi.
CHAN_CLEARED_USERS
%s kanalýndaki tüm kullanýcýlar atýldý.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
+2 -2
View File
@@ -1,13 +1,13 @@
MYSQL_OBJ = $(MYSQL:.c=.o)
RDB_OBJ = $(RDB:.c=.o)
OBJS = actions.o botserv.o channels.o chanserv.o commands.o compat.o converter.o \
OBJS = actions.o base64.o botserv.o channels.o chanserv.o commands.o compat.o converter.o \
config.o datafiles.o encrypt.o helpserv.o hostserv.o init.o language.o list.o log.o mail.o main.o \
memory.o memoserv.o messages.o misc.o modules.o news.o nickserv.o operserv.o \
process.o proxy.o send.o servers.o sessions.o slist.o sockutil.o \
timeout.o users.o dreamforge.o bahamut.o unreal31.o ultimate2.o ultimate3.o \
hybrid.o ptlink.o viagra.o rageircd.o unreal32.o \
$(VSNPRINTF_O) $(RDB_OBJ) $(MYSQL_OBJ)
SRCS = actions.c botserv.c channels.c chanserv.c commands.c compat.c converter.c \
SRCS = actions.c base64.c botserv.c channels.c chanserv.c commands.c compat.c converter.c \
config.c datafiles.c encrypt.c helpserv.c hostserv.c init.c language.c list.c log.c mail.c main.c \
memory.c memoserv.c messages.c misc.c modules.c news.c nickserv.c operserv.c \
process.c proxy.c send.c servers.c sessions.c slist.c sockutil.c \
+14 -2
View File
@@ -113,12 +113,16 @@ void common_unban(ChannelInfo * ci, char *nick)
int count, i;
char *av[3], **bans;
User *u;
char *host;
if (!ci || !ci->c || !ci->bi || !nick)
if (!ci || !ci->c || !nick)
return;
if (!(u = finduser(nick)))
return;
host = host_resolve(u->host);
if (ircd->svsmode_unban) {
anope_cmd_unban(ci->name, nick);
} else {
@@ -131,7 +135,15 @@ void common_unban(ChannelInfo * ci, char *nick)
if (match_usermask(bans[i], u)) {
anope_cmd_mode(whosends(ci), ci->name, "-b %s", bans[i]);
av[2] = bans[i];
do_cmode(ci->bi->nick, 3, av);
do_cmode(whosends(ci), 3, av);
}
if (host) {
if (match_userip(bans[i], u, host)) {
anope_cmd_mode(whosends(ci), ci->name, "-b %s",
bans[i]);
av[2] = bans[i];
do_cmode(whosends(ci), 3, av);
}
}
}
free(bans);
+163 -33
View File
@@ -91,6 +91,9 @@ IRCDVar ircd[] = {
1,
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
1, /* validate - to the #:# standard */
}
,
{NULL}
@@ -195,29 +198,55 @@ void anope_set_umode(User * user, int ac, char **av)
}
unsigned long umodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, UMODE_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,
0,
UMODE_R,
0, 0, 0, 0, 0, 0, 0,
0,
0, 0, 0, 0, 0,
0, UMODE_a, 0, 0, 0, 0, 0,
0,
UMODE_h, UMODE_i, 0, 0, 0, 0, 0, UMODE_o,
0,
0, UMODE_r, 0, 0, 0, 0, UMODE_w,
0,
0,
0,
0, 0, 0, 0, 0
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Horzontal Tab */
0, 0, 0, /* Line Feed, Unused, Unused */
0, 0, 0, /* Carriage Return, Unused, Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Space */
0, 0, 0, /* ! " # */
0, 0, 0, /* $ % & */
0, 0, 0, /* ! ( ) */
0, 0, 0, /* * + , */
0, 0, 0, /* - . / */
0, 0, /* 0 1 */
0, 0, /* 2 3 */
0, 0, /* 4 5 */
0, 0, /* 6 7 */
0, 0, /* 8 9 */
0, 0, /* : ; */
0, 0, 0, /* < = > */
0, 0, /* ? @ */
UMODE_A, 0, 0, /* A B C */
UMODE_D, 0, UMODE_F, /* D E F */
0, 0, UMODE_I, /* G H I */
0, UMODE_K, 0, /* J K L */
0, 0, UMODE_O, /* M N O */
0, 0, UMODE_R, /* P Q R */
0, 0, 0, /* S T U */
0, 0, UMODE_X, /* V W X */
0, /* Y */
0, /* Z */
0, 0, 0, /* [ \ ] */
0, 0, 0, /* ^ _ ` */
UMODE_a, UMODE_b, UMODE_c, /* a b c */
UMODE_d, UMODE_e, UMODE_f, /* d e f */
UMODE_g, UMODE_h, UMODE_i, /* g h i */
UMODE_j, UMODE_k, 0, /* j k l */
UMODE_m, UMODE_n, UMODE_o, /* m n o */
0, 0, UMODE_r, /* p q r */
UMODE_s, 0, 0, /* s t u */
0, 0, UMODE_x, /* v w x */
UMODE_y, /* y */
0, /* z */
0, 0, 0, /* { | } */
0, 0 /* ~ */
};
char csmodes[128] = {
@@ -505,7 +534,7 @@ int anope_event_os(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_OperServ, av[0]);
return MOD_CONT;
}
@@ -514,7 +543,7 @@ int anope_event_ns(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_NickServ, av[0]);
return MOD_CONT;
}
@@ -523,7 +552,7 @@ int anope_event_ms(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_MemoServ, av[0]);
return MOD_CONT;
}
@@ -532,7 +561,7 @@ int anope_event_hs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_HostServ, av[0]);
return MOD_CONT;
}
@@ -541,7 +570,7 @@ int anope_event_cs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_ChanServ, av[0]);
return MOD_CONT;
}
@@ -570,7 +599,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", anope_event_notice); addCoreMessage(IRCD,m);
m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m);
m = createMessage("PASS", NULL); addCoreMessage(IRCD,m);
m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m);
m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m);
m = createMessage("PRIVMSG", anope_event_privmsg); addCoreMessage(IRCD,m);
m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m);
@@ -582,7 +611,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m);
m = createMessage("AKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("GLOBOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("GNOTICE", NULL); addCoreMessage(IRCD,m);
m = createMessage("GNOTICE", anope_event_gnotice); addCoreMessage(IRCD,m);
m = createMessage("GOPER", NULL); addCoreMessage(IRCD,m);
m = createMessage("RAKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("SILENCE", NULL); addCoreMessage(IRCD,m);
@@ -590,7 +619,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SVSMODE", NULL); addCoreMessage(IRCD,m);
m = createMessage("SVSNICK", NULL); addCoreMessage(IRCD,m);
m = createMessage("SVSNOOP", NULL); addCoreMessage(IRCD,m);
m = createMessage("SQLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("SQLINE", anope_event_sqline); addCoreMessage(IRCD,m);
m = createMessage("UNSQLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("CAPAB", anope_event_capab); addCoreMessage(IRCD,m);
m = createMessage("CS", anope_event_cs); addCoreMessage(IRCD,m);
@@ -607,6 +636,9 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("UNSGLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("UNSZLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m);
m = createMessage("LUSERSLOCK",anope_event_luserslock); addCoreMessage(IRCD,m);
m = createMessage("BURST", anope_event_burst); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
}
@@ -646,6 +678,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
/* SGLINE */
void anope_cmd_sgline(char *mask, char *reason)
{
@@ -760,6 +797,11 @@ void anope_cmd_svsmode(User * u, int ac, char **av)
}
/* SQUIT */
/*
* parv[0] = sender prefix
* parv[1] = server name
* parv[2] = comment
*/
void anope_cmd_squit(char *servname, char *message)
{
send_cmd(servname, "SQUIT %s :%s", servname, message);
@@ -783,9 +825,18 @@ void anope_cmd_connect(int servernum)
anope_cmd_capab();
anope_cmd_server(ServerName, 1, ServerDesc);
anope_cmd_svinfo();
anope_cmd_burst();
}
/* SVINFO */
/*
* SVINFO
* parv[0] = sender prefix
* parv[1] = TS_CURRENT for the server
* parv[2] = TS_MIN for the server
* parv[3] = server is standalone or connected to non-TS only
* parv[4] = server's idea of UTC time
*/
void anope_cmd_svinfo()
{
send_cmd(NULL, "SVINFO 3 1 0 :%ld", time(NULL));
@@ -806,7 +857,8 @@ void anope_cmd_server(char *servname, int hop, char *descript)
/* CAPAB */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB NICKIP SSJOIN TS3 NOQUIT TSMODE UNCONNECT");
send_cmd(NULL,
"CAPAB SSJOIN NOQUIT BURST UNCONNECT NICKIP TSMODE TS3");
}
/* EVENT : SERVER */
@@ -818,7 +870,7 @@ int anope_event_server(char *source, int ac, char **av)
uplink = sstrdup(av[0]);
}
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1233,6 +1285,7 @@ void anope_cmd_211(const char *fmt, ...)
void anope_cmd_nick(char *nick, char *name, char *modes)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s 0 0 :%s", nick, time(NULL),
modes, ServiceUser, ServiceHost, ServerName, name);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1340,6 +1393,7 @@ void anope_cmd_351(char *source)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s 0 0 :%s", nick, time(NULL),
modes, user, host, ServerName, real);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1443,4 +1497,80 @@ int anope_event_sqline(char *source, int ac, char **av)
}
int anope_event_gnotice(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_pass(char *source, int ac, char **av)
{
return MOD_CONT;
}
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
/* Can not find any reference to these in Bahamut */
}
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
/* Can not find any reference to these in Bahamut */
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
void anope_cmd_burst()
{
send_cmd(NULL, "BURST");
}
void anope_cmd_eob()
{
send_cmd(NULL, "BURST 0");
}
int anope_event_burst(char *source, int ac, char **av)
{
Server *s;
s = findserver(servlist, source);
if (!ac) {
/* for future use - start burst */
} else {
if (s) {
s->sync = 1;
}
}
return MOD_CONT;
}
int anope_event_luserslock(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
return 0;
}
#endif
+125
View File
@@ -0,0 +1,125 @@
/* base64 routines.
*
* (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.
*
*
*/
/*
This is borrowed from Unreal
*/
#include "services.h"
static char *int_to_base64(long);
static long base64_to_int(char *);
char *base64enc(long i)
{
if (i < 0)
return ("0");
return int_to_base64(i);
}
long base64dec(char *b64)
{
if (b64)
return base64_to_int(b64);
else
return 0;
}
/* ':' and '#' and '&' and '+' and '@' must never be in this table. */
/* these tables must NEVER CHANGE! >) */
char int6_to_base64_map[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F',
'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V',
'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'{', '}'
};
char base64_to_int6_map[] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
-1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, 63, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
};
static char *int_to_base64(long val)
{
/* 32/6 == max 6 bytes for representation,
* +1 for the null, +1 for byte boundaries
*/
static char base64buf[8];
long i = 7;
base64buf[i] = '\0';
/* Temporary debugging code.. remove before 2038 ;p.
* This might happen in case of 64bit longs (opteron/ia64),
* if the value is then too large it can easily lead to
* a buffer underflow and thus to a crash. -- Syzop
*/
if (val > 2147483647L) {
abort();
}
do {
base64buf[--i] = int6_to_base64_map[val & 63];
}
while (val >>= 6);
return base64buf + i;
}
static long base64_to_int(char *b64)
{
int v = base64_to_int6_map[(u_char) * b64++];
if (!b64)
return 0;
while (*b64) {
v <<= 6;
v += base64_to_int6_map[(u_char) * b64++];
}
return v;
}
long base64dects(char *ts)
{
char *token;
if (!ts) {
return 0;
}
token = myStrGetToken(ts, '!', 1);
if (!token) {
return strtoul(ts, NULL, 10);;
}
return base64dec(token);
}
+4 -76
View File
@@ -1236,46 +1236,9 @@ static int do_bot(User * u)
**/
/* Check whether it's a services client's nick and return if so - Certus */
/* use nickIsServices reduce the total number lines of code - TSL */
if ((s_NickServ && (stricmp(nick, s_NickServ) == 0))
|| (s_NickServAlias && !stricmp(nick, s_NickServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_ChanServ && (stricmp(nick, s_ChanServ) == 0))
|| (s_ChanServAlias
&& !stricmp(nick, s_ChanServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_MemoServ && (stricmp(nick, s_MemoServ) == 0))
|| (s_MemoServAlias
&& !stricmp(nick, s_MemoServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_BotServ && (stricmp(nick, s_BotServ) == 0))
|| (s_BotServAlias
&& !stricmp(nick, s_BotServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_HelpServ && (stricmp(nick, s_HelpServ) == 0))
|| (s_HelpServAlias
&& !stricmp(nick, s_HelpServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_OperServ && (stricmp(nick, s_OperServ) == 0))
|| (s_OperServAlias
&& !stricmp(nick, s_OperServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else
if ((s_GlobalNoticer
&& (stricmp(nick, s_GlobalNoticer) == 0))
|| (s_GlobalNoticerAlias
&& !stricmp(nick, s_GlobalNoticerAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_HostServ && (stricmp(nick, s_HostServ) == 0))
|| (s_HostServAlias
&& !stricmp(nick, s_HostServAlias))) {
if (nickIsServices(nick, 0)) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
}
@@ -1342,43 +1305,8 @@ static int do_bot(User * u)
}
/* Check whether it's a services client's nick and return if so - Certus */
if ((s_NickServ && !stricmp(nick, s_NickServ))
|| (s_NickServAlias && !stricmp(nick, s_NickServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_ChanServ && !stricmp(nick, s_ChanServ))
|| (s_ChanServAlias
&& !stricmp(nick, s_ChanServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_MemoServ && !stricmp(nick, s_MemoServ))
|| (s_MemoServAlias
&& !stricmp(nick, s_MemoServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_BotServ && !stricmp(nick, s_BotServ))
|| (s_BotServAlias
&& !stricmp(nick, s_BotServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_HelpServ && !stricmp(nick, s_HelpServ))
|| (s_HelpServAlias
&& !stricmp(nick, s_HelpServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_OperServ && !stricmp(nick, s_OperServ))
|| (s_OperServAlias
&& !stricmp(nick, s_OperServAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_GlobalNoticer && !stricmp(nick, s_GlobalNoticer))
|| (s_GlobalNoticerAlias
&& !stricmp(nick, s_GlobalNoticerAlias))) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
} else if ((s_HostServ && !stricmp(nick, s_HostServ))
|| (s_HostServAlias
&& !stricmp(nick, s_HostServAlias))) {
/* use nickIsServices() to reduce the number of lines of code - TSL */
if (nickIsServices(nick, 0)) {
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
}
+205 -9
View File
@@ -21,11 +21,13 @@ Channel *chanlist[1024];
void add_ban(Channel * chan, char *mask);
void add_exception(Channel * chan, char *mask);
void add_invite(Channel * chan, char *mask);
void chan_adduser2(User * user, Channel * c);
Channel *chan_create(char *chan);
void chan_delete(Channel * c);
void del_ban(Channel * chan, char *mask);
void del_exception(Channel * chan, char *mask);
void del_invite(Channel * chan, char *mask);
char *get_flood(Channel * chan);
char *get_key(Channel * chan);
char *get_limit(Channel * chan);
@@ -390,6 +392,13 @@ void get_channel_stats(long *nrec, long *memuse)
mem += strlen(chan->excepts[j]) + 1;
}
}
if (ircd->invitemode) {
mem += sizeof(char *) * chan->invitesize;
for (j = 0; j < chan->invitecount; j++) {
if (chan->invite[j])
mem += strlen(chan->invite[j]) + 1;
}
}
for (cu = chan->users; cu; cu = cu->next) {
mem += sizeof(*cu);
if (cu->ud) {
@@ -618,22 +627,48 @@ void do_part(const char *source, int ac, char **av)
av[0] = timestamp
av[1] = user
============================================================
Unreal SJOIN
On Connect there is
SJOIN !11LkOb #ircops +nt :@Trystan
av[0] = time stamp (base64)
av[1] = channel
av[2] = modes
av[3] = users + bans
On Channel Creation or a User joins an existing
Luna.NomadIrc.Net SJOIN !11LkW9 #akill :@Trystan
Luna.NomadIrc.Net SJOIN !11LkW9 #akill :Trystan`
av[0] = time stamp (base64)
av[1] = channel
av[2] = users
*/
void do_sjoin(const char *source, int ac, char **av)
{
Channel *c;
User *user;
char *s, *end, cubuf[ircd->max_symbols + 2], *end2,
*cumodes[ircd->max_symbols + 1];
int is_sqlined = 0;
int ts = 0;
if (ircd->sjb64) {
ts = base64dects(av[0]);
} else {
ts = strtoul(av[0], NULL, 10);
}
/* Double check to avoid unknown modes that need parameters */
if (ac >= 4 && ac <= 6) {
char *s, *end, cubuf[ircd->max_symbols + 2], *end2,
*cumodes[ircd->max_symbols + 1];
c = findchan(av[1]);
if (ircd->chansqline) {
if (!c)
is_sqlined = check_chan_sqline(av[1]);
@@ -651,6 +686,26 @@ void do_sjoin(const char *source, int ac, char **av)
*end = 0;
end2 = cubuf + 1;
#ifdef SJOINBANNCHAR
if (*s == SJOINBANNCHAR) {
add_ban(c, myStrGetToken(s, SJOINBANNCHAR, 1));
if (!end)
break;
s = end + 1;
continue;
}
#endif
#ifdef SJOINEXCEPTIONCHAR
if (*s == SJOINEXCEPTIONCHAR) {
add_exception(c, myStrGetToken(s, SJOINEXCEPTIONCHAR, 1));
if (!end)
break;
s = end + 1;
continue;
}
#endif
while (csmodes[(int) *s] != 0)
*end2++ = csmodes[(int) *s++];
*end2 = 0;
@@ -693,10 +748,75 @@ void do_sjoin(const char *source, int ac, char **av)
if (c) {
/* Set the timestamp */
c->creation_time = strtoul(av[0], NULL, 10);
c->creation_time = ts;
/* We now update the channel mode. */
chan_set_modes(source, c, ac - 3, &av[2], 1);
}
/* Unreal just had to be different */
} else if (ac == 3) {
c = findchan(av[1]);
if (ircd->chansqline) {
if (!c)
is_sqlined = check_chan_sqline(av[1]);
}
cubuf[0] = '+';
cumodes[0] = cubuf;
/* We make all the users join */
s = av[2]; /* Users are always the last element */
while (*s) {
end = strchr(s, ' ');
if (end)
*end = 0;
end2 = cubuf + 1;
while (csmodes[(int) *s] != 0)
*end2++ = csmodes[(int) *s++];
*end2 = 0;
user = finduser(s);
if (!user) {
alog("user: SJOIN for nonexistent user %s on %s", s,
av[1]);
return;
}
if (is_sqlined && !is_oper(user)) {
anope_cmd_kick(s_OperServ, av[1], s, "Q-Lined");
} else {
if (!check_kick(user, av[1])) {
/* Make the user join; if the channel does not exist it
* will be created there. This ensures that the channel
* is not created to be immediately destroyed, and
* that the locked key or topic is not shown to anyone
* who joins the channel when empty.
*/
c = join_user_update(user, c, av[1]);
/* We update user mode on the channel */
if (end2 - cubuf > 1) {
int i;
for (i = 1; i < end2 - cubuf; i++)
cumodes[i] = user->nick;
chan_set_modes(source, c, 1 + (end2 - cubuf - 1),
cumodes, 1);
}
}
}
if (!end)
break;
s = end + 1;
}
if (c) {
c->creation_time = ts;
}
} else if (ac == 2) {
user = finduser(source);
if (!user) {
@@ -718,7 +838,7 @@ void do_sjoin(const char *source, int ac, char **av)
anope_cmd_kick(s_OperServ, av[1], user->nick, "Q-Lined");
} else {
c = join_user_update(user, c, av[1]);
c->creation_time = strtoul(av[0], NULL, 10);
c->creation_time = ts;
}
}
}
@@ -786,7 +906,16 @@ void do_cmode(const char *source, int ac, char **av)
void do_topic(const char *source, int ac, char **av)
{
Channel *c = findchan(av[0]);
time_t topic_time = strtoul(av[2], NULL, 10);
int ts;
time_t topic_time;
if (ircd->sjb64) {
ts = base64dects(av[0]);
} else {
ts = strtoul(av[0], NULL, 10);
}
topic_time = ts;
if (!c) {
alog("channel: TOPIC %s for nonexistent channel %s",
@@ -856,6 +985,21 @@ void add_exception(Channel * chan, char *mask)
/*************************************************************************/
void add_invite(Channel * chan, char *mask)
{
if (chan->invitecount >= chan->invitesize) {
chan->invitesize += 8;
chan->invite =
srealloc(chan->invite, sizeof(char *) * chan->invitesize);
}
chan->invite[chan->invitecount++] = sstrdup(mask);
if (debug)
alog("debug: Added invite %s to channel %s", mask, chan->name);
}
/*************************************************************************/
/* Add/remove a user to/from a channel, creating or deleting the channel as
* necessary. If creating the channel, restore mode lock and topic as
* necessary. Also check for auto-opping and auto-voicing.
@@ -1012,13 +1156,25 @@ void chan_delete(Channel * c)
if (c->excepts[i])
free(c->excepts[i]);
else
alog("channel: BUG freeing %s: exceps[%d] is NULL!",
alog("channel: BUG freeing %s: excepts[%d] is NULL!",
c->name, i);
}
if (c->exceptsize)
free(c->excepts);
}
if (ircd->invitemode) {
for (i = 0; i < c->invitecount; ++i) {
if (c->invite[i])
free(c->invite[i]);
else
alog("channel: BUG freeing %s: invite[%d] is NULL!",
c->name, i);
}
if (c->invitesize)
free(c->invite);
}
if (c->next)
c->next->prev = c->prev;
if (c->prev)
@@ -1037,6 +1193,11 @@ void del_ban(Channel * chan, char *mask)
int i = 0;
AutoKick *akick;
/* Sanity check as it seems some IRCD will just send -b without a mask */
if (!mask) {
return;
}
while (i < chan->bancount && strcmp(*s, mask) != 0) {
i++;
s++;
@@ -1063,6 +1224,11 @@ void del_exception(Channel * chan, char *mask)
int i;
int reset = 0;
/* Sanity check as it seems some IRCD will just send -e without a mask */
if (!mask) {
return;
}
for (i = 0; i < chan->exceptcount; i++) {
if ((!reset) && (stricmp(chan->excepts[i], mask) == 0)) {
free(chan->excepts[i]);
@@ -1080,6 +1246,36 @@ void del_exception(Channel * chan, char *mask)
alog("debug: Deleted except %s to channel %s", mask, chan->name);
}
/*************************************************************************/
void del_invite(Channel * chan, char *mask)
{
int i;
int reset = 0;
/* Sanity check as it seems some IRCD will just send -I without a mask */
if (!mask) {
return;
}
for (i = 0; i < chan->invitecount; i++) {
if ((!reset) && (stricmp(chan->invite[i], mask) == 0)) {
free(chan->invite[i]);
reset = 1;
}
if (reset)
chan->invite[i] =
(i == chan->invitecount) ? NULL : chan->invite[i + 1];
}
if (reset)
chan->invitecount--;
if (debug)
alog("debug: Deleted invite %s to channel %s", mask, chan->name);
}
/*************************************************************************/
char *get_flood(Channel * chan)
@@ -1148,7 +1344,7 @@ void set_flood(Channel * chan, char *value)
chan->flood = value ? sstrdup(value) : NULL;
if (debug)
alog("debug: Flood of channel %s set to %s", chan->name,
alog("debug: Flood mode for channel %s set to %s", chan->name,
chan->flood ? chan->flood : "no flood settings");
}
+68 -6
View File
@@ -2038,20 +2038,37 @@ int delchan(ChannelInfo * ci)
int i;
NickCore *nc = ci->founder;
if (debug >= 2) {
alog("debug: delchan removing %s", ci->name);
}
if (ci->bi) {
ci->bi->chancount--;
}
if (debug >= 2) {
alog("debug: delchan top of removing the bot");
}
if (ci->c) {
if (ci->bi && ci->c->usercount >= BSMinUsers) {
anope_cmd_part(ci->bi->nick, ci->c->name, NULL);
}
ci->c->ci = NULL;
}
if (debug >= 2) {
alog("debug: delchan() Bot has been removed moving on");
}
#ifdef USE_RDB
if (debug >= 2) {
alog("debug: delchan() rdb updating");
}
if (rdb_open()) {
rdb_cs_delchan(ci);
rdb_close();
}
if (debug >= 2) {
alog("debug: delchan() rdb done");
}
#endif
if (ci->next)
ci->next->prev = ci->prev;
@@ -2079,6 +2096,9 @@ int delchan(ChannelInfo * ci)
free(ci->forbidreason);
if (ci->access)
free(ci->access);
if (debug >= 2) {
alog("debug: delchan() top of the akick list");
}
for (i = 0; i < ci->akickcount; i++) {
if (!(ci->akick[i].flags & AK_ISNICK) && ci->akick[i].u.mask)
free(ci->akick[i].u.mask);
@@ -2087,10 +2107,16 @@ int delchan(ChannelInfo * ci)
if (ci->akick[i].creator)
free(ci->akick[i].creator);
}
if (debug >= 2) {
alog("debug: delchan() done with the akick list");
}
if (ci->akick)
free(ci->akick);
if (ci->levels)
free(ci->levels);
if (debug >= 2) {
alog("debug: delchan() top of the memo list");
}
if (ci->memos.memos) {
for (i = 0; i < ci->memos.memocount; i++) {
if (ci->memos.memos[i].text)
@@ -2099,21 +2125,38 @@ int delchan(ChannelInfo * ci)
}
free(ci->memos.memos);
}
if (debug >= 2) {
alog("debug: delchan() done with the memo list");
}
if (ci->ttb)
free(ci->ttb);
if (debug >= 2) {
alog("debug: delchan() top of the badword list");
}
for (i = 0; i < ci->bwcount; i++) {
if (ci->badwords[i].word)
free(ci->badwords[i].word);
}
if (ci->badwords)
free(ci->badwords);
if (debug >= 2) {
alog("debug: delchan() done with the badword list");
}
if (debug >= 2) {
alog("debug: delchan() calling on moduleCleanStruct()");
}
moduleCleanStruct(&ci->moduleData);
free(ci);
if (nc)
nc->channelcount--;
if (debug >= 2) {
alog("debug: delchan() all done");
}
return 1;
}
@@ -2342,16 +2385,11 @@ char *cs_get_redirect(ChannelInfo * ci)
void cs_set_flood(ChannelInfo * ci, char *value)
{
char *dp, *end;
if (ci->mlock_flood)
free(ci->mlock_flood);
/* This looks ugly, but it works ;) */
if (value && *value != ':'
&& (strtoul((*value == '*' ? value + 1 : value), &dp, 10) > 0)
&& (*dp == ':') && (*(++dp) != 0) && (strtoul(dp, &end, 10) > 0)
&& (*end == 0)) {
if (anope_flood_mode_check(value)) {
ci->mlock_flood = sstrdup(value);
} else {
ci->mlock_on &= ~ircd->chan_fmode;
@@ -5645,6 +5683,30 @@ static int do_clear(User * u)
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_EXCEPTS, chan);
free(excepts);
} else if (ircd->invitemode && stricmp(what, "invites") == 0) {
char *av[3];
int i;
/* Save original except info */
int count = c->invitecount;
char **invites = scalloc(sizeof(char *) * count, 1);
for (i = 0; i < count; i++)
invites[i] = sstrdup(c->invite[i]);
for (i = 0; i < count; i++) {
av[0] = sstrdup(chan);
av[1] = sstrdup("-I");
av[2] = invites[i];
anope_cmd_mode(whosends(ci), av[0], "%s :%s", av[1], av[2]);
do_cmode(s_ChanServ, 3, av);
free(av[2]);
free(av[1]);
free(av[0]);
}
notice_lang(s_ChanServ, u, CHAN_CLEARED_INVITES, chan);
free(invites);
} else if (stricmp(what, "modes") == 0) {
char buf[BUFSIZE], *end = buf;
char *argv[2];
+12 -1
View File
@@ -117,6 +117,8 @@ int DumpCore;
int LogUsers;
int NickRegDelay;
int UseSVSHOLD;
int UseTokens;
int UseSVS2MODE;
int UseMail;
char *SendMailPath;
@@ -622,6 +624,8 @@ Directive directives[] = {
{"UserKey2", {{PARAM_POSINT, PARAM_RELOAD, &UserKey2}}},
{"UserKey3", {{PARAM_POSINT, PARAM_RELOAD, &UserKey3}}},
{"UseSVSHOLD", {{PARAM_SET, PARAM_RELOAD, &UseSVSHOLD}}},
{"UseSVS2MODE", {{PARAM_SET, PARAM_RELOAD, &UseSVS2MODE}}},
{"UseTokens", {{PARAM_SET, 0, &UseTokens}}},
{"WallAkillExpire", {{PARAM_SET, PARAM_RELOAD, &WallAkillExpire}}},
{"WallBadOS", {{PARAM_SET, PARAM_RELOAD, &WallBadOS}}},
{"WallDrop", {{PARAM_SET, PARAM_RELOAD, &WallDrop}}},
@@ -941,7 +945,7 @@ int read_config(int reload)
CHECK(RemoteServer2);
}
if (!reload) {
if (LocalHost) {
if (LocalHost && RemoteServer) {
if ((!stricmp(LocalHost, RemoteServer))
&& LocalPort == RemotePort) {
printf
@@ -1319,6 +1323,13 @@ int read_config(int reload)
CHECK(DefconMessage);
}
if (UseTokens) {
if (!ircd->token) {
alog("Anope does not support TOKENS for this ircd setting unsetting UseToken");
UseTokens = 0;
}
}
/**
* If they try to enable any email registration option,
* make sure they have everything else they need too...
+111 -21
View File
@@ -89,6 +89,10 @@ IRCDVar ircd[] = {
0,
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
0, /* TIME STAMPS are BASE64 */
0, /* +I support */
}
,
{NULL}
@@ -185,27 +189,56 @@ void anope_set_umode(User * user, int ac, char **av)
}
}
unsigned long umodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, UMODE_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0, 0, 0, 0,
0,
0, 0, 0, 0, 0,
0, UMODE_a, 0, 0, 0, 0, 0,
UMODE_g,
UMODE_h, UMODE_i, 0, 0, 0, 0, 0, UMODE_o,
0,
0, UMODE_r, 0, 0, 0, 0, UMODE_w,
0,
0,
0,
0, 0, 0, 0, 0
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Horzontal Tab */
0, 0, 0, /* Line Feed, Unused, Unused */
0, 0, 0, /* Carriage Return, Unused, Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Space */
0, 0, 0, /* ! " # */
0, 0, 0, /* $ % & */
0, 0, 0, /* ! ( ) */
0, 0, 0, /* * + , */
0, 0, 0, /* - . / */
0, 0, /* 0 1 */
0, 0, /* 2 3 */
0, 0, /* 4 5 */
0, 0, /* 6 7 */
0, 0, /* 8 9 */
0, 0, /* : ; */
0, 0, 0, /* < = > */
0, 0, /* ? @ */
UMODE_A, 0, 0, /* A B C */
0, 0, 0, /* D E F */
0, 0, 0, /* G H I */
0, 0, 0, /* J K L */
0, 0, UMODE_O, /* M N O */
0, 0, 0, /* P Q R */
0, 0, 0, /* S T U */
0, 0, 0, /* V W X */
0, /* Y */
0, /* Z */
0, 0, 0, /* [ \ ] */
0, 0, 0, /* ^ _ ` */
UMODE_a, 0, UMODE_c, /* a b c */
0, 0, UMODE_f, /* d e f */
UMODE_g, UMODE_h, UMODE_i, /* g h i */
0, UMODE_k, 0, /* j k l */
0, 0, UMODE_o, /* m n o */
0, 0, UMODE_r, /* p q r */
UMODE_s, 0, 0, /* s t u */
0, 0, 0, /* v w x */
0, /* y */
0, /* z */
0, 0, 0, /* { | } */
0, 0 /* ~ */
};
char csmodes[128] = {
@@ -447,6 +480,10 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("UNSQLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("PROTOCTL", anope_event_capab); addCoreMessage(IRCD,m);
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("CREDITS", anope_event_credits); addCoreMessage(IRCD,m);
}
@@ -469,6 +506,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_remove_akill(char *user, char *host)
{
send_cmd(NULL, "RAKILL %s %s", host, user);
@@ -563,6 +605,7 @@ void anope_pong(char *servname)
void anope_cmd_connect(int servernum)
{
anope_cmd_capab();
if (servernum == 1)
anope_cmd_pass(RemotePassword);
if (servernum == 2)
@@ -578,6 +621,11 @@ void anope_cmd_pass(char *pass)
send_cmd(NULL, "PASS :%s", pass);
}
void anope_cmd_capab()
{
send_cmd(NULL, "PROTOCTL NOQUIT");
}
void anope_cmd_bot_chan_mode(char *nick, char *chan)
{
anope_cmd_mode(nick, chan, "%s %s %s", ircd->botchanumode, nick, nick);
@@ -1016,6 +1064,7 @@ void anope_cmd_211(const char *fmt, ...)
void anope_cmd_nick(char *nick, char *name, char *modes)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 :%s", nick, time(NULL),
ServiceUser, ServiceHost, ServerName, name);
anope_cmd_mode(nick, nick, "%s", modes);
@@ -1049,7 +1098,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1127,6 +1176,7 @@ void anope_cmd_pong(char *servname, char *who)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 :%s", nick, time(NULL),
user, host, ServerName, real);
anope_cmd_mode(nick, "MODE %s %s", nick, modes);
@@ -1245,4 +1295,44 @@ void anope_cmd_chg_nick(char *oldnick, char *newnick)
send_cmd(oldnick, "NICK %s", newnick);
}
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
/* Not Supported by this IRCD */
}
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
/* Not Supported by this IRCD */
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
return 0;
}
void anope_cmd_eob()
{
/* Not supported */
}
#endif
+4 -3
View File
@@ -33,9 +33,6 @@ HostCore *insertHostCore(HostCore * head, HostCore * prev, char *nick,
HostCore *deleteHostCore(HostCore * head, HostCore * prev);
void delHostCore(char *nick);
char *getvIdent(char *nick);
char *getvHost(char *nick);
int is_host_setter(User * u);
int is_host_remover(User * u);
@@ -881,6 +878,10 @@ int do_set(User * u)
tmp_time = time(NULL);
if ((na = findnick(nick))) {
if (na->status & NS_VERBOTEN) {
notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
return MOD_CONT;
}
alog("vHost for user \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
addHostCore(nick, vIdent, hostmask, u->nick, tmp_time);
if (vIdent) {
+193 -49
View File
@@ -40,7 +40,7 @@ IRCDVar ircd[] = {
"+io", /* Global alias mode */
"+", /* Used by BotServ Bots */
3, /* Chan Max Symbols */
"aiklmnpst", /* Modes to Remove */
"-aiklmnpst", /* Modes to Remove */
"+o", /* Channel Umode used by Botserv bots */
0, /* SVSNICK */
0, /* Vhost */
@@ -89,6 +89,10 @@ IRCDVar ircd[] = {
0, /* On nick change check if they could be identified */
0, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
0, /* TIME STAMPS are BASE64 */
0, /* +I support */
}
,
{NULL}
@@ -96,7 +100,7 @@ IRCDVar ircd[] = {
IRCDCAPAB ircdcap[] = {
{
0, /* NOQUIT */
CAPAB_NOQUIT, /* NOQUIT */
0, /* TSMODE */
0, /* UNCONNECT */
0, /* NICKIP */
@@ -189,36 +193,65 @@ void anope_set_umode(User * user, int ac, char **av)
}
unsigned long umodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, UMODE_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0, 0, 0, 0,
0,
0, 0, 0, 0, 0,
0, UMODE_a, 0, 0, 0, 0, 0,
0,
UMODE_h, UMODE_i, 0, 0, 0, 0, 0, UMODE_o,
0,
0, UMODE_r, 0, 0, 0, 0, UMODE_w,
0,
0,
0,
0, 0, 0, 0, 0
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Horzontal Tab */
0, 0, 0, /* Line Feed, Unused, Unused */
0, 0, 0, /* Carriage Return, Unused, Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Space */
0, 0, 0, /* ! " # */
0, 0, 0, /* $ % & */
0, 0, 0, /* ! ( ) */
0, 0, 0, /* * + , */
0, 0, 0, /* - . / */
0, 0, /* 0 1 */
0, 0, /* 2 3 */
0, 0, /* 4 5 */
0, 0, /* 6 7 */
0, 0, /* 8 9 */
0, 0, /* : ; */
0, 0, 0, /* < = > */
0, 0, /* ? @ */
0, 0, 0, /* A B C */
0, 0, 0, /* D E F */
0, 0, 0, /* G H I */
0, 0, 0, /* J K L */
0, 0, 0, /* M N O */
0, 0, 0, /* P Q R */
0, 0, 0, /* S T U */
0, 0, 0, /* V W X */
0, /* Y */
0, /* Z */
0, 0, 0, /* [ \ ] */
0, 0, 0, /* ^ _ ` */
UMODE_a, UMODE_b, UMODE_c, /* a b c */
UMODE_d, 0, UMODE_f, /* d e f */
UMODE_g, 0, UMODE_i, /* g h i */
0, UMODE_k, UMODE_l, /* j k l */
0, UMODE_n, UMODE_o, /* m n o */
0, 0, UMODE_r, /* p q r */
UMODE_s, 0, UMODE_u, /* s t u */
0, UMODE_w, UMODE_x, /* v w x */
UMODE_y, /* y */
UMODE_z, /* z */
0, 0, 0, /* { | } */
0, 0 /* ~ */
};
char csmodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,
'a', /* (33) ! Channel Admins */
'a', /* (33) ! */
0, 0, 0,
0,
'h',
0, 0, 0, 0,
0,
@@ -232,22 +265,44 @@ char csmodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
CMMode cmmodes[128] = {
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL},
{NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, /* BCD */
{NULL}, {NULL}, {NULL}, /* EFG */
{NULL}, /* H */
{add_invite, del_invite},
{NULL}, /* J */
{NULL}, {NULL}, {NULL}, /* KLM */
{NULL}, {NULL}, {NULL}, /* NOP */
{NULL}, {NULL}, {NULL}, /* QRS */
{NULL}, {NULL}, {NULL}, /* TUV */
{NULL}, {NULL}, {NULL}, /* WXY */
{NULL}, /* Z */
{NULL}, {NULL}, /* (char 91 - 92) */
{NULL}, {NULL}, {NULL}, /* (char 93 - 95) */
{NULL}, /* ` (char 96) */
{NULL}, /* a (char 97) */
{add_ban, del_ban},
{NULL},
{NULL},
@@ -465,7 +520,7 @@ void anope_cmd_global(char *source, const char *fmt, ...)
return;
}
send_cmd(source ? source : ServerName, "WALLOPS :%s", buf);
send_cmd(source ? source : ServerName, "OPERWALL :%s", buf);
}
@@ -538,14 +593,14 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("401", NULL); addCoreMessage(IRCD,m);
m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m);
m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m);
m = createMessage("INVITE", NULL); addCoreMessage(IRCD,m);
m = createMessage("INVITE", anope_event_invite); addCoreMessage(IRCD,m);
m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m);
m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m);
m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m);
m = createMessage("MODE", anope_event_mode); addCoreMessage(IRCD,m);
m = createMessage("MOTD", anope_event_motd); addCoreMessage(IRCD,m);
m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", NULL); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", anope_event_notice); addCoreMessage(IRCD,m);
m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m);
m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m);
m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m);
@@ -553,8 +608,6 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m);
m = createMessage("SERVER", anope_event_server); addCoreMessage(IRCD,m);
m = createMessage("SQUIT", anope_event_squit); addCoreMessage(IRCD,m);
m = createMessage("STATS", m_stats); addCoreMessage(IRCD,m);
m = createMessage("TIME", m_time); addCoreMessage(IRCD,m);
m = createMessage("TOPIC", anope_event_topic); addCoreMessage(IRCD,m);
m = createMessage("USER", NULL); addCoreMessage(IRCD,m);
m = createMessage("WALLOPS", NULL); addCoreMessage(IRCD,m);
@@ -575,8 +628,9 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("CAPAB", anope_event_capab); addCoreMessage(IRCD,m);
m = createMessage("SJOIN", anope_event_sjoin); addCoreMessage(IRCD,m);
m = createMessage("SVINFO", anope_event_svinfo); addCoreMessage(IRCD,m);
m = createMessage("EOB", anope_event_eob); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
@@ -605,6 +659,11 @@ void anope_cmd_svsnoop(char *server, int set)
/* does not support */
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_sgline(char *mask, char *reason)
{
/* does not support */
@@ -718,9 +777,30 @@ void anope_cmd_svinfo()
}
/* CAPAB */
/*
QS - Can handle quit storm removal
EX - Can do channel +e exemptions
CHW - Can do channel wall @#
LL - Can do lazy links
IE - Can do invite exceptions
EOB - Can do EOB message
KLN - Can do KLINE message
GLN - Can do GLINE message
HOPS - can do half ops (+h)
HUB - This server is a HUB
AOPS - Can do anon ops (+a)
UID - Can do UIDs
ZIP - Can do ZIPlinks
ENC - Can do ENCrypted links
KNOCK - supports KNOCK
TBURST - supports TBURST
PARA - supports invite broadcasting for +p
ENCAP - ?
*/
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS");
send_cmd(NULL,
"CAPAB :QS EX CHW IE EOB KLN GLN HOPS HUB AOPS KNOCK TBURST PARA");
}
/* PASS */
@@ -738,6 +818,7 @@ void anope_cmd_server(char *servname, int hop, char *descript)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s :%s", nick, time(NULL),
modes, user, host, ServerName, real);
@@ -799,6 +880,21 @@ int anope_event_kick(char *source, int ac, char **av)
return MOD_CONT;
}
int anope_event_eob(char *source, int ac, char **av)
{
Server *s;
s = findserver(servlist, source);
if (s) {
s->sync = 1;
}
return MOD_CONT;
}
void anope_cmd_eob()
{
send_cmd(ServerName, "EOB");
}
int anope_event_join(char *source, int ac, char **av)
{
@@ -849,7 +945,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1106,6 +1202,7 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...)
void anope_cmd_nick(char *nick, char *name, char *mode)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s :%s", nick, time(NULL), mode,
ServiceUser, ServiceHost, ServerName, (name));
}
@@ -1150,7 +1247,7 @@ void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...)
void anope_cmd_bot_chan_mode(char *nick, char *chan)
{
anope_cmd_mode(nick, chan, "%s %s %s", ircd->botchanumode, nick, nick);
anope_cmd_mode(nick, chan, "%s %s", ircd->botchanumode, nick);
}
/* QUIT */
@@ -1317,4 +1414,51 @@ int anope_event_pass(char *source, int ac, char **av)
return MOD_CONT;
}
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
/* Not Supported by this IRCD */
}
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
/* Not Supported by this IRCD */
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
int anope_event_notice(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_invite(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
return 0;
}
int anope_event_error(char *source, int ac, char **av)
{
if (ac >= 1) {
if (debug) {
alog("ERROR: %s", av[0]);
}
}
return MOD_CONT;
}
#endif
+6 -25
View File
@@ -34,103 +34,85 @@ void introduce_user(const char *user)
/* NickServ */
if (!user || stricmp(user, s_NickServ) == 0) {
EnforceQlinedNick(s_NickServ, NULL);
anope_cmd_nick(s_NickServ, desc_NickServ, ircd->nickservmode);
}
/* ChanServ */
if (!user || stricmp(user, s_ChanServ) == 0) {
EnforceQlinedNick(s_ChanServ, NULL);
anope_cmd_nick(s_ChanServ, desc_ChanServ, ircd->chanservmode);
}
if (s_HostServ && ircd->vhost
&& (!user || stricmp(user, s_HostServ) == 0)) {
EnforceQlinedNick(s_HostServ, NULL);
anope_cmd_nick(s_HostServ, desc_HostServ, ircd->hostservmode);
}
if (!user || stricmp(user, s_MemoServ) == 0) {
EnforceQlinedNick(s_MemoServ, NULL);
anope_cmd_nick(s_MemoServ, desc_MemoServ, ircd->memoservmode);
}
if (s_BotServ && (!user || stricmp(user, s_BotServ) == 0)) {
EnforceQlinedNick(s_BotServ, NULL);
anope_cmd_nick(s_BotServ, desc_BotServ, ircd->botservmode);
}
if (!user || stricmp(user, s_HelpServ) == 0) {
EnforceQlinedNick(s_HelpServ, NULL);
anope_cmd_nick(s_HelpServ, desc_HelpServ, ircd->helpservmode);
}
if (!user || stricmp(user, s_OperServ) == 0) {
EnforceQlinedNick(s_OperServ, NULL);
anope_cmd_nick(s_OperServ, desc_OperServ, ircd->operservmode);
}
if (s_DevNull && (!user || stricmp(user, s_DevNull) == 0)) {
EnforceQlinedNick(s_DevNull, NULL);
anope_cmd_nick(s_DevNull, desc_DevNull, ircd->devnullmode);
}
if (!user || stricmp(user, s_GlobalNoticer) == 0) {
EnforceQlinedNick(s_GlobalNoticer, NULL);
anope_cmd_nick(s_GlobalNoticer, desc_GlobalNoticer,
ircd->globalmode);
}
/* We make aliases go online */
if (s_NickServAlias && (!user || stricmp(user, s_NickServAlias) == 0)) {
EnforceQlinedNick(s_NickServAlias, NULL);
anope_cmd_nick(s_NickServAlias, desc_NickServAlias,
ircd->nickservaliasmode);
}
if (s_ChanServAlias && (!user || stricmp(user, s_ChanServAlias) == 0)) {
EnforceQlinedNick(s_ChanServAlias, NULL);
anope_cmd_nick(s_ChanServAlias, desc_ChanServAlias,
ircd->chanservaliasmode);
}
if (s_MemoServAlias && (!user || stricmp(user, s_MemoServAlias) == 0)) {
EnforceQlinedNick(s_MemoServAlias, NULL);
anope_cmd_nick(s_MemoServAlias, desc_MemoServAlias,
ircd->memoservaliasmode);
}
if (s_BotServAlias && (!user || stricmp(user, s_BotServAlias) == 0)) {
EnforceQlinedNick(s_BotServAlias, NULL);
anope_cmd_nick(s_BotServAlias, desc_BotServAlias,
ircd->botservaliasmode);
}
if (s_HelpServAlias && (!user || stricmp(user, s_HelpServAlias) == 0)) {
EnforceQlinedNick(s_HelpServAlias, NULL);
anope_cmd_nick(s_HelpServAlias, desc_HelpServAlias,
ircd->helpservaliasmode);
}
if (s_OperServAlias && (!user || stricmp(user, s_OperServAlias) == 0)) {
EnforceQlinedNick(s_OperServAlias, NULL);
anope_cmd_nick(s_OperServAlias, desc_OperServAlias,
ircd->operservaliasmode);
}
if (s_DevNullAlias && (!user || stricmp(user, s_DevNullAlias) == 0)) {
EnforceQlinedNick(s_DevNullAlias, NULL);
anope_cmd_nick(s_DevNullAlias, desc_DevNullAlias,
ircd->devnullvaliasmode);
}
if (s_HostServAlias && ircd->vhost
&& (!user || stricmp(user, s_HostServAlias) == 0)) {
EnforceQlinedNick(s_HostServAlias, NULL);
anope_cmd_nick(s_HostServAlias, desc_HostServAlias,
ircd->hostservaliasmode);
}
if (s_GlobalNoticerAlias
&& (!user || stricmp(user, s_GlobalNoticerAlias) == 0)) {
EnforceQlinedNick(s_GlobalNoticerAlias, NULL);
anope_cmd_nick(s_GlobalNoticerAlias, desc_GlobalNoticerAlias,
ircd->globalaliasmode);
}
@@ -143,8 +125,6 @@ void introduce_user(const char *user)
for (i = 0; i < 256; i++)
for (bi = botlists[i]; bi; bi = bi->next) {
EnforceQlinedNick(bi->nick, s_BotServ);
if (!user || !stricmp(user, bi->nick))
anope_cmd_bot_nick(bi->nick, bi->user, bi->host,
bi->real, ircd->botserv_bot_mode);
@@ -152,8 +132,6 @@ void introduce_user(const char *user)
}
}
#undef NICK
/*************************************************************************/
/* Set GID if necessary. Return 0 if successful (or if RUNGROUP not
@@ -345,8 +323,8 @@ static int parse_options(int ac, char **av)
is44 = 1;
#endif
} else if (!strcmp(s, "version")) {
fprintf(stdout, "Anope-%s %s -- %s\n", version_number,
version_flags, version_build);
fprintf(stdout, "Anope-%s %s %s -- %s\n", version_number,
ircd->name, version_flags, version_build);
exit(EXIT_SUCCESS);
} else if (!strcmp(s, "help")) {
fprintf(stdout, "Anope-%s %s -- %s\n", version_number,
@@ -663,7 +641,8 @@ int init(int ac, char **av)
}
#endif
/* Make myself known to myself in the serverlist */
me_server = new_server(NULL, ServerName, ServerDesc, SERVER_ISME);
me_server =
new_server(NULL, ServerName, ServerDesc, SERVER_ISME, NULL);
/* Connect to the remote server */
servsock = conn(RemoteServer, RemotePort, LocalHost, LocalPort);
@@ -721,6 +700,8 @@ int init(int ac, char **av)
anope_cmd_join(s_GlobalNoticer, LogChannel, time(NULL));
}
anope_cmd_eob();
/**
* Load our delayed modeles - modules that are planing on making clients need to wait till now
* where as modules wanting to modify our ircd connection messages need to load eariler :|
+3 -2
View File
@@ -503,8 +503,9 @@ int main(int ac, char **av, char **envp)
int errno_save = errno;
quitmsg = scalloc(BUFSIZE, 1);
if (quitmsg) {
snprintf(quitmsg, BUFSIZE, "Read error from server: %s",
strerror(errno_save));
snprintf(quitmsg, BUFSIZE,
"Read error from server: %s (error num: %d)",
strerror(errno_save), errno_save);
} else {
quitmsg = "Read error from server";
}
+3
View File
@@ -1003,6 +1003,9 @@ static int do_info(User * u)
if (!na) {
notice_lang(s_MemoServ, u, NICK_X_NOT_REGISTERED, name);
return MOD_CONT;
} else if (na->status & NS_VERBOTEN) {
notice_lang(s_MemoServ, u, NICK_X_FORBIDDEN, name);
return MOD_CONT;
}
mi = &na->nc->memos;
hardmax = na->nc->flags & NI_MEMO_HARDMAX ? 1 : 0;
+6 -19
View File
@@ -49,25 +49,8 @@ int m_kill(char *nick, char *msg)
BotInfo *bi;
/* Recover if someone kills us. */
if (stricmp(nick, s_OperServ) == 0 ||
(s_OperServAlias && stricmp(nick, s_OperServAlias) == 0) ||
stricmp(nick, s_NickServ) == 0 ||
(s_NickServAlias && stricmp(nick, s_NickServAlias) == 0) ||
stricmp(nick, s_ChanServ) == 0 ||
(s_ChanServAlias && stricmp(nick, s_ChanServAlias) == 0) ||
stricmp(nick, s_MemoServ) == 0 ||
(s_MemoServAlias && stricmp(nick, s_MemoServAlias) == 0) ||
(s_HostServ && stricmp(nick, s_HostServ) == 0) ||
(s_HostServAlias && stricmp(nick, s_HostServAlias) == 0) ||
(s_BotServ && stricmp(nick, s_BotServ) == 0) ||
(s_BotServAlias && stricmp(nick, s_BotServAlias) == 0) ||
stricmp(nick, s_HelpServ) == 0 ||
(s_HelpServAlias && stricmp(nick, s_HelpServAlias) == 0) ||
(s_DevNull && stricmp(nick, s_DevNull) == 0) ||
(s_DevNullAlias && stricmp(nick, s_DevNullAlias) == 0) ||
stricmp(nick, s_GlobalNoticer) == 0 ||
(s_GlobalNoticerAlias && stricmp(nick, s_GlobalNoticerAlias) == 0)
) {
/* use nickIsServices() to reduce the number of lines of code - TSL */
if (nickIsServices(nick, 0)) {
if (!readonly && !skeleton)
introduce_user(nick);
} else if (s_BotServ && (bi = findbot(nick))) {
@@ -138,6 +121,10 @@ int m_privmsg(char *source, char *receiver, char *msg)
return MOD_CONT;
}
if (!*receiver || !receiver || !msg) {
return MOD_CONT;
}
if (*receiver == '#') {
if (s_BotServ && (ci = cs_findchan(receiver)))
if (!(ci->flags & CI_VERBOTEN) && ci->c && ci->bi) /* Some paranoia checks */
+56 -2
View File
@@ -663,7 +663,7 @@ void EnforceQlinedNick(char *nick, char *killer)
}
}
int nickIsServices(char *nick)
int nickIsServices(char *nick, int bot)
{
int found = 0;
@@ -704,7 +704,7 @@ int nickIsServices(char *nick)
else if (s_GlobalNoticerAlias
&& (stricmp(nick, s_GlobalNoticerAlias) == 0))
found++;
else if (s_BotServ) {
else if (s_BotServ && bot) {
BotInfo *bi;
int i;
for (i = 0; i < 256; i++) {
@@ -831,4 +831,58 @@ u_int32_t getrandom32(void)
return val;
}
char *send_token(char *token1, char *token2)
{
if (UseTokens && ircd->token && ircdcap->token) {
return token2;
}
else {
return token1;
}
}
int myNumToken(const char *str, const char dilim)
{
int len, idx, counter = 0, start_pos = 0;
if (!str) {
return 0;
}
len = strlen(str);
for (idx = 0; idx <= len; idx++) {
if ((str[idx] == dilim) || (idx == len)) {
start_pos = idx + 1;
counter++;
}
}
return counter;
}
char *host_resolve(char *host)
{
struct hostent *hentp = NULL;
uint32 ip = INADDR_NONE;
char ipbuf[16];
char *ipreturn;
struct in_addr addr;
ipreturn = NULL;
hentp = gethostbyname(host);
if (hentp) {
memcpy(&ip, hentp->h_addr, sizeof(hentp->h_length));
addr.s_addr = ip;
ntoa(addr, ipbuf, sizeof(ipbuf));
ipreturn = strdup(ipbuf);
if (debug) {
alog("Resolved %s to %s",host, ipbuf);
}
return ipreturn;
}
else {
return ipreturn;
}
}
+17 -3
View File
@@ -1054,10 +1054,24 @@ Message *findMessage(MessageHash * msgTable[], const char *name)
idx = CMD_HASH(name);
for (current = msgTable[idx]; current; current = current->next) {
if (stricmp(name, current->name) == 0) {
return current->m;
if (UseTokens) {
if (ircd->tokencaseless) {
if (stricmp(name, current->name) == 0) {
return current->m;
}
}
else {
if (strcmp(name, current->name) == 0) {
return current->m;
}
}
}
else {
if (stricmp(name, current->name) == 0) {
return current->m;
}
}
}
}
return NULL;
}
+8 -1
View File
@@ -27,7 +27,14 @@ int AnopeInit(int argc, char **argv)
{
Message *msg = NULL;
int status;
#ifdef IRC_UNREAL32
msg = createMessage("PRIVMSG", my_privmsg);
if (UseTokens) {
msg = createMessage("!", my_privmsg);
}
#else
msg = createMessage("PRIVMSG", my_privmsg);
#endif
status = moduleAddMessage(msg, MOD_HEAD);
if (status == MOD_ERR_OK) {
addClient(s_CatServ, "meow!");
@@ -81,7 +88,7 @@ void addClient(char *nick, char *realname)
void delClient(void)
{
send_cmd(s_CatServ, "QUIT :Module Unloaded!");
anope_cmd_quit(s_CatServ, "QUIT :Module Unloaded!");
}
void addMessageList(void)
+1
View File
@@ -58,6 +58,7 @@ int db_mysql_init()
} else {
do_mysql = 1;
alog("MySQL has been enabled.");
alog("MySQL client version %s.",mysql_get_client_info());
}
/* The following configuration options are required.
+26 -12
View File
@@ -33,7 +33,6 @@ unsigned int guestnum; /* Current guest number */
extern char *getvHost(char *nick);
static int is_on_access(User * u, NickCore * nc);
void alpha_insert_alias(NickAlias * na);
void insert_core(NickCore * nc);
void insert_requestnick(NickRequest * nr);
@@ -41,7 +40,6 @@ static NickAlias *makenick(const char *nick);
static NickRequest *makerequest(const char *nick);
static NickAlias *makealias(const char *nick, NickCore * nc);
static void change_core_display(NickCore * nc, char *newdisplay);
static int group_identified(User * u, NickCore * nc);
static void collide(NickAlias * na, int from_timeout);
static void release(NickAlias * na, int from_timeout);
@@ -1188,7 +1186,7 @@ int nick_recognized(User * u)
/* Returns whether a user is identified AND in the group nc */
static int group_identified(User * u, NickCore * nc)
int group_identified(User * u, NickCore * nc)
{
return nick_identified(u) && u->na->nc == nc;
}
@@ -1302,7 +1300,7 @@ NickCore *findcore(const char *nick)
/* Is the given user's address on the given nick's access list? Return 1
* if so, 0 if not. */
static int is_on_access(User * u, NickCore * nc)
int is_on_access(User * u, NickCore * nc)
{
int i;
char *buf;
@@ -2499,6 +2497,12 @@ static int do_identify(User * u)
/* Enable nick tracking if enabled */
if (NSNickTracking)
nsStartNickTracking(u);
/* Clear any timers */
if (na->nc->flags & NI_KILLPROTECT) {
del_ns_timeout(na, TO_COLLIDE);
}
}
return MOD_CONT;
}
@@ -2614,7 +2618,9 @@ static int do_logout(User * u)
u2->na->status &= ~(NS_IDENTIFIED | NS_RECOGNIZED);
}
common_svsmode(u2, "-r+d", "1");
if (ircd->modeonreg) {
common_svsmode(u2, ircd->modeonreg, "1");
}
u->isSuperAdmin = 0; /* Dont let people logout and remain a SuperAdmin */
alog("%s: %s!%s@%s logged out nickname %s", s_NickServ, u->nick,
@@ -2628,6 +2634,12 @@ static int do_logout(User * u)
/* Stop nick tracking if enabled */
if (NSNickTracking)
nsStopNickTracking(u);
/* Clear any timers again */
if (u->na->nc->flags & NI_KILLPROTECT) {
del_ns_timeout(u->na, TO_COLLIDE);
}
}
return MOD_CONT;
}
@@ -3286,7 +3298,7 @@ static int do_info(User * u)
s_NickServ, nr->nick);
}
}
} else if (nickIsServices(nick)) {
} else if (nickIsServices(nick, 1)) {
notice_lang(s_NickServ, u, NICK_X_IS_SERVICES, nick);
} else {
notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
@@ -3390,12 +3402,14 @@ static int do_info(User * u)
if (show_hidden) {
if (s_HostServ && ircd->vhost) {
if (getvHost(na->nick) != NULL) {
vHost = smalloc(strlen(getvHost(na->nick)) + 2);
bzero(vHost, sizeof(vHost));
snprintf(vHost, strlen(getvHost(na->nick)) + 2, "%s",
getvHost(na->nick));
notice_lang(s_NickServ, u, NICK_INFO_VHOST, vHost);
free(vHost);
if (ircd->vident && getvIdent(na->nick) != NULL) {
notice_lang(s_NickServ, u, NICK_INFO_VHOST2,
getvIdent(na->nick),
getvHost(na->nick));
} else {
notice_lang(s_NickServ, u, NICK_INFO_VHOST,
getvHost(na->nick));
}
}
}
if (na->nc->greet)
+7 -8
View File
@@ -3100,13 +3100,12 @@ static int do_sqline(User * u)
notice_lang(s_OperServ, u, USERHOST_MASK_TOO_WIDE, mask);
return MOD_CONT;
}
if (ircd->chansqline) {
/* Channel SQLINEs are only supported on Bahamut servers */
if (*mask == '#') {
notice_lang(s_OperServ, u,
OPER_SQLINE_CHANNELS_UNSUPPORTED);
return MOD_CONT;
}
/* Channel SQLINEs are only supported on Bahamut servers */
if (*mask == '#' && !ircd->chansqline) {
notice_lang(s_OperServ, u,
OPER_SQLINE_CHANNELS_UNSUPPORTED);
return MOD_CONT;
}
deleted = add_sqline(u, mask, u->nick, expires, reason);
@@ -4460,7 +4459,7 @@ static int do_jupe(User * u)
anope_cmd_squit(jserver, rbuf);
anope_cmd_server(jserver, 1, rbuf);
new_server(me_server, jserver, rbuf, SERVER_JUPED);
new_server(me_server, jserver, rbuf, SERVER_JUPED, NULL);
if (WallOSJupe)
anope_cmd_global(s_OperServ, "\2%s\2 used JUPE on \2%s\2",
+327 -38
View File
@@ -40,7 +40,7 @@ IRCDVar ircd[] = {
"+io", /* Global alias mode */
"+", /* Used by BotServ Bots */
2, /* Chan Max Symbols */
"-cdfiklmnpqstRS", /* Modes to Remove */
"-inpsmtCRKOASdcqBNfkl", /* Modes to Remove */
"+ao", /* Channel Umode used by Botserv bots */
1, /* SVSNICK */
1, /* Vhost */
@@ -89,6 +89,10 @@ IRCDVar ircd[] = {
1,
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
0, /* TIME STAMPS are BASE64 */
0, /* +I support */
}
,
{NULL}
@@ -129,26 +133,54 @@ IRCDCAPAB ircdcap[] = {
unsigned long umodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, UMODE_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0, 0, 0, 0,
0,
0, 0, 0, 0, 0,
0, UMODE_a, 0, 0, 0, 0, 0,
0,
UMODE_h, UMODE_i, 0, 0, 0, 0, 0, UMODE_o,
0,
0, UMODE_r, 0, 0, 0, 0, UMODE_w,
0,
0,
0,
0, 0, 0, 0, 0
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Horzontal Tab */
0, 0, 0, /* Line Feed, Unused, Unused */
0, 0, 0, /* Carriage Return, Unused, Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Space */
0, 0, 0, /* ! " # */
0, 0, 0, /* $ % & */
0, 0, 0, /* ! ( ) */
0, 0, 0, /* * + , */
0, 0, 0, /* - . / */
0, 0, /* 0 1 */
0, 0, /* 2 3 */
0, 0, /* 4 5 */
0, 0, /* 6 7 */
0, 0, /* 8 9 */
0, 0, /* : ; */
0, 0, 0, /* < = > */
0, 0, /* ? @ */
UMODE_A, UMODE_B, 0, /* A B C */
0, 0, 0, /* D E F */
0, UMODE_H, 0, /* G H I */
0, 0, 0, /* J K L */
0, UMODE_N, UMODE_O, /* M N O */
0, 0, UMODE_R, /* P Q R */
UMODE_S, UMODE_T, 0, /* S T U */
0, 0, 0, /* V W X */
0, /* Y */
0, /* Z */
0, 0, 0, /* [ \ ] */
0, 0, 0, /* ^ _ ` */
UMODE_a, 0, 0, /* a b c */
0, 0, 0, /* d e f */
0, UMODE_h, UMODE_i, /* g h i */
0, 0, 0, /* j k l */
0, 0, UMODE_o, /* m n o */
UMODE_p, 0, UMODE_r, /* p q r */
UMODE_s, 0, 0, /* s t u */
UMODE_v, UMODE_w, 0, /* v w x */
UMODE_y, /* y */
UMODE_z, /* z */
0, 0, 0, /* { | } */
0, 0 /* ~ */
};
char csmodes[128] = {
@@ -212,7 +244,7 @@ CBMode cbmodes[128] = {
{0},
{0}, /* A */
{0}, /* B */
{0}, /* C */
{CMODE_C, 0, NULL, NULL},
{0}, /* D */
{0}, /* E */
{0}, /* F */
@@ -281,6 +313,7 @@ CBModeInfo cbmodeinfos[] = {
{'s', CMODE_s, 0, NULL, NULL},
{'t', CMODE_t, 0, NULL, NULL},
{'A', CMODE_A, 0, NULL, NULL},
{'C', CMODE_C, 0, NULL, NULL},
{'K', CMODE_K, 0, NULL, NULL},
{'N', CMODE_N, 0, NULL, NULL},
{'R', CMODE_R, 0, NULL, NULL},
@@ -343,6 +376,16 @@ void anope_cmd_bot_chan_mode(char *nick, char *chan)
nick);
}
/*
:%s SJOIN %lu %s %s %s :%s
parv[0] = sender
parv[1] = channel TS (channel creation time)
parv[2] = channel
parv[3] = modes + n arguments (key and/or limit)
... [n] = if(key and/or limit) mode arguments
parv[4+n] = flags+nick list (all in one parameter)
NOTE: ignore channel modes if we already have the channel with a gr
*/
int anope_event_sjoin(char *source, int ac, char **av)
{
do_sjoin(source, ac, av);
@@ -355,6 +398,11 @@ int anope_event_sjoin(char *source, int ac, char **av)
* that case serives will *NOT* modify it's internal record for the vhost. We
* need to address this in the future.
*/
/*
:%s NEWMASK %s
parv[0] = sender
parv[1] = new mask (if no '@', hostname is assumed)
*/
int anope_event_newmask(char *source, int ac, char **av)
{
User *u;
@@ -387,7 +435,24 @@ int anope_event_newmask(char *source, int ac, char **av)
return MOD_CONT;
}
/*
NICK %s %d %lu %s %s %s %s %s :%s
parv[1] = nickname
parv[2] = hopcount
parv[3] = nick TS (nick introduction time)
parv[4] = umodes
parv[5] = username
parv[6] = hostname
parv[7] = spoofed hostname
parv[8] = server
parv[9] = nick info
*/
/*
Change NICK
parv[0] = old nick
parv[1] = new nick
parv[2] = TS (timestamp from user's server when nick changed was received)
*/
int anope_event_nick(char *source, int ac, char **av)
{
User *user;
@@ -404,13 +469,21 @@ int anope_event_nick(char *source, int ac, char **av)
return MOD_CONT;
}
/*
:%s SERVER %s %d %s :%s
parv[0] = server from where the server was introduced to us
parv[1] = server name
parv[2] = hop count (1 wen are directly connected)
parv[3] = server version
parv[4] = server description
*/
int anope_event_server(char *source, int ac, char **av)
{
char *uplink;
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[3], NULL);
return MOD_CONT;
}
@@ -431,29 +504,25 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("401", NULL); addCoreMessage(IRCD,m);
m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m);
m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m);
m = createMessage("INVITE", NULL); addCoreMessage(IRCD,m);
m = createMessage("INVITE", anope_event_invite); addCoreMessage(IRCD,m);
m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m);
m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m);
m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m);
m = createMessage("MODE", anope_event_mode); addCoreMessage(IRCD,m);
m = createMessage("MOTD", anope_event_motd); addCoreMessage(IRCD,m);
m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", NULL); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", anope_event_notice); addCoreMessage(IRCD,m);
m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m);
m = createMessage("PASS", NULL); addCoreMessage(IRCD,m);
m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m);
m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m);
m = createMessage("PRIVMSG", anope_event_privmsg); addCoreMessage(IRCD,m);
m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m);
m = createMessage("SERVER", anope_event_server); addCoreMessage(IRCD,m);
m = createMessage("SQUIT", anope_event_squit); addCoreMessage(IRCD,m);
m = createMessage("STATS", m_stats); addCoreMessage(IRCD,m);
m = createMessage("TIME", m_time); addCoreMessage(IRCD,m);
m = createMessage("TOPIC", anope_event_topic); addCoreMessage(IRCD,m);
m = createMessage("USER", NULL); addCoreMessage(IRCD,m);
m = createMessage("WALLOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m);
/* DALnet specific messages */
m = createMessage("AKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("GLOBOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("GNOTICE", NULL); addCoreMessage(IRCD,m);
@@ -472,6 +541,10 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SVINFO", anope_event_svinfo); addCoreMessage(IRCD,m);
m = createMessage("SVSINFO", anope_event_svsinfo); addCoreMessage(IRCD,m);
m = createMessage("SJOIN", anope_event_sjoin); addCoreMessage(IRCD,m);
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("CREDITS", anope_event_credits); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
@@ -494,16 +567,40 @@ int anope_event_capab(char *source, int ac, char **av)
return MOD_CONT;
}
/*
:%s SQLINE %s :%s
parv[0] = sender
parv[1] = sqlined nick/mask
parv[2] = reason
*/
void anope_cmd_sqline(char *mask, char *reason)
{
send_cmd(NULL, "SQLINE %s :%s", mask, reason);
}
/*
:%s SVSADMIN %s :%s
parv[0] = sender (services client)
parv[1] = target server
parv[2] = operation
operations:
noopers - remove existing opers and disable o:lines
*/
void anope_cmd_svsnoop(char *server, int set)
{
send_cmd(NULL, "SVSADMIN %s :%s", server, set ? "noopers" : "rehash");
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
/*
:%s UNGLINE %s
parv[0] = sender (server if on network synchronization)
parv[1] = glined usert@host mask or ALL to remove all glines
*/
void anope_cmd_remove_akill(char *user, char *host)
{
send_cmd(NULL, "UNGLINE %s@%s", user, host);
@@ -520,6 +617,11 @@ void anope_topic(char *whosets, char *chan, char *whosetit, char *topic,
send_cmd(whosets, "TOPIC %s %s %lu :%s", chan, whosetit, when, topic);
}
/*
:%s UNSQLINE %s
parv[0] = sender
parv[1] = sqlined nick/mask
*/
void anope_cmd_unsqline(char *user)
{
send_cmd(NULL, "UNSQLINE %s", user);
@@ -530,6 +632,14 @@ void anope_cmd_join(char *user, char *channel, time_t chantime)
send_cmd(user, "JOIN %s", channel);
}
/*
:%s GLINE %s %lu %s %s
parv[0] = sender (server if on network synchronization)
parv[1] = glined usert@host mask
parv[2] = gline duration time (seconds)
parv[3] = who added the gline
parv[4] = reason
*/
void anope_cmd_akill(char *user, char *host, char *who, time_t when,
time_t expires, char *reason)
{
@@ -560,7 +670,14 @@ void anope_cmd_svskill(char *source, char *user, const char *fmt, ...)
send_cmd(source, "KILL %s :%s", user, buf);
}
/*
:%s SVSMODE %s %s :%s
parv[0] = sender (services client)
parv[1] = target client nick
parv[2] = mode changes
parv[3] = extra parameter ( if news setting mode(+n) )
e.g.: :NickServ SVSMODE Lamego +rn 1991234
*/
void anope_cmd_svsmode(User * u, int ac, char **av)
{
send_cmd(ServerName, "SVSMODE %s %s%s%s", u->nick, av[0],
@@ -587,27 +704,56 @@ void anope_cmd_connect(int servernum)
anope_cmd_pass(RemotePassword2);
else if (servernum == 3)
anope_cmd_pass(RemotePassword3);
anope_cmd_capab();
anope_cmd_server(ServerName, 1, ServerDesc);
anope_cmd_svinfo();
anope_cmd_svsinfo();
}
/*
SVINFO %d %d
parv[0] = server name
parv[1] = minimum supported protocol version (3)
parv[2] = current supported protocol version (6)
*/
void anope_cmd_svinfo()
{
send_cmd(NULL, "SVINFO 3 6 %lu", time(NULL));
}
/*
SVSINFO %lu %d
parv[0] = sender (server name)
parv[1] = local services data TS
parv[1] = max global users
*/
void anope_cmd_svsinfo()
{
send_cmd(NULL, "SVSINFO %lu %d", time(NULL), maxusercnt);
}
/* PASS */
/*
PASS %s :TS
parv[1] = connection password
(TS indicates this is server uses TS protocol and SVINFO will be sent
for protocol compatibility checking)
*/
void anope_cmd_pass(char *pass)
{
send_cmd(NULL, "PASS %s :TS", pass);
}
/*
CAPAB :%s
parv[1] = capability list
*/
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB :QS PTS4");
}
void anope_cmd_server(char *servname, int hop, char *descript)
{
send_cmd(NULL, "SERVER %s %d Anope.Services%s :%s", servname, hop,
@@ -638,6 +784,14 @@ int anope_event_whois(char *source, int ac, char **av)
return MOD_CONT;
}
/*
:%s TOPIC %s %s %lu :%s
parv[0] = sender prefix
parv[1] = channel
parv[2] = topic nick
parv[3] = topic time
parv[4] = topic text
*/
int anope_event_topic(char *source, int ac, char **av)
{
if (ac != 4)
@@ -662,7 +816,12 @@ int anope_event_quit(char *source, int ac, char **av)
return MOD_CONT;
}
/*
:%s MODE %s :%s
parv[0] = sender
parv[1] = target nick (==sender)
parv[2] = mode change string
*/
int anope_event_mode(char *source, int ac, char **av)
{
if (ac < 2)
@@ -1024,8 +1183,21 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...)
send_cmd(source, "MODE %s %s", dest, buf);
}
/*
NICK %s %d %lu %s %s %s %s %s :%s
parv[1] = nickname
parv[2] = hopcount
parv[3] = nick TS (nick introduction time)
parv[4] = umodes
parv[5] = username
parv[6] = hostname
parv[7] = spoofed hostname
parv[8] = server
parv[9] = nick info
*/
void anope_cmd_nick(char *nick, char *name, char *mode)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %lu %s %s %s %s %s :%s", nick, time(NULL),
mode, ServiceUser, ServiceHost, ServiceHost, ServerName,
name);
@@ -1094,6 +1266,14 @@ void anope_cmd_part(char *nick, char *chan, const char *fmt, ...)
}
}
/*
:%s TOPIC %s %s %lu :%s
parv[0] = sender prefix
parv[1] = channel
parv[2] = topic nick
parv[3] = topic time
parv[4] = topic text
*/
void anope_cmd_topic(char *whosets, char *chan, char *whosetit,
char *topic, time_t when)
{
@@ -1228,6 +1408,7 @@ int anope_event_away(char *source, int ac, char **av)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %lu %s %s %s %s %s :%s", nick, time(NULL),
modes, user, host, host, ServerName, real);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1253,31 +1434,56 @@ void anope_cmd_release_svshold(char *nick)
/* Not Supported by this IRCD */
}
/* UNSGLINE */
/*
:%s UNSXLINE %s
parv[0] = sender
parv[1] = info ban mask
*/
void anope_cmd_unsgline(char *mask)
{
/* Not Supported by this IRCD */
}
/* UNSZLINE */
/*
:%s UNZLINE %s
parv[0] = sender
parv[1] = zlined host
*/
void anope_cmd_unszline(char *mask)
{
/* Not Supported by this IRCD */
}
/* SZLINE */
/*
:%s ZLINE %s :%s
parv[0] = sender
parv[1] = zlined host
parv[2] = time
parv[3] = reason
*/
void anope_cmd_szline(char *mask, char *reason)
{
/* Not Supported by this IRCD */
}
/* SGLINE */
/*
:%s SXLINE :%s:%s
parv[0] = sender
parv[1] = info ban mask:reason
*/
void anope_cmd_sgline(char *mask, char *reason)
{
/* Not Supported by this IRCD */
}
/* SVSNICK */
/*
:%s SVSNICK %s %s
parv[0] = sender (services client)
parv[1] = target client nick
parv[2] = new nick
e.g.: :NickServ SVSNICK Smiler 67455223 _Smiler-
*/
void anope_cmd_svsnick(char *source, char *guest, time_t when)
{
if (!source || !guest) {
@@ -1332,6 +1538,12 @@ void anope_cmd_svid_umode3(User * u, char *ts)
}
/* NICK <newnick> */
/*
:%s NICK %s %lu
parv[0] = old nick
parv[1] = new nick
parv[2] = TS (timestamp from user's server when nick changed was received)
*/
void anope_cmd_chg_nick(char *oldnick, char *newnick)
{
if (!oldnick || !newnick) {
@@ -1341,5 +1553,82 @@ void anope_cmd_chg_nick(char *oldnick, char *newnick)
send_cmd(oldnick, "NICK %s", newnick);
}
/*
:%s SVSJOIN %s :%s
parv[0] = sender (services client)
parv[1] = target client nick
parv[2] = channels list
:ChanServ SVSJOIN mynick 4163321 #Chan1,#Chan2
*/
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSJOIN %s :%s", nick, chan);
}
/*
:%s SVSPART %s :%s
parv[0] = sender (services client)
parv[1] = target client nick
parv[2] = channels list
e.g.: :ChanServ SVSPART mynick 4163321 #Chan1,#Chan2
*/
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSPART %s :%s", nick, chan);
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
int anope_event_notice(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_pass(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_invite(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
char *dp, *end;
if (value && *value != ':'
&& (strtoul((*value == '*' ? value + 1 : value), &dp, 10) > 0)
&& (*dp == ':') && (*(++dp) != 0) && (strtoul(dp, &end, 10) > 0)
&& (*end == 0)) {
return 1;
} else {
return 0;
}
}
void anope_cmd_eob()
{
/* not supported */
}
#endif
+151 -22
View File
@@ -89,6 +89,10 @@ IRCDVar ircd[] = {
1,
0, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
0, /* TIME STAMPS are BASE64 */
1, /* +I support */
},
{NULL}
};
@@ -174,20 +178,43 @@ char csmodes[128] = {
CMMode cmmodes[128] = {
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL},
{NULL},
{NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL},
{NULL}, {NULL}, {NULL}, /* BCD */
{NULL}, {NULL}, {NULL}, /* EFG */
{NULL}, /* H */
{add_invite, del_invite},
{NULL}, /* J */
{NULL}, {NULL}, {NULL}, /* KLM */
{NULL}, {NULL}, {NULL}, /* NOP */
{NULL}, {NULL}, {NULL}, /* QRS */
{NULL}, {NULL}, {NULL}, /* TUV */
{NULL}, {NULL}, {NULL}, /* WXY */
{NULL}, /* Z */
{NULL}, {NULL}, /* (char 91 - 92) */
{NULL}, {NULL}, {NULL}, /* (char 93 - 95) */
{NULL}, /* ` (char 96) */
{NULL}, /* a (char 97) */
{add_ban, del_ban},
{NULL},
{NULL},
@@ -434,6 +461,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("401", NULL); addCoreMessage(IRCD,m);
m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m);
m = createMessage("482", anope_event_482); addCoreMessage(IRCD,m);
m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m);
m = createMessage("INVITE", NULL); addCoreMessage(IRCD,m);
m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m);
@@ -455,7 +483,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("WALLOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m);
m = createMessage("AKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("GLOBOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("GLOBOPS", anope_event_globops); addCoreMessage(IRCD,m);
m = createMessage("GOPER", NULL); addCoreMessage(IRCD,m);
m = createMessage("RAKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("SILENCE", NULL); addCoreMessage(IRCD,m);
@@ -483,10 +511,41 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("VHOST", anope_event_vhost); addCoreMessage(IRCD,m);
m = createMessage("MYID", anope_event_myid); addCoreMessage(IRCD,m);
m = createMessage("GNOTICE", anope_event_notice); addCoreMessage(IRCD,m);
m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m);
m = createMessage("BURST", anope_event_burst); addCoreMessage(IRCD,m);
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("CREDITS", anope_event_credits); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
int anope_event_error(char *source, int ac, char **av)
{
if (ac >= 1) {
if (debug) {
alog("ERROR: %s", av[0]);
}
}
return MOD_CONT;
}
int anope_event_burst(char *source, int ac, char **av)
{
Server *s;
s = findserver(servlist, source);
if (ac > 1) {
/* for future use - start burst */
} else {
if (s) {
s->sync = 1;
}
}
return MOD_CONT;
}
void anope_cmd_sqline(char *mask, char *reason)
{
if (!mask || !reason) {
@@ -515,6 +574,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_sgline(char *mask, char *reason)
{
send_cmd(NULL, "SGLINE %d :%s:%s", strlen(mask), mask, reason);
@@ -635,6 +699,7 @@ void anope_cmd_connect(int servernum)
anope_cmd_capab();
anope_cmd_server(ServerName, 1, ServerDesc);
anope_cmd_svinfo();
anope_cmd_burst();
}
void anope_cmd_svinfo()
@@ -644,7 +709,7 @@ void anope_cmd_svinfo()
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB SSJ3 SN2 VHOST");
send_cmd(NULL, "CAPAB BURST UNCONNECT SSJ3 SN2 VHOST");
}
void anope_cmd_server(char *servname, int hop, char *descript)
@@ -1117,49 +1182,55 @@ void anope_cmd_211(const char *fmt, ...)
void anope_cmd_nick(char *nick, char *name, char *modes)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "SNICK %s %ld 1 %s %s 0 * %s 0 %s :%s", nick,
time(NULL), ServiceUser, ServiceHost, ServerName, modes,
name);
anope_cmd_sqline(nick, "Reserved for services");
}
/* EVENT : OS */
int anope_event_os(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_OperServ, av[0]);
return MOD_CONT;
}
/* EVENT : NS */
int anope_event_ns(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_NickServ, av[0]);
return MOD_CONT;
}
/* EVENT : MS */
int anope_event_ms(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_MemoServ, av[0]);
return MOD_CONT;
}
/* EVENT : HS */
int anope_event_hs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_HostServ, av[0]);
return MOD_CONT;
}
/* EVENT : CS */
int anope_event_cs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_ChanServ, av[0]);
return MOD_CONT;
}
@@ -1186,6 +1257,7 @@ void anope_cmd_quit(char *source, const char *fmt, ...)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "SNICK %s %ld 1 %s %s 0 * %s 0 %s :%s", nick,
time(NULL), user, host, ServerName, modes, real);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1207,7 +1279,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1236,6 +1308,12 @@ int anope_event_whois(char *source, int ac, char **av)
return MOD_CONT;
}
int anope_event_482(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_topic(char *source, int ac, char **av)
{
if (ac != 4)
@@ -1442,4 +1520,55 @@ int anope_event_sqline(char *source, int ac, char **av)
return MOD_CONT;
}
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
/* Find no reference to it in the code and docs */
}
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
/* Find no reference to it in the code and docs */
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_globops(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
return 0;
}
void anope_cmd_burst()
{
send_cmd(NULL, "BURST");
}
void anope_cmd_eob()
{
send_cmd(NULL, "BURST 0");
}
#endif
+41 -22
View File
@@ -67,7 +67,7 @@ Server *next_server(int flags)
*/
Server *new_server(Server * uplink, const char *name, const char *desc,
uint16 flags)
uint16 flags, char *suid)
{
Server *serv;
@@ -78,6 +78,8 @@ Server *new_server(Server * uplink, const char *name, const char *desc,
serv->desc = sstrdup(desc);
serv->flags = flags;
serv->uplink = uplink;
serv->suid = suid;
serv->sync = -1;
serv->links = NULL;
serv->prev = NULL;
@@ -197,18 +199,41 @@ Server *findserver(Server * s, const char *name)
return s;
}
/*
Not Synced = -1
Error = 0
Synced = 1
*/
int anope_check_sync(const char *name)
{
Server *s;
s = findserver(servlist, name);
if (!s) {
return 0;
}
if (s->sync) {
return s->sync;
} else {
return 0;
}
}
/*************************************************************************/
/* :<introducing server> SERVER <servername> <hops> :<description>
*/
void do_server(const char *source, int ac, char **av)
void do_server(const char *source, char *servername, char *hops,
char *descript, char *numeric)
{
Server *s;
Server *s, *s2;
if (debug) {
if (!*source) {
alog("debug: Server introduced (%s)", av[0]);
alog("debug: Server introduced (%s)", servername);
} else {
alog("debug: Server introduced (%s) from %s", av[0], source);
alog("debug: Server introduced (%s) from %s", servername,
source);
}
}
@@ -216,23 +241,8 @@ void do_server(const char *source, int ac, char **av)
s = me_server;
else
s = findserver(servlist, source);
if (ircd->numservargs == 4) {
if (ac < 4)
alog("Malformed SERVER received (less than 4 params)");
else
new_server(s, av[0], av[3], 0);
}
if (ircd->numservargs == 7) {
if (ac < 7)
alog("Malformed SERVER received (less than 7 params)");
else
new_server(s, av[0], av[6], 0);
} else {
if (ac < 3)
alog("Malformed SERVER received (less than 3 params)");
else
new_server(s, av[0], av[2], 0);
}
new_server(s, servername, descript, 0, numeric);
}
/*************************************************************************/
@@ -293,6 +303,10 @@ void capab_parse(int ac, char **av)
}
if (!stricmp(s, "NICKIP")) {
uplink_capab |= CAPAB_NICKIP;
/* Update the struct so that we know we can get NICKIP */
if (!ircd->nickip) {
ircd->nickip = 1;
}
}
if (!stricmp(s, "SSJOIN")) {
uplink_capab |= CAPAB_NSJOIN;
@@ -352,6 +366,11 @@ void capab_parse(int ac, char **av)
uplink_capab |= CAPAB_SSJ3;
}
if (!stricmp(s, "SJB64")) {
uplink_capab |= CAPAB_SJB64;
}
if (!stricmp(s, "CHANMODES")) {
uplink_capab |= CAPAB_CHANMODE;
if (tmp) {
+231 -4
View File
@@ -89,6 +89,10 @@ IRCDVar ircd[] = {
0,
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
1, /* We support TOKENS */
0, /* TOKENS are CASE inSensitive */
0, /* TIME STAMPS are BASE64 */
0, /* +I support */
}
,
{NULL}
@@ -564,47 +568,175 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("401", NULL); addCoreMessage(IRCD,m);
m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m);
m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("6", anope_event_away); addCoreMessage(IRCD,m);
}
m = createMessage("INVITE", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("*", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("C", anope_event_join); addCoreMessage(IRCD,m);
}
m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("H", anope_event_kick); addCoreMessage(IRCD,m);
}
m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage(".", anope_event_kill); addCoreMessage(IRCD,m);
}
m = createMessage("MODE", anope_event_mode); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("G", anope_event_mode); addCoreMessage(IRCD,m);
}
m = createMessage("MOTD", anope_event_motd); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("F", anope_event_motd); addCoreMessage(IRCD,m);
}
m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("&", anope_event_nick); addCoreMessage(IRCD,m);
}
m = createMessage("NOTICE", anope_event_notice); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("B", anope_event_notice); addCoreMessage(IRCD,m);
}
m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("D", anope_event_part); addCoreMessage(IRCD,m);
}
m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("<", anope_event_pass); addCoreMessage(IRCD,m);
}
m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("9", anope_event_ping); addCoreMessage(IRCD,m);
}
m = createMessage("PRIVMSG", anope_event_privmsg); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!", anope_event_privmsg); addCoreMessage(IRCD,m);
}
m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage(",", anope_event_quit); addCoreMessage(IRCD,m);
}
m = createMessage("SERVER", anope_event_server); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("'", anope_event_server); addCoreMessage(IRCD,m);
}
m = createMessage("SQUIT", anope_event_squit); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("-", anope_event_squit); addCoreMessage(IRCD,m);
}
m = createMessage("TOPIC", anope_event_topic); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage(")", anope_event_topic); addCoreMessage(IRCD,m);
}
m = createMessage("USER", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("%", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("WALLOPS", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("=", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("#", anope_event_whois); addCoreMessage(IRCD,m);
}
m = createMessage("AKILL", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("V", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("GLOBOPS", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("]", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("GNOTICE", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("Z", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("GOPER", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("[", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("RAKILL", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("Y", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("SILENCE", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("U", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("SVSKILL", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("h", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("SVSMODE", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("n", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("SVSNICK", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("e", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("SVSNOOP", NULL); addCoreMessage(IRCD,m);
m = createMessage("SQLINE", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("f", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("SQLINE", anope_event_sqline); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("c", anope_event_sqline); addCoreMessage(IRCD,m);
}
m = createMessage("UNSQLINE", NULL); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("d", NULL); addCoreMessage(IRCD,m);
}
m = createMessage("PROTOCTL", anope_event_capab); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("_", anope_event_capab); addCoreMessage(IRCD,m);
}
m = createMessage("CHGHOST", anope_event_chghost); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!<", anope_event_chghost); addCoreMessage(IRCD,m);
}
m = createMessage("CHGIDENT", anope_event_chgident); addCoreMessage(IRCD,m);
m = createMessage("CHGNAME", anope_event_chgname); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!=", anope_event_chgident); addCoreMessage(IRCD,m);
}
m = createMessage("NETINFO", anope_event_netinfo); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("u", anope_event_netinfo); addCoreMessage(IRCD,m);
}
m = createMessage("SNETINFO", anope_event_snetinfo); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!1", anope_event_snetinfo); addCoreMessage(IRCD,m);
}
m = createMessage("SETHOST", anope_event_sethost); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!8", anope_event_sethost); addCoreMessage(IRCD,m);
}
m = createMessage("SETIDENT", anope_event_setident); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!9", anope_event_setident); addCoreMessage(IRCD,m);
}
m = createMessage("SETNAME", anope_event_setname); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!;", anope_event_setname); addCoreMessage(IRCD,m);
}
m = createMessage("VCTRL", anope_event_vctrl); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("!I", anope_event_vctrl); addCoreMessage(IRCD,m);
}
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("CREDITS", anope_event_credits); addCoreMessage(IRCD,m);
m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
@@ -626,6 +758,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_remove_akill(char *user, char *host)
{
send_cmd(NULL, "RAKILL %s %s", host, user);
@@ -694,6 +831,7 @@ void anope_cmd_svsmode(User * u, int ac, char **av)
void anope_cmd_connect(int servernum)
{
anope_cmd_capab();
if (servernum == 1)
anope_cmd_pass(RemotePassword);
if (servernum == 2)
@@ -703,6 +841,15 @@ void anope_cmd_connect(int servernum)
anope_cmd_server(ServerName, 1, ServerDesc);
}
void anope_cmd_capab()
{
if (UseTokens) {
send_cmd(NULL, "PROTOCTL NOQUIT TOKEN SILENCE KNOCK");
} else {
send_cmd(NULL, "PROTOCTL NOQUIT SILENCE KNOCK");
}
}
/* PASS */
void anope_cmd_pass(char *pass)
@@ -1131,7 +1278,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1261,6 +1408,7 @@ void anope_cmd_serv_privmsg(char *source, char *dest, char *msg)
void anope_cmd_nick(char *nick, char *name, char *mode)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 :%s", nick, time(NULL),
ServiceUser, ServiceHost, ServerName, name);
anope_cmd_mode(nick, nick, "%s", mode);
@@ -1315,9 +1463,10 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 :%s", nick, time(NULL),
user, host, ServerName, real);
anope_cmd_mode(nick, "MODE %s %s", nick, modes);
anope_cmd_mode(nick, nick, "%s", modes);
anope_cmd_sqline(nick, "Reserved for services");
}
@@ -1452,4 +1601,82 @@ int anope_event_snetinfo(char *source, int ac, char **av)
return MOD_CONT;
}
int anope_event_sqline(char *source, int ac, char **av)
{
return MOD_CONT;
}
/*
** svsjoin
**
** parv[0] - sender
** parv[1] - nick to make join
** parv[2] - channel(s) to join
*/
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSJOIN %s %s", nick, chan);
}
/*
** svspart
**
** parv[0] - sender
** parv[1] - nick to make part
** parv[2] - channel(s) to part
*/
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSPART %s %s", nick, chan);
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
void anope_cmd_eob()
{
/* not supported */
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
char *dp, *end;
if (value && *value != ':'
&& (strtoul((*value == '*' ? value + 1 : value), &dp, 10) > 0)
&& (*dp == ':') && (*(++dp) != 0) && (strtoul(dp, &end, 10) > 0)
&& (*end == 0)) {
return 1;
} else {
return 0;
}
}
int anope_event_error(char *source, int ac, char **av)
{
if (av[0]) {
if (debug) {
alog("ERROR: %s", av[0]);
}
}
return MOD_CONT;
}
#endif
+179 -34
View File
@@ -40,7 +40,7 @@ IRCDVar ircd[] = {
"+io", /* Global alias mode */
"+S", /* Used by BotServ Bots */
5, /* Chan Max Symbols */
"-iklmnpstRKAO", /* Modes to Remove */
"-iklmnpqstRKAO", /* Modes to Remove */
"+ao", /* Channel Umode used by Botserv bots */
1, /* SVSNICK */
1, /* Vhost */
@@ -89,8 +89,9 @@ IRCDVar ircd[] = {
1, /* On nick change check if they could be identified */
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
1, /* validate - to the #:# standard */
},
{NULL}
};
@@ -221,26 +222,54 @@ void anope_set_umode(User * user, int ac, char **av)
}
unsigned long umodes[128] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, UMODE_A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
UMODE_P,
0,
0,
0, 0, 0, 0, 0, 0, 0,
UMODE_Z,
0, 0, 0, 0, 0,
0, UMODE_a, 0, 0, 0, 0, 0,
0,
UMODE_h, UMODE_i, 0, 0, 0, 0, 0, UMODE_o,
UMODE_p,
0, UMODE_r, 0, 0, 0, 0, UMODE_w,
UMODE_x,
0,
0,
0, 0, 0, 0, 0
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Horzontal Tab */
0, 0, 0, /* Line Feed, Unused, Unused */
0, 0, 0, /* Carriage Return, Unused, Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused */
0, 0, 0, /* Unused, Unused, Space */
0, 0, 0, /* ! " # */
0, 0, 0, /* $ % & */
0, 0, 0, /* ! ( ) */
0, 0, 0, /* * + , */
0, 0, 0, /* - . / */
0, 0, /* 0 1 */
0, 0, /* 2 3 */
0, 0, /* 4 5 */
0, 0, /* 6 7 */
0, 0, /* 8 9 */
0, 0, /* : ; */
0, 0, 0, /* < = > */
0, 0, /* ? @ */
UMODE_A, 0, 0, /* A B C */
UMODE_D, 0, 0, /* D E F */
0, 0, 0, /* G H I */
0, 0, 0, /* J K L */
0, 0, UMODE_0, /* M N O */
UMODE_P, 0, 0, /* P Q R */
UMODE_S, 0, 0, /* S T U */
0, UMODE_W, 0, /* V W X */
0, /* Y */
UMODE_Z, /* Z */
0, 0, 0, /* [ \ ] */
0, 0, 0, /* ^ _ ` */
UMODE_a, 0, 0, /* a b c */
UMODE_d, 0, 0, /* d e f */
0, UMODE_h, UMODE_i, /* g h i */
0, 0, 0, /* j k l */
0, 0, UMODE_o, /* m n o */
UMODE_p, 0, UMODE_r, /* p q r */
0, 0, 0, /* s t u */
0, UMODE_w, UMODE_x, /* v w x */
0, /* y */
0, /* z */
0, 0, 0, /* { | } */
0, 0 /* ~ */
};
@@ -346,7 +375,7 @@ CBMode cbmodes[128] = {
{CMODE_n, 0, NULL, NULL},
{0}, /* o */
{CMODE_p, 0, NULL, NULL},
{0}, /* q */
{CMODE_q, 0, NULL, NULL},
{CMODE_r, CBM_NO_MLOCK, NULL, NULL},
{CMODE_s, 0, NULL, NULL},
{CMODE_t, 0, NULL, NULL},
@@ -367,6 +396,7 @@ CBModeInfo cbmodeinfos[] = {
{'m', CMODE_m, 0, NULL, NULL},
{'n', CMODE_n, 0, NULL, NULL},
{'p', CMODE_p, 0, NULL, NULL},
{'q', CMODE_q, 0, NULL, NULL},
{'r', CMODE_r, 0, NULL, NULL},
{'s', CMODE_s, 0, NULL, NULL},
{'t', CMODE_t, 0, NULL, NULL},
@@ -535,7 +565,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("401", NULL); addCoreMessage(IRCD,m);
m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m);
m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m);
m = createMessage("INVITE", NULL); addCoreMessage(IRCD,m);
m = createMessage("INVITE", anope_event_invite); addCoreMessage(IRCD,m);
m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m);
m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m);
m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m);
@@ -583,11 +613,17 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SETHOST", anope_event_sethost); addCoreMessage(IRCD,m);
m = createMessage("NETINFO", NULL); addCoreMessage(IRCD,m);
m = createMessage("GCONNECT", NULL); addCoreMessage(IRCD,m);
m = createMessage("NETGLOBAL", NULL); addCoreMessage(IRCD,m);
m = createMessage("NETGLOBAL", anope_event_netglobal); addCoreMessage(IRCD,m);
m = createMessage("CHATOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("NETCTRL", anope_event_netctrl); addCoreMessage(IRCD,m);
m = createMessage("CLIENT", anope_event_client); addCoreMessage(IRCD,m);
m = createMessage("SMODE", NULL); addCoreMessage(IRCD,m);
m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m);
m = createMessage("BURST", anope_event_burst); addCoreMessage(IRCD,m);
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("CREDITS", anope_event_credits); addCoreMessage(IRCD,m);
m = createMessage("SMODE", anope_event_mode); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
@@ -621,6 +657,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_sgline(char *mask, char *reason)
{
send_cmd(NULL, "SGLINE %d :%s:%s", strlen(mask), mask, reason);
@@ -758,43 +799,48 @@ int anope_event_mode(char *source, int ac, char **av)
return MOD_CONT;
}
/* EVENT : OS */
int anope_event_os(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_OperServ, av[0]);
return MOD_CONT;
}
/* EVENT : NS */
int anope_event_ns(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_NickServ, av[0]);
return MOD_CONT;
}
/* EVENT : MS */
int anope_event_ms(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_MemoServ, av[0]);
return MOD_CONT;
}
/* EVENT : HS */
int anope_event_hs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_HostServ, av[0]);
return MOD_CONT;
}
/* EVENT : CS */
int anope_event_cs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_ChanServ, av[0]);
return MOD_CONT;
}
@@ -909,7 +955,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -968,6 +1014,7 @@ void anope_cmd_376(char *source)
void anope_cmd_nick(char *nick, char *name, char *modes)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "CLIENT %s 1 %ld %s + %s %s * %s 0 0 :%s", nick,
time(NULL), modes, ServiceUser, ServiceHost, ServerName,
name);
@@ -1002,6 +1049,7 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "CLIENT %s 1 %ld %s + %s %s * %s 0 0 :%s", nick,
time(NULL), modes, user, host, ServerName, real);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1144,7 +1192,8 @@ void anope_cmd_quit(char *source, const char *fmt, ...)
/* PROTOCTL */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB NICKIP SSJ5 TS5 CLIENT");
send_cmd(NULL,
"CAPAB TS5 NOQUIT SSJ5 BURST UNCONNECT TSMODE NICKIP CLIENT");
}
/* PASS */
@@ -1499,6 +1548,8 @@ void anope_cmd_connect(int servernum)
}
anope_cmd_capab();
anope_cmd_server(ServerName, 1, ServerDesc);
anope_cmd_svinfo();
anope_cmd_burst();
}
/* SVSHOLD - set */
@@ -1530,7 +1581,7 @@ void anope_cmd_nc_change(User * u)
/* SVSMODE +d */
void anope_cmd_svid_umode2(User * u, char *ts)
{
/* not used by bahamut ircds */
// not used by bahamut ircds
}
void anope_cmd_svid_umode3(User * u, char *ts)
@@ -1549,6 +1600,19 @@ int anope_event_svinfo(char *source, int ac, char **av)
return MOD_CONT;
}
/*
* SVINFO
* parv[0] = sender prefix
* parv[1] = TS_CURRENT for the server
* parv[2] = TS_MIN for the server
* parv[3] = server is standalone or connected to non-TS only
* parv[4] = server's idea of UTC time
*/
void anope_cmd_svinfo()
{
send_cmd(NULL, "SVINFO 5 3 0 :%ld", time(NULL));
}
int anope_event_pass(char *source, int ac, char **av)
{
/* currently not used but removes the message : unknown message from server */
@@ -1579,4 +1643,85 @@ int anope_event_sqline(char *source, int ac, char **av)
return MOD_CONT;
}
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
/* Not Supported by this IRCD */
}
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
/* Not Supported by this IRCD */
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
void anope_cmd_eob()
{
send_cmd(NULL, "BURST 0");
}
void anope_cmd_burst()
{
send_cmd(NULL, "BURST");
}
int anope_event_error(char *source, int ac, char **av)
{
if (ac >= 1) {
if (debug) {
alog("ERROR: %s", av[0]);
}
}
return MOD_CONT;
}
int anope_event_burst(char *source, int ac, char **av)
{
Server *s;
s = findserver(servlist, source);
if (!ac) {
/* for future use - start burst */
} else {
if (s) {
s->sync = 1;
}
}
return MOD_CONT;
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_netglobal(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_invite(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
return 0;
}
#endif
+83 -1
View File
@@ -91,6 +91,9 @@ IRCDVar ircd[] = {
0,
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support Unreal TOKENS */
1, /* TOKENS are CASE inSensitive */
1, /* validate - to the #:# standard */
},
{NULL}
};
@@ -451,6 +454,18 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SETHOST", anope_event_sethost); addCoreMessage(IRCD,m);
m = createMessage("SETIDENT", anope_event_setident); addCoreMessage(IRCD,m);
m = createMessage("SETNAME", anope_event_setname); addCoreMessage(IRCD,m);
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("O", anope_event_rehash); addCoreMessage(IRCD,m);
}
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("@", anope_event_admin); addCoreMessage(IRCD,m);
}
m = createMessage("CREDITS", anope_event_credits); addCoreMessage(IRCD,m);
if (UseTokens) {
m = createMessage("AJ", anope_event_credits); addCoreMessage(IRCD,m);
}
}
/* *INDENT-ON* */
@@ -467,6 +482,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_remove_akill(char *user, char *host)
{
send_cmd(NULL, "TKL - G %s %s %s", user, host, s_OperServ);
@@ -547,6 +567,7 @@ void anope_cmd_376(char *source)
void anope_cmd_nick(char *nick, char *name, char *modes)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 %s * :%s", nick, time(NULL),
ServiceUser, ServiceHost, ServerName, modes, name);
anope_cmd_sqline(nick, "Reserved for services");
@@ -580,6 +601,7 @@ void anope_cmd_mode(char *source, char *dest, const char *fmt, ...)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s 0 %s * :%s", nick, time(NULL),
user, host, ServerName, modes, real);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1356,7 +1378,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1"))
uplink = sstrdup(av[0]);
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1455,4 +1477,64 @@ void anope_cmd_svid_umode3(User * u, char *ts)
/* not used */
}
/* svsjoin
parv[0] - sender
parv[1] - nick to make join
parv[2] - channel(s) to join
*/
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSJOIN %s :%s", nick, chan);
}
/* svspart
parv[0] - sender
parv[1] - nick to make part
parv[2] - channel(s) to part
*/
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSPART %s :%s", nick, chan);
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* Can anyone tell me if 3.1 has this? */
}
void anope_cmd_eob()
{
/* Can anyone tell me if 3.1 has this? */
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_credits(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_flood_mode_check(char *value)
{
char *dp, *end;
if (value && *value != ':'
&& (strtoul((*value == '*' ? value + 1 : value), &dp, 10) > 0)
&& (*dp == ':') && (*(++dp) != 0) && (strtoul(dp, &end, 10) > 0)
&& (*end == 0)) {
return 1;
} else {
return 0;
}
}
#endif
+573 -86
View File
File diff suppressed because it is too large Load Diff
+63 -5
View File
@@ -383,6 +383,12 @@ User *do_nick(const char *source, char *nick, char *username, char *host,
if (debug)
alog("debug: new user: %s", nick);
if (ircd->nickip && ip) {
addr.s_addr = htonl(ip);
ntoa(addr, ipbuf, sizeof(ipbuf));
}
if (LogUsers) {
/**
* Ugly swap routine for Flop's bug :)
@@ -398,11 +404,6 @@ User *do_nick(const char *source, char *nick, char *username, char *host,
* End of ugly swap
**/
if (ircd->nickip) {
addr.s_addr = htonl(ip);
ntoa(addr, ipbuf, sizeof(ipbuf));
}
if (ircd->nickvhost) {
if (ircd->nickip) {
alog("LOGUSERS: %s (%s@%s => %s) (%s) [%s] connected to the network (%s).", nick, username, host, vhost, realname, ipbuf, server);
@@ -647,6 +648,24 @@ void do_umode(const char *source, int ac, char **av)
anope_set_umode(user, ac - 1, &av[1]);
}
/* Handle a UMODE2 command for a user.
* av[0] = modes
*/
void do_umode2(const char *source, int ac, char **av)
{
User *user;
user = finduser(source);
if (!user) {
alog("user: MODE %s for nonexistent nick %s: %s", av[0], source,
merge_args(ac, av));
return;
}
anope_set_umode(user, ac - 1, &av[0]);
}
/*************************************************************************/
/* Handle a QUIT command.
@@ -835,6 +854,45 @@ int match_usermask(const char *mask, User * user)
return result;
}
/*************************************************************************/
/* simlar to match_usermask, except here we pass the host as the IP */
int match_userip(const char *mask, User * user, char *iphost)
{
char *mask2 = sstrdup(mask);
char *nick, *username, *host;
int result;
if (strchr(mask2, '!')) {
nick = strtok(mask2, "!");
username = strtok(NULL, "@");
} else {
nick = NULL;
username = strtok(mask2, "@");
}
host = strtok(NULL, "");
if (!username || !host) {
free(mask2);
return 0;
}
if (nick) {
result = match_wild_nocase(nick, user->nick)
&& match_wild_nocase(username, user->username)
&& (match_wild_nocase(host, iphost)
|| match_wild_nocase(host, user->vhost));
} else {
result = match_wild_nocase(username, user->username)
&& (match_wild_nocase(host, iphost)
|| match_wild_nocase(host, user->vhost));
}
free(mask2);
return result;
}
/*************************************************************************/
/* Split a usermask up into its constitutent parts. Returned strings are
+193 -18
View File
@@ -89,6 +89,9 @@ IRCDVar ircd[] = {
1,
1, /* No Knock requires +i */
NULL, /* CAPAB Chan Modes */
0, /* We support TOKENS */
1, /* TOKENS are CASE inSensitive */
1, /* validate - to the #:# standard */
}
,
{NULL}
@@ -222,7 +225,7 @@ char csmodes[128] = {
0,
0,
0, 0, 0,
0,
'h',
0, 0, 0, 0,
0,
'v', 0, 0, 0, 0,
@@ -474,7 +477,11 @@ int anope_event_chgident(char *source, int ac, char **av)
return MOD_CONT;
}
/*
* sethost
* parv[0] = sender
* parv[1] = newhost
*/
int anope_event_sethost(char *source, int ac, char **av)
{
User *u;
@@ -555,6 +562,69 @@ int anope_event_436(char *source, int ac, char **av)
return MOD_CONT;
}
int anope_event_notice(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_pass(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_svinfo(char *source, int ac, char **av)
{
return MOD_CONT;
}
/*
* gnotice
* parv[0] = sender prefix
* parv[1] = message text
*/
int anope_event_gnotice(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_sqline(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_burst(char *source, int ac, char **av)
{
Server *s;
s = findserver(servlist, source);
if (!ac) {
/* for future use - start burst */
} else {
if (s) {
s->sync = 1;
}
}
return MOD_CONT;
}
int anope_event_tctrl(char *source, int ac, char **av)
{
return MOD_CONT;
}
/*
* error
* parv[0] = sender prefix
* parv[*] = parameters
*/
int anope_event_error(char *source, int ac, char **av)
{
if (ac >= 1) {
if (debug) {
alog("ERROR: %s", av[0]);
}
}
return MOD_CONT;
}
/* *INDENT-OFF* */
void moduleAddIRCDMsgs(void) {
@@ -563,16 +633,16 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("401", NULL); addCoreMessage(IRCD,m);
m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m);
m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m);
m = createMessage("INVITE", NULL); addCoreMessage(IRCD,m);
m = createMessage("INVITE", anope_event_invite); addCoreMessage(IRCD,m);
m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m);
m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m);
m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m);
m = createMessage("MODE", anope_event_mode); addCoreMessage(IRCD,m);
m = createMessage("MOTD", anope_event_motd); addCoreMessage(IRCD,m);
m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", NULL); addCoreMessage(IRCD,m);
m = createMessage("NOTICE", anope_event_notice); addCoreMessage(IRCD,m);
m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m);
m = createMessage("PASS", NULL); addCoreMessage(IRCD,m);
m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m);
m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m);
m = createMessage("PRIVMSG", anope_event_privmsg); addCoreMessage(IRCD,m);
m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m);
@@ -583,7 +653,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m);
m = createMessage("AKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("GLOBOPS", NULL); addCoreMessage(IRCD,m);
m = createMessage("GNOTICE", NULL); addCoreMessage(IRCD,m);
m = createMessage("GNOTICE", anope_event_gnotice); addCoreMessage(IRCD,m);
m = createMessage("GOPER", NULL); addCoreMessage(IRCD,m);
m = createMessage("RAKILL", NULL); addCoreMessage(IRCD,m);
m = createMessage("SILENCE", NULL); addCoreMessage(IRCD,m);
@@ -591,9 +661,8 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SVSMODE", NULL); addCoreMessage(IRCD,m);
m = createMessage("SVSNICK", NULL); addCoreMessage(IRCD,m);
m = createMessage("SVSNOOP", NULL); addCoreMessage(IRCD,m);
m = createMessage("SQLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("SQLINE", anope_event_sqline); addCoreMessage(IRCD,m);
m = createMessage("UNSQLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("CAPAB", anope_event_capab); addCoreMessage(IRCD,m);
m = createMessage("CS", anope_event_cs); addCoreMessage(IRCD,m);
m = createMessage("HS", anope_event_hs); addCoreMessage(IRCD,m);
@@ -604,7 +673,7 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SGLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("SJOIN", anope_event_sjoin); addCoreMessage(IRCD,m);
m = createMessage("SS", NULL); addCoreMessage(IRCD,m);
m = createMessage("SVINFO", NULL); addCoreMessage(IRCD,m);
m = createMessage("SVINFO", anope_event_svinfo); addCoreMessage(IRCD,m);
m = createMessage("SZLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("UNSGLINE", NULL); addCoreMessage(IRCD,m);
m = createMessage("UNSZLINE", NULL); addCoreMessage(IRCD,m);
@@ -615,6 +684,12 @@ void moduleAddIRCDMsgs(void) {
m = createMessage("SETIDENT", anope_event_setident); addCoreMessage(IRCD,m);
m = createMessage("SETNAME", anope_event_setname); addCoreMessage(IRCD,m);
m = createMessage("VS", anope_event_vs); addCoreMessage(IRCD,m);
m = createMessage("BURST", anope_event_burst); addCoreMessage(IRCD,m);
m = createMessage("TCTRL", anope_event_tctrl); addCoreMessage(IRCD,m);
m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m);
m = createMessage("REHASH", anope_event_rehash); addCoreMessage(IRCD,m);
m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m);
m = createMessage("SNOTICE", anope_event_snotice); addCoreMessage(IRCD,m);
}
/* *INDENT-ON* */
@@ -650,6 +725,11 @@ void anope_cmd_svsnoop(char *server, int set)
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
void anope_cmd_svsadmin(char *server, int set)
{
anope_cmd_svsnoop(server, set);
}
void anope_cmd_sgline(char *mask, char *reason)
{
send_cmd(NULL, "SGLINE %d :%s:%s", strlen(mask), mask, reason);
@@ -714,6 +794,16 @@ void anope_cmd_join(char *user, char *channel, time_t chantime)
send_cmd(user, "SJOIN %ld %s", chantime, channel);
}
/*
* m_akill()
* parv[1]=host
* parv[2]=user
* parv[3]=length
* parv[4]=akiller
* parv[5]=time set
* parv[6]=reason
*/
void anope_cmd_akill(char *user, char *host, char *who, time_t when,
time_t expires, char *reason)
{
@@ -721,6 +811,14 @@ void anope_cmd_akill(char *user, char *host, char *who, time_t when,
time(NULL), reason);
}
/*
* svskill
* parv[0] = servername
* parv[1] = client
* parv[2] = nick stamp
* parv[3] = kill message
*/
void anope_cmd_svskill(char *source, char *user, const char *fmt, ...)
{
va_list args;
@@ -836,18 +934,26 @@ void anope_cmd_connect(int servernum)
anope_cmd_capab();
anope_cmd_server(ServerName, 1, ServerDesc);
anope_cmd_svinfo();
anope_cmd_burst();
}
/* SVINFO */
/*
* svinfo
* parv[0] = sender prefix
* parv[1] = TS_CURRENT for the server
* parv[2] = TS_MIN for the server
* parv[3] = server is standalone or connected to non-TS only
* parv[4] = server's idea of UTC time
*/
void anope_cmd_svinfo()
{
send_cmd(NULL, "SVINFO 3 1 0 :%ld", time(NULL));
send_cmd(NULL, "SVINFO 5 3 0 :%ld", time(NULL));
}
/* CAPAB */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB NICKIP SSJOIN TS3 NOQUIT TSMODE UNCONNECT");
send_cmd(NULL, "CAPAB TS5 NOQUIT SSJOIN BURST UNCONNECT NICKIP");
}
/* PASS */
@@ -862,43 +968,48 @@ void anope_cmd_server(char *servname, int hop, char *descript)
send_cmd(NULL, "SERVER %s %d :%s", ServerName, hop, ServerDesc);
}
/* EVENT : OS */
int anope_event_os(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_OperServ, av[0]);
return MOD_CONT;
}
/* EVENT : NS */
int anope_event_ns(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_NickServ, av[0]);
return MOD_CONT;
}
/* EVENT : MS */
int anope_event_ms(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_MemoServ, av[0]);
return MOD_CONT;
}
/* EVENT : HS */
int anope_event_hs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_HostServ, av[0]);
return MOD_CONT;
}
/* EVENT : CS */
int anope_event_cs(char *source, int ac, char **av)
{
if (ac < 1)
return MOD_CONT;
m_privmsg(source, av[0], av[1]);
m_privmsg(source, s_ChanServ, av[0]);
return MOD_CONT;
}
@@ -909,7 +1020,7 @@ int anope_event_server(char *source, int ac, char **av)
if (!stricmp(av[1], "1")) {
uplink = sstrdup(av[0]);
}
do_server(source, ac, av);
do_server(source, av[0], av[1], av[2], NULL);
return MOD_CONT;
}
@@ -1321,6 +1432,7 @@ void anope_cmd_351(char *source)
void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
char *modes)
{
EnforceQlinedNick(nick, s_BotServ);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s 0 0 :%s", nick, time(NULL),
modes, user, host, ServerName, real);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1348,6 +1460,7 @@ void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt,
void anope_cmd_nick(char *nick, char *name, char *modes)
{
EnforceQlinedNick(nick, NULL);
send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s 0 0 :%s", nick, time(NULL),
modes, ServiceUser, ServiceHost, ServerName, name);
anope_cmd_sqline(nick, "Reserved for services");
@@ -1474,4 +1587,66 @@ void anope_cmd_chg_nick(char *oldnick, char *newnick)
send_cmd(oldnick, "NICK %s", newnick);
}
/*
* svsjoin
* parv[0] = sender
* parv[1] = nick to make join
* parv[2] = channel(s) to join
*/
void anope_cmd_svsjoin(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSJOIN %s :%s", nick, chan);
}
/*
* svspart
* parv[0] = sender
* parv[1] = nick to make part
* parv[2] = channel(s) to part
*/
void anope_cmd_svspart(char *source, char *nick, char *chan)
{
send_cmd(source, "SVSPART %s :%s", nick, chan);
}
void anope_cmd_swhois(char *source, char *who, char *mask)
{
/* not supported */
}
int anope_flood_mode_check(char *value)
{
return 0;
}
int anope_event_rehash(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_admin(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_snotice(char *source, int ac, char **av)
{
return MOD_CONT;
}
int anope_event_invite(char *source, int ac, char **av)
{
return MOD_CONT;
}
void anope_cmd_burst()
{
send_cmd(NULL, "BURST");
}
void anope_cmd_eob()
{
send_cmd(NULL, "BURST 0");
}
#endif
+5 -1
View File
@@ -8,10 +8,14 @@
VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="5"
VERSION_BUILD="356"
VERSION_BUILD="362"
# $Log$
#
# BUILD : 1.7.5 (362)
# BUGS : 17 143 147 166 172 173
# NOTES : Applied patch 927 provided by Trystan.
#
# BUILD : 1.7.5 (356)
# BUGS : N/A
# NOTES : Fuixed mysql include issue, it should now detect to use mysql/mysql/h or not