* fixed MODE_REGISTERED bug: srvx was sending a blank mode change on channel unregistrations; we now have a srvx.conf setting that dictates whether or not to use MODE_REGISTERED (which has no corresponding letter on P10 networks!) - also, we now set MODE_REGISTERED in newly registered channels (which we werent before)
* introduced MCP_REGISTERED: we now don't let channels that are registered play with the registered mode (usually +r on bahamut networks) via chanserv user-level commands (ie: !mode -r)
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-68
# arch-tag: automatic-ChangeLog--srvx@srvx.net--2004-srvx/srvx--devo--1.3
#
# arch-tag: automatic-ChangeLog--srvx@srvx.net--2004-srvx/srvx--devo--1.3
#
+2004-06-08 09:24:49 GMT adam <adam@gamesurge.net> patch-68
+
+ Summary:
+ fixed MODE_REGISTERED bug; introduced MCP_REGISTERED
+ Revision:
+ srvx--devo--1.3--patch-68
+
+ * fixed MODE_REGISTERED bug: srvx was sending a blank mode change on channel unregistrations; we now have a srvx.conf setting that dictates whether or not to use MODE_REGISTERED (which has no corresponding letter on P10 networks!) - also, we now set MODE_REGISTERED in newly registered channels (which we werent before)
+
+ * introduced MCP_REGISTERED: we now don't let channels that are registered play with the registered mode (usually +r on bahamut networks) via chanserv user-level commands (ie: !mode -r)
+
+
+
+
+ modified files:
+ ChangeLog src/chanserv.c src/proto-bahamut.c src/proto.h
+ srvx.conf.example
+
+
2004-05-22 04:24:57 GMT Michael Poole <mdpoole@troilus.org> patch-67
Summary:
2004-05-22 04:24:57 GMT Michael Poole <mdpoole@troilus.org> patch-67
Summary:
unsigned int max_chan_bans;
unsigned int max_userinfo_length;
unsigned int max_chan_bans;
unsigned int max_userinfo_length;
+ unsigned int use_registered_mode;
+
struct string_list *set_shows;
struct string_list *eightball;
struct string_list *old_ban_names;
struct string_list *set_shows;
struct string_list *eightball;
struct string_list *old_ban_names;
timeq_del(0, NULL, channel, TIMEQ_IGNORE_FUNC | TIMEQ_IGNORE_WHEN);
timeq_del(0, NULL, channel, TIMEQ_IGNORE_FUNC | TIMEQ_IGNORE_WHEN);
- mod_chanmode_init(&change);
- change.modes_clear |= MODE_REGISTERED;
- mod_chanmode_announce(chanserv, channel->channel, &change);
+ if (chanserv_conf.use_registered_mode) {
+ mod_chanmode_init(&change);
+ change.modes_clear |= MODE_REGISTERED;
+ mod_chanmode_announce(chanserv, channel->channel, &change);
+ }
while(channel->users)
del_channel_user(channel->users, 0);
while(channel->users)
del_channel_user(channel->users, 0);
cData = register_channel(channel, user->handle_info->handle);
scan_user_presence(add_channel_user(cData, handle, UL_OWNER, 0, NULL), NULL);
cData->modes = chanserv_conf.default_modes;
cData = register_channel(channel, user->handle_info->handle);
scan_user_presence(add_channel_user(cData, handle, UL_OWNER, 0, NULL), NULL);
cData->modes = chanserv_conf.default_modes;
+ if (chanserv_conf.use_registered_mode)
+ cData->modes.modes_set |= MODE_REGISTERED;
change = mod_chanmode_dup(&cData->modes, 1);
change->args[change->argc].mode = MODE_CHANOP;
change->args[change->argc].member = AddChannelUser(chanserv, channel);
change = mod_chanmode_dup(&cData->modes, 1);
change->args[change->argc].mode = MODE_CHANOP;
change->args[change->argc].member = AddChannelUser(chanserv, channel);
- change = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE);
+ change = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE|MCP_REGISTERED);
if(!change)
{
reply("MSG_INVALID_MODES", unsplit_string(argv+1, argc-1, NULL));
if(!change)
{
reply("MSG_INVALID_MODES", unsplit_string(argv+1, argc-1, NULL));
{
memset(&channel->channel_info->modes, 0, sizeof(channel->channel_info->modes));
}
{
memset(&channel->channel_info->modes, 0, sizeof(channel->channel_info->modes));
}
- else if(!(new_modes = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE)))
+ else if(!(new_modes = mod_chanmode_parse(channel, argv+1, argc-1, MCP_KEY_FREE|MCP_REGISTERED)))
{
reply("CSMSG_INVALID_MODE_LOCK", unsplit_string(argv+1, argc-1, NULL));
return 0;
{
reply("CSMSG_INVALID_MODE_LOCK", unsplit_string(argv+1, argc-1, NULL));
return 0;
* parse issue. */
str = database_get_data(conf_node, "off_channel", RECDB_QSTRING);
off_channel = (str && enabled_string(str)) ? 1 : 0;
* parse issue. */
str = database_get_data(conf_node, "off_channel", RECDB_QSTRING);
off_channel = (str && enabled_string(str)) ? 1 : 0;
+ str = database_get_data(conf_node, "use_registered_mode", RECDB_QSTRING);
+ chanserv_conf.use_registered_mode = (str && enabled_string(str)) ? 1 : 0;
&& (argc = split_line(str, 0, ArrayLength(argv), argv))
&& (modes = mod_chanmode_parse(cNode, argv, argc, MCP_KEY_FREE))) {
cData->modes = *modes;
&& (argc = split_line(str, 0, ArrayLength(argv), argv))
&& (modes = mod_chanmode_parse(cNode, argv, argc, MCP_KEY_FREE))) {
cData->modes = *modes;
- cData->modes.modes_set |= MODE_REGISTERED;
+ if (chanserv_conf.use_registered_mode)
+ cData->modes.modes_set |= MODE_REGISTERED;
if(cData->modes.argc > 1)
cData->modes.argc = 1;
mod_chanmode_announce(chanserv, cNode, &cData->modes);
if(cData->modes.argc > 1)
cData->modes.argc = 1;
mod_chanmode_announce(chanserv, cNode, &cData->modes);
case 'p': do_chan_mode(MODE_PRIVATE); break;
case 's': do_chan_mode(MODE_SECRET); break;
case 't': do_chan_mode(MODE_TOPICLIMIT); break;
case 'p': do_chan_mode(MODE_PRIVATE); break;
case 's': do_chan_mode(MODE_SECRET); break;
case 't': do_chan_mode(MODE_TOPICLIMIT); break;
+ case 'r':
+ if (!(flags & MCP_REGISTERED)) {
+ do_chan_mode(MODE_REGISTERED);
+ } else {
+ mod_chanmode_free(change);
+ return NULL;
+ }
+ break;
#undef do_chan_mode
case 'l':
if (add) {
#undef do_chan_mode
case 'l':
if (add) {
#define MCP_ALLOW_OVB 0x0001 /* allow op, voice, ban manipulation */
#define MCP_FROM_SERVER 0x0002 /* parse as from a server */
#define MCP_KEY_FREE 0x0004 /* -k without a key argument */
#define MCP_ALLOW_OVB 0x0001 /* allow op, voice, ban manipulation */
#define MCP_FROM_SERVER 0x0002 /* parse as from a server */
#define MCP_KEY_FREE 0x0004 /* -k without a key argument */
+#define MCP_REGISTERED 0x0008 /* chan is already registered; do not allow changes to MODE_REGISTERED */
#define MC_ANNOUNCE 0x0100 /* send a mod_chanmode() change out */
#define MC_NOTIFY 0x0200 /* make local callbacks to announce */
#ifdef NDEBUG
#define MC_ANNOUNCE 0x0100 /* send a mod_chanmode() change out */
#define MC_NOTIFY 0x0200 /* make local callbacks to announce */
#ifdef NDEBUG
// Does your ircd have off-channel services support?
// Bahamut does; ircu2.10.11 does not.
"off_channel" "no";
// Does your ircd have off-channel services support?
// Bahamut does; ircu2.10.11 does not.
"off_channel" "no";
+ // Does your ircd have a mode for registered channels?
+ // Bahamut does; ircu2.10.11 does not.
+ "use_registered_mode" "no";
// how long should a person be unseen before resending infoline?
"info_delay" "120";
// maximum greeting length
// how long should a person be unseen before resending infoline?
"info_delay" "120";
// maximum greeting length