summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes1
-rw-r--r--include/extern.h4
-rw-r--r--include/services.h10
-rw-r--r--src/channels.c33
-rw-r--r--src/chanserv.c29
-rw-r--r--version.log6
6 files changed, 81 insertions, 2 deletions
diff --git a/Changes b/Changes
index e6ca4fb8e..ce30757dc 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
Anope Version S V N
-------------------
Provided by Anope Dev. <dev@anope.org> - 2004
+07/21 A Support for bahamut +j in mlock. [ #00]
07/17 A Switched to autoconf for configure script. [ #00]
07/05 A Warning when LocalAddress conflicts with RemoteServer. [#118]
06/18 A Added proper Bahamut1.8 support. [ #55]
diff --git a/include/extern.h b/include/extern.h
index fe02b446b..ddbadef45 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -143,6 +143,10 @@ E void stick_all(ChannelInfo * ci);
E char *cs_get_flood(ChannelInfo * ci);
E void cs_set_flood(ChannelInfo * ci, char *value);
#endif
+#ifdef HAS_JOINFLOOD
+E char *cs_get_joinflood(ChannelInfo * ci);
+E void cs_set_joinflood(ChannelInfo * ci, char *value);
+#endif
E char *cs_get_key(ChannelInfo * ci);
E void cs_set_key(ChannelInfo * ci, char *value);
E char *cs_get_limit(ChannelInfo * ci);
diff --git a/include/services.h b/include/services.h
index 42dc83dfa..7d6b5490d 100644
--- a/include/services.h
+++ b/include/services.h
@@ -192,7 +192,8 @@ typedef struct channel_ Channel;
#if defined(IRC_BAHAMUT) && !defined(IRC_ULTIMATE3) && !defined(IRC_VIAGRA) && !defined(IRC_RAGE2)
# define HAS_NICKIP
# define HAS_EXCEPT
-# define HAS_SVSHOLD
+# define HAS_SVSHOLD
+# define HAS_JOINFLOOD
# define NICKSERV_MODE "+o"
# define CHANSERV_MODE "+o"
# define MEMOSERV_MODE "+o"
@@ -730,6 +731,9 @@ struct chaninfo_ {
#ifdef HAS_LMODE
char *mlock_redirect; /* NULL if no +L */
#endif
+#ifdef HAS_JOINFLOOD
+ char *mlock_joinflood; /* NULL if no +j */
+#endif
char *entry_message; /* Notice sent on entering channel */
@@ -1254,6 +1258,9 @@ struct channel_ {
#ifdef HAS_FMODE
char *flood; /* +f; NULL if none */
#endif
+#ifdef HAS_JOINFLOOD
+ char *joinflood; /* +j; NULL if none */
+#endif
int32 bancount, bansize;
char **bans;
@@ -1299,6 +1306,7 @@ struct channel_ {
#define CMODE_c 0x00000400 /* Colors can't be used */
#define CMODE_M 0x00000800 /* Non-regged nicks can't send messages */
#define CMODE_O 0x00008000 /* Only opers can join */
+#define CMODE_j 0x02000000 /* Join flood protection */
#endif
/* This mode is for IRC_HYBRID servers only. */
diff --git a/src/channels.c b/src/channels.c
index 9fff738b4..2e83ca083 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -33,6 +33,9 @@ static void del_exception(Channel * chan, char *mask);
#ifdef HAS_FMODE
static char *get_flood(Channel * chan);
#endif
+#ifdef HAS_JOINFLOOD
+static char *get_joinflood(Channel * chan);
+#endif
static char *get_key(Channel * chan);
static char *get_limit(Channel * chan);
#ifdef HAS_LMODE
@@ -42,6 +45,9 @@ static Channel *join_user_update(User * user, Channel * chan, char *name);
#ifdef HAS_FMODE
static void set_flood(Channel * chan, char *value);
#endif
+#ifdef HAS_JOINFLOOD
+static void set_joinflood(Channel * chan, char *value);
+#endif
static void set_key(Channel * chan, char *value);
static void set_limit(Channel * chan, char *value);
#ifdef HAS_LMODE
@@ -167,7 +173,11 @@ CBMode cbmodes[128] = {
{ 0 }, /* g */
{ 0 }, /* h */
{ CMODE_i, 0, NULL, NULL },
+#ifdef HAS_JOINFLOOD
+ { CMODE_j, CBM_MINUS_NO_ARG, set_joinflood, cs_set_joinflood },
+#else
{ 0 }, /* j */
+#endif
{ CMODE_k, 0, set_key, cs_set_key },
{ CMODE_l, CBM_MINUS_NO_ARG, set_limit, cs_set_limit },
{ CMODE_m, 0, NULL, NULL },
@@ -221,6 +231,9 @@ CBModeInfo cbmodeinfos[] = {
{ 'f', CMODE_f, 0, get_flood, cs_get_flood },
#endif
{ 'i', CMODE_i, 0, NULL, NULL },
+#ifdef HAS_JOINFLOOD
+ { 'j', CMODE_j, CBM_MINUS_NO_ARG, get_joinflood, cs_get_joinflood },
+#endif
{ 'k', CMODE_k, 0, get_key, cs_get_key },
{ 'l', CMODE_l, CBM_MINUS_NO_ARG, get_limit, cs_get_limit },
{ 'm', CMODE_m, 0, NULL, NULL },
@@ -1491,6 +1504,13 @@ static char *get_flood(Channel * chan)
/*************************************************************************/
+static char *get_joinflood(Channel * chan)
+{
+ return chan->joinflood;
+}
+
+/*************************************************************************/
+
static char *get_key(Channel * chan)
{
return chan->key;
@@ -1564,6 +1584,19 @@ static void set_flood(Channel * chan, char *value)
/*************************************************************************/
+static void set_joinflood(Channel * chan, char *value)
+{
+ if (chan->joinflood)
+ free(chan->joinflood);
+ chan->joinflood = value ? sstrdup(value) : NULL;
+
+ if (debug)
+ alog("debug: Joinflood setting of channel %s set to %s", chan->name,
+ chan->joinflood ? chan->joinflood : "no joinflood settings");
+}
+
+/*************************************************************************/
+
static void set_key(Channel * chan, char *value)
{
if (chan->key)
diff --git a/src/chanserv.c b/src/chanserv.c
index 06236c547..dc6015676 100644
--- a/src/chanserv.c
+++ b/src/chanserv.c
@@ -2403,6 +2403,13 @@ char *cs_get_flood(ChannelInfo * ci)
/*************************************************************************/
+char *cs_get_joinflood(ChannelInfo * ci)
+{
+ return ci->mlock_joinflood;
+}
+
+/*************************************************************************/
+
char *cs_get_key(ChannelInfo * ci)
{
return ci->mlock_key;
@@ -2459,6 +2466,28 @@ void cs_set_flood(ChannelInfo * ci, char *value)
/*************************************************************************/
+#ifdef HAS_JOINFLOOD
+void cs_set_joinflood(ChannelInfo * ci, char *value)
+{
+ char *end;
+
+ if (ci->mlock_joinflood)
+ free(ci->mlock_joinflood);
+
+ if ((*value != ':') && (strtoul(value, &end, 10) > 0) && (*end == ':')
+ && (*(++end) != '\0') && (strtoul(end, &end, 10) > 0)
+ && (*end == '\0')) {
+ /* Above if looks ugly, but should work (tm) */
+ ci->mlock_joinflood = sstrdup(value);
+ } else {
+ ci->mlock_on &= ~CMODE_j;
+ ci->mlock_joinflood = NULL;
+ }
+}
+#endif
+
+/*************************************************************************/
+
void cs_set_key(ChannelInfo * ci, char *value)
{
if (ci->mlock_key)
diff --git a/version.log b/version.log
index 1f960335b..f43c78c33 100644
--- a/version.log
+++ b/version.log
@@ -8,10 +8,14 @@
VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="4"
-VERSION_BUILD="269"
+VERSION_BUILD="270"
# $Log$
#
+# BUILD : 1.7.4 (270)
+# BUGS :
+# NOTES : Adding +j mlock support for bahamut just before my vacation
+#
# BUILD : 1.7.4 (269)
# BUGS : N/A
# NOTES : dont use -funsigned-chars as the md5 encryption stuff (while it will still encrypt, probably in a way that is more normal md5) it wont be compatiable with the old md5 encryption, so for now, we will never use it, and itll be left to the OSs to just pick if chars are signed or unsigned....