summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes2
-rw-r--r--Changes.conf9
-rw-r--r--data/example.conf8
-rw-r--r--include/extern.h6
-rw-r--r--src/channels.c15
-rw-r--r--src/config.c18
-rw-r--r--src/servers.c13
-rw-r--r--version.log7
8 files changed, 67 insertions, 11 deletions
diff --git a/Changes b/Changes
index b24471238..4db1a45fc 100644
--- a/Changes
+++ b/Changes
@@ -8,7 +8,7 @@ Provided by Anope Dev. <dev@anope.org> - 2004
11/19 F Wrong string and missing registered nick check in bot change. [#221]
Provided by Trystan <trystan@nomadirc.net> - 2004
-12/02 A Support for +S (services clients) mode to override channel modes [ #00]
+12/02 A Support for other Ulines Servers (NeoStats/SolarStats) [ #00]
11/28 A Support for Unreal's version of SVSHOLD [ #00]
11/28 A /OS SET LIST to list the set options [ #00]
11/27 A Solid IRCD support (Solid IRCD 3.4.6 or later) [ #00]
diff --git a/Changes.conf b/Changes.conf
index 18e759627..4127edd37 100644
--- a/Changes.conf
+++ b/Changes.conf
@@ -11,6 +11,15 @@ Anope Version S V N
NSAddAccessOnReg
+# UlineServers [OPTIONAL]
+#
+# A list of ulined servers on your network, these servers are assumed they
+# can set channel modes and we will not attempt to take them from them
+# WARNING: do not put your user servers in this option
+
+UlineServers "stats.your.network, proxy.your.network"
+
+
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
diff --git a/data/example.conf b/data/example.conf
index 1d865918c..49d751adc 100644
--- a/data/example.conf
+++ b/data/example.conf
@@ -497,6 +497,14 @@ GlobalOnCycleUP "Services are now back online - have a nice day"
# to be a Service Admin in Anope
#UnRestrictSAdmin
+# UlineServers [OPTIONAL]
+#
+# A list of ulined servers on your network, these servers are assumed they
+# can set channel modes and we will not attempt to take them from them
+# WARNING: do not put your user servers in this option
+
+UlineServers "stats.your.network, proxy.your.network"
+
###########################################################################
#
# Mail-related options
diff --git a/include/extern.h b/include/extern.h
index 584fda133..338cccf64 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -451,6 +451,10 @@ E char *ExceptionDBName;
E char *SessionLimitDetailsLoc;
E char *SessionLimitExceeded;
+E char *UlineServers;
+E char **Ulines;
+E int NumUlines;
+
#ifdef USE_RDB
E int rdb_init();
E int rdb_open();
@@ -826,6 +830,8 @@ E uint32 uplink_capab;
E Server *first_server(int flags);
E Server *next_server(int flags);
+E int is_ulined(char *server);
+
E Server *new_server(Server * uplink, const char *name, const char *desc,
uint16 flags, char *suid);
diff --git a/src/channels.c b/src/channels.c
index c29887f97..5fd2340d1 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -236,16 +236,13 @@ void chan_set_modes(const char *source, Channel * chan, int ac, char **av,
if (add) {
/*
- Okay everyones biggest complaint is that NeoStats or any other
- services clients are flagged as services but we still strip their
- channel modes when strict is enabled. This lets them keep the mode and
- we update our internal user/channel struct - TSL
+ if they are in the uline server list we assume they can
+ have the mode - yes woke up in the middle of the night to
+ add this.. - TSL
*/
- if (ircd->servicesmode) {
- if (user->mode & ircd->servicesmode) {
- chan_set_user_status(chan, user, cum->status);
- continue;
- }
+ if (is_ulined(user->server->name)) {
+ chan_set_user_status(chan, user, cum->status);
+ continue;
}
/* Fixes bug #68
diff --git a/src/config.c b/src/config.c
index 9c89141f1..5e1f69591 100644
--- a/src/config.c
+++ b/src/config.c
@@ -329,6 +329,10 @@ int Numeric;
int UnRestrictSAdmin;
+char *UlineServers;
+char **Ulines;
+int NumUlines;
+
/*************************************************************************/
/* Deprecated directive (dep_) and value checking (chk_) functions: */
@@ -665,6 +669,7 @@ Directive directives[] = {
{"GlobalOnDefconMore",
{{PARAM_SET, PARAM_RELOAD, &GlobalOnDefconMore}}},
{"DefconMessage", {{PARAM_STRING, PARAM_RELOAD, &DefconMessage}}},
+ {"UlineServers", {{PARAM_STRING, PARAM_RELOAD, &UlineServers}}},
};
/*************************************************************************/
@@ -1197,6 +1202,19 @@ int read_config(int reload)
} while ((s = strtok(NULL, " ")));
}
+ /* Ulines */
+
+ if (UlineServers) {
+ NumUlines = 0;
+
+ s = strtok(UlineServers, " ");
+ do {
+ NumUlines++;
+ Ulines = realloc(Ulines, sizeof(char *) * NumUlines);
+ Ulines[NumUlines - 1] = sstrdup(s);
+ } while ((s = strtok(NULL, " ")));
+ }
+
/* Host Setters building... :P */
HostNumber = 0; /* always zero it, even if we have no setters */
if (HostSetter) {
diff --git a/src/servers.c b/src/servers.c
index 4cd04e8eb..65e67c19d 100644
--- a/src/servers.c
+++ b/src/servers.c
@@ -443,4 +443,17 @@ void capab_parse(int ac, char **av)
}
}
+int is_ulined(char *server)
+{
+ int j;
+
+ for (j = 0; j < NumUlines; j++) {
+ if (stricmp(Ulines[j], server) == 0) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
/* EOF */
diff --git a/version.log b/version.log
index 689d398a1..e621b55fa 100644
--- a/version.log
+++ b/version.log
@@ -8,10 +8,15 @@
VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="6"
-VERSION_BUILD="470"
+VERSION_BUILD="471"
# $Log$
#
+# BUILD : 1.7.6 (471)
+# BUGS : N/A
+# NOTES : Redid Services Mode stuff to be config option called UlineServers this allows you to state what servers can set
+# channel modes and we are to respecet the mode. Gotta clean this up some more in a bit
+#
# BUILD : 1.7.6 (470)
# BUGS : N/A
# NOTES : add mode.. not remove mode.. from the previous commit