From 90728edb58caf951f87d11d73390a7b39f3a48fb Mon Sep 17 00:00:00 2001 From: "B.Greenham" Date: Mon, 11 Oct 2010 11:58:21 -0400 Subject: [PATCH] Backed out changeset 3097ade953f5 Backout modesets. They're overly invasive and a bit uglier than is required. The same thing can be accomplished in a better way with another method. --- Makefile.in | 2 +- configure | 21 ++-- configure.ac | 3 +- doc/example.conf | 5 +- doc/reference.conf | 33 ++---- extensions/chm_quietunreg_compat.c | 5 +- extensions/m_okick.c | 4 +- include/channel.h | 45 ++++---- include/s_conf.h | 1 + modes/Makefile.in | 68 ------------ modes/charybdis.c | 104 ------------------ modes/shadowircd.c | 166 ----------------------------- modules/core/m_join.c | 6 +- modules/core/m_kick.c | 8 +- modules/core/m_message.c | 21 ++-- modules/core/m_mode.c | 4 +- modules/core/m_part.c | 4 +- modules/m_info.c | 6 ++ modules/m_invite.c | 7 +- modules/m_knock.c | 4 +- src/channel.c | 70 +++--------- src/chmode.c | 120 +++++++++++---------- src/ircd.c | 1 - src/newconf.c | 1 + src/s_conf.c | 1 + src/s_user.c | 4 +- src/supported.c | 5 +- 27 files changed, 145 insertions(+), 574 deletions(-) delete mode 100644 modes/Makefile.in delete mode 100644 modes/charybdis.c delete mode 100644 modes/shadowircd.c diff --git a/Makefile.in b/Makefile.in index e4938e0..90c861c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -46,7 +46,7 @@ CFLAGS = @CFLAGS@ # the system one. #CFLAGS= -DNDEBUG -g -O2 -D"FD_SETSIZE=1024" SHELL=/bin/sh -SUBDIRS=libratbox modules modes extensions src tools ssld bandb doc help +SUBDIRS=libratbox modules extensions src tools ssld bandb doc help CLEANDIRS = ${SUBDIRS} RSA_FILES=rsa_respond/README rsa_respond/respond.c rsa_respond/Makefile diff --git a/configure b/configure index 1aa3c60..79cdc8e 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for shadowircd 6.2.0. +# Generated by GNU Autoconf 2.65 for shadowircd 6.1.0. # # $Id: configure.ac 3516 2007-06-10 16:14:03Z jilles $ # @@ -551,8 +551,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='shadowircd' PACKAGE_TARNAME='shadowircd' -PACKAGE_VERSION='6.2.0' -PACKAGE_STRING='shadowircd 6.2.0' +PACKAGE_VERSION='6.1.0' +PACKAGE_STRING='shadowircd 6.1.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1265,7 +1265,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures shadowircd 6.2.0 to adapt to many kinds of systems. +\`configure' configures shadowircd 6.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1326,7 +1326,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of shadowircd 6.2.0:";; + short | recursive ) echo "Configuration of shadowircd 6.1.0:";; esac cat <<\_ACEOF @@ -1444,7 +1444,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -shadowircd configure 6.2.0 +shadowircd configure 6.1.0 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2043,7 +2043,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by shadowircd $as_me 6.2.0, which was +It was created by shadowircd $as_me 6.1.0, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -9459,7 +9459,7 @@ _ACEOF fi -ac_config_files="$ac_config_files Makefile bandb/Makefile ssld/Makefile extensions/Makefile modes/Makefile unsupported/Makefile src/Makefile modules/Makefile tools/Makefile doc/Makefile help/Makefile" +ac_config_files="$ac_config_files Makefile bandb/Makefile ssld/Makefile extensions/Makefile unsupported/Makefile src/Makefile modules/Makefile tools/Makefile doc/Makefile help/Makefile" cat >confcache <<\_ACEOF @@ -9969,7 +9969,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by shadowircd $as_me 6.2.0, which was +This file was extended by shadowircd $as_me 6.1.0, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -10031,7 +10031,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -shadowircd config.status 6.2.0 +shadowircd config.status 6.1.0 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" @@ -10152,7 +10152,6 @@ do "bandb/Makefile") CONFIG_FILES="$CONFIG_FILES bandb/Makefile" ;; "ssld/Makefile") CONFIG_FILES="$CONFIG_FILES ssld/Makefile" ;; "extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;; - "modes/Makefile") CONFIG_FILES="$CONFIG_FILES modes/Makefile" ;; "unsupported/Makefile") CONFIG_FILES="$CONFIG_FILES unsupported/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;; diff --git a/configure.ac b/configure.ac index 025b82c..7de2bd2 100644 --- a/configure.ac +++ b/configure.ac @@ -10,7 +10,7 @@ AC_PREREQ(2.57) dnl Sneaky way to get an Id tag into the configure script AC_COPYRIGHT([$Id: configure.ac 3516 2007-06-10 16:14:03Z jilles $]) -AC_INIT([shadowircd],[6.2.0]) +AC_INIT([shadowircd],[6.1.0]) AC_CONFIG_HEADER(include/setup.h) @@ -1160,7 +1160,6 @@ AC_CONFIG_FILES( \ bandb/Makefile \ ssld/Makefile \ extensions/Makefile \ - modes/Makefile \ unsupported/Makefile \ src/Makefile \ modules/Makefile \ diff --git a/doc/example.conf b/doc/example.conf index 0f08301..1e62101 100755 --- a/doc/example.conf +++ b/doc/example.conf @@ -45,10 +45,6 @@ loadmodule "extensions/sno_globalkline.so"; loadmodule "extensions/sno_globaloper.so"; #loadmodule "extensions/sno_whois.so"; -/* Modesets, load only one */ -loadmodule "modes/shadowircd.so"; -#loadmodule "modes/charybdis.so"; - serverinfo { name = "hades.arpa"; sid = "42X"; @@ -383,6 +379,7 @@ channel { use_invex = yes; use_except = yes; use_knock = yes; + use_forward = yes; use_local_channels = yes; knock_delay = 5 minutes; knock_delay_channel = 1 minute; diff --git a/doc/reference.conf b/doc/reference.conf index f77e60c..bbb2b26 100755 --- a/doc/reference.conf +++ b/doc/reference.conf @@ -115,31 +115,6 @@ loadmodule "extensions/sno_globalkline.so"; loadmodule "extensions/sno_globaloper.so"; #loadmodule "extensions/sno_whois.so"; -/* modesets: Modesets are modules that enable various user and channel - * modes. When enabled, they enable usermodes and channel modes equivalent - * to the named ircd. This is useful for linking to other TS6 IRCds. - * If you do not know what this does or do not know if you need it - * then you should just load modes/shadowircd.so for full functionality. - * Without any modeset loaded, you will only have the modes that are included - * in ircd-ratbox. Unloading a modeset while the ircd is running is possible, - * but will be confusing for users, as it will leave all existent unloaded - * modes in place without users being able to remove them. Said modes will, - * however, not function. You should be able to load a module that provides - * more modes than your current (say, going from charybdis to shadowircd) - * on the fly without any problems. The slight exception to this is unloading - * a module that provides quiets (cmode +q). Users affected by quiets will - * have to part and rejoin the channel before the quiet will cease affecting - * them. In addition, unloaded modes will remain in the IRCd's VERSION reply - * until restart. For these reasons, it is highly recommended to restart if you wish - * to change modeset. - * Modesets currently only affect cmodes. - * You should only load one of these at a time. - * Modules are listed in order of highest functionality to least, - * while no module provides the least functionality of all. */ - -loadmodule "modes/shadowircd.so"; -#loadmodule "modes/charybdis.so"; - /* serverinfo {}: Contains information about the server. (OLD M:) */ serverinfo { @@ -812,6 +787,14 @@ channel { */ use_except = yes; + /* forward: Enable/disable channel mode +f, which allows you to set + * a channel to forward users to if they can't join because of +i etc. + * Disabling this option via rehash will leave all previously set + * forwards hanging around, though they will not do anything. For + * this reason, you may want to restart to disable this option. + */ + use_forward = yes; + /* knock: Allows users to request an invite to a channel that * is locked somehow (+ikl). If the channel is +p or you are banned * the knock will not be sent. diff --git a/extensions/chm_quietunreg_compat.c b/extensions/chm_quietunreg_compat.c index cdb612d..a0d822d 100644 --- a/extensions/chm_quietunreg_compat.c +++ b/extensions/chm_quietunreg_compat.c @@ -9,9 +9,6 @@ #include "hook.h" #include "ircd.h" #include "chmode.h" -#include "channel.h" - -struct module_modes ModuleModes; static int _modinit(void); static void _moddeinit(void); @@ -47,7 +44,7 @@ chm_quietunreg(struct Client *source_p, struct Channel *chptr, if (MyClient(source_p)) chm_ban(source_p, chptr, alevel, 1, &newparn, newparv, - errors, dir, 'q', ModuleModes.CHFL_QUIET); + errors, dir, 'q', CHFL_QUIET); else chm_nosuch(source_p, chptr, alevel, parc, parn, parv, errors, dir, c, mode_type); diff --git a/extensions/m_okick.c b/extensions/m_okick.c index 780e1ed..bf1ea2c 100644 --- a/extensions/m_okick.c +++ b/extensions/m_okick.c @@ -37,8 +37,6 @@ #include "s_conf.h" #include "s_serv.h" -struct module_modes ModuleModes; - static int mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]); @@ -142,7 +140,7 @@ mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char rb_snprintf(text, sizeof(text), "K%s", who->id); /* we don't need to track NOREJOIN stuff unless it's our client being kicked */ - if(MyClient(who) && chptr->mode.mode & ModuleModes.MODE_NOREJOIN) + if(MyClient(who) && chptr->mode.mode & MODE_NOREJOIN) channel_metadata_time_add(chptr, text, rb_current_time(), "KICKNOREJOIN"); return 0; } diff --git a/include/channel.h b/include/channel.h index e35ea5a..62f5326 100644 --- a/include/channel.h +++ b/include/channel.h @@ -136,32 +136,6 @@ struct ChannelMode long mode_type; }; -/* modes added by the module files in modes/ */ -struct module_modes -{ - unsigned int MODE_REGONLY; - unsigned int MODE_NOCTCP; /* Block CTCPs directed to this channel */ - unsigned int MODE_NOCOLOR; - unsigned int MODE_EXLIMIT; /* exempt from list limits, +b/+e/+I/+q */ - unsigned int MODE_PERMANENT; /* permanant channel, +P */ - unsigned int MODE_OPMODERATE; /* send rejected messages to ops */ - unsigned int MODE_FREEINVITE; /* allow free use of /invite */ - unsigned int MODE_FREETARGET; /* can be forwarded to without authorization */ - unsigned int MODE_DISFORWARD; /* disable channel forwarding */ - unsigned int MODE_THROTTLE; /* throttle joins */ - unsigned int MODE_FORWARD; - unsigned int MODE_NONOTICE; /* Block notices directed to this channel */ - unsigned int MODE_NOACTION; /* Block CTCP ACTION directed to this channel */ - unsigned int MODE_NOKICK; /* Disable /kick on this channel */ - unsigned int MODE_NONICK; /* Disable /nick for anyone on this channel */ - unsigned int MODE_NOCAPS; /* Block messages in all capital letters */ - unsigned int MODE_NOREJOIN; /* Block rejoin immediately after kick */ - unsigned int MODE_NOREPEAT; /* Block repeat messages */ - unsigned int MODE_NOOPERKICK; /* disallow kicking opers */ - - unsigned int CHFL_QUIET; -}; - typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, struct Channel *chptr, long mode_type); @@ -197,10 +171,28 @@ typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, #define MODE_TOPICLIMIT 0x0008 #define MODE_INVITEONLY 0x0010 #define MODE_NOPRIVMSGS 0x0020 +#define MODE_REGONLY 0x0040 +#define MODE_NOCOLOR 0x0080 +#define MODE_EXLIMIT 0x0100 /* exempt from list limits, +b/+e/+I/+q */ +#define MODE_PERMANENT 0x0200 /* permanant channel, +P */ +#define MODE_OPMODERATE 0x0400 /* send rejected messages to ops */ +#define MODE_FREEINVITE 0x0800 /* allow free use of /invite */ +#define MODE_FREETARGET 0x1000 /* can be forwarded to without authorization */ +#define MODE_DISFORWARD 0x2000 /* disable channel forwarding */ +#define MODE_NOCTCP 0x8000 /* Block CTCPs directed to this channel */ +#define MODE_NONOTICE 0x10000 /* Block notices directed to this channel */ +#define MODE_NOACTION 0x20000 /* Block CTCP ACTION directed to this channel */ +#define MODE_NOKICK 0x40000 /* Disable /kick on this channel */ +#define MODE_NONICK 0x80000 /* Disable /nick for anyone on this channel */ +#define MODE_NOCAPS 0x100000 /* Block messages in all capital letters */ +#define MODE_NOREJOIN 0x200000 /* Block rejoin immediately after kick */ +#define MODE_NOREPEAT 0x400000 /* Block repeat messages */ +#define MODE_NOOPERKICK 0x800000 /* disallow kicking opers */ #define CHFL_BAN 0x10000000 /* ban channel flag */ #define CHFL_EXCEPTION 0x20000000 /* exception to ban channel flag */ #define CHFL_INVEX 0x40000000 +#define CHFL_QUIET 0x80000000 /* mode flags for direction indication */ #define MODE_QUERY 0 @@ -227,7 +219,6 @@ typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, extern rb_dlink_list global_channel_list; void init_channels(void); -void init_module_modes(void); struct Channel *allocate_channel(const char *chname); void free_channel(struct Channel *chptr); diff --git a/include/s_conf.h b/include/s_conf.h index ebe88f1..65a971d 100644 --- a/include/s_conf.h +++ b/include/s_conf.h @@ -243,6 +243,7 @@ struct config_channel_entry int use_except; int use_invex; int use_knock; + int use_forward; int use_local_channels; int knock_delay; int knock_delay_channel; diff --git a/modes/Makefile.in b/modes/Makefile.in deleted file mode 100644 index 326309e..0000000 --- a/modes/Makefile.in +++ /dev/null @@ -1,68 +0,0 @@ -# -# Makefile.in for ircd/modes -# -# -CC = @CC@ -RM = @RM@ -SED = @SED@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -CFLAGS = @IRC_CFLAGS@ -DIRCD_PREFIX=\"@prefix@\" -PICFLAGS = @PICFLAGS@ -MKDEP = @MKDEP@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SUID = @INSTALL_PROGRAM@ -o root -m 4755 -SHELL = /bin/sh -AUTOMODULEDIR = @moduledir@/modes - -SSL_LIBS = @SSL_LIBS@ -SSL_INCLUDES = @SSL_INCLUDES@ - -IRCDLIBS = @LIBS@ $(SSL_LIBS) - -INCLUDES = -I. -I../include -I../libratbox/include $(SSL_INCLUDES) -CPPFLAGS = ${INCLUDES} @CPPFLAGS@ - -SRCS = \ - charybdis.c \ - shadowircd.c - -OBJS = ${SRCS:.c=.so} - -default: build -build: all -all: $(OBJS) - -install: all - -@if test ! -d $(DESTDIR)$(AUTOMODULEDIR); then \ - mkdir $(DESTDIR)$(AUTOMODULEDIR); \ - fi - @echo "Installing modules into $(DESTDIR)$(AUTOMODULEDIR) .." - @for file in $(OBJS); do \ - $(INSTALL_DATA) $$file $(DESTDIR)$(AUTOMODULEDIR); \ - done - -.SUFFIXES: .so - -.c.so: - ${CC} ${PICFLAGS} ${CPPFLAGS} ${CFLAGS} $< -o $@ - -.PHONY: depend clean distclean -depend: - @${MKDEP} ${CPPFLAGS} ${SRCS} > .depend - @sed s/\\\.o/\\\.so/ < .depend > .depend.tmp - @sed -e '/^# DO NOT DELETE THIS LINE/,$$d' Makefile.depend - @echo '# DO NOT DELETE THIS LINE!!!' >>Makefile.depend - @echo '# make depend needs it.' >>Makefile.depend - @cat .depend.tmp >>Makefile.depend - @mv Makefile.depend Makefile - @rm -f .depend.tmp .depend - -clean: - ${RM} -f *.so *~ - -distclean: clean - ${RM} -f Makefile - diff --git a/modes/charybdis.c b/modes/charybdis.c deleted file mode 100644 index 0ce9cca..0000000 --- a/modes/charybdis.c +++ /dev/null @@ -1,104 +0,0 @@ -#include "stdinc.h" -#include "modules.h" -#include "client.h" -#include "ircd.h" -#include "chmode.h" -#include "channel.h" - -struct module_modes ModuleModes; - -static int -_modinit(void) -{ - ModuleModes.MODE_NOCTCP = cflag_add('C', chm_simple); - if (ModuleModes.MODE_NOCTCP == 0) - return -1; - - ModuleModes.MODE_REGONLY = cflag_add('r', chm_regonly); - if (ModuleModes.MODE_REGONLY == 0) - return -1; - - ModuleModes.MODE_NOCOLOR = cflag_add('c', chm_simple); - if (ModuleModes.MODE_NOCOLOR == 0) - return -1; - - ModuleModes.MODE_EXLIMIT = cflag_add('L', chm_staff); - if (ModuleModes.MODE_EXLIMIT == 0) - return -1; - - ModuleModes.MODE_PERMANENT = cflag_add('P', chm_staff); - if (ModuleModes.MODE_PERMANENT == 0) - return -1; - - ModuleModes.MODE_OPMODERATE = cflag_add('z', chm_simple); - if (ModuleModes.MODE_OPMODERATE == 0) - return -1; - - ModuleModes.MODE_FREEINVITE = cflag_add('g', chm_simple); - if (ModuleModes.MODE_FREEINVITE == 0) - return -1; - - ModuleModes.MODE_FREETARGET = cflag_add('F', chm_simple); - if (ModuleModes.MODE_FREETARGET == 0) - return -1; - - ModuleModes.MODE_DISFORWARD = cflag_add('Q', chm_simple); - if (ModuleModes.MODE_DISFORWARD == 0) - return -1; - - ModuleModes.CHFL_QUIET = cflag_add('q', chm_ban); - if (ModuleModes.CHFL_QUIET == 0) - return -1; - - ModuleModes.MODE_FORWARD = cflag_add('f', chm_forward); - if (ModuleModes.MODE_FORWARD == 0) - return -1; - - ModuleModes.MODE_THROTTLE = cflag_add('j', chm_throttle); - if (ModuleModes.MODE_THROTTLE == 0) - return -1; - - return 0; -} - -static void -_moddeinit(void) -{ - cflag_orphan('C'); - ModuleModes.MODE_NOCTCP = 0; - - cflag_orphan('r'); - ModuleModes.MODE_REGONLY = 0; - - cflag_orphan('c'); - ModuleModes.MODE_NOCOLOR = 0; - - cflag_orphan('L'); - ModuleModes.MODE_EXLIMIT = 0; - - cflag_orphan('P'); - ModuleModes.MODE_PERMANENT = 0; - - cflag_orphan('z'); - ModuleModes.MODE_OPMODERATE = 0; - - cflag_orphan('g'); - ModuleModes.MODE_FREEINVITE = 0; - - cflag_orphan('F'); - ModuleModes.MODE_FREETARGET = 0; - - cflag_orphan('Q'); - ModuleModes.MODE_DISFORWARD = 0; - - cflag_orphan('q'); - ModuleModes.CHFL_QUIET = 0; - - cflag_orphan('f'); - ModuleModes.MODE_FORWARD = 0; - - cflag_orphan('j'); - ModuleModes.MODE_THROTTLE = 0; -} - -DECLARE_MODULE_AV1(charybdis, _modinit, _moddeinit, NULL, NULL, NULL, "$charybdis$"); diff --git a/modes/shadowircd.c b/modes/shadowircd.c deleted file mode 100644 index d453d18..0000000 --- a/modes/shadowircd.c +++ /dev/null @@ -1,166 +0,0 @@ -#include "stdinc.h" -#include "modules.h" -#include "client.h" -#include "ircd.h" -#include "chmode.h" -#include "channel.h" - -struct module_modes ModuleModes; - -static int -_modinit(void) -{ - /* charybdis modes */ - ModuleModes.MODE_NOCTCP = cflag_add('C', chm_simple); - if (ModuleModes.MODE_NOCTCP == 0) - return -1; - - ModuleModes.MODE_REGONLY = cflag_add('r', chm_regonly); - if (ModuleModes.MODE_REGONLY == 0) - return -1; - - ModuleModes.MODE_NOCOLOR = cflag_add('c', chm_simple); - if (ModuleModes.MODE_NOCOLOR == 0) - return -1; - - ModuleModes.MODE_EXLIMIT = cflag_add('L', chm_staff); - if (ModuleModes.MODE_EXLIMIT == 0) - return -1; - - ModuleModes.MODE_PERMANENT = cflag_add('P', chm_staff); - if (ModuleModes.MODE_PERMANENT == 0) - return -1; - - ModuleModes.MODE_OPMODERATE = cflag_add('z', chm_simple); - if (ModuleModes.MODE_OPMODERATE == 0) - return -1; - - ModuleModes.MODE_FREEINVITE = cflag_add('g', chm_simple); - if (ModuleModes.MODE_FREEINVITE == 0) - return -1; - - ModuleModes.MODE_FREETARGET = cflag_add('F', chm_simple); - if (ModuleModes.MODE_FREETARGET == 0) - return -1; - - ModuleModes.MODE_DISFORWARD = cflag_add('Q', chm_simple); - if (ModuleModes.MODE_DISFORWARD == 0) - return -1; - - ModuleModes.CHFL_QUIET = cflag_add('q', chm_ban); - if (ModuleModes.CHFL_QUIET == 0) - return -1; - - ModuleModes.MODE_FORWARD = cflag_add('f', chm_forward); - if (ModuleModes.MODE_FORWARD == 0) - return -1; - - ModuleModes.MODE_THROTTLE = cflag_add('j', chm_throttle); - if (ModuleModes.MODE_THROTTLE == 0) - return -1; - - /* shadowircd modes */ - - ModuleModes.MODE_NONOTICE = cflag_add('T', chm_simple); - if (ModuleModes.MODE_NONOTICE == 0) - return -1; - - ModuleModes.MODE_NOACTION = cflag_add('D', chm_simple); - if (ModuleModes.MODE_NOACTION == 0) - return -1; - - ModuleModes.MODE_NOKICK = cflag_add('E', chm_simple); - if (ModuleModes.MODE_NOKICK == 0) - return -1; - - ModuleModes.MODE_NONICK = cflag_add('N', chm_simple); - if (ModuleModes.MODE_NONICK == 0) - return -1; - - ModuleModes.MODE_NOCAPS = cflag_add('G', chm_simple); - if (ModuleModes.MODE_NOCAPS == 0) - return -1; - - ModuleModes.MODE_NOREJOIN = cflag_add('J', chm_simple); - if (ModuleModes.MODE_NOREJOIN == 0) - return -1; - - ModuleModes.MODE_NOREPEAT = cflag_add('K', chm_simple); - if (ModuleModes.MODE_NOREPEAT == 0) - return -1; - - ModuleModes.MODE_NOOPERKICK = cflag_add('M', chm_hidden); - if (ModuleModes.MODE_NOOPERKICK == 0) - return -1; - - return 0; -} - -static void -_moddeinit(void) -{ - /* charybdis modes */ - cflag_orphan('C'); - ModuleModes.MODE_NOCTCP = 0; - - cflag_orphan('r'); - ModuleModes.MODE_REGONLY = 0; - - cflag_orphan('c'); - ModuleModes.MODE_NOCOLOR = 0; - - cflag_orphan('L'); - ModuleModes.MODE_EXLIMIT = 0; - - cflag_orphan('P'); - ModuleModes.MODE_PERMANENT = 0; - - cflag_orphan('z'); - ModuleModes.MODE_OPMODERATE = 0; - - cflag_orphan('g'); - ModuleModes.MODE_FREEINVITE = 0; - - cflag_orphan('F'); - ModuleModes.MODE_FREETARGET = 0; - - cflag_orphan('Q'); - ModuleModes.MODE_DISFORWARD = 0; - - cflag_orphan('q'); - ModuleModes.CHFL_QUIET = 0; - - cflag_orphan('f'); - ModuleModes.MODE_FORWARD = 0; - - cflag_orphan('j'); - ModuleModes.MODE_THROTTLE = 0; - - /* shadowircd modes */ - - cflag_orphan('T'); - ModuleModes.MODE_NONOTICE = 0; - - cflag_orphan('D'); - ModuleModes.MODE_NOACTION = 0; - - cflag_orphan('E'); - ModuleModes.MODE_NOKICK = 0; - - cflag_orphan('N'); - ModuleModes.MODE_NONICK = 0; - - cflag_orphan('G'); - ModuleModes.MODE_NOCAPS = 0; - - cflag_orphan('J'); - ModuleModes.MODE_NOREJOIN = 0; - - cflag_orphan('K'); - ModuleModes.MODE_NOREPEAT = 0; - - cflag_orphan('M'); - ModuleModes.MODE_NOOPERKICK = 0; -} - -DECLARE_MODULE_AV1(charybdis, _modinit, _moddeinit, NULL, NULL, NULL, "$charybdis$"); diff --git a/modules/core/m_join.c b/modules/core/m_join.c index 81a6281..73c497e 100644 --- a/modules/core/m_join.c +++ b/modules/core/m_join.c @@ -46,8 +46,6 @@ static int me_svsjoin(struct Client *, struct Client *, int, const char **); static int ms_join(struct Client *, struct Client *, int, const char **); static int ms_sjoin(struct Client *, struct Client *, int, const char **); -struct module_modes ModuleModes; - struct Message join_msgtab = { "JOIN", 0, 0, 0, MFLG_SLOW, {mg_unreg, {m_join, 2}, {ms_join, 2}, mg_ignore, mg_ignore, {m_join, 2}} @@ -821,7 +819,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char CheckEmpty(para[2]), CheckEmpty(para[3])); } - if(!joins && !(chptr->mode.mode & ModuleModes.MODE_PERMANENT) && isnew) + if(!joins && !(chptr->mode.mode & MODE_PERMANENT) && isnew) { destroy_channel(chptr); @@ -972,7 +970,7 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode) len = rb_sprintf(pbuf, "%d:%d ", mode->join_num, mode->join_time); pbuf += len; } - if(mode->forward[0] && strcmp(oldmode->forward, mode->forward) && ModuleModes.MODE_FORWARD) + if(mode->forward[0] && strcmp(oldmode->forward, mode->forward) && ConfigChannel.use_forward) { if(dir != MODE_ADD) { diff --git a/modules/core/m_kick.c b/modules/core/m_kick.c index 07d6c7d..012891f 100644 --- a/modules/core/m_kick.c +++ b/modules/core/m_kick.c @@ -39,8 +39,6 @@ #include "s_conf.h" #include "hook.h" -struct module_modes ModuleModes; - static int m_kick(struct Client *, struct Client *, int, const char **); #define mg_kick { m_kick, 3 } @@ -167,7 +165,7 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p return 0; } - if(MyClient(source_p) && chptr->mode.mode & ModuleModes.MODE_NOKICK) + if(MyClient(source_p) && chptr->mode.mode & MODE_NOKICK) { sendto_one_numeric(source_p, ERR_NOKICK, form_str(ERR_NOKICK), @@ -175,7 +173,7 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p return 0; } - if (MyClient(source_p) && chptr->mode.mode & ModuleModes.MODE_NOOPERKICK && IsOper(who)) + if (MyClient(source_p) && chptr->mode.mode & MODE_NOOPERKICK && IsOper(who)) { sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "Overriding KICK from %s on %s in %s (channel is +M)", @@ -239,7 +237,7 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p rb_snprintf(text, sizeof(text), "K%s", who->id); /* we don't need to track NOREJOIN stuff unless it's our client being kicked */ - if(MyClient(who) && chptr->mode.mode & ModuleModes.MODE_NOREJOIN) + if(MyClient(who) && chptr->mode.mode & MODE_NOREJOIN) channel_metadata_time_add(chptr, text, rb_current_time(), "KICKNOREJOIN"); } else if (MyClient(source_p)) diff --git a/modules/core/m_message.c b/modules/core/m_message.c index c5d852b..6f93117 100644 --- a/modules/core/m_message.c +++ b/modules/core/m_message.c @@ -45,7 +45,6 @@ #include "tgchange.h" #include "inline/stringops.h" #include "irc_dictionary.h" -#include "channel.h" static int m_message(int, const char *, struct Client *, struct Client *, int, const char **); static int m_privmsg(struct Client *, struct Client *, int, const char **); @@ -54,8 +53,6 @@ static int m_notice(struct Client *, struct Client *, int, const char **); static void expire_tgchange(void *unused); static struct ev_entry *expire_tgchange_event; -struct module_modes ModuleModes; - static int modinit(void) { @@ -500,7 +497,7 @@ msg_channel(int p_or_n, const char *command, source_p->localClient->last = rb_current_time(); } - if(chptr->mode.mode & ModuleModes.MODE_NOREPEAT) + if(chptr->mode.mode & MODE_NOREPEAT) { rb_strlcpy(text2, text, BUFSIZE); strip_unprintable(text2); @@ -518,7 +515,7 @@ msg_channel(int p_or_n, const char *command, channel_metadata_add(chptr, "NOREPEAT", text2, 0); } - if(chptr->mode.mode & ModuleModes.MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) + if(chptr->mode.mode & MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) { rb_strlcpy(text2, text, BUFSIZE); strip_colour(text2); @@ -539,7 +536,7 @@ msg_channel(int p_or_n, const char *command, if(result == CAN_SEND_OPV || !flood_attack_channel(p_or_n, source_p, chptr, chptr->chname)) { - if (strlen(text) > 10 && chptr->mode.mode & ModuleModes.MODE_NOCAPS && (!ConfigChannel.exempt_cmode_G || !is_any_op(msptr))) + if (strlen(text) > 10 && chptr->mode.mode & MODE_NOCAPS && (!ConfigChannel.exempt_cmode_G || !is_any_op(msptr))) { rb_strlcpy(text2, text, BUFSIZE); strip_unprintable(text2); @@ -555,12 +552,12 @@ msg_channel(int p_or_n, const char *command, return; } } - if (p_or_n != PRIVMSG && chptr->mode.mode & ModuleModes.MODE_NONOTICE && (!ConfigChannel.exempt_cmode_T || !is_any_op(msptr))) + if (p_or_n != PRIVMSG && chptr->mode.mode & MODE_NONOTICE && (!ConfigChannel.exempt_cmode_T || !is_any_op(msptr))) { sendto_one_numeric(source_p, 404, "%s :Cannot send to channel - Notices are disallowed (+T set)", chptr->chname); return; } - if (p_or_n != NOTICE && chptr->mode.mode & ModuleModes.MODE_NOACTION && + if (p_or_n != NOTICE && chptr->mode.mode & MODE_NOACTION && !strncasecmp(text + 1, "ACTION", 6) && (!ConfigChannel.exempt_cmode_D || !is_any_op(msptr))) { @@ -570,7 +567,7 @@ msg_channel(int p_or_n, const char *command, if (p_or_n != NOTICE && *text == '\001' && strncasecmp(text + 1, "ACTION", 6)) { - if (chptr->mode.mode & ModuleModes.MODE_NOCTCP && (!ConfigChannel.exempt_cmode_C || !is_any_op(msptr))) + if (chptr->mode.mode & MODE_NOCTCP && (!ConfigChannel.exempt_cmode_C || !is_any_op(msptr))) { sendto_one_numeric(source_p, 404, "%s :Cannot send to channel - CTCPs to this channel are disallowed (+C set)", chptr->chname); return; @@ -582,7 +579,7 @@ msg_channel(int p_or_n, const char *command, "%s %s :%s", command, chptr->chname, text); } } - else if(chptr->mode.mode & ModuleModes.MODE_OPMODERATE && + else if(chptr->mode.mode & MODE_OPMODERATE && (!(chptr->mode.mode & MODE_NOPRIVMSGS) || IsMember(source_p, chptr))) { @@ -619,7 +616,7 @@ msg_channel_opmod(int p_or_n, const char *command, { char text2[BUFSIZE]; - if(chptr->mode.mode & ModuleModes.MODE_NOCOLOR) + if(chptr->mode.mode & MODE_NOCOLOR) { rb_strlcpy(text2, text, BUFSIZE); strip_colour(text2); @@ -634,7 +631,7 @@ msg_channel_opmod(int p_or_n, const char *command, } } - if(chptr->mode.mode & ModuleModes.MODE_OPMODERATE && + if(chptr->mode.mode & MODE_OPMODERATE && (!(chptr->mode.mode & MODE_NOPRIVMSGS) || IsMember(source_p, chptr))) { diff --git a/modules/core/m_mode.c b/modules/core/m_mode.c index 759a71d..737c1be 100644 --- a/modules/core/m_mode.c +++ b/modules/core/m_mode.c @@ -41,8 +41,6 @@ #include "packet.h" #include "s_newconf.h" -struct module_modes ModuleModes; - static int m_mode(struct Client *, struct Client *, int, const char **); static int ms_mode(struct Client *, struct Client *, int, const char **); static int ms_tmode(struct Client *, struct Client *, int, const char **); @@ -260,7 +258,7 @@ ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char case 'q': banlist = &chptr->quietlist; - mode_type = ModuleModes.CHFL_QUIET; + mode_type = CHFL_QUIET; mems = ALL_MEMBERS; break; diff --git a/modules/core/m_part.c b/modules/core/m_part.c index 334665b..c69f314 100644 --- a/modules/core/m_part.c +++ b/modules/core/m_part.c @@ -39,7 +39,6 @@ #include "s_conf.h" #include "packet.h" #include "inline/stringops.h" -#include "channel.h" static int m_part(struct Client *, struct Client *, int, const char **); @@ -55,7 +54,6 @@ DECLARE_MODULE_AV1(part, NULL, NULL, part_clist, NULL, NULL, "$Revision: 98 $"); static void part_one_client(struct Client *client_p, struct Client *source_p, char *name, char *reason); -struct module_modes ModuleModes; /* ** m_part @@ -129,7 +127,7 @@ part_one_client(struct Client *client_p, struct Client *source_p, char *name, ch (source_p->localClient->firsttime + ConfigFileEntry.anti_spam_exit_message_time) < rb_current_time())))) { - if(chptr->mode.mode & ModuleModes.MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) + if(chptr->mode.mode & MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) { rb_strlcpy(reason2, reason, BUFSIZE); strip_colour(reason2); diff --git a/modules/m_info.c b/modules/m_info.c index 4b43249..ca1d626 100644 --- a/modules/m_info.c +++ b/modules/m_info.c @@ -643,6 +643,12 @@ static struct InfoStruct info_table[] = { &ConfigChannel.use_invex, "Enable chanmode +I (invite exceptions)", }, + { + "use_forward", + OUTPUT_BOOLEAN_YN, + &ConfigChannel.use_forward, + "Enable chanmode +f (channel forwarding)", + }, { "use_knock", OUTPUT_BOOLEAN_YN, diff --git a/modules/m_invite.c b/modules/m_invite.c index 7fd5ff4..ed1c53d 100644 --- a/modules/m_invite.c +++ b/modules/m_invite.c @@ -39,9 +39,6 @@ #include "modules.h" #include "packet.h" #include "tgchange.h" -#include "channel.h" - -struct module_modes ModuleModes; static int m_invite(struct Client *, struct Client *, int, const char **); @@ -148,7 +145,7 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char /* unconditionally require ops, unless the channel is +g */ /* treat remote clients as chanops */ if(MyClient(source_p) && !is_any_op(msptr) && - !(chptr->mode.mode & ModuleModes.MODE_FREEINVITE)) + !(chptr->mode.mode & MODE_FREEINVITE)) { if(IsOverride(source_p)) { @@ -179,7 +176,7 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char * for +l/+j just check if the mode is set, this varies over time */ if(chptr->mode.mode & MODE_INVITEONLY || - (chptr->mode.mode & ModuleModes.MODE_REGONLY && EmptyString(target_p->user->suser)) || + (chptr->mode.mode & MODE_REGONLY && EmptyString(target_p->user->suser)) || chptr->mode.limit || chptr->mode.join_num) store_invite = 1; diff --git a/modules/m_knock.c b/modules/m_knock.c index 586ca15..67d56fb 100644 --- a/modules/m_knock.c +++ b/modules/m_knock.c @@ -36,8 +36,6 @@ #include "modules.h" #include "s_serv.h" -struct module_modes ModuleModes; - static int m_knock(struct Client *, struct Client *, int, const char **); struct Message knock_msgtab = { @@ -159,7 +157,7 @@ m_knock(struct Client *client_p, struct Client *source_p, int parc, const char * chptr->last_knock = rb_current_time(); if(ConfigChannel.use_knock) - sendto_channel_local(chptr->mode.mode & ModuleModes.MODE_FREEINVITE ? ALL_MEMBERS : ONLY_CHANOPS, + sendto_channel_local(chptr->mode.mode & MODE_FREEINVITE ? ALL_MEMBERS : ONLY_CHANOPS, chptr, form_str(RPL_KNOCK), me.name, name, name, source_p->name, source_p->username, source_p->host); diff --git a/src/channel.c b/src/channel.c index 9c95fb7..39d2f85 100644 --- a/src/channel.c +++ b/src/channel.c @@ -66,8 +66,6 @@ static int h_can_join; static int h_can_create_channel; static int h_channel_join; -struct module_modes ModuleModes; - /* init_channels() * * input - @@ -87,40 +85,6 @@ init_channels(void) h_can_create_channel = register_hook("can_create_channel"); } -/* is this the best place to put this? */ -/* init_module_modes() - * - * input - - * output - - * side effects - various MODE_ values are set to 0 - */ -void -init_module_modes() -{ - ModuleModes.MODE_REGONLY = 0; - ModuleModes.MODE_NOCTCP = 0; - ModuleModes.MODE_NOCOLOR = 0; - ModuleModes.MODE_EXLIMIT = 0; - ModuleModes.MODE_PERMANENT = 0; - ModuleModes.MODE_OPMODERATE = 0; - ModuleModes.MODE_FREEINVITE = 0; - ModuleModes.MODE_FREETARGET = 0; - ModuleModes.MODE_DISFORWARD = 0; - ModuleModes.MODE_THROTTLE = 0; - ModuleModes.MODE_FORWARD = 0; - ModuleModes.MODE_NONOTICE = 0; - ModuleModes.MODE_NOACTION = 0; - ModuleModes.MODE_NOKICK = 0; - ModuleModes.MODE_NONICK = 0; - ModuleModes.MODE_NOCAPS = 0; - ModuleModes.MODE_NOREJOIN = 0; - ModuleModes.MODE_NOREPEAT = 0; - ModuleModes.MODE_NOOPERKICK = 0; - - ModuleModes.CHFL_QUIET = 0; -} - - /* * allocate_channel - Allocates a channel */ @@ -388,7 +352,7 @@ remove_user_from_channel(struct membership *msptr) if(client_p->servptr == &me) rb_dlinkDelete(&msptr->locchannode, &chptr->locmembers); - if(!(chptr->mode.mode & ModuleModes.MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) + if(!(chptr->mode.mode & MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) destroy_channel(chptr); rb_bh_free(member_heap, msptr); @@ -423,7 +387,7 @@ remove_user_from_channels(struct Client *client_p) if(client_p->servptr == &me) rb_dlinkDelete(&msptr->locchannode, &chptr->locmembers); - if(!(chptr->mode.mode & ModuleModes.MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) + if(!(chptr->mode.mode & MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) destroy_channel(chptr); rb_bh_free(member_heap, msptr); @@ -759,10 +723,6 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, struct Ban *actualBan = NULL; struct Ban *actualExcept = NULL; - /* check to make sure quiets even exist on this server first */ - if(ModuleModes.CHFL_QUIET == 0) - return 0; - if(!MyClient(who)) return 0; @@ -798,7 +758,7 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, if(match(actualBan->banstr, s) || match(actualBan->banstr, s2) || match_cidr(actualBan->banstr, s2) || - match_extban(actualBan->banstr, who, chptr, ModuleModes.CHFL_QUIET) || + match_extban(actualBan->banstr, who, chptr, CHFL_QUIET) || (s3 != NULL && match(actualBan->banstr, s3))) break; else @@ -939,19 +899,15 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) if(chptr->mode.limit && rb_dlink_list_length(&chptr->members) >= (unsigned long) chptr->mode.limit) i = ERR_CHANNELISFULL; - if(chptr->mode.mode & ModuleModes.MODE_REGONLY && EmptyString(source_p->user->suser)) + if(chptr->mode.mode & MODE_REGONLY && EmptyString(source_p->user->suser)) i = ERR_NEEDREGGEDNICK; /* join throttling stuff --nenolod */ - /* only check for throttles if they exist on this server --Taros */ - else if(ModuleModes.MODE_THROTTLE) + else if(chptr->mode.join_num > 0 && chptr->mode.join_time > 0) { - if(chptr->mode.join_num > 0 && chptr->mode.join_time > 0) - { - if ((rb_current_time() - chptr->join_delta <= - chptr->mode.join_time) && (chptr->join_count >= - chptr->mode.join_num)) - i = ERR_THROTTLE; - } + if ((rb_current_time() - chptr->join_delta <= + chptr->mode.join_time) && (chptr->join_count >= + chptr->mode.join_num)) + i = ERR_THROTTLE; } /* allow /invite to override +l/+r/+j also -- jilles */ @@ -1086,7 +1042,7 @@ find_nonickchange_channel(struct Client *client_p) { msptr = ptr->data; chptr = msptr->chptr; - if (chptr->mode.mode & ModuleModes.MODE_NONICK && (!ConfigChannel.exempt_cmode_N || !is_any_op(msptr))) + if (chptr->mode.mode & MODE_NONICK && (!ConfigChannel.exempt_cmode_N || !is_any_op(msptr))) return chptr; } return NULL; @@ -1341,7 +1297,7 @@ channel_modes(struct Channel *chptr, struct Client *client_p) chptr->mode.join_time); } - if(*chptr->mode.forward && (ModuleModes.MODE_FORWARD || !IsClient(client_p))) + if(*chptr->mode.forward && (ConfigChannel.use_forward || !IsClient(client_p))) { *mbuf++ = 'f'; @@ -1652,7 +1608,7 @@ check_forward(struct Client *source_p, struct Channel *chptr, if (hash_find_resv(chptr->chname)) return NULL; /* Don't forward to +Q channel */ - if (chptr->mode.mode & ModuleModes.MODE_DISFORWARD) + if (chptr->mode.mode & MODE_DISFORWARD) return NULL; i = can_join(source_p, chptr, key); if (i == 0) @@ -1912,7 +1868,7 @@ void user_join(struct Client * client_p, struct Client * source_p, const char * me.name, get_oper_name(source_p), chptr->chname); } else if ((i != ERR_NEEDREGGEDNICK && i != ERR_THROTTLE && i != ERR_INVITEONLYCHAN && i != ERR_CHANNELISFULL) || - (!ModuleModes.MODE_FORWARD || (chptr = check_forward(source_p, chptr, key)) == NULL)) + (!ConfigChannel.use_forward || (chptr = check_forward(source_p, chptr, key)) == NULL)) { /* might be wrong, but is there any other better location for such? * see extensions/chm_operonly.c for other comments on this diff --git a/src/chmode.c b/src/chmode.c index 7de7ba9..cab5b31 100644 --- a/src/chmode.c +++ b/src/chmode.c @@ -71,8 +71,6 @@ char cflagsmyinfo[256]; int chmode_flags[256]; -struct module_modes ModuleModes; - /* OPTIMIZE ME! -- dwr */ void construct_cflags_strings(void) @@ -103,23 +101,28 @@ construct_cflags_strings(void) chmode_flags[i] = 0; } - if(chmode_flags[i] == ModuleModes.MODE_DISFORWARD) + switch (chmode_flags[i]) { - if (ModuleModes.MODE_FORWARD) + case MODE_EXLIMIT: + case MODE_DISFORWARD: + if(ConfigChannel.use_forward) { - *ptr++ = (char) i; + *ptr++ = (char) i; } - } - else if(chmode_flags[i] == ModuleModes.MODE_REGONLY) - { - if (rb_dlink_list_length(&service_list)) + + break; + case MODE_REGONLY: + if(rb_dlink_list_length(&service_list)) { - *ptr++ = (char) i; + *ptr++ = (char) i; + } + + break; + default: + if(chmode_flags[i] != 0) + { + *ptr++ = (char) i; } - } - else if(chmode_flags[i] != ModuleModes.MODE_EXLIMIT && chmode_flags[i] != 0) - { - *ptr++ = (char) i; } /* Should we leave orphaned check here? -- dwr */ @@ -216,7 +219,7 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid, */ if(MyClient(source_p)) { - if((rb_dlink_list_length(&chptr->banlist) + rb_dlink_list_length(&chptr->exceptlist) + rb_dlink_list_length(&chptr->invexlist) + rb_dlink_list_length(&chptr->quietlist)) >= (chptr->mode.mode & ModuleModes.MODE_EXLIMIT ? ConfigChannel.max_bans_large : ConfigChannel.max_bans)) + if((rb_dlink_list_length(&chptr->banlist) + rb_dlink_list_length(&chptr->exceptlist) + rb_dlink_list_length(&chptr->invexlist) + rb_dlink_list_length(&chptr->quietlist)) >= (chptr->mode.mode & MODE_EXLIMIT ? ConfigChannel.max_bans_large : ConfigChannel.max_bans)) { sendto_one(source_p, form_str(ERR_BANLISTFULL), me.name, source_p->name, chptr->chname, realban); @@ -253,7 +256,7 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid, rb_dlinkAdd(actualBan, &actualBan->node, list); /* invalidate the can_send() cache */ - if(mode_type == CHFL_BAN || mode_type == ModuleModes.CHFL_QUIET || mode_type == CHFL_EXCEPTION) + if(mode_type == CHFL_BAN || mode_type == CHFL_QUIET || mode_type == CHFL_EXCEPTION) chptr->bants++; return 1; @@ -284,7 +287,7 @@ del_id(struct Channel *chptr, const char *banid, rb_dlink_list * list, long mode free_ban(banptr); /* invalidate the can_send() cache */ - if(mode_type == CHFL_BAN || mode_type == ModuleModes.CHFL_QUIET || mode_type == CHFL_EXCEPTION) + if(mode_type == CHFL_BAN || mode_type == CHFL_QUIET || mode_type == CHFL_EXCEPTION) chptr->bants++; return 1; @@ -533,7 +536,7 @@ chm_simple(struct Client *source_p, struct Channel *chptr, if((dir == MODE_ADD) && !(chptr->mode.mode & mode_type)) { /* if +f is disabled, ignore an attempt to set +QF locally */ - if(!ModuleModes.MODE_FORWARD && MyClient(source_p) && + if(!ConfigChannel.use_forward && MyClient(source_p) && (c == 'Q' || c == 'F')) return; @@ -748,17 +751,18 @@ chm_ban(struct Client *source_p, struct Channel *chptr, int mems; int override = 0; - if(mode_type == CHFL_BAN) + switch (mode_type) { + case CHFL_BAN: list = &chptr->banlist; errorval = SM_ERR_RPL_B; rpl_list = RPL_BANLIST; rpl_endlist = RPL_ENDOFBANLIST; mems = ALL_MEMBERS; caps = 0; - } - else if(mode_type == CHFL_EXCEPTION) - { + break; + + case CHFL_EXCEPTION: /* if +e is disabled, allow all but +e locally */ if(!ConfigChannel.use_except && MyClient(source_p) && ((dir == MODE_ADD) && (parc > *parn))) @@ -774,9 +778,9 @@ chm_ban(struct Client *source_p, struct Channel *chptr, mems = ONLY_CHANOPS; else mems = ONLY_SERVERS; - } - else if(mode_type == CHFL_INVEX) - { + break; + + case CHFL_INVEX: /* if +I is disabled, allow all but +I locally */ if(!ConfigChannel.use_invex && MyClient(source_p) && (dir == MODE_ADD) && (parc > *parn)) @@ -792,20 +796,21 @@ chm_ban(struct Client *source_p, struct Channel *chptr, mems = ONLY_CHANOPS; else mems = ONLY_SERVERS; - } - else if(mode_type == ModuleModes.CHFL_QUIET) - { + break; + + case CHFL_QUIET: list = &chptr->quietlist; errorval = SM_ERR_RPL_Q; rpl_list = RPL_QUIETLIST; rpl_endlist = RPL_ENDOFQUIETLIST; mems = ALL_MEMBERS; caps = 0; - } - else - { + break; + + default: sendto_realops_snomask(SNO_GENERAL, L_ALL, "chm_ban() called with unknown type!"); return; + break; } if(dir == 0 || parc <= *parn) @@ -816,7 +821,7 @@ chm_ban(struct Client *source_p, struct Channel *chptr, /* non-ops cant see +eI lists.. */ if(alevel != CHFL_CHANOP && alevel != CHFL_ADMIN && alevel != CHFL_HALFOP && mode_type != CHFL_BAN && - mode_type != ModuleModes.CHFL_QUIET) + mode_type != CHFL_QUIET) { if(IsOverride(source_p)) { @@ -1503,7 +1508,7 @@ chm_forward(struct Client *source_p, struct Channel *chptr, int override = 0; /* if +f is disabled, ignore local attempts to set it */ - if(!ModuleModes.MODE_FORWARD && MyClient(source_p) && + if(!ConfigChannel.use_forward && MyClient(source_p) && (dir == MODE_ADD) && (parc > *parn)) return; @@ -1573,10 +1578,10 @@ chm_forward(struct Client *source_p, struct Channel *chptr, form_str(ERR_NOSUCHCHANNEL), forward); return; } - if(MyClient(source_p) && !(targptr->mode.mode & ModuleModes.MODE_FREETARGET)) + if(MyClient(source_p) && !(targptr->mode.mode & MODE_FREETARGET)) { if((msptr = find_channel_membership(targptr, source_p)) == NULL || - !is_any_op(msptr)) + is_any_op(msptr)) { if(IsOverride(source_p)) override = 1; @@ -1595,7 +1600,7 @@ chm_forward(struct Client *source_p, struct Channel *chptr, mode_changes[mode_count].dir = MODE_ADD; mode_changes[mode_count].caps = 0; mode_changes[mode_count].nocaps = 0; - mode_changes[mode_count].mems = ModuleModes.MODE_FORWARD ? ALL_MEMBERS : ONLY_SERVERS; + mode_changes[mode_count].mems = ConfigChannel.use_forward ? ALL_MEMBERS : ONLY_SERVERS; mode_changes[mode_count].id = NULL; mode_changes[mode_count].override = override; mode_changes[mode_count++].arg = forward; @@ -1752,9 +1757,6 @@ chm_regonly(struct Client *source_p, struct Channel *chptr, } /* *INDENT-OFF* */ -/* Only RFC and ircd-ratbox modes are held in this table - * All other modes are added via loading modules in shadowircd/modes - * Such is documented in the comments for each mode, ex: C - NOCTCP. */ struct ChannelMode chmode_table[256] = { {chm_nosuch, 0 }, /* 0x00 */ @@ -1825,24 +1827,24 @@ struct ChannelMode chmode_table[256] = {chm_nosuch, 0 }, /* @ */ {chm_nosuch, 0 }, /* A */ {chm_nosuch, 0 }, /* B */ - {chm_nosuch, 0 }, /* C - MODE_NOCTCP */ - {chm_nosuch, 0 }, /* D - MODE_NOACTION */ - {chm_nosuch, 0 }, /* E - MODE_NOKICK */ - {chm_nosuch, 0 }, /* F - MODE_FREETARGET */ - {chm_nosuch, 0 }, /* G - MODE_NOCAPS */ + {chm_simple, MODE_NOCTCP }, /* C */ + {chm_simple, MODE_NOACTION }, /* D */ + {chm_simple, MODE_NOKICK }, /* E */ + {chm_simple, MODE_FREETARGET }, /* F */ + {chm_simple, MODE_NOCAPS }, /* G */ {chm_nosuch, 0 }, /* H */ {chm_ban, CHFL_INVEX }, /* I */ - {chm_nosuch, 0 }, /* J - MODE_NOREJOIN */ - {chm_nosuch, 0 }, /* K - MODE_NOREPEAT */ - {chm_nosuch, 0 }, /* L - MODE_EXLIMIT */ - {chm_nosuch, 0 }, /* M - MODE_NOOPERKICK */ - {chm_nosuch, 0 }, /* N - MODE_NONICK */ + {chm_simple, MODE_NOREJOIN }, /* J */ + {chm_simple, MODE_NOREPEAT }, /* K */ + {chm_staff, MODE_EXLIMIT }, /* L */ + {chm_hidden, MODE_NOOPERKICK }, /* M */ + {chm_simple, MODE_NONICK }, /* N */ {chm_nosuch, 0 }, /* O */ - {chm_nosuch, 0 }, /* P - MODE_PERMANENT */ - {chm_nosuch, 0 }, /* Q - MODE_DISFORWARD */ + {chm_staff, MODE_PERMANENT }, /* P */ + {chm_simple, MODE_DISFORWARD }, /* Q */ {chm_nosuch, 0 }, /* R */ {chm_nosuch, 0 }, /* S */ - {chm_nosuch, 0 }, /* T - MODE_NONOTICE */ + {chm_simple, MODE_NONOTICE }, /* T */ {chm_nosuch, 0 }, /* U */ {chm_nosuch, 0 }, /* V */ {chm_nosuch, 0 }, /* W */ @@ -1857,22 +1859,22 @@ struct ChannelMode chmode_table[256] = {chm_nosuch, 0 }, {chm_admin, 0 }, /* a */ {chm_ban, CHFL_BAN }, /* b */ - {chm_nosuch, 0 }, /* c - MODE_NOCOLOR */ + {chm_simple, MODE_NOCOLOR }, /* c */ {chm_nosuch, 0 }, /* d */ {chm_ban, CHFL_EXCEPTION }, /* e */ - {chm_nosuch, 0 }, /* f - MODE_FORWARD */ - {chm_nosuch, 0 }, /* g - MODE_FREEINVITE */ + {chm_forward, 0 }, /* f */ + {chm_simple, MODE_FREEINVITE }, /* g */ {chm_halfop, 0 }, /* h */ {chm_simple, MODE_INVITEONLY }, /* i */ - {chm_nosuch, 0 }, /* j - MODE_THROTTLE */ + {chm_throttle, 0 }, /* j */ {chm_key, 0 }, /* k */ {chm_limit, 0 }, /* l */ {chm_simple, MODE_MODERATED }, /* m */ {chm_simple, MODE_NOPRIVMSGS }, /* n */ {chm_op, 0 }, /* o */ {chm_simple, MODE_PRIVATE }, /* p */ - {chm_nosuch, 0 }, /* q - CHFL_QUIET */ - {chm_nosuch, 0 }, /* r - MODE_REGONLY */ + {chm_ban, CHFL_QUIET }, /* q */ + {chm_regonly, MODE_REGONLY }, /* r */ {chm_simple, MODE_SECRET }, /* s */ {chm_simple, MODE_TOPICLIMIT }, /* t */ {chm_nosuch, 0 }, /* u */ @@ -1880,7 +1882,7 @@ struct ChannelMode chmode_table[256] = {chm_nosuch, 0 }, /* w */ {chm_nosuch, 0 }, /* x */ {chm_nosuch, 0 }, /* y */ - {chm_nosuch, 0 }, /* z - MODE_OPMODERATE */ + {chm_simple, MODE_OPMODERATE }, /* z */ {chm_nosuch, 0 }, /* 0x7b */ {chm_nosuch, 0 }, /* 0x7c */ diff --git a/src/ircd.c b/src/ircd.c index c4a7c80..8716b3e 100644 --- a/src/ircd.c +++ b/src/ircd.c @@ -641,7 +641,6 @@ main(int argc, char *argv[]) seed_random(NULL); - init_module_modes(); init_main_logfile(); newconf_init(); init_s_conf(); diff --git a/src/newconf.c b/src/newconf.c index 8eeca1e..a48f639 100644 --- a/src/newconf.c +++ b/src/newconf.c @@ -2283,6 +2283,7 @@ static struct ConfEntry conf_channel_table[] = { "use_except", CF_YESNO, NULL, 0, &ConfigChannel.use_except }, { "use_invex", CF_YESNO, NULL, 0, &ConfigChannel.use_invex }, { "use_knock", CF_YESNO, NULL, 0, &ConfigChannel.use_knock }, + { "use_forward", CF_YESNO, NULL, 0, &ConfigChannel.use_forward }, { "use_local_channels", CF_YESNO, NULL, 0, &ConfigChannel.use_local_channels }, { "resv_forcepart", CF_YESNO, NULL, 0, &ConfigChannel.resv_forcepart }, { "exempt_cmode_c", CF_YESNO, NULL, 0, &ConfigChannel.exempt_cmode_c }, diff --git a/src/s_conf.c b/src/s_conf.c index 1cf0c26..52e59b8 100644 --- a/src/s_conf.c +++ b/src/s_conf.c @@ -768,6 +768,7 @@ set_default_conf(void) ConfigChannel.use_except = YES; ConfigChannel.use_invex = YES; ConfigChannel.use_knock = YES; + ConfigChannel.use_forward = YES; ConfigChannel.use_local_channels = YES; ConfigChannel.knock_delay = 300; ConfigChannel.knock_delay_channel = 60; diff --git a/src/s_user.c b/src/s_user.c index b0ed306..e6dc1ca 100644 --- a/src/s_user.c +++ b/src/s_user.c @@ -54,8 +54,6 @@ #include "substitution.h" #include "chmode.h" -struct module_modes ModuleModes; - static void report_and_set_user_flags(struct Client *, struct ConfItem *); void user_welcome(struct Client *source_p); @@ -1103,7 +1101,7 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, const char } /* FALLTHROUGH */ default: - if (MyConnect(source_p) && *pm == 'Q' && !ModuleModes.MODE_FORWARD) { + if (MyConnect(source_p) && *pm == 'Q' && !ConfigChannel.use_forward) { badflag = YES; break; } diff --git a/src/supported.c b/src/supported.c index a8f734a..49f0da4 100644 --- a/src/supported.c +++ b/src/supported.c @@ -87,9 +87,6 @@ #include "s_conf.h" #include "supported.h" #include "chmode.h" -#include "channel.h" - -struct module_modes ModuleModes; rb_dlink_list isupportlist; @@ -241,7 +238,7 @@ isupport_chanmodes(const void *ptr) rb_snprintf(result, sizeof result, "%s%sbq,k,%slj,%s", ConfigChannel.use_except ? "e" : "", ConfigChannel.use_invex ? "I" : "", - ModuleModes.MODE_FORWARD ? "f" : "", + ConfigChannel.use_forward ? "f" : "", cflagsbuf); return result; }