summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes5
-rw-r--r--docs/IRCD114
-rw-r--r--include/services.h2
-rw-r--r--src/bahamut.c2
-rw-r--r--src/chanserv.c57
-rw-r--r--src/dreamforge.c2
-rw-r--r--src/hybrid.c2
-rw-r--r--src/operserv.c11
-rw-r--r--src/plexus.c2
-rw-r--r--src/ptlink.c2
-rw-r--r--src/rageircd.c2
-rw-r--r--src/ratbox.c2
-rw-r--r--src/solidircd.c2
-rw-r--r--src/ultimate2.c2
-rw-r--r--src/ultimate3.c2
-rw-r--r--src/unreal31.c2
-rw-r--r--src/unreal32.c2
-rw-r--r--src/viagra.c2
-rw-r--r--version.log7
19 files changed, 137 insertions, 85 deletions
diff --git a/Changes b/Changes
index ed1dc8889..1f1391181 100644
--- a/Changes
+++ b/Changes
@@ -1,11 +1,12 @@
Anope Version S V N
-------------------
Provided by Anope Dev. <dev@anope.org> - 2005
-02/27 A Added multi-file module support for win32 - thanks heinz. [ #00]
-02/27 A Added multi-file module support for nix, win32 will follow. [ #00]
+02/27 A Added multi-file module support. [ #00]
02/13 A Internal Event support, see EVENTS in the doc folder for help [ #00]
02/05 A Support for Unreal 3.2 +I channel mode. [ #00]
02/03 A Merged anope-win32 branch into the main, now Win32 ready. [ #00]
+03/02 F ircd protocol support for owner and admin taken from proto. files.[ #00]
+03/02 F /ns alist output. [#288]
02/28 F normalizeBuffer() now strips two digit color codes [#303]
02/28 F nickIsServices() no longer alters the buffer [#304]
02/22 F Uninitialized variable in NickServ DROP. [ #00]
diff --git a/docs/IRCD b/docs/IRCD
index 6d2c5e5e3..bb5849547 100644
--- a/docs/IRCD
+++ b/docs/IRCD
@@ -262,167 +262,173 @@ How To Add IRCd Support
owner status. If the IRCd doesn't support owners,
set this to NULL.
- 29) Mode on Nick Register: What mode to give users when they register
+ 29) ADMIN MODE SET: What mode to set to make someone a channel admin.
+ If the IRCd dosn't support admins, set to NULL.
+
+ 30) ADMIN MODE UNSET: What mode to unset to take away channel admin.
+ If the IRCd dosn't support admins, set to NULL.
+
+ 31) Mode on Nick Register: What mode to give users when they register
with NickServ. If your ircd doesn't set expect
a mode to be set on registration, you should
set this to NULL.
- 30) Mode on Nick Unregister: What mode to set give users when they cancel
+ 32) Mode on Nick Unregister: What mode to set give users when they cancel
their registration with NickServ. If your
IRCd doesn't set a mode for registered users
you should set this to NULL.
- 31) Mode on Nick Change: What mode to give users when they change their
+ 33) Mode on Nick Change: What mode to give users when they change their
nick. If your ircd doesn't set a mode, you
should set this to NULL.
- 32) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
+ 34) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
- 33) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
+ 35) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
- 34) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
+ 36) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
- 35) HALFOP: Is channel mode +h for halfop supported by the IRCd? Use 1 for
+ 37) HALFOP: Is channel mode +h for halfop supported by the IRCd? Use 1 for
yes, 0 for no.
- 36) Number of Server Args: When an IRCd connects, this is the number of
+ 38) Number of Server Args: When an IRCd connects, this is the number of
parameters that are passed.
- 37) Join to Set: Services must join a channel to set any modes on that
+ 39) Join to Set: Services must join a channel to set any modes on that
channel. Use 1 for yes, 0 for no.
- 38) Join to Message: Services must join a channel to send any message to
+ 40) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
- 39) Exceptions: Support for channel exceptions (mode +e). Use 1 for yes,
+ 41) Exceptions: Support for channel exceptions (mode +e). Use 1 for yes,
0 for no.
- 40) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
+ 42) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
set forward by +1. Use 1 for yes, 0 for no.
- 41) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones)
+ 43) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones)
like their topic TS set back by -1. Use 1 for yes,
0 for no.
- 42) Protected Umode: UMODE_ define that defines the protected usermod.
+ 44) Protected Umode: UMODE_ define that defines the protected usermod.
Use 0 for no support, or enter the UMODE_ define.
- 43) Admin: Support for channel admins (Mainly used by UltimateIRCd). Use
+ 45) Admin: Support for channel admins (Mainly used by UltimateIRCd). Use
1 for yes, 0 for no.
- 44) SQline Channels: The IRCd's supports banning channel names via
+ 46) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
- 45) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
+ 47) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
- 46) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
+ 48) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
- 47) Protect: Support for channel protect (mode +a, mainly being used by
+ 49) Protect: Support for channel protect (mode +a, mainly being used by
UnrealIRCd and ViagraIRCd). Use 1 for yes, 0 for no.
- 48) Reverse: We can do a reverse check when unbanning. For use with
+ 50) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
- 49) Register Channels: Supports sending a channelmode for registered
+ 51) Register Channels: Supports sending a channelmode for registered
channels. Use 1 for yes, 0 for no.
- 50) Registered Mode: Channelmode to set on registered channels, see the
+ 52) Registered Mode: Channelmode to set on registered channels, see the
option above. Use 1 for yes, 0 for no.
- 51) vIdent: Support for including a user's ident in their vHost. Use
+ 53) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
- 52) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
+ 54) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
- 53) TS on MODE: We need to send a timestamp when modes are being changed.
+ 55) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
- 54) NICKIP: The IP address of new users is being sent along with their
+ 56) NICKIP: The IP address of new users is being sent along with their
hostname when new users are being introduced on the network.
Use 1 for yes, 0 for no.
- 55) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
+ 57) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
- 56) O:LINE: We can use OperServ to give some user a temporary O:LINE.
+ 58) O:LINE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
- 57) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
+ 59) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
0 for no.
- 58) Change Realname: Change real name. Use 1 for yes, 0 for no.
+ 60) Change Realname: Change real name. Use 1 for yes, 0 for no.
- 59) Extra Help: If the IRCd has more help for functions in ChanServ than
+ 61) Extra Help: If the IRCd has more help for functions in ChanServ than
the default help, you should put the language string
identifier here. Use 0 for no extra help.
- 60) No Knock: CMODE_ that defines NO KNOCK. Use 0 for no support.
+ 62) No Knock: CMODE_ that defines NO KNOCK. Use 0 for no support.
- 61) Admin Only: CMODE_ that defines Admin Only. Use 0 for no support.
+ 63) Admin Only: CMODE_ that defines Admin Only. Use 0 for no support.
- 62) Default MLock: Default channelmodes for MLOCK. Use 0 for no modes.
+ 64) Default MLock: Default channelmodes for MLOCK. Use 0 for no modes.
- 63) Vhost Umode: UMODE_ that indicates if the user currently has a vHost.
+ 65) Vhost Umode: UMODE_ that indicates if the user currently has a vHost.
Use 0 for no support.
- 64) Flood Mode: The IRCd has a channelmode for blocking floods. Use 1 for
+ 66) Flood Mode: The IRCd has a channelmode for blocking floods. Use 1 for
yes, 0 for no.
- 65) Link Mode: The IRCd has a channelmode for linking a channel to some
+ 67) Link Mode: The IRCd has a channelmode for linking a channel to some
other channel. Use 1 for yes, 0 for no.
- 66) CMode F: CMODE_ that defines flood mode. Use 0 for no support.
+ 68) CMode F: CMODE_ that defines flood mode. Use 0 for no support.
- 67) CMode L: CMODE_ that defines link mode. Use 0 for no support.
+ 69) CMode L: CMODE_ that defines link mode. Use 0 for no support.
- 68) Check Nick ID: Should we check if a user should remain identified when
+ 70) Check Nick ID: Should we check if a user should remain identified when
changing their nick? This is for IRCd's that remove
their registered-user mode when someone changes their
nick (like Bahamut does).
Use 1 for yes, 0 for no.
- 69) No Knock Requires +i: Does the No Knock channel mode require invite
+ 71) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
- 70) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
+ 72) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
NULL by default.
- 71) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
+ 73) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
0 for no.
- 72) Token Case Senstive: Are the IRCd's TOKENS/COMMANDS case sensitive?
+ 74) Token Case Senstive: Are the IRCd's TOKENS/COMMANDS case sensitive?
Use 1 for yes, 0 for no.
- 73) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
+ 75) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
1 for yes, 0 for no.
- 74) Supports +I: Does the IRCd support channelmode +I? Use 1 for yes,
+ 76) Supports +I: Does the IRCd support channelmode +I? Use 1 for yes,
0 for no.
- 75) SJOIN Ban Char: Character used to identify bans. Use ''.
+ 77) SJOIN Ban Char: Character used to identify bans. Use ''.
- 76) SJOIN Except Char: Character used to identify exceptions. use ''.
+ 78) SJOIN Except Char: Character used to identify exceptions. use ''.
- 77) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
+ 79) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
- 78) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
+ 80) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
- 79) Vhost Character: The character used to represent the vHost mode, if
+ 81) Vhost Character: The character used to represent the vHost mode, if
this is supported by the IRCd.
- 80) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
+ 82) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
- 81) UMode +h: Does the IRCd support usermode +h for helpers?
+ 83) UMode +h: Does the IRCd support usermode +h for helpers?
Use 1 for yes, 0 for no.
- 82) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
+ 84) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
83) Character Set: Unreal passes the character set during PROTOCTL,
the value is stored here. Set this NULL to start.
diff --git a/include/services.h b/include/services.h
index d84230642..1c9473a8f 100644
--- a/include/services.h
+++ b/include/services.h
@@ -278,6 +278,8 @@ struct ircdvars_ {
int owner; /* Supports Owner */
char *ownerset; /* Mode to set for owner */
char *ownerunset; /* Mode to unset for a owner */
+ char *adminset; /* Mode to set for admin */
+ char *adminunset; /* Mode to unset for admin */
char *modeonreg; /* Mode on Register */
char *modeonunreg; /* Mode on Unregister */
char *modeonnick; /* Mode on nick change */
diff --git a/src/bahamut.c b/src/bahamut.c
index c28170d11..980012497 100644
--- a/src/bahamut.c
+++ b/src/bahamut.c
@@ -54,6 +54,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for channel admin */
+ NULL, /* Mode to unset for channel admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"+d", /* Mode on Nick Change */
diff --git a/src/chanserv.c b/src/chanserv.c
index 30d794231..3e2a4a1cb 100644
--- a/src/chanserv.c
+++ b/src/chanserv.c
@@ -1391,14 +1391,14 @@ int check_valid_admin(User * user, Channel * chan, int servermode)
if (servermode && !check_access(user, chan->ci, CA_AUTOPROTECT)) {
notice_lang(s_ChanServ, user, CHAN_IS_REGISTERED, s_ChanServ);
- anope_cmd_mode(whosends(chan->ci), chan->name, "-a %s",
- user->nick);
+ anope_cmd_mode(whosends(chan->ci), chan->name, "%s %s",
+ ircd->adminunset, user->nick);
return 0;
}
if (check_access(user, chan->ci, CA_AUTODEOP)) {
- anope_cmd_mode(whosends(chan->ci), chan->name, "-a %s",
- user->nick);
+ anope_cmd_mode(whosends(chan->ci), chan->name, "%s %s",
+ ircd->adminunset, user->nick);
return 0;
}
@@ -1426,21 +1426,25 @@ int check_valid_op(User * user, Channel * chan, int servermode)
if (ircd->owner && ircd->protect) {
if (check_access(user, chan->ci, CA_AUTOHALFOP)) {
anope_cmd_mode(whosends(chan->ci), chan->name,
- "-aoq %s %s %s", user->nick, user->nick,
- user->nick);
+ "-%so%s %s %s %s", ++ircd->adminunset,
+ ++ircd->ownerunset, user->nick,
+ user->nick, user->nick);
} else {
anope_cmd_mode(whosends(chan->ci), chan->name,
- "-ahoq %s %s %s %s", user->nick,
- user->nick, user->nick, user->nick);
+ "-%sho%s %s %s %s %s",
+ ++ircd->adminunset, ++ircd->ownerunset,
+ user->nick, user->nick, user->nick,
+ user->nick);
}
} else if (!ircd->owner && ircd->protect) {
if (check_access(user, chan->ci, CA_AUTOHALFOP)) {
anope_cmd_mode(whosends(chan->ci), chan->name,
- "-ao %s %s", user->nick, user->nick);
+ "-%so %s %s", ++ircd->adminunset,
+ user->nick, user->nick);
} else {
anope_cmd_mode(whosends(chan->ci), chan->name,
- "-aoh %s %s %s", user->nick, user->nick,
- user->nick);
+ "-%soh %s %s %s", ++ircd->adminunset,
+ user->nick, user->nick, user->nick);
}
} else {
if (check_access(user, chan->ci, CA_AUTOHALFOP)) {
@@ -1462,7 +1466,8 @@ int check_valid_op(User * user, Channel * chan, int servermode)
if (ircd->halfop) {
if (ircd->owner && ircd->protect) {
anope_cmd_mode(whosends(chan->ci), chan->name,
- "-ahoq %s %s %s %s", user->nick, user->nick,
+ "-%sho%s %s %s %s %s", ++ircd->adminunset,
+ ++ircd->ownerunset, user->nick, user->nick,
user->nick, user->nick);
} else {
anope_cmd_mode(whosends(chan->ci), chan->name, "-ho %s %s",
@@ -2589,10 +2594,7 @@ int get_access_level(ChannelInfo * ci, NickAlias * na)
access = &ci->access[num];
- if (!access->in_use)
- return 0;
-
- if (access->nc == na->nc) {
+ if (access->nc && access->nc == na->nc && access->in_use) {
return access->level;
}
@@ -2785,7 +2787,8 @@ static int do_register(User * u)
check_modes(c);
/* On most ircds you do not receive the admin/owner mode till its registered */
if (ircd->admin) {
- anope_cmd_mode(s_ChanServ, chan, "+a %s", u->nick);
+ anope_cmd_mode(s_ChanServ, chan, "%s %s", ircd->adminset,
+ u->nick);
}
if (ircd->owner && ircd->ownerset) {
anope_cmd_mode(s_ChanServ, chan, "%s %s", ircd->ownerset,
@@ -5908,6 +5911,7 @@ static int do_clear(User * u)
{
char *chan = strtok(NULL, " ");
char *what = strtok(NULL, " ");
+ char tmp[BUFSIZE];
Channel *c;
ChannelInfo *ci;
@@ -6076,10 +6080,10 @@ static int do_clear(User * u)
av[0] = sstrdup(chan);
anope_cmd_svsmode_chan(av[0], "-o", NULL);
if (ircd->owner) {
- anope_cmd_svsmode_chan(av[0], "-q", NULL);
+ anope_cmd_svsmode_chan(av[0], ircd->ownerunset, NULL);
}
if (ircd->protect || ircd->admin) {
- anope_cmd_svsmode_chan(av[0], "-a", NULL);
+ anope_cmd_svsmode_chan(av[0], ircd->adminunset, NULL);
}
for (cu = c->users; cu; cu = next) {
next = cu->next;
@@ -6089,10 +6093,14 @@ static int do_clear(User * u)
if (!chan_has_user_status(c, cu->user, CUS_OWNER)) {
continue;
} else {
- av[1] = sstrdup("-qo");
+ snprintf(tmp, BUFSIZE, "-%so",
+ ++ircd->ownerunset);
+ av[1] = sstrdup(tmp);
+
}
} else {
- av[1] = sstrdup("-ao");
+ snprintf(tmp, BUFSIZE, "-%so", ++ircd->adminunset);
+ av[1] = sstrdup(tmp);
}
} else {
av[1] = sstrdup("-o");
@@ -6112,10 +6120,13 @@ static int do_clear(User * u)
if (!chan_has_user_status(c, cu->user, CUS_OWNER)) {
continue;
} else {
- av[1] = sstrdup("-qo");
+ snprintf(tmp, BUFSIZE, "-%so",
+ ++ircd->ownerunset);
+ av[1] = sstrdup(tmp);
}
} else {
- av[1] = sstrdup("-ao");
+ snprintf(tmp, BUFSIZE, "-%so", ++ircd->adminunset);
+ av[1] = sstrdup(tmp);
}
} else {
av[1] = sstrdup("-o");
diff --git a/src/dreamforge.c b/src/dreamforge.c
index bceb88156..399f3c765 100644
--- a/src/dreamforge.c
+++ b/src/dreamforge.c
@@ -52,6 +52,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for chan admin */
+ NULL, /* Mode to unset for chan admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"+d", /* Mode on Nick Change */
diff --git a/src/hybrid.c b/src/hybrid.c
index 6a9e89921..cce2c246a 100644
--- a/src/hybrid.c
+++ b/src/hybrid.c
@@ -52,6 +52,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for admin */
+ NULL, /* Mode to unset for admin */
NULL, /* Mode On Reg */
NULL, /* Mode on UnReg */
NULL, /* Mode on Nick Change */
diff --git a/src/operserv.c b/src/operserv.c
index 76434f667..744038866 100644
--- a/src/operserv.c
+++ b/src/operserv.c
@@ -1764,13 +1764,14 @@ static int do_clearmodes(User * u)
}
/* Clear mode protected or admins */
if (ircd->svsmode_ucmode && (ircd->protect || ircd->admin)) {
- anope_cmd_svsmode_chan(c->name, "-a", NULL);
+
+ anope_cmd_svsmode_chan(c->name, ircd->adminunset, NULL);
for (cu = c->users; cu; cu = next) {
next = cu->next;
if (!chan_has_user_status(c, cu->user, CUS_HALFOP)) {
continue;
}
- argv[0] = sstrdup("-a");
+ argv[0] = sstrdup(ircd->adminunset);
argv[1] = cu->user->nick;
chan_set_modes(s_OperServ, c, 2, argv, 0);
free(argv[0]);
@@ -1780,10 +1781,10 @@ static int do_clearmodes(User * u)
next = cu->next;
if (!chan_has_user_status(c, cu->user, CUS_PROTECT))
continue;
- argv[0] = sstrdup("-a");
+ argv[0] = sstrdup(ircd->adminunset);
argv[1] = sstrdup(cu->user->nick);
- anope_cmd_mode(s_OperServ, c->name, "-a %s",
- cu->user->nick);
+ anope_cmd_mode(s_OperServ, c->name, "%s %s",
+ ircd->adminunset, cu->user->nick);
chan_set_modes(s_OperServ, c, 2, argv, 0);
free(argv[0]);
}
diff --git a/src/plexus.c b/src/plexus.c
index e3217316c..74124154a 100644
--- a/src/plexus.c
+++ b/src/plexus.c
@@ -52,6 +52,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for chan admin */
+ NULL, /* Mode to unset for chan admin */
"+R", /* Mode On Reg */
"-R", /* Mode on UnReg */
"-R", /* Mode on Nick Change */
diff --git a/src/ptlink.c b/src/ptlink.c
index 228f48c0d..a64076243 100644
--- a/src/ptlink.c
+++ b/src/ptlink.c
@@ -52,6 +52,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for chan admin */
+ NULL, /* Mode to unset for chan admin */
"+r", /* Mode On Reg */
"-r", /* Mode on UnReg */
NULL, /* Mode on Nick Change */
diff --git a/src/rageircd.c b/src/rageircd.c
index 050ff4e76..182a911ef 100644
--- a/src/rageircd.c
+++ b/src/rageircd.c
@@ -53,6 +53,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ "+a", /* Mode to set for channel admin */
+ "-a", /* Mode to unset for channel admin */
"+rd", /* Mode On Reg */
"-rd", /* Mode on UnReg */
"-r+d", /* Mode on Nick Change */
diff --git a/src/ratbox.c b/src/ratbox.c
index bb1ce1e60..19010ecce 100644
--- a/src/ratbox.c
+++ b/src/ratbox.c
@@ -54,6 +54,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for chan admin */
+ NULL, /* Mode to unset for chan admin */
NULL, /* Mode On Reg */
NULL, /* Mode on UnReg */
NULL, /* Mode on Nick Change */
diff --git a/src/solidircd.c b/src/solidircd.c
index e8489abe4..9603154f4 100644
--- a/src/solidircd.c
+++ b/src/solidircd.c
@@ -54,6 +54,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for chan admin */
+ NULL, /* Mode to unset for chan admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"+d", /* Mode on Nick Change */
diff --git a/src/ultimate2.c b/src/ultimate2.c
index 03b81eeed..99292199e 100644
--- a/src/ultimate2.c
+++ b/src/ultimate2.c
@@ -52,6 +52,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ NULL, /* Mode to set for chan admin */
+ NULL, /* Mode to remove for chan admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"-r+d", /* Mode on Nick Change */
diff --git a/src/ultimate3.c b/src/ultimate3.c
index ad965bbd8..b8cd2327e 100644
--- a/src/ultimate3.c
+++ b/src/ultimate3.c
@@ -54,6 +54,8 @@ IRCDVar ircd[] = {
0, /* Has Owner */
NULL, /* Mode to set for an owner */
NULL, /* Mode to unset for an owner */
+ "+a", /* Mode to set for channel admin */
+ "-a", /* Mode to unset for channel admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"+d", /* Mode on Nick Change */
diff --git a/src/unreal31.c b/src/unreal31.c
index 6326b274b..43c81fbd4 100644
--- a/src/unreal31.c
+++ b/src/unreal31.c
@@ -55,6 +55,8 @@ IRCDVar ircd[] = {
1, /* Has Owner */
"+q", /* Mode to set for an owner */
"-q", /* Mode to unset for an owner */
+ "+a", /* Mode to set for channel admin */
+ "-a", /* Mode to unset for channel admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"-r+d", /* Mode on Nick Change */
diff --git a/src/unreal32.c b/src/unreal32.c
index c612673e3..3b617c3f8 100644
--- a/src/unreal32.c
+++ b/src/unreal32.c
@@ -54,6 +54,8 @@ IRCDVar ircd[] = {
1, /* Has Owner */
"+q", /* Mode to set for an owner */
"-q", /* Mode to unset for an owner */
+ "+a", /* Mode to set for channel admin */
+ "-a", /* Mode to unset for channel admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"-r+d", /* Mode on Nick Change */
diff --git a/src/viagra.c b/src/viagra.c
index b94ad6aee..c234aa67c 100644
--- a/src/viagra.c
+++ b/src/viagra.c
@@ -53,6 +53,8 @@ IRCDVar ircd[] = {
1, /* Has Owner */
"+q", /* Mode to set for an owner */
"-q", /* Mode to unset for an owner */
+ "+a", /* Mode to set for channel admin */
+ "-a", /* Mode to unset for channel admin */
"+rd", /* Mode On Reg */
"-r+d", /* Mode on UnReg */
"-r+d", /* Mode on Nick Change */
diff --git a/version.log b/version.log
index e03221010..5a78aad68 100644
--- a/version.log
+++ b/version.log
@@ -8,10 +8,15 @@
VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="8"
-VERSION_BUILD="589"
+VERSION_BUILD="590"
# $Log$
#
+# BUILD : 1.7.8 (590)
+# BUGS : 288 / N/A
+# NOTES : Fixed 288, moved updated all set/unset admin/owner calls to use the ircd protocol files. This needs a fair good test, but it seems all ok, and i cant see anything wrong with it :)
+#
+#
# BUILD : 1.7.8 (589)
# BUGS : 303
# NOTES : normalizeBuffer() now strips two digit color codes