[srvx-commits] CVS: services/src chanserv.c,1.282,1.283 modcmd.c,1.24,1.25 modcmd.h,1.8,1.9
Brought to you by:
entrope
|
From: Entrope <en...@us...> - 2002-09-15 00:01:16
|
Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv6559/src
Modified Files:
chanserv.c modcmd.c modcmd.h
Log Message:
re-implement "toy" checking
detect and prevent setting of command template loops (fixes bug 606404)
correctly show required account flags (fixes bug 609377)
Index: chanserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/chanserv.c,v
retrieving revision 1.282
retrieving revision 1.283
diff -C2 -r1.282 -r1.283
*** chanserv.c 11 Sep 2002 01:50:04 -0000 1.282
--- chanserv.c 15 Sep 2002 00:01:11 -0000 1.283
***************
*** 376,381 ****
#define CSMSG_BAD_NUMBER "$b%s$b is an invalid number. Please use a number greater than 1 with this command."
- #define CSMSG_TOYS_DISABLED "Toys are disabled in %s."
-
/* eject_user and unban_user flags */
#define ACTION_KICK 0x0001
--- 376,379 ----
***************
*** 6999,7008 ****
DEFINE_COMMAND(unvisited, 1, 0, "account_flags", "+g", "flags", "+nolog", NULL);
! DEFINE_COMMAND(unf, 1, 0, "flags", "+nolog", NULL);
! DEFINE_COMMAND(ping, 1, 0, "flags", "+nolog", NULL);
! DEFINE_COMMAND(wut, 1, 0, "flags", "+nolog", NULL);
! DEFINE_COMMAND(8ball, 1, 0, "flags", "+nolog", NULL);
! DEFINE_COMMAND(d, 1, 0, "flags", "+nolog", NULL);
! DEFINE_COMMAND(huggle, 1, 0, "flags", "+nolog", NULL);
set_func_dict = dict_new();
--- 6997,7006 ----
DEFINE_COMMAND(unvisited, 1, 0, "account_flags", "+g", "flags", "+nolog", NULL);
! DEFINE_COMMAND(unf, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
! DEFINE_COMMAND(ping, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
! DEFINE_COMMAND(wut, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
! DEFINE_COMMAND(8ball, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
! DEFINE_COMMAND(d, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
! DEFINE_COMMAND(huggle, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
set_func_dict = dict_new();
Index: modcmd.c
===================================================================
RCS file: /cvsroot/srvx/services/src/modcmd.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -r1.24 -r1.25
*** modcmd.c 7 Sep 2002 02:55:18 -0000 1.24
--- modcmd.c 15 Sep 2002 00:01:12 -0000 1.25
***************
*** 42,45 ****
--- 42,46 ----
#define MCMSG_NO_PLUS_CHANNEL "You may not use a +channel with this command."
#define MCMSG_COMMAND_ALIASES "%s is an alias for: %s"
+ #define MCMSG_COMMAND_BINDING "%s is a binding of: %s"
#define MCMSG_ALIAS_ERROR "Error in alias expansion for %s; check the error log for details."
#define MCMSG_UNKNOWN_SERVICE "Unknown service %s."
***************
*** 69,72 ****
--- 70,74 ----
#define MCMSG_NEED_CHANNEL "You must specify a channel that exists."
#define MCMSG_NEED_AUTHED "You must be authenticated with $N."
+ #define MCMSG_IS_TOY "$b%s$b is a toy command."
#define MCMSG_INHERITED_REQS "Some of the above requirements may have been inherited from the %s requirements."
#define MCMSG_END_REQUIREMENTS "End of requirements for $b%s$b."
***************
*** 76,79 ****
--- 78,85 ----
#define MSMSG_NOW_NOT_HELPING "Security override has been disabled."
#define MCMSG_JOINER_CHOICES "Subcommands of %s: %s"
+ #define MCMSG_TOYS_DISABLED "Toys are disabled in %s."
+ #define MCMSG_NO_TEMPLATE_SELF "You cannot make a command its own template."
+ #define MCMSG_RESOLVE_LOOP "Invalid template loop detected: %s"
+ #define MCMSG_RESOLVE_TOO_DEEP "Takes more than %d steps to resolve command templates; giving up."
struct pending_template {
***************
*** 92,95 ****
--- 98,107 ----
struct userData *_GetChannelUser(struct chanData *channel, struct handle_info *handle, int override, int allow_suspended);
+ #define ACTION_ALLOW 1
+ #define ACTION_OVERRIDE 2
+ #define ACTION_NOCHANNEL 4
+
+ #define RESOLVE_DEPTH 4
+
static struct modcmd_flag {
const char *name;
***************
*** 112,115 ****
--- 124,128 ----
{ "supporthelper", MODCMD_REQUIRE_SUPPORT_HELPER },
{ "helping", MODCMD_REQUIRE_HELPING },
+ { "toy", MODCMD_TOY },
{ NULL, 0 }
};
***************
*** 310,339 ****
cmd->flags = (cmd->flags | set_flags) & ~rem_flags;
return 1;
! } else if (!irccasecmp(param, "level") || !irccasecmp(param, "access")) {
! if (isdigit(*value)) {
! unsigned int newval = atoi(value);
! if (newval > 1000) {
! if (user) {
! send_message(user, bot, MCMSG_BAD_OPSERV_LEVEL, value);
! } else {
! log(MAIN_LOG, LOG_ERROR, "Invalid OpServ access level %s (for command %s).\n", value, cmd->name);
! }
! return 0;
}
! cmd->min_opserv_level = atoi(value);
! return 1;
! } else {
! enum userLevel ul = user_level_from_name(value);
! if (ul == ulNone) {
! if (user) {
! send_message(user, bot, MCMSG_BAD_CHANSERV_LEVEL, value);
! } else {
! log(MAIN_LOG, LOG_ERROR, "Invalid ChanServ access level %s (for command %s).\n", value, cmd->name);
! }
! return 0;
}
! cmd->min_channel_access = ul;
! return 1;
}
} else if (!irccasecmp(param, "account_flags")) {
return nickserv_modify_handle_flags(user, bot, value, &cmd->req_account_flags, &cmd->deny_account_flags);
--- 323,354 ----
cmd->flags = (cmd->flags | set_flags) & ~rem_flags;
return 1;
! } else if (!irccasecmp(param, "channel_level") || !irccasecmp(param, "channel_access")) {
! enum userLevel ul = user_level_from_name(value);
! if (!irccasecmp(value, "none")) {
! ul = ulNone;
! } else if (ul == ulNone) {
! if (user) {
! send_message(user, bot, MCMSG_BAD_CHANSERV_LEVEL, value);
! } else {
! log(MAIN_LOG, LOG_ERROR, "Invalid ChanServ access level %s (for command %s).\n", value, cmd->name);
}
! return 0;
! }
! cmd->min_channel_access = ul;
! return 1;
! } else if (!irccasecmp(param, "oper_level") || !irccasecmp(param, "oper_access")) {
! unsigned int newval = atoi(value);
! if (newval > 1000) {
! if (user) {
! send_message(user, bot, MCMSG_BAD_OPSERV_LEVEL, value);
! } else {
! log(MAIN_LOG, LOG_ERROR, "Invalid OpServ access level %s (for command %s).\n", value, cmd->name);
}
! return 0;
}
+ cmd->min_opserv_level = atoi(value);
+ return 1;
+ } else if (!irccasecmp(param, "level") || !irccasecmp(param, "access")) {
+ return svccmd_configure(cmd, user, bot, (isdigit(*value) ? "oper_access" : "channel_access"), value);
} else if (!irccasecmp(param, "account_flags")) {
return nickserv_modify_handle_flags(user, bot, value, &cmd->req_account_flags, &cmd->deny_account_flags);
***************
*** 347,350 ****
--- 362,366 ----
return 1;
} else {
+ struct svccmd *tmpl;
if (!strcmp(value, "*")) {
struct svccmd newvals;
***************
*** 352,356 ****
newvals.template = NULL;
memcpy(cmd, &newvals, sizeof(*cmd));
! } else if (!(cmd->template = svccmd_resolve_name(cmd, value))) {
if (user) {
send_message(user, bot, MCMSG_UNKNOWN_COMMAND, value, cmd->name, cmd->parent->bot->nick);
--- 368,372 ----
newvals.template = NULL;
memcpy(cmd, &newvals, sizeof(*cmd));
! } else if (!(tmpl = svccmd_resolve_name(cmd, value))) {
if (user) {
send_message(user, bot, MCMSG_UNKNOWN_COMMAND, value, cmd->name, cmd->parent->bot->nick);
***************
*** 359,362 ****
--- 375,415 ----
}
return 0;
+ } else {
+ unsigned int ii, count;
+ struct svccmd *list[RESOLVE_DEPTH];
+ list[0] = cmd;
+ list[1] = tmpl;
+ if (tmpl == cmd) {
+ send_message(user, bot, MCMSG_NO_TEMPLATE_SELF);
+ return 0;
+ }
+ for (count = 2; count < RESOLVE_DEPTH; ++count) {
+ list[count] = list[count-1]->template;
+ if (!list[count]) break;
+ for (ii=0; ii<count; ii++) {
+ if (list[ii] == list[count]) {
+ char buf[MAXLEN];
+ unsigned int jj, len;
+ struct svccmd *curr;
+
+ for (len=0, jj=ii; jj<=count; jj++) {
+ curr = list[jj];
+ if (jj > 0) len += sprintf(buf+len, " -> ");
+ if (curr->parent) {
+ len += sprintf(buf+len, "%s.%s", curr->parent->bot->nick, curr->name);
+ } else {
+ len += sprintf(buf+len, "*%s.%s", curr->command->parent->name, curr->command->name);
+ }
+ }
+ send_message(user, bot, MCMSG_RESOLVE_LOOP, buf);
+ return 0;
+ }
+ }
+ }
+ if (count == RESOLVE_DEPTH) {
+ send_message(user, bot, MCMSG_RESOLVE_TOO_DEEP, RESOLVE_DEPTH);
+ return 0;
+ }
+ cmd->template = tmpl;
}
return 1;
***************
*** 394,397 ****
--- 447,451 ----
unsigned int uData_checked = 0;
struct userData *uData = NULL;
+ int rflags = 0;
if (cmd->flags & MODCMD_DISABLED) {
***************
*** 443,446 ****
--- 497,513 ----
}
}
+ if ((cmd->flags & MODCMD_TOY) && channel) {
+ char opt = channel->channel_info ? channel->channel_info->options[optToys] : 'n';
+ switch (opt) {
+ case 'd':
+ send_message(user, bot, MCMSG_TOYS_DISABLED, channel->name);
+ return 0;
+ case 'n':
+ rflags |= ACTION_NOCHANNEL;
+ break;
+ case 'p':
+ break;
+ }
+ }
if (cmd->flags & MODCMD_REQUIRE_STAFF) {
if (((cmd->flags & MODCMD_REQUIRE_OPER) && IsOper(user))
***************
*** 482,488 ****
|| uData->access < cmd->min_channel_access)
&& !(cmd->flags & (MODCMD_REQUIRE_STAFF|MODCMD_REQUIRE_HELPING))) {
! return 2;
}
! return 1;
}
--- 549,555 ----
|| uData->access < cmd->min_channel_access)
&& !(cmd->flags & (MODCMD_REQUIRE_STAFF|MODCMD_REQUIRE_HELPING))) {
! rflags |= ACTION_OVERRIDE;
}
! return rflags | ACTION_ALLOW;
}
***************
*** 604,610 ****
--- 671,682 ----
argv[1] = argv[0];
argv++, argc--;
+ cmd_arg = 1;
}
/* Figure out what actions we should do for it.. */
+ if (cmd_arg && (cmd.flags & MODCMD_TOY)) {
+ /* Don't let user manually specify a channel. */
+ channel = NULL;
+ }
perms = svccmd_can_invoke_real(user, service->bot, &cmd, channel, server_qualified, 1);
if (!perms) return 0;
***************
*** 614,617 ****
--- 686,690 ----
}
pcmd->uses++;
+ if (perms & ACTION_NOCHANNEL) channel = NULL;
if (!cmd.command->func(user, channel, argc, argv, pcmd)) return 0;
if (!(cmd.flags & MODCMD_NO_LOG)) {
***************
*** 631,635 ****
if (user->handle_info) {
pos += sprintf(logbuf+pos, ":%s", user->handle_info->handle);
! if (perms & 2) {
pos += sprintf(logbuf+pos, ":override");
}
--- 704,708 ----
if (user->handle_info) {
pos += sprintf(logbuf+pos, ":%s", user->handle_info->handle);
! if (perms & ACTION_OVERRIDE) {
pos += sprintf(logbuf+pos, ":override");
}
***************
*** 1012,1036 ****
assert(argc >= 2);
if (!(svccmd = svccmd_resolve_name(cmd, argv[1]))) {
! send_message(user, cmd->parent->bot, MCMSG_UNKNOWN_COMMAND_2, argv[1], cmd->parent->bot->nick);
return 0;
}
svccmd_collapse(svccmd, &collapsed, 0);
if ((collapsed.parent && collapsed.parent->privileged && !IsOper(user))
|| ((collapsed.flags & MODCMD_REQUIRE_STAFF)
&& !IsOper(user) && !IsNetworkHelper(user) && !IsSupportHelper(user))) {
! send_message(user, cmd->parent->bot, MCMSG_INSPECTION_REFUSED, collapsed.name);
return 0;
}
if (collapsed.flags & MODCMD_DISABLED) {
! send_message(user, cmd->parent->bot, MSG_COMMAND_DISABLED, collapsed.name);
return 1;
}
shown_flags = 0;
if (collapsed.min_opserv_level > 0) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_OPSERV_LEVEL, collapsed.min_opserv_level);
shown_flags |= MODCMD_REQUIRE_OPER | MODCMD_REQUIRE_AUTHED;
}
if (collapsed.min_channel_access > 0) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_CHANSERV_LEVEL, user_level_from_level(collapsed.min_channel_access));
shown_flags |= MODCMD_REQUIRE_CHANUSER | MODCMD_REQUIRE_REGCHAN | MODCMD_REQUIRE_CHANNEL | MODCMD_REQUIRE_AUTHED;
}
--- 1085,1115 ----
assert(argc >= 2);
if (!(svccmd = svccmd_resolve_name(cmd, argv[1]))) {
! reply(MCMSG_UNKNOWN_COMMAND_2, argv[1], cmd->parent->bot->nick);
return 0;
}
svccmd_collapse(svccmd, &collapsed, 0);
+ snprintf(buf, sizeof(buf), "*%s.%s", collapsed.command->parent->name, collapsed.command->name);
+ if (collapsed.alias.used) {
+ reply(MCMSG_COMMAND_ALIASES, collapsed.name, buf);
+ } else {
+ reply(MCMSG_COMMAND_BINDING, collapsed.name, buf);
+ }
if ((collapsed.parent && collapsed.parent->privileged && !IsOper(user))
|| ((collapsed.flags & MODCMD_REQUIRE_STAFF)
&& !IsOper(user) && !IsNetworkHelper(user) && !IsSupportHelper(user))) {
! reply(MCMSG_INSPECTION_REFUSED, collapsed.name);
return 0;
}
if (collapsed.flags & MODCMD_DISABLED) {
! reply(MSG_COMMAND_DISABLED, collapsed.name);
return 1;
}
shown_flags = 0;
if (collapsed.min_opserv_level > 0) {
! reply(MCMSG_NEED_OPSERV_LEVEL, collapsed.min_opserv_level);
shown_flags |= MODCMD_REQUIRE_OPER | MODCMD_REQUIRE_AUTHED;
}
if (collapsed.min_channel_access > 0) {
! reply(MCMSG_NEED_CHANSERV_LEVEL, user_level_from_level(collapsed.min_channel_access));
shown_flags |= MODCMD_REQUIRE_CHANUSER | MODCMD_REQUIRE_REGCHAN | MODCMD_REQUIRE_CHANNEL | MODCMD_REQUIRE_AUTHED;
}
***************
*** 1040,1053 ****
buf[pos++] = HANDLE_FLAGS[nn];
}
! buf[0] = 0;
! send_message(user, cmd->parent->bot, MCMSG_NEED_ACCOUNT_FLAGS, buf);
shown_flags |= MODCMD_REQUIRE_AUTHED;
}
if (!collapsed.flags && !shown_flags) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_NOTHING, collapsed.name);
return 1;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_HELPING) {
! send_message(user, cmd->parent->bot, MCMSG_MUST_BE_HELPING);
shown_flags |= MODCMD_REQUIRE_AUTHED | MODCMD_REQUIRE_STAFF;
}
--- 1119,1132 ----
buf[pos++] = HANDLE_FLAGS[nn];
}
! buf[pos] = 0;
! reply(MCMSG_NEED_ACCOUNT_FLAGS, buf);
shown_flags |= MODCMD_REQUIRE_AUTHED;
}
if (!collapsed.flags && !shown_flags) {
! reply(MCMSG_NEED_NOTHING, collapsed.name);
return 1;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_HELPING) {
! reply(MCMSG_MUST_BE_HELPING);
shown_flags |= MODCMD_REQUIRE_AUTHED | MODCMD_REQUIRE_STAFF;
}
***************
*** 1076,1103 ****
break;
}
! send_message(user, cmd->parent->bot, MCMSG_NEED_STAFF_ACCESS, buf);
shown_flags |= MODCMD_REQUIRE_AUTHED;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_JOINABLE) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_JOINABLE);
shown_flags |= MODCMD_REQUIRE_CHANUSER;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_CHANUSER) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_CHANUSER);
shown_flags |= MODCMD_REQUIRE_REGCHAN | MODCMD_REQUIRE_CHANNEL | MODCMD_REQUIRE_AUTHED;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_REGCHAN) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_REGCHAN);
shown_flags |= MODCMD_REQUIRE_CHANNEL;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_CHANNEL) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_CHANNEL);
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_AUTHED) {
! send_message(user, cmd->parent->bot, MCMSG_NEED_AUTHED);
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_QUALIFIED) {
const char *botnick = collapsed.parent ? collapsed.parent->bot->nick : "SomeBot";
! send_message(user, cmd->parent->bot, MCMSG_MUST_QUALIFY, botnick, collapsed.name, botnick);
}
if (svccmd->template) {
--- 1155,1185 ----
break;
}
! reply(MCMSG_NEED_STAFF_ACCESS, buf);
shown_flags |= MODCMD_REQUIRE_AUTHED;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_JOINABLE) {
! reply(MCMSG_NEED_JOINABLE);
shown_flags |= MODCMD_REQUIRE_CHANUSER;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_CHANUSER) {
! reply(MCMSG_NEED_CHANUSER);
shown_flags |= MODCMD_REQUIRE_REGCHAN | MODCMD_REQUIRE_CHANNEL | MODCMD_REQUIRE_AUTHED;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_REGCHAN) {
! reply(MCMSG_NEED_REGCHAN);
shown_flags |= MODCMD_REQUIRE_CHANNEL;
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_CHANNEL) {
! reply(MCMSG_NEED_CHANNEL);
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_AUTHED) {
! reply(MCMSG_NEED_AUTHED);
! }
! if (collapsed.flags & ~shown_flags & MODCMD_TOY) {
! reply(MCMSG_IS_TOY, collapsed.name);
}
if (collapsed.flags & ~shown_flags & MODCMD_REQUIRE_QUALIFIED) {
const char *botnick = collapsed.parent ? collapsed.parent->bot->nick : "SomeBot";
! reply(MCMSG_MUST_QUALIFY, botnick, collapsed.name, botnick);
}
if (svccmd->template) {
***************
*** 1107,1113 ****
sprintf(buf, "*%s.%s", svccmd->template->command->parent->name, svccmd->template->command->name);
}
! send_message(user, cmd->parent->bot, MCMSG_INHERITED_REQS, buf);
}
! send_message(user, cmd->parent->bot, MCMSG_END_REQUIREMENTS, collapsed.name);
return 1;
}
--- 1189,1195 ----
sprintf(buf, "*%s.%s", svccmd->template->command->parent->name, svccmd->template->command->name);
}
! reply(MCMSG_INHERITED_REQS, buf);
}
! reply(MCMSG_END_REQUIREMENTS, collapsed.name);
return 1;
}
***************
*** 1235,1240 ****
saxdb_write_string(ctx, "command", buf);
if (cmd->alias.used) saxdb_write_string_list(ctx, "aliased", &cmd->alias);
! if (cmd->min_opserv_level > 0) saxdb_write_int(ctx, "opserv_level", cmd->min_opserv_level);
! if (cmd->min_channel_access > ulNone) saxdb_write_string(ctx, "chanserv_level", user_level_from_level(cmd->min_channel_access));
if (cmd->flags) {
for (nn=pos=0; flags[nn].name; ++nn) {
--- 1317,1322 ----
saxdb_write_string(ctx, "command", buf);
if (cmd->alias.used) saxdb_write_string_list(ctx, "aliased", &cmd->alias);
! if (cmd->min_opserv_level > 0) saxdb_write_int(ctx, "oper_access", cmd->min_opserv_level);
! if (cmd->min_channel_access > ulNone) saxdb_write_string(ctx, "channel_access", user_level_from_level(cmd->min_channel_access));
if (cmd->flags) {
for (nn=pos=0; flags[nn].name; ++nn) {
***************
*** 1365,1373 ****
svccmd_configure(svccmd, NULL, service->bot, "flags", str);
}
! if ((str = database_get_data(obj, "opserv_level", RECDB_QSTRING))) {
! svccmd_configure(svccmd, NULL, service->bot, "access", str);
! }
! if ((str = database_get_data(obj, "chanserv_level", RECDB_QSTRING))) {
! svccmd_configure(svccmd, NULL, service->bot, "access", str);
}
if ((slist = database_get_data(obj, "aliased", RECDB_STRING_LIST))) {
--- 1447,1457 ----
svccmd_configure(svccmd, NULL, service->bot, "flags", str);
}
! if ((str = database_get_data(obj, "oper_access", RECDB_QSTRING))
! || (str = database_get_data(obj, "opserv_level", RECDB_QSTRING))) {
! svccmd_configure(svccmd, NULL, service->bot, "oper_access", str);
! }
! if ((str = database_get_data(obj, "channel_access", RECDB_QSTRING))
! || (str = database_get_data(obj, "chanserv_level", RECDB_QSTRING))) {
! svccmd_configure(svccmd, NULL, service->bot, "channel_access", str);
}
if ((slist = database_get_data(obj, "aliased", RECDB_STRING_LIST))) {
Index: modcmd.h
===================================================================
RCS file: /cvsroot/srvx/services/src/modcmd.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** modcmd.h 7 Sep 2002 02:41:49 -0000 1.8
--- modcmd.h 15 Sep 2002 00:01:12 -0000 1.9
***************
*** 45,55 ****
/* Miscellaneous flags controlling a command */
! #define MODCMD_DISABLED 0x0001
! #define MODCMD_NO_LOG 0x0002
! #define MODCMD_KEEP_BOUND 0x0004
! #define MODCMD_ACCEPT_CHANNEL 0x0008
! #define MODCMD_ACCEPT_PCHANNEL 0x0010
! #define MODCMD_NO_DEFAULT_BIND 0x0020
! #define MODCMD_LOG_HOSTMASK 0x0040
/* Requirement (access control) flags */
#define MODCMD_REQUIRE_AUTHED 0x001000
--- 45,55 ----
/* Miscellaneous flags controlling a command */
! #define MODCMD_DISABLED 0x001
! #define MODCMD_NO_LOG 0x002
! #define MODCMD_KEEP_BOUND 0x004
! #define MODCMD_ACCEPT_CHANNEL 0x008
! #define MODCMD_ACCEPT_PCHANNEL 0x010
! #define MODCMD_NO_DEFAULT_BIND 0x020
! #define MODCMD_LOG_HOSTMASK 0x040
/* Requirement (access control) flags */
#define MODCMD_REQUIRE_AUTHED 0x001000
***************
*** 63,70 ****
#define MODCMD_REQUIRE_SUPPORT_HELPER 0x100000
#define MODCMD_REQUIRE_HELPING 0x200000
#define MODCMD_REQUIRE_STAFF (MODCMD_REQUIRE_OPER|MODCMD_REQUIRE_NETWORK_HELPER|MODCMD_REQUIRE_SUPPORT_HELPER)
-
- #define MODCMD_EXECUTE 1
- #define MODCMD_LOG_COMMAND 2
/* Modularized commands work like this:
--- 63,68 ----
#define MODCMD_REQUIRE_SUPPORT_HELPER 0x100000
#define MODCMD_REQUIRE_HELPING 0x200000
+ #define MODCMD_TOY 0x400000
#define MODCMD_REQUIRE_STAFF (MODCMD_REQUIRE_OPER|MODCMD_REQUIRE_NETWORK_HELPER|MODCMD_REQUIRE_SUPPORT_HELPER)
/* Modularized commands work like this:
|