1
0
mirror of https://github.com/anope/anope.git synced 2026-06-28 19:56:39 +02:00

Forward port of several DEFCON fixes:

- Fixed defcon not setting modes on newly created unregged channels and failing to force remove defcon-locked modes. 
 - Fixed MLOCK locked mode removal getting priority over DEFCON locked mode setting.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2486 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
jantje_85
2009-08-30 20:29:57 +00:00
parent 0a6d617073
commit 586c8a70f4
2 changed files with 27 additions and 9 deletions
+26 -8
View File
@@ -771,13 +771,15 @@ void check_modes(Channel * c)
ircdproto->SendMode(whosends(ci), c->name, "-r");
}
}
return;
/* Channels that are not regged also need the defcon modes.. ~ Viper */
/* return; */
}
/* Initialize te modes-var to set all modes not set yet but which should
/* Initialize the modes-var to set all modes not set yet but which should
* be set as by mlock and defcon.
*/
modes = ~c->mode & ci->mlock_on;
if (ci)
modes = ~c->mode & ci->mlock_on;
if (DefConModesSet)
modes |= (~c->mode & DefConModesOn);
@@ -796,8 +798,13 @@ void check_modes(Channel * c)
/* Check if it's a defcon or mlock mode */
if (DefConModesOn & cbmi->flag)
value = cbmi->csgetvalue(&DefConModesCI);
else
else if (ci)
value = cbmi->csgetvalue(ci);
else {
value = NULL;
if (debug)
alog ("Warning: setting modes with unknown origin.");
}
cbm = &cbmodes[static_cast<int>(cbmi->mode)];
cbm->setvalue(c, value);
@@ -818,8 +825,13 @@ void check_modes(Channel * c)
/* Check if it's a defcon or mlock mode */
if (DefConModesOn & cbmi->flag)
csvalue = cbmi->csgetvalue(&DefConModesCI);
else
else if (ci)
csvalue = cbmi->csgetvalue(ci);
else {
csvalue = NULL;
if (debug)
alog ("Warning: setting modes with unknown origin.");
}
/* Lock and actual values don't match, so fix the mode */
if (value && csvalue && strcmp(value, csvalue)) {
@@ -838,9 +850,15 @@ void check_modes(Channel * c)
if (*(end - 1) == '+')
end--;
modes = c->mode & ci->mlock_off;
modes = 0;
if (ci) {
modes = c->mode & ci->mlock_off;
/* Make sure we don't remove a mode just set by defcon.. ~ Viper */
if (DefConModesSet)
modes &= ~(modes & DefConModesOn);
}
if (DefConModesSet)
modes |= (~c->mode & DefConModesOff);
modes |= c->mode & DefConModesOff;
if (modes) {
*end++ = '-';
@@ -877,7 +895,7 @@ void check_modes(Channel * c)
*end = 0;
*end2 = 0;
ircdproto->SendMode(whosends(ci), c->name, "%s%s", modebuf,
ircdproto->SendMode((ci ? whosends(ci) : s_OperServ), c->name, "%s%s", modebuf,
(end2 == argbuf ? "" : argbuf));
}
+1 -1
View File
@@ -1223,8 +1223,8 @@ void runDefCon()
if (DefConChanModes && !DefConModesSet) {
if (DefConChanModes[0] == '+' || DefConChanModes[0] == '-') {
alog("DEFCON: setting %s on all chan's", DefConChanModes);
do_mass_mode(DefConChanModes);
DefConModesSet = 1;
do_mass_mode(DefConChanModes);
}
}
} else {