summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrystan 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
committertrystan 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
commit1aaeba38f4e5f3169ad1f17bbf28ceaae0af9f8a (patch)
tree22c3896351bc7634005a52958a5c993b1afa3c75
parentf18d506cad80b9ed28f02ee33f35332320f3ea04 (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--Changes2
-rw-r--r--include/services.h3
-rw-r--r--src/bahamut.c2
-rw-r--r--src/channels.c13
-rw-r--r--src/commands.c74
-rw-r--r--src/dreamforge.c2
-rw-r--r--src/helpserv.c40
-rw-r--r--src/hybrid.c2
-rw-r--r--src/ptlink.c2
-rw-r--r--src/rageircd.c2
-rw-r--r--src/send.c110
-rw-r--r--src/solidircd.c2
-rw-r--r--src/ultimate2.c8
-rw-r--r--src/ultimate3.c18
-rw-r--r--src/unreal31.c6
-rw-r--r--src/unreal32.c22
-rw-r--r--src/viagra.c6
-rw-r--r--version.log11
18 files changed, 266 insertions, 59 deletions
diff --git a/Changes b/Changes
index 731e5b97e..b24471238 100644
--- a/Changes
+++ b/Changes
@@ -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