diff options
author | trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b <trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2004-12-03 06:07:44 +0000 |
---|---|---|
committer | trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b <trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2004-12-03 06:07:44 +0000 |
commit | 1aaeba38f4e5f3169ad1f17bbf28ceaae0af9f8a (patch) | |
tree | 22c3896351bc7634005a52958a5c993b1afa3c75 | |
parent | f18d506cad80b9ed28f02ee33f35332320f3ea04 (diff) |
BUILD : 1.7.6 (469) BUGS : N/A NOTES : 1. ultimate3 setting the wrong channel mode on botserv bots 2. helpserv.c is doxygen ready, did some code clean up 3. Services Clients (+S) now override channel modes (yeah no more deopping NeoStats), this only works on ircds where there is a clear services mode (Unreal, Viagra, Ultimeate2/3) 4. send.c is doxygen ready, did some code clean up 5. commands.c id doxygen ready, did some code clean up
git-svn-id: svn://svn.anope.org/anope/trunk@469 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@323 5417fbe8-f217-4b02-8779-1006273d7864
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | include/services.h | 3 | ||||
-rw-r--r-- | src/bahamut.c | 2 | ||||
-rw-r--r-- | src/channels.c | 13 | ||||
-rw-r--r-- | src/commands.c | 74 | ||||
-rw-r--r-- | src/dreamforge.c | 2 | ||||
-rw-r--r-- | src/helpserv.c | 40 | ||||
-rw-r--r-- | src/hybrid.c | 2 | ||||
-rw-r--r-- | src/ptlink.c | 2 | ||||
-rw-r--r-- | src/rageircd.c | 2 | ||||
-rw-r--r-- | src/send.c | 110 | ||||
-rw-r--r-- | src/solidircd.c | 2 | ||||
-rw-r--r-- | src/ultimate2.c | 8 | ||||
-rw-r--r-- | src/ultimate3.c | 18 | ||||
-rw-r--r-- | src/unreal31.c | 6 | ||||
-rw-r--r-- | src/unreal32.c | 22 | ||||
-rw-r--r-- | src/viagra.c | 6 | ||||
-rw-r--r-- | version.log | 11 |
18 files changed, 266 insertions, 59 deletions
@@ -8,6 +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] 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] @@ -17,6 +18,7 @@ Provided by Trystan <trystan@nomadirc.net> - 2004 11/21 A Opened SGLINE to all ircd that support GEOS bans [ #00] 11/21 A Opened SZLINE to all ircd that support ZLINE's [ #00] 11/19 A Added anope_cmd_ctcp() to code API, for sending CTCP messages. [ #00] +12/02 F Ultimate3 botserv bots were getting wrong modes [ #00] 12/01 F ChanServ AKICK DEL (reordering) (pointed to freed memory) [ #00] 12/01 F del_session() warning messages when LimitSessions is disabled [ #00] 11/28 F NSSecureAdmins now restricts /NS SET EMAIL [#218] diff --git a/include/services.h b/include/services.h index 6e82bbb10..26ae68667 100644 --- a/include/services.h +++ b/include/services.h @@ -258,6 +258,8 @@ struct ircdvars_ { int invitemode; /* +I */ int sjoinbanchar; /* use single quotes to define it */ int sjoinexchar; /* use single quotes to define it */ + uint32 servicesmode; /* Services Mode +S */ + int p10; /* P10 ircd */ }; struct ircdcapab_ { @@ -305,6 +307,7 @@ struct ircdcapab_ { #define NICK_VERSION 13 #define PRE_NICK_VERSION 1 #define OPER_VERSION 13 +#define HELP_VERSION 1 /*************************************************************************/ diff --git a/src/bahamut.c b/src/bahamut.c index 5fafd7f86..14a7b7b65 100644 --- a/src/bahamut.c +++ b/src/bahamut.c @@ -102,6 +102,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + 0, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} diff --git a/src/channels.c b/src/channels.c index 3dafaf233..0651df12f 100644 --- a/src/channels.c +++ b/src/channels.c @@ -235,6 +235,19 @@ void chan_set_modes(const char *source, Channel * chan, int ac, char **av, mode, chan->name, user->nick); 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 (ircd->servicesmode) { + if (user->mode & ircd->servicesmode) { + chan_remove_user_status(chan, user, cum->status); + continue; + } + } + /* Fixes bug #68 - might be a bit ugly but it works, the idea is that since the is_valid function strips out all of the modes there is no point diff --git a/src/commands.c b/src/commands.c index 6d3bfb5b3..e37eb574b 100644 --- a/src/commands.c +++ b/src/commands.c @@ -18,33 +18,53 @@ /*************************************************************************/ -/* Return the Command corresponding to the given name, or NULL if no such +/** + * Return the Command corresponding to the given name, or NULL if no such * command exists. + * @param list Command struct + * @param cmd Command to look up + * @return Command Struct for the given cmd */ - Command *lookup_cmd(Command * list, char *cmd) { Command *c; for (c = list; c->name; c++) { - if (stricmp(c->name, cmd) == 0) + if (stricmp(c->name, cmd) == 0) { return c; + } } return NULL; } /*************************************************************************/ -/* Run the routine for the given command, if it exists and the user has +/** + * Run the routine for the given command, if it exists and the user has * privilege to do so; if not, print an appropriate error message. + * @param services Services Client + * @param u User Struct + * @param list Command struct + * @param cmd Command + * @return void */ - void run_cmd(char *service, User * u, Command * list, char *cmd) { Command *c = lookup_cmd(list, cmd); do_run_cmd(service, u, c, cmd); } +/*************************************************************************/ + +/** + * Run the routine for the given command, if it exists and the user has + * privilege to do so; if not, print an appropriate error message. + * @param services Services Client + * @param u User Struct + * @param Command Hash Table + * @param cmd Command + * @return void + */ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *cmd) { @@ -52,6 +72,17 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], do_run_cmd(service, u, c, cmd); } + +/*************************************************************************/ + +/** + * Run the given command + * @param services Services Client + * @param u User Struct + * @param c Command Struct + * @param cmd Command + * @return void + */ void do_run_cmd(char *service, User * u, Command * c, const char *cmd) { int retVal = 0; @@ -86,15 +117,22 @@ void do_run_cmd(char *service, User * u, Command * c, const char *cmd) } } } else { - if ((!checkDefCon(DEFCON_SILENT_OPER_ONLY)) || is_oper(u)) + if ((!checkDefCon(DEFCON_SILENT_OPER_ONLY)) || is_oper(u)) { notice_lang(service, u, UNKNOWN_COMMAND_HELP, cmd, service); + } } } /*************************************************************************/ -/* Print a help message for the given command. */ - +/** + * Print a help message for the given command. + * @param services Services Client + * @param u User Struct + * @param c Command Struct + * @param cmd Command + * @return void + */ void do_help_cmd(char *service, User * u, Command * c, const char *cmd) { Command *current; @@ -158,12 +196,32 @@ void do_help_cmd(char *service, User * u, Command * c, const char *cmd) } } +/*************************************************************************/ + +/** + * Find the Help Command + * @param services Services Client + * @param u User Struct + * @param c Command Struct + * @param cmd Command + * @return void + */ void help_cmd(char *service, User * u, Command * list, char *cmd) { Command *c = lookup_cmd(list, cmd); do_help_cmd(service, u, c, cmd); } +/*************************************************************************/ + +/** + * Find the Help Command + * @param services Services Client + * @param u User Struct + * @param Command Hash Table + * @param cmd Command + * @return void + */ void mod_help_cmd(char *service, User * u, CommandHash * cmdTable[], const char *cmd) { diff --git a/src/dreamforge.c b/src/dreamforge.c index 6cd3edae3..a13e0ca7c 100644 --- a/src/dreamforge.c +++ b/src/dreamforge.c @@ -100,6 +100,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + 0, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} diff --git a/src/helpserv.c b/src/helpserv.c index 7e4e1e8a9..1ced1108f 100644 --- a/src/helpserv.c +++ b/src/helpserv.c @@ -16,13 +16,15 @@ #include "services.h" #include "pseudo.h" -#define HELP_VERSION 1 - -void helpserv_init(void); static int do_help(User * u); void moduleAddHelpServCmds(void); /*************************************************************************/ + +/** + * Setup the commands for HelpServ + * @return void + */ void moduleAddHelpServCmds(void) { Command *c; @@ -32,15 +34,23 @@ void moduleAddHelpServCmds(void) /*************************************************************************/ -/*************************************************************************/ -/* HelpServ initialization. */ +/** + * HelpServ initialization. + * @return void + */ void helpserv_init(void) { moduleAddHelpServCmds(); } /*************************************************************************/ -/* Main HelpServ routine. */ + +/** + * Main HelpServ routine. + * @param u User Struct of the user sending the PRIVMSG + * @param buf Buffer containing the PRIVMSG data + * @return void + */ void helpserv(User * u, char *buf) { char *cmd, *s; @@ -60,11 +70,15 @@ void helpserv(User * u, char *buf) } /*************************************************************************/ -/* Display the HelpServ help. */ -/* This core function has been embed in the source for a long time, but */ -/* it moved into it's own file so we now all can enjoy the joy of */ -/* modules for HelpServ. */ +/** + * Display the HelpServ help. + * This core function has been embed in the source for a long time, but + * it moved into it's own file so we now all can enjoy the joy of + * modules for HelpServ. + * @param u User Struct of the user looking for help + * @return MOD_CONT + */ static int do_help(User * u) { char *cmd = strtok(NULL, ""); @@ -72,10 +86,12 @@ static int do_help(User * u) if (!cmd) { notice_help(s_HelpServ, u, HELP_HELP, s_NickServ, s_ChanServ, s_MemoServ); - if (s_BotServ) + if (s_BotServ) { notice_help(s_HelpServ, u, HELP_HELP_BOT, s_BotServ); - if (s_HostServ) + } + if (s_HostServ) { notice_help(s_HelpServ, u, HELP_HELP_HOST, s_HostServ); + } moduleDisplayHelp(7, u); } else { mod_help_cmd(s_HelpServ, u, HELPSERV, cmd); diff --git a/src/hybrid.c b/src/hybrid.c index 3d48c5268..265d3260f 100644 --- a/src/hybrid.c +++ b/src/hybrid.c @@ -100,6 +100,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + 0, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} diff --git a/src/ptlink.c b/src/ptlink.c index 4689fdbef..3414936a9 100644 --- a/src/ptlink.c +++ b/src/ptlink.c @@ -100,6 +100,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + 0, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} diff --git a/src/rageircd.c b/src/rageircd.c index f4cc54d7e..8c8045c7f 100644 --- a/src/rageircd.c +++ b/src/rageircd.c @@ -101,6 +101,8 @@ IRCDVar ircd[] = { 1, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + 0, /* Services Client mode */ + 0, /* not p10 */ }, {NULL} }; diff --git a/src/send.c b/src/send.c index c5961d5d3..dcf78ec47 100644 --- a/src/send.c +++ b/src/send.c @@ -16,9 +16,14 @@ /*************************************************************************/ -/* Send a command to the server. The two forms here are like - * printf()/vprintf() and friends. */ - +/** + * Send a command to the server. The two forms here are like + * printf()/vprintf() and friends. + * @param source Orgin of the Message (some times NULL) + * @param fmt Format of the Message + * @param ... any number of parameters + * @return void + */ void send_cmd(const char *source, const char *fmt, ...) { va_list args; @@ -30,6 +35,15 @@ void send_cmd(const char *source, const char *fmt, ...) } } +/*************************************************************************/ + +/** + * actually Send a command to the server. + * @param source Orgin of the Message (some times NULL) + * @param fmt Format of the Message + * @param args List of the arguments + * @return void + */ void vsend_cmd(const char *source, const char *fmt, va_list args) { char buf[BUFSIZE]; @@ -44,18 +58,28 @@ void vsend_cmd(const char *source, const char *fmt, va_list args) if (source) { sockprintf(servsock, ":%s %s\r\n", source, buf); - if (debug) + if (debug) { alog("debug: Sent: :%s %s", source, buf); + } } else { sockprintf(servsock, "%s\r\n", buf); - if (debug) + if (debug) { alog("debug: Sent: %s", buf); + } } } } /*************************************************************************/ +/** + * Send a server notice + * @param source Orgin of the Message + * @param s Server Struct + * @param fmt Format of the Message + * @param ... any number of parameters + * @return void + */ void notice_server(char *source, Server * s, char *fmt, ...) { va_list args; @@ -67,6 +91,7 @@ void notice_server(char *source, Server * s, char *fmt, ...) vsnprintf(buf, BUFSIZE - 1, fmt, args); if (!buf) { + va_end(args); return; } @@ -81,6 +106,14 @@ void notice_server(char *source, Server * s, char *fmt, ...) /*************************************************************************/ +/** + * Send a notice to a user + * @param source Orgin of the Message + * @param u User Struct + * @param fmt Format of the Message + * @param ... any number of parameters + * @return void + */ void notice_user(char *source, User * u, const char *fmt, ...) { va_list args; @@ -92,6 +125,7 @@ void notice_user(char *source, User * u, const char *fmt, ...) vsnprintf(buf, BUFSIZE - 1, fmt, args); if (!buf) { + va_end(args); return; } @@ -106,7 +140,13 @@ void notice_user(char *source, User * u, const char *fmt, ...) /*************************************************************************/ -/* Send a NULL-terminated array of text as NOTICEs. */ +/** + * Send a NULL-terminated array of text as NOTICEs. + * @param source Orgin of the Message + * @param dest Destination of the Notice + * @param text Array of text to send + * @return void + */ void notice_list(char *source, char *dest, char **text) { while (*text) { @@ -114,25 +154,34 @@ void notice_list(char *source, char *dest, char **text) * no text, it is ignored, so we replace blank lines by lines * with a single space. */ - if (**text) + if (**text) { anope_cmd_notice2(source, dest, *text); - else + } else { anope_cmd_notice2(source, dest, " "); + } text++; } } /*************************************************************************/ -/* Send a message in the user's selected language to the user using NOTICE. */ +/** + * Send a message in the user's selected language to the user using NOTICE. + * @param source Orgin of the Message + * @param u User Struct + * @param int Index of the Message + * @param ... any number of parameters + * @return void + */ void notice_lang(char *source, User * dest, int message, ...) { va_list args; char buf[4096]; /* because messages can be really big */ char *s, *t; const char *fmt; - if (!dest || !message) + if (!dest || !message) { return; + } va_start(args, message); fmt = getstring(dest->na, message); if (!fmt) @@ -156,9 +205,15 @@ void notice_lang(char *source, User * dest, int message, ...) /*************************************************************************/ -/* Like notice_lang(), but replace %S by the source. This is an ugly hack +/** + * Like notice_lang(), but replace %S by the source. This is an ugly hack * to simplify letting help messages display the name of the pseudoclient * that's sending them. + * @param source Orgin of the Message + * @param u User Struct + * @param int Index of the Message + * @param ... any number of parameters + * @return void */ void notice_help(char *source, User * dest, int message, ...) { @@ -167,8 +222,9 @@ void notice_help(char *source, User * dest, int message, ...) char *s, *t; const char *fmt; - if (!dest || !message) + if (!dest || !message) { return; + } va_start(args, message); fmt = getstring(dest->na, message); if (!fmt) @@ -198,7 +254,14 @@ void notice_help(char *source, User * dest, int message, ...) /*************************************************************************/ -/* Send a NOTICE from the given source to the given nick. */ +/** + * Send a NOTICE from the given source to the given nick. + * @param source Orgin of the Message + * @param dest Destination of the Message + * @param fmt Format of the Message + * @param ... any number of parameters + * @return void + */ void notice(char *source, char *dest, const char *fmt, ...) { va_list args; @@ -210,6 +273,7 @@ void notice(char *source, char *dest, const char *fmt, ...) vsnprintf(buf, BUFSIZE - 1, fmt, args); if (!buf) { + va_end(args); return; } @@ -224,7 +288,14 @@ void notice(char *source, char *dest, const char *fmt, ...) /*************************************************************************/ -/* Send a PRIVMSG from the given source to the given nick. */ +/** + * Send a PRIVMSG from the given source to the given nick. + * @param source Orgin of the Message + * @param dest Destination of the Message + * @param fmt Format of the Message + * @param ... any number of parameters + * @return void + */ void privmsg(char *source, char *dest, const char *fmt, ...) { va_list args; @@ -243,8 +314,15 @@ void privmsg(char *source, char *dest, const char *fmt, ...) anope_cmd_privmsg2(source, dest, buf); } -/* cause #defines just bitched to much, its back and hooks to - a legacy in the ircd protocol files - TSL */ +/*************************************************************************/ + +/** + * Send out a WALLOP, this is here for legacy only, same day we will pull it out + * @param source Orgin of the Message + * @param fmt Format of the Message + * @param ... any number of parameters + * @return void + */ void wallops(char *source, const char *fmt, ...) { va_list args; diff --git a/src/solidircd.c b/src/solidircd.c index d03d42e4d..dd4867857 100644 --- a/src/solidircd.c +++ b/src/solidircd.c @@ -102,6 +102,8 @@ IRCDVar ircd[] = { 1, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + 0, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} diff --git a/src/ultimate2.c b/src/ultimate2.c index 14f38066a..a6a683359 100644 --- a/src/ultimate2.c +++ b/src/ultimate2.c @@ -100,6 +100,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + UMODE_S, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} @@ -194,22 +196,20 @@ void anope_set_umode(User * user, int ac, char **av) case 'o': if (add) { opcnt++; - - if (WallOper) + if (WallOper) { anope_cmd_global(s_OperServ, "\2%s\2 is now an IRC operator.", user->nick); + } display_news(user, NEWS_OPER); if (is_services_oper(user)) { common_svsmode(user, "+a", NULL); user->mode |= UMODE_a; } - if (is_services_admin(user)) { common_svsmode(user, "+P", NULL); user->mode |= UMODE_P; } - if (is_services_root(user)) { common_svsmode(user, "+R", NULL); user->mode |= UMODE_R; diff --git a/src/ultimate3.c b/src/ultimate3.c index b0ff9ee7a..ffcfc120a 100644 --- a/src/ultimate3.c +++ b/src/ultimate3.c @@ -48,7 +48,7 @@ IRCDVar ircd[] = { "+S", /* Used by BotServ Bots */ 5, /* Chan Max Symbols */ "-ilmnpqstRKAO", /* Modes to Remove */ - "+ao", /* Channel Umode used by Botserv bots */ + "+o", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ 0, /* Has Owner */ @@ -102,6 +102,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + UMODE_S, /* Services Client mode */ + 0, /* not p10 */ }, {NULL} }; @@ -194,25 +196,23 @@ void anope_set_umode(User * user, int ac, char **av) case 'o': if (add) { opcnt++; - - if (WallOper) + if (WallOper) { anope_cmd_global(s_OperServ, "\2%s\2 is now an IRC operator.", user->nick); + } display_news(user, NEWS_OPER); if (is_services_oper(user)) { - send_cmd(ServerName, "SVSMODE %s +a", user->nick); + common_svsmode(user, "+a", NULL); user->mode |= UMODE_a; } - if (is_services_admin(user)) { - send_cmd(ServerName, "SVSMODE %s +P", user->nick); + common_svsmode(user, "+P", NULL); user->mode |= UMODE_P; } - if (is_services_root(user)) { - send_cmd(ServerName, "SVSMODE %s +Z", user->nick); - user->mode |= UMODE_Z; + common_svsmode(user, "+R", NULL); + user->mode |= UMODE_R; } } else { opcnt--; diff --git a/src/unreal31.c b/src/unreal31.c index 95750926b..2911f397d 100644 --- a/src/unreal31.c +++ b/src/unreal31.c @@ -103,6 +103,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + UMODE_S, /* Services Client mode */ + 0, /* not p10 */ }, {NULL} }; @@ -394,11 +396,11 @@ void anope_set_umode(User * user, int ac, char **av) case 'o': if (add) { opcnt++; - - if (WallOper) + if (WallOper) { anope_cmd_global(s_OperServ, "\2%s\2 is now an IRC operator.", user->nick); + } display_news(user, NEWS_OPER); } else { opcnt--; diff --git a/src/unreal32.c b/src/unreal32.c index 90915071b..d3d92a8b7 100644 --- a/src/unreal32.c +++ b/src/unreal32.c @@ -102,6 +102,8 @@ IRCDVar ircd[] = { 0, /* +I support */ '&', /* SJOIN ban char */ '\"', /* SJOIN except char */ + UMODE_S, /* Services Client mode */ + 0, /* not p10 */ }, {NULL} }; @@ -429,11 +431,21 @@ void anope_set_umode(User * user, int ac, char **av) if (add) { opcnt++; - if (WallOper) - anope_cmd_global(s_OperServ, - "\2%s\2 is now an IRC operator.", - user->nick); - display_news(user, NEWS_OPER); + /* No need to display news to a services client */ + if (user->mode & ircd->servicesmode) { + if (WallOper) { + anope_cmd_global(s_OperServ, + "\2%s\2 is now a Network Service.", + user->nick); + } + } else { + if (WallOper) { + anope_cmd_global(s_OperServ, + "\2%s\2 is now an IRC operator.", + user->nick); + } + display_news(user, NEWS_OPER); + } } else { opcnt--; } diff --git a/src/viagra.c b/src/viagra.c index 58910bf5a..0db75dc0d 100644 --- a/src/viagra.c +++ b/src/viagra.c @@ -100,6 +100,8 @@ IRCDVar ircd[] = { 0, /* +I support */ 0, /* SJOIN ban char */ 0, /* SJOIN except char */ + UMODE_S, /* Services Client mode */ + 0, /* not p10 */ } , {NULL} @@ -179,11 +181,11 @@ void anope_set_umode(User * user, int ac, char **av) case 'o': if (add) { opcnt++; - - if (WallOper) + if (WallOper) { anope_cmd_global(s_OperServ, "\2%s\2 is now an IRC operator.", user->nick); + } display_news(user, NEWS_OPER); } else { opcnt--; diff --git a/version.log b/version.log index 0522665c4..e978d8873 100644 --- a/version.log +++ b/version.log @@ -8,10 +8,19 @@ VERSION_MAJOR="1" VERSION_MINOR="7" VERSION_PATCH="6" -VERSION_BUILD="468" +VERSION_BUILD="469" # $Log$ # +# BUILD : 1.7.6 (469) +# BUGS : N/A +# NOTES : 1. ultimate3 setting the wrong channel mode on botserv bots +# 2. helpserv.c is doxygen ready, did some code clean up +# 3. Services Clients (+S) now override channel modes (yeah no more deopping NeoStats), this only +# works on ircds where there is a clear services mode (Unreal, Viagra, Ultimeate2/3) +# 4. send.c is doxygen ready, did some code clean up +# 5. commands.c id doxygen ready, did some code clean up +# # BUILD : 1.7.6 (468) # BUGS : N/A # NOTES : 1. fixes del_session() warning when LimitSessions is disabled |