[srvx-commits] CVS: services/src opserv.c,1.253,1.254 nickserv.c,1.183,1.184 modcmd.h,1.3,1.4 modcmd
Brought to you by:
entrope
|
From: Entrope <en...@us...> - 2002-08-03 04:27:06
|
Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv8210/src
Modified Files:
opserv.c nickserv.c modcmd.h modcmd.c chanserv.c
Log Message:
make MCMSG_* #defines for modcmd messages
put command alias argv in struct svccmd instead of in special-purpose helper
add support for "?bind service dummy service2.*" to bind all commands from the service
.. but provide a flag to exclude commands from a bind-all
implement replacement !command/?command
make OpServ commands that should accept/require a channel do so
Index: opserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/opserv.c,v
retrieving revision 1.253
retrieving revision 1.254
diff -C2 -r1.253 -r1.254
*** opserv.c 1 Aug 2002 03:20:06 -0000 1.253
--- opserv.c 3 Aug 2002 04:27:03 -0000 1.254
***************
*** 2501,2509 ****
struct modcmd *
! opserv_define_func(const char *name, modcmd_func_t *func, int min_level)
{
! char buf[16];
sprintf(buf, "%d", min_level);
! return modcmd_register(opserv_module, name, func, 0, 0, "level", buf, NULL);
}
--- 2501,2519 ----
struct modcmd *
! opserv_define_func(const char *name, modcmd_func_t *func, int min_level, int reqchan)
{
! char buf[16], *flags;
sprintf(buf, "%d", min_level);
! switch (reqchan) {
! default: case 0: flags = NULL; break;
! case 1: flags = "+acceptchan"; break;
! case 2: flags = "+channel"; break;
! case 3: flags = "+channel,+acceptpluschan"; break;
! }
! if (flags) {
! return modcmd_register(opserv_module, name, func, 0, 0, "level", buf, "flags", flags, NULL);
! } else {
! return modcmd_register(opserv_module, name, func, 0, 0, "level", buf, NULL);
! }
}
***************
*** 3555,3559 ****
return 0;
}
! if (!svccmd_can_invoke(user, opserv, subcmd, channel, 0, 0)) return 0;
if (!irccasecmp(argv[1], "print")) action = trace_print_func;
else if (!irccasecmp(argv[1], "count")) action = trace_count_func;
--- 3565,3569 ----
return 0;
}
! if (!svccmd_can_invoke(user, opserv, subcmd, channel, 0)) return 0;
if (!irccasecmp(argv[1], "print")) action = trace_print_func;
else if (!irccasecmp(argv[1], "count")) action = trace_count_func;
***************
*** 4191,4195 ****
return 0;
}
! if (!svccmd_can_invoke(user, opserv, subcmd, NULL, 0, 0)) return 0;
unsplit_string(argv + 3, argc - 3);
if (opserv_add_user_alert(user, name, reaction, argv[3])) {
--- 4201,4205 ----
return 0;
}
! if (!svccmd_can_invoke(user, opserv, subcmd, channel, 0)) return 0;
unsplit_string(argv + 3, argc - 3);
if (opserv_add_user_alert(user, name, reaction, argv[3])) {
***************
*** 4371,4456 ****
memset(level_strings, 0, sizeof(level_strings));
opserv_module = module_register("OpServ", OS_LOG, OPSERV_HELPFILE_NAME, opserv_help_expand);
! opserv_define_func("ACCESS", cmd_access, 0);
! opserv_define_func("ADDALERT", cmd_addalert, 800);
! opserv_define_func("ADDALERT NOTICE", NULL, 0);
! opserv_define_func("ADDALERT GLINE", NULL, 900);
! opserv_define_func("ADDBAD", cmd_addbad, 800);
! opserv_define_func("ADDEXEMPT", cmd_addexempt, 800);
! opserv_define_func("ADDNOTE", cmd_addnote, 800);
! opserv_define_func("ADDTRUST", cmd_addtrust, 800);
! opserv_define_func("BAN", cmd_ban, 100);
! opserv_define_func("BANEMAIL", cmd_ban_email, 601);
! opserv_define_func("BLOCK", cmd_block, 100);
! opserv_define_func("CHANINFO", cmd_chaninfo, 0);
! opserv_define_func("CLEARBANS", cmd_clearbans, 300);
! opserv_define_func("CLEARHOST", cmd_clearhost, 650);
! opserv_define_func("CLEARMODES", cmd_clearmodes, 400);
! opserv_define_func("CLONE", cmd_clone, 999);
! opserv_define_func("COLLIDE", cmd_collide, 800);
! opserv_define_func("DEFPROXY", cmd_defproxy, 999);
! opserv_define_func("DELALERT", cmd_delalert, 800);
! opserv_define_func("DELBAD", cmd_delbad, 800);
! opserv_define_func("DELEXEMPT", cmd_delexempt, 800);
! opserv_define_func("DELNOTE", cmd_delnote, 800);
! opserv_define_func("DELTRUST", cmd_deltrust, 800);
! opserv_define_func("DEOP", cmd_deop, 100);
! opserv_define_func("DEOPALL", cmd_deopall, 400);
! opserv_define_func("DEVOICEALL", cmd_devoiceall, 300);
! opserv_define_func("DIE", cmd_die, 900);
! opserv_define_func("DUMP", cmd_dump, 999);
! opserv_define_func("GAG", cmd_gag, 600);
! opserv_define_func("GLINE", cmd_gline, 600);
! opserv_define_func("HELPSERV", cmd_helpserv, 800);
! opserv_define_func("HOSTSCAN", cmd_hostscan, 650);
! opserv_define_func("INVITEME", cmd_inviteme, 100);
! opserv_define_func("JOIN", cmd_join, 601);
! opserv_define_func("JUMP", cmd_jump, 900);
! opserv_define_func("JUPE", cmd_jupe, 900);
! opserv_define_func("KICK", cmd_kick, 100);
! opserv_define_func("KICKALL", cmd_kickall, 400);
! opserv_define_func("KICKBAN", cmd_kickban, 100);
! opserv_define_func("KICKBANALL", cmd_kickbanall, 450);
! opserv_define_func("LOG", cmd_log, 900);
! opserv_define_func("LOGINFO", cmd_loginfo, 0);
! opserv_define_func("MODE", cmd_mode, 100);
! opserv_define_func("MODLOG", cmd_modlog, 900);
! opserv_define_func("NICKBAN", cmd_nickban, 100);
! opserv_define_func("OP", cmd_op, 100);
! opserv_define_func("OPALL", cmd_opall, 400);
! opserv_define_func("PART", cmd_part, 601);
! opserv_define_func("QUERY", cmd_query, 0);
! opserv_define_func("RAW", cmd_raw, 999);
! opserv_define_func("RECONNECT", cmd_reconnect, 900);
! opserv_define_func("REFRESHG", cmd_refreshg, 600);
! opserv_define_func("REHASH", cmd_rehash, 900);
! opserv_define_func("REOPEN", cmd_reopen, 900);
! opserv_define_func("RESERVE", cmd_reserve, 800);
! opserv_define_func("RESTART", cmd_restart, 900);
! opserv_define_func("SET", cmd_set, 900);
! opserv_define_func("STATS", cmd_stats, 101);
! opserv_define_func("TRACE", cmd_trace, 100);
! opserv_define_func("TRACE PRINT", NULL, 0);
! opserv_define_func("TRACE COUNT", NULL, 0);
! opserv_define_func("TRACE DOMAINS", NULL, 0);
! opserv_define_func("TRACE SCAN", NULL, 650);
! opserv_define_func("TRACE GLINE", NULL, 600);
! opserv_define_func("TRACE GAG", NULL, 600);
! opserv_define_func("TRACE KILL", NULL, 600);
! opserv_define_func("CSEARCH", cmd_csearch, 100);
! opserv_define_func("GSYNC", cmd_gsync, 600);
! opserv_define_func("GTRACE", cmd_gtrace, 100);
! opserv_define_func("UNBAN", cmd_unban, 100);
! opserv_define_func("UNBANEMAIL", cmd_unban_email, 601);
! opserv_define_func("UNGAG", cmd_ungag, 600);
! opserv_define_func("UNGLINE", cmd_ungline, 600);
! opserv_define_func("UNJUPE", cmd_unjupe, 900);
! opserv_define_func("UNRESERVE", cmd_unreserve, 800);
! opserv_define_func("UNWARN", cmd_unwarn, 800);
! opserv_define_func("VERSION", cmd_version, 0);
! opserv_define_func("VOICEALL", cmd_voiceall, 300);
! opserv_define_func("WARN", cmd_warn, 800);
! opserv_define_func("WHOIS", cmd_whois, 0);
! opserv_define_func("WRITE", cmd_write, 800);
! opserv_define_func("WRITEALL", cmd_writeall, 800);
opserv_reserved_nick_dict = dict_new();
--- 4381,4466 ----
memset(level_strings, 0, sizeof(level_strings));
opserv_module = module_register("OpServ", OS_LOG, OPSERV_HELPFILE_NAME, opserv_help_expand);
! opserv_define_func("ACCESS", cmd_access, 0, 0);
! opserv_define_func("ADDALERT", cmd_addalert, 800, 0);
! opserv_define_func("ADDALERT NOTICE", NULL, 0, 0);
! opserv_define_func("ADDALERT GLINE", NULL, 900, 0);
! opserv_define_func("ADDBAD", cmd_addbad, 800, 0);
! opserv_define_func("ADDEXEMPT", cmd_addexempt, 800, 0);
! opserv_define_func("ADDNOTE", cmd_addnote, 800, 0);
! opserv_define_func("ADDTRUST", cmd_addtrust, 800, 0);
! opserv_define_func("BAN", cmd_ban, 100, 2);
! opserv_define_func("BANEMAIL", cmd_ban_email, 601, 0);
! opserv_define_func("BLOCK", cmd_block, 100, 0);
! opserv_define_func("CHANINFO", cmd_chaninfo, 0, 3);
! opserv_define_func("CLEARBANS", cmd_clearbans, 300, 2);
! opserv_define_func("CLEARHOST", cmd_clearhost, 650, 0);
! opserv_define_func("CLEARMODES", cmd_clearmodes, 400, 2);
! opserv_define_func("CLONE", cmd_clone, 999, 0);
! opserv_define_func("COLLIDE", cmd_collide, 800, 0);
! opserv_define_func("DEFPROXY", cmd_defproxy, 999, 0);
! opserv_define_func("DELALERT", cmd_delalert, 800, 0);
! opserv_define_func("DELBAD", cmd_delbad, 800, 0);
! opserv_define_func("DELEXEMPT", cmd_delexempt, 800, 0);
! opserv_define_func("DELNOTE", cmd_delnote, 800, 0);
! opserv_define_func("DELTRUST", cmd_deltrust, 800, 0);
! opserv_define_func("DEOP", cmd_deop, 100, 2);
! opserv_define_func("DEOPALL", cmd_deopall, 400, 2);
! opserv_define_func("DEVOICEALL", cmd_devoiceall, 300, 2);
! opserv_define_func("DIE", cmd_die, 900, 0);
! opserv_define_func("DUMP", cmd_dump, 999, 0);
! opserv_define_func("GAG", cmd_gag, 600, 0);
! opserv_define_func("GLINE", cmd_gline, 600, 0);
! opserv_define_func("HELPSERV", cmd_helpserv, 800, 0);
! opserv_define_func("HOSTSCAN", cmd_hostscan, 650, 0);
! opserv_define_func("INVITEME", cmd_inviteme, 100, 0);
! opserv_define_func("JOIN", cmd_join, 601, 1);
! opserv_define_func("JUMP", cmd_jump, 900, 0);
! opserv_define_func("JUPE", cmd_jupe, 900, 0);
! opserv_define_func("KICK", cmd_kick, 100, 2);
! opserv_define_func("KICKALL", cmd_kickall, 400, 2);
! opserv_define_func("KICKBAN", cmd_kickban, 100, 2);
! opserv_define_func("KICKBANALL", cmd_kickbanall, 450, 2);
! opserv_define_func("LOG", cmd_log, 900, 0);
! opserv_define_func("LOGINFO", cmd_loginfo, 0, 0);
! opserv_define_func("MODE", cmd_mode, 100, 2);
! opserv_define_func("MODLOG", cmd_modlog, 900, 0);
! opserv_define_func("NICKBAN", cmd_nickban, 100, 2);
! opserv_define_func("OP", cmd_op, 100, 2);
! opserv_define_func("OPALL", cmd_opall, 400, 2);
! opserv_define_func("PART", cmd_part, 601, 2);
! opserv_define_func("QUERY", cmd_query, 0, 0);
! opserv_define_func("RAW", cmd_raw, 999, 0);
! opserv_define_func("RECONNECT", cmd_reconnect, 900, 0);
! opserv_define_func("REFRESHG", cmd_refreshg, 600, 0);
! opserv_define_func("REHASH", cmd_rehash, 900, 0);
! opserv_define_func("REOPEN", cmd_reopen, 900, 0);
! opserv_define_func("RESERVE", cmd_reserve, 800, 0);
! opserv_define_func("RESTART", cmd_restart, 900, 0);
! opserv_define_func("SET", cmd_set, 900, 0);
! opserv_define_func("STATS", cmd_stats, 101, 0);
! opserv_define_func("TRACE", cmd_trace, 100, 0);
! opserv_define_func("TRACE PRINT", NULL, 0, 0);
! opserv_define_func("TRACE COUNT", NULL, 0, 0);
! opserv_define_func("TRACE DOMAINS", NULL, 0, 0);
! opserv_define_func("TRACE SCAN", NULL, 650, 0);
! opserv_define_func("TRACE GLINE", NULL, 600, 0);
! opserv_define_func("TRACE GAG", NULL, 600, 0);
! opserv_define_func("TRACE KILL", NULL, 600, 0);
! opserv_define_func("CSEARCH", cmd_csearch, 100, 0);
! opserv_define_func("GSYNC", cmd_gsync, 600, 0);
! opserv_define_func("GTRACE", cmd_gtrace, 100, 0);
! opserv_define_func("UNBAN", cmd_unban, 100, 2);
! opserv_define_func("UNBANEMAIL", cmd_unban_email, 601, 0);
! opserv_define_func("UNGAG", cmd_ungag, 600, 0);
! opserv_define_func("UNGLINE", cmd_ungline, 600, 0);
! opserv_define_func("UNJUPE", cmd_unjupe, 900, 0);
! opserv_define_func("UNRESERVE", cmd_unreserve, 800, 0);
! opserv_define_func("UNWARN", cmd_unwarn, 800, 0);
! opserv_define_func("VERSION", cmd_version, 0, 0);
! opserv_define_func("VOICEALL", cmd_voiceall, 300, 2);
! opserv_define_func("WARN", cmd_warn, 800, 0);
! opserv_define_func("WHOIS", cmd_whois, 0, 0);
! opserv_define_func("WRITE", cmd_write, 800, 0);
! opserv_define_func("WRITEALL", cmd_writeall, 800, 0);
opserv_reserved_nick_dict = dict_new();
Index: nickserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/nickserv.c,v
retrieving revision 1.183
retrieving revision 1.184
diff -C2 -r1.183 -r1.184
*** nickserv.c 1 Aug 2002 03:20:06 -0000 1.183
--- nickserv.c 3 Aug 2002 04:27:03 -0000 1.184
***************
*** 2734,2738 ****
}
! if (!svccmd_can_invoke(user, nickserv, subcmd, NULL, argc, 0)) {
nickserv_notice(user, NSMSG_NO_ACCESS);
return 0;
--- 2734,2738 ----
}
! if (!svccmd_can_invoke(user, nickserv, subcmd, NULL, 0)) {
nickserv_notice(user, NSMSG_NO_ACCESS);
return 0;
Index: modcmd.h
===================================================================
RCS file: /cvsroot/srvx/services/src/modcmd.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** modcmd.h 31 Jul 2002 02:42:20 -0000 1.3
--- modcmd.h 3 Aug 2002 04:27:03 -0000 1.4
***************
*** 22,25 ****
--- 22,26 ----
#define MODCMDS_H
+ #include "recdb.h"
#include "helpfile.h"
#include "log.h"
***************
*** 37,59 ****
typedef MODCMD_FUNC(modcmd_func_t);
! #define MODCMD_ACCEPT_CHANNEL 0x001
! #define MODCMD_ACCEPT_PCHANNEL 0x002
! #define MODCMD_REQUIRE_AUTHED 0x004
! #define MODCMD_REQUIRE_CHANNEL 0x008
! #define MODCMD_REQUIRE_REGCHAN 0x010
! #define MODCMD_REQUIRE_CHANUSER 0x020
! #define MODCMD_NO_LOG 0x040
! #define MODCMD_TOY 0x080
! #define MODCMD_DISABLED 0x100
! #define MODCMD_REQUIRE_JOINABLE 0x200
! #define MODCMD_REQUIRE_QUALIFIED 0x0400
! #define MODCMD_KEEP_BOUND 0x0800
! #define MODCMD_REQUIRE_OPER 0x1000
! #define MODCMD_REQUIRE_NETWORK_HELPER 0x2000
! #define MODCMD_REQUIRE_SUPPORT_HELPER 0x4000
#define MODCMD_EXECUTE 1
! #define MODCMD_DROP_CHANNEL 2
! #define MODCMD_LOG_COMMAND 4
/* Modularized commands work like this:
--- 38,62 ----
typedef MODCMD_FUNC(modcmd_func_t);
! /* 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
! /* Requirement (access control) flags */
! #define MODCMD_REQUIRE_AUTHED 0x001000
! #define MODCMD_REQUIRE_CHANNEL 0x002000
! #define MODCMD_REQUIRE_REGCHAN 0x004000
! #define MODCMD_REQUIRE_CHANUSER 0x008000
! #define MODCMD_REQUIRE_JOINABLE 0x010000
! #define MODCMD_REQUIRE_QUALIFIED 0x020000
! #define MODCMD_REQUIRE_OPER 0x040000
! #define MODCMD_REQUIRE_NETWORK_HELPER 0x080000
! #define MODCMD_REQUIRE_SUPPORT_HELPER 0x100000
! #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:
***************
*** 92,105 ****
struct svccmd {
char *name;
! struct service *parent;
! struct modcmd *command;
! void *extra; /* for the command function's use */
! struct svccmd *template; /* where we look for permissions */
! float weight;
! unsigned long req_account_flags, deny_account_flags;
unsigned int flags;
unsigned int min_opserv_level;
unsigned int min_channel_access;
- unsigned int uses; /* how many times was this command used? */
};
--- 95,109 ----
struct svccmd {
char *name;
! struct service *parent; /* where is this command bound? */
! struct modcmd *command; /* what is the implementation? */
! struct string_list alias; /* if it's a complicated binding, what is the expansion? */
! struct svccmd *template; /* where we look for permissions? */
! unsigned int uses; /* how many times was this command used? */
! float weight; /* how much should it count against the command policer? */
unsigned int flags;
+ unsigned long req_account_flags;
+ unsigned long deny_account_flags;
unsigned int min_opserv_level;
unsigned int min_channel_access;
};
***************
*** 156,160 ****
* return non-zero. If they cannot, tell them why not and return 0.
*/
! int svccmd_can_invoke(struct userNode *user, struct userNode *bot, struct svccmd *cmd, struct chanNode *channel, unsigned int argc, unsigned int server_qualified);
/* Initialize the module command subsystem. */
--- 160,164 ----
* return non-zero. If they cannot, tell them why not and return 0.
*/
! int svccmd_can_invoke(struct userNode *user, struct userNode *bot, struct svccmd *cmd, struct chanNode *channel, unsigned int server_qualified);
/* Initialize the module command subsystem. */
Index: modcmd.c
===================================================================
RCS file: /cvsroot/srvx/services/src/modcmd.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** modcmd.c 1 Aug 2002 03:16:10 -0000 1.6
--- modcmd.c 3 Aug 2002 04:27:03 -0000 1.7
***************
*** 19,25 ****
*/
#include "chanserv.h"
#include "conf.h"
! #include "modcmd.h"
#include "recdb.h"
--- 19,26 ----
*/
[...1304 lines suppressed...]
return svccmd;
--- 1261,1270 ----
return NULL;
}
! svccmd->command = svccmd->template->command;
! if (argc > 1) {
! svccmd->alias.used = svccmd->alias.size = argc;
! svccmd->alias.list = calloc(svccmd->alias.size, sizeof(svccmd->alias.list[0]));
! for (nn=0; nn<argc; nn++) svccmd->alias.list[nn] = strdup(argv[nn]);
! }
dict_insert(service->commands, svccmd->name, svccmd);
return svccmd;
***************
*** 1210,1213 ****
--- 1351,1355 ----
service_make_alias(service, "delop", "deluser", "op", "$1", NULL);
service_make_alias(service, "delpeon", "deluser", "peon", "$1", NULL);
+ service_make_alias(service, "command", "*modcmd.command", NULL);
}
Index: chanserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/chanserv.c,v
retrieving revision 1.257
retrieving revision 1.258
diff -C2 -r1.257 -r1.258
*** chanserv.c 3 Aug 2002 02:37:43 -0000 1.257
--- chanserv.c 3 Aug 2002 04:27:03 -0000 1.258
***************
*** 78,82 ****
/* Command data */
#define KEY_WEIGHT "weight"
- #define KEY_ACCESS "access"
#define KEY_FLAGS "flags"
--- 78,81 ----
***************
*** 344,358 ****
#define CSMSG_NO_LAST_WRITE "$bLast Database Write: $bNever"
#define CSMSG_LAST_WRITE "$bLast Database Write: $b%s ago"
-
- /* Command information */
- #define CSMSG_COMMAND_INFO "Command Information for $b%s$b:"
- #define CSMSG_COMMAND_NO_DISABLE "You may not disable the $b%s$b command."
- #define CSMSG_COMMAND_ACCESS "$bAccess Restrictions: $b%s"
- #define CSMSG_COMMAND_WEIGHT "$bWeight: $b%.1f"
- #define CSMSG_COMMAND_FLAGS "$bFlags: $b%li"
- #define CSMSG_COMMAND_USES "$bUses: $b%d"
- #define CSMSG_COMMAND_ALIASES "$bAliases: $b%s"
-
- #define CSMSG_COMMAND_IS_ALIAS "%s is an alias for $b%s$b."
/* Staff list */
--- 343,346 ----
|