ircd: implement EXTENDCHANS, based on ircd-seven (with some improvements from chatircd)
This commit is contained in:
parent
fe749d3709
commit
a4721f5e9f
13 changed files with 164 additions and 12 deletions
|
@ -25,6 +25,7 @@
|
||||||
#loadmodule "extensions/extb_server.la";
|
#loadmodule "extensions/extb_server.la";
|
||||||
#loadmodule "extensions/extb_ssl.la";
|
#loadmodule "extensions/extb_ssl.la";
|
||||||
#loadmodule "extensions/hurt.la";
|
#loadmodule "extensions/hurt.la";
|
||||||
|
#loadmodule "extensions/m_extendchans.la";
|
||||||
#loadmodule "extensions/m_findforwards.la";
|
#loadmodule "extensions/m_findforwards.la";
|
||||||
#loadmodule "extensions/m_identify.la";
|
#loadmodule "extensions/m_identify.la";
|
||||||
#loadmodule "extensions/no_oper_invis.la";
|
#loadmodule "extensions/no_oper_invis.la";
|
||||||
|
@ -349,6 +350,7 @@ channel {
|
||||||
knock_delay = 5 minutes;
|
knock_delay = 5 minutes;
|
||||||
knock_delay_channel = 1 minute;
|
knock_delay_channel = 1 minute;
|
||||||
max_chans_per_user = 15;
|
max_chans_per_user = 15;
|
||||||
|
max_chans_per_user_large = 60;
|
||||||
max_bans = 100;
|
max_bans = 100;
|
||||||
max_bans_large = 500;
|
max_bans_large = 500;
|
||||||
default_split_user_count = 0;
|
default_split_user_count = 0;
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
* HURT system -- hurt.la
|
* HURT system -- hurt.la
|
||||||
* New host mangling (umode +x) -- ip_cloaking_4.0.la
|
* New host mangling (umode +x) -- ip_cloaking_4.0.la
|
||||||
* Old host mangling (umode +h) -- ip_cloaking.la
|
* Old host mangling (umode +h) -- ip_cloaking.la
|
||||||
|
* Dynamically extend channel limits -- m_extendchans.la
|
||||||
* Find channel forwards -- m_findforwards.la
|
* Find channel forwards -- m_findforwards.la
|
||||||
* /identify support -- m_identify.la
|
* /identify support -- m_identify.la
|
||||||
* Opers cannot be invisible (umode +i) -- no_oper_invis.la
|
* Opers cannot be invisible (umode +i) -- no_oper_invis.la
|
||||||
|
@ -94,6 +95,7 @@
|
||||||
#loadmodule "extensions/hurt.la";
|
#loadmodule "extensions/hurt.la";
|
||||||
#loadmodule "extensions/ip_cloaking_4.0.la";
|
#loadmodule "extensions/ip_cloaking_4.0.la";
|
||||||
#loadmodule "extensions/ip_cloaking.la";
|
#loadmodule "extensions/ip_cloaking.la";
|
||||||
|
#loadmodule "extensions/m_extendchans.la";
|
||||||
#loadmodule "extensions/m_findforwards.la";
|
#loadmodule "extensions/m_findforwards.la";
|
||||||
#loadmodule "extensions/m_identify.la";
|
#loadmodule "extensions/m_identify.la";
|
||||||
#loadmodule "extensions/no_oper_invis.la";
|
#loadmodule "extensions/no_oper_invis.la";
|
||||||
|
@ -376,6 +378,7 @@ auth {
|
||||||
* need_ident (old + flag) | require ident for user in this class
|
* need_ident (old + flag) | require ident for user in this class
|
||||||
* need_ssl | require SSL/TLS for user in this class
|
* need_ssl | require SSL/TLS for user in this class
|
||||||
* need_sasl | require SASL id for user in this class
|
* need_sasl | require SASL id for user in this class
|
||||||
|
* extend_chans | allow this user to join more channels than normal
|
||||||
*/
|
*/
|
||||||
flags = kline_exempt, exceed_limit;
|
flags = kline_exempt, exceed_limit;
|
||||||
|
|
||||||
|
@ -735,6 +738,9 @@ channel {
|
||||||
/* max chans: The maximum number of channels a user can join/be on. */
|
/* max chans: The maximum number of channels a user can join/be on. */
|
||||||
max_chans_per_user = 15;
|
max_chans_per_user = 15;
|
||||||
|
|
||||||
|
/* max chans (large): The extended maximum number of channels a user can join. */
|
||||||
|
max_chans_per_user_large = 60;
|
||||||
|
|
||||||
/* max bans: maximum number of +b/e/I/q modes in a channel */
|
/* max bans: maximum number of +b/e/I/q modes in a channel */
|
||||||
max_bans = 100;
|
max_bans = 100;
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ extension_LTLIBRARIES = \
|
||||||
sno_whois.la \
|
sno_whois.la \
|
||||||
m_42.la \
|
m_42.la \
|
||||||
m_adminwall.la \
|
m_adminwall.la \
|
||||||
|
m_extendchans.la \
|
||||||
m_findforwards.la \
|
m_findforwards.la \
|
||||||
m_identify.la \
|
m_identify.la \
|
||||||
m_mkpasswd.la \
|
m_mkpasswd.la \
|
||||||
|
|
|
@ -227,6 +227,9 @@ m_42_la_OBJECTS = m_42.lo
|
||||||
m_adminwall_la_LIBADD =
|
m_adminwall_la_LIBADD =
|
||||||
m_adminwall_la_SOURCES = m_adminwall.c
|
m_adminwall_la_SOURCES = m_adminwall.c
|
||||||
m_adminwall_la_OBJECTS = m_adminwall.lo
|
m_adminwall_la_OBJECTS = m_adminwall.lo
|
||||||
|
m_extendchans_la_LIBADD =
|
||||||
|
m_extendchans_la_SOURCES = m_extendchans.c
|
||||||
|
m_extendchans_la_OBJECTS = m_extendchans.lo
|
||||||
m_findforwards_la_LIBADD =
|
m_findforwards_la_LIBADD =
|
||||||
m_findforwards_la_SOURCES = m_findforwards.c
|
m_findforwards_la_SOURCES = m_findforwards.c
|
||||||
m_findforwards_la_OBJECTS = m_findforwards.lo
|
m_findforwards_la_OBJECTS = m_findforwards.lo
|
||||||
|
@ -353,11 +356,11 @@ SOURCES = chm_adminonly.c chm_nonotice.c chm_operonly.c \
|
||||||
extb_realname.c extb_server.c extb_ssl.c extb_usermode.c \
|
extb_realname.c extb_server.c extb_ssl.c extb_usermode.c \
|
||||||
force_user_invis.c hide_uncommon_channels.c hurt.c \
|
force_user_invis.c hide_uncommon_channels.c hurt.c \
|
||||||
ip_cloaking.c ip_cloaking_3.0.c ip_cloaking_4.0.c \
|
ip_cloaking.c ip_cloaking_3.0.c ip_cloaking_4.0.c \
|
||||||
ip_cloaking_old.c m_42.c m_adminwall.c m_findforwards.c \
|
ip_cloaking_old.c m_42.c m_adminwall.c m_extendchans.c \
|
||||||
m_identify.c m_mkpasswd.c m_ojoin.c m_okick.c m_omode.c \
|
m_findforwards.c m_identify.c m_mkpasswd.c m_ojoin.c m_okick.c \
|
||||||
m_opme.c m_remove.c m_roleplay.c m_sendbans.c m_webirc.c \
|
m_omode.c m_opme.c m_remove.c m_roleplay.c m_sendbans.c \
|
||||||
no_kill_services.c no_locops.c no_oper_invis.c override.c \
|
m_webirc.c no_kill_services.c no_locops.c no_oper_invis.c \
|
||||||
restrict-unauthenticated.c sno_channelcreate.c \
|
override.c restrict-unauthenticated.c sno_channelcreate.c \
|
||||||
sno_farconnect.c sno_globalkline.c sno_globaloper.c \
|
sno_farconnect.c sno_globalkline.c sno_globaloper.c \
|
||||||
sno_whois.c spy_admin_notice.c spy_info_notice.c \
|
sno_whois.c spy_admin_notice.c spy_info_notice.c \
|
||||||
spy_links_notice.c spy_motd_notice.c spy_stats_notice.c \
|
spy_links_notice.c spy_motd_notice.c spy_stats_notice.c \
|
||||||
|
@ -370,11 +373,11 @@ DIST_SOURCES = chm_adminonly.c chm_nonotice.c chm_operonly.c \
|
||||||
extb_realname.c extb_server.c extb_ssl.c extb_usermode.c \
|
extb_realname.c extb_server.c extb_ssl.c extb_usermode.c \
|
||||||
force_user_invis.c hide_uncommon_channels.c hurt.c \
|
force_user_invis.c hide_uncommon_channels.c hurt.c \
|
||||||
ip_cloaking.c ip_cloaking_3.0.c ip_cloaking_4.0.c \
|
ip_cloaking.c ip_cloaking_3.0.c ip_cloaking_4.0.c \
|
||||||
ip_cloaking_old.c m_42.c m_adminwall.c m_findforwards.c \
|
ip_cloaking_old.c m_42.c m_adminwall.c m_extendchans.c \
|
||||||
m_identify.c m_mkpasswd.c m_ojoin.c m_okick.c m_omode.c \
|
m_findforwards.c m_identify.c m_mkpasswd.c m_ojoin.c m_okick.c \
|
||||||
m_opme.c m_remove.c m_roleplay.c m_sendbans.c m_webirc.c \
|
m_omode.c m_opme.c m_remove.c m_roleplay.c m_sendbans.c \
|
||||||
no_kill_services.c no_locops.c no_oper_invis.c override.c \
|
m_webirc.c no_kill_services.c no_locops.c no_oper_invis.c \
|
||||||
restrict-unauthenticated.c sno_channelcreate.c \
|
override.c restrict-unauthenticated.c sno_channelcreate.c \
|
||||||
sno_farconnect.c sno_globalkline.c sno_globaloper.c \
|
sno_farconnect.c sno_globalkline.c sno_globaloper.c \
|
||||||
sno_whois.c spy_admin_notice.c spy_info_notice.c \
|
sno_whois.c spy_admin_notice.c spy_info_notice.c \
|
||||||
spy_links_notice.c spy_motd_notice.c spy_stats_notice.c \
|
spy_links_notice.c spy_motd_notice.c spy_stats_notice.c \
|
||||||
|
@ -624,6 +627,7 @@ extension_LTLIBRARIES = \
|
||||||
sno_whois.la \
|
sno_whois.la \
|
||||||
m_42.la \
|
m_42.la \
|
||||||
m_adminwall.la \
|
m_adminwall.la \
|
||||||
|
m_extendchans.la \
|
||||||
m_findforwards.la \
|
m_findforwards.la \
|
||||||
m_identify.la \
|
m_identify.la \
|
||||||
m_mkpasswd.la \
|
m_mkpasswd.la \
|
||||||
|
@ -807,6 +811,9 @@ m_42.la: $(m_42_la_OBJECTS) $(m_42_la_DEPENDENCIES) $(EXTRA_m_42_la_DEPENDENCIES
|
||||||
m_adminwall.la: $(m_adminwall_la_OBJECTS) $(m_adminwall_la_DEPENDENCIES) $(EXTRA_m_adminwall_la_DEPENDENCIES)
|
m_adminwall.la: $(m_adminwall_la_OBJECTS) $(m_adminwall_la_DEPENDENCIES) $(EXTRA_m_adminwall_la_DEPENDENCIES)
|
||||||
$(AM_V_CCLD)$(LINK) -rpath $(extensiondir) $(m_adminwall_la_OBJECTS) $(m_adminwall_la_LIBADD) $(LIBS)
|
$(AM_V_CCLD)$(LINK) -rpath $(extensiondir) $(m_adminwall_la_OBJECTS) $(m_adminwall_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
|
m_extendchans.la: $(m_extendchans_la_OBJECTS) $(m_extendchans_la_DEPENDENCIES) $(EXTRA_m_extendchans_la_DEPENDENCIES)
|
||||||
|
$(AM_V_CCLD)$(LINK) -rpath $(extensiondir) $(m_extendchans_la_OBJECTS) $(m_extendchans_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
m_findforwards.la: $(m_findforwards_la_OBJECTS) $(m_findforwards_la_DEPENDENCIES) $(EXTRA_m_findforwards_la_DEPENDENCIES)
|
m_findforwards.la: $(m_findforwards_la_OBJECTS) $(m_findforwards_la_DEPENDENCIES) $(EXTRA_m_findforwards_la_DEPENDENCIES)
|
||||||
$(AM_V_CCLD)$(LINK) -rpath $(extensiondir) $(m_findforwards_la_OBJECTS) $(m_findforwards_la_LIBADD) $(LIBS)
|
$(AM_V_CCLD)$(LINK) -rpath $(extensiondir) $(m_findforwards_la_OBJECTS) $(m_findforwards_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
|
@ -927,6 +934,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip_cloaking_old.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip_cloaking_old.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_42.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_42.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_adminwall.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_adminwall.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_extendchans.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_findforwards.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_findforwards.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_identify.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_identify.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_mkpasswd.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_mkpasswd.Plo@am__quote@
|
||||||
|
|
112
extensions/m_extendchans.c
Normal file
112
extensions/m_extendchans.c
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
/*
|
||||||
|
* charybdis
|
||||||
|
* m_extendchans.c: Allow an oper or service to let a given user join more channels.
|
||||||
|
*
|
||||||
|
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
|
||||||
|
* Copyright (C) 1996-2002 Hybrid Development Team
|
||||||
|
* Copyright (C) 2002-2006 ircd-ratbox development team
|
||||||
|
* Copyright (C) 2006-2016 ircd-seven development team
|
||||||
|
* Copyright (C) 2015-2016 ChatLounge IRC Network Development Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
|
* USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stdinc.h"
|
||||||
|
#include "client.h"
|
||||||
|
#include "modules.h"
|
||||||
|
#include "s_newconf.h"
|
||||||
|
#include "send.h"
|
||||||
|
#include "numeric.h"
|
||||||
|
|
||||||
|
static int mo_extendchans(struct Client *, struct Client *, int, const char **);
|
||||||
|
static int me_extendchans(struct Client *, struct Client *, int, const char **);
|
||||||
|
|
||||||
|
struct Message extendchans_msgtab = {
|
||||||
|
"EXTENDCHANS", 0, 0, 0, MFLG_SLOW,
|
||||||
|
{ mg_unreg, mg_ignore, mg_ignore, mg_ignore, {me_extendchans, 2}, {mo_extendchans, 2}}
|
||||||
|
};
|
||||||
|
|
||||||
|
mapi_clist_av1 extendchans_clist[] = { &extendchans_msgtab, NULL };
|
||||||
|
|
||||||
|
DECLARE_MODULE_AV1(extendchans, NULL, NULL, extendchans_clist, NULL, NULL, "$Revision: $");
|
||||||
|
|
||||||
|
static int
|
||||||
|
mo_extendchans(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||||
|
{
|
||||||
|
struct Client *target_p;
|
||||||
|
|
||||||
|
if(!HasPrivilege(source_p, "oper:extendchans"))
|
||||||
|
{
|
||||||
|
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "extendchans");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(EmptyString(parv[1]))
|
||||||
|
{
|
||||||
|
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, source_p->name, "EXTENDCHANS");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((target_p = find_chasing(source_p, parv[1], NULL)) == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Is the target user local? */
|
||||||
|
if(MyClient(target_p))
|
||||||
|
{
|
||||||
|
sendto_one_notice(target_p, ":*** %s (%s@%s) is extending your channel limit",
|
||||||
|
source_p->name, source_p->username, source_p->host);
|
||||||
|
SetExtendChans(target_p);
|
||||||
|
}
|
||||||
|
else /* Target user isn't local, so pass it on. */
|
||||||
|
{
|
||||||
|
struct Client *cptr = target_p->servptr;
|
||||||
|
sendto_one(cptr, ":%s ENCAP %s EXTENDCHANS %s",
|
||||||
|
get_id(source_p, cptr), cptr->name, get_id(target_p, cptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
sendto_one_notice(source_p, ":You have extended the channel limit on: %s (%s@%s)",
|
||||||
|
target_p->name, target_p->username, target_p->orighost);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
me_extendchans(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||||
|
{
|
||||||
|
struct Client *target_p;
|
||||||
|
|
||||||
|
target_p = find_person(parv[1]);
|
||||||
|
if(target_p == NULL)
|
||||||
|
{
|
||||||
|
sendto_one_numeric(source_p, ERR_NOSUCHNICK, form_str(ERR_NOSUCHNICK), parv[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Is the target user local? If not, pass it on. */
|
||||||
|
if(!MyClient(target_p))
|
||||||
|
{
|
||||||
|
struct Client *cptr = target_p->servptr;
|
||||||
|
sendto_one(cptr, ":%s ENCAP %s EXTENDCHANS %s",
|
||||||
|
get_id(source_p, cptr), cptr->name, get_id(target_p, cptr));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendto_one_notice(target_p, ":*** %s (%s@%s) is extending your channel limit",
|
||||||
|
source_p->name, source_p->username, source_p->host);
|
||||||
|
SetExtendChans(target_p);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -420,6 +420,7 @@ struct PreClient
|
||||||
|
|
||||||
/* overflow flags */
|
/* overflow flags */
|
||||||
/* EARLIER FLAGS ARE IN s_newconf.h */
|
/* EARLIER FLAGS ARE IN s_newconf.h */
|
||||||
|
#define FLAGS2_EXTENDCHANS 0x00200000
|
||||||
#define FLAGS2_EXEMPTRESV 0x00400000
|
#define FLAGS2_EXEMPTRESV 0x00400000
|
||||||
#define FLAGS2_EXEMPTKLINE 0x00800000
|
#define FLAGS2_EXEMPTKLINE 0x00800000
|
||||||
#define FLAGS2_EXEMPTFLOOD 0x01000000
|
#define FLAGS2_EXEMPTFLOOD 0x01000000
|
||||||
|
@ -536,6 +537,8 @@ struct PreClient
|
||||||
#define SetExemptResv(x) ((x)->flags2 |= FLAGS2_EXEMPTRESV)
|
#define SetExemptResv(x) ((x)->flags2 |= FLAGS2_EXEMPTRESV)
|
||||||
#define IsIPSpoof(x) ((x)->flags2 & FLAGS2_IP_SPOOFING)
|
#define IsIPSpoof(x) ((x)->flags2 & FLAGS2_IP_SPOOFING)
|
||||||
#define SetIPSpoof(x) ((x)->flags2 |= FLAGS2_IP_SPOOFING)
|
#define SetIPSpoof(x) ((x)->flags2 |= FLAGS2_IP_SPOOFING)
|
||||||
|
#define IsExtendChans(x) ((x)->flags2 & FLAGS2_EXTENDCHANS)
|
||||||
|
#define SetExtendChans(x) ((x)->flags2 |= FLAGS2_EXTENDCHANS)
|
||||||
|
|
||||||
/* for local users: flood grace period is over
|
/* for local users: flood grace period is over
|
||||||
* for servers: mentioned in networknotice.c notice
|
* for servers: mentioned in networknotice.c notice
|
||||||
|
|
|
@ -110,6 +110,7 @@ struct ConfItem
|
||||||
#define CONF_FLAGS_EXEMPTSHIDE 0x00010000
|
#define CONF_FLAGS_EXEMPTSHIDE 0x00010000
|
||||||
#define CONF_FLAGS_EXEMPTJUPE 0x00020000 /* exempt from resv generating warnings */
|
#define CONF_FLAGS_EXEMPTJUPE 0x00020000 /* exempt from resv generating warnings */
|
||||||
#define CONF_FLAGS_NEED_SASL 0x00040000
|
#define CONF_FLAGS_NEED_SASL 0x00040000
|
||||||
|
#define CONF_FLAGS_EXTEND_CHANS 0x00080000
|
||||||
#define CONF_FLAGS_ENCRYPTED 0x00200000
|
#define CONF_FLAGS_ENCRYPTED 0x00200000
|
||||||
#define CONF_FLAGS_EXEMPTDNSBL 0x04000000
|
#define CONF_FLAGS_EXEMPTDNSBL 0x04000000
|
||||||
|
|
||||||
|
@ -132,6 +133,7 @@ struct ConfItem
|
||||||
#define IsConfEncrypted(x) ((x)->flags & CONF_FLAGS_ENCRYPTED)
|
#define IsConfEncrypted(x) ((x)->flags & CONF_FLAGS_ENCRYPTED)
|
||||||
#define IsNeedSasl(x) ((x)->flags & CONF_FLAGS_NEED_SASL)
|
#define IsNeedSasl(x) ((x)->flags & CONF_FLAGS_NEED_SASL)
|
||||||
#define IsConfExemptDNSBL(x) ((x)->flags & CONF_FLAGS_EXEMPTDNSBL)
|
#define IsConfExemptDNSBL(x) ((x)->flags & CONF_FLAGS_EXEMPTDNSBL)
|
||||||
|
#define IsConfExtendChans(x) ((x)->flags & CONF_FLAGS_EXTEND_CHANS)
|
||||||
#define IsConfSSLNeeded(x) ((x)->flags & CONF_FLAGS_NEED_SSL)
|
#define IsConfSSLNeeded(x) ((x)->flags & CONF_FLAGS_NEED_SSL)
|
||||||
|
|
||||||
/* flag definitions for opers now in client.h */
|
/* flag definitions for opers now in client.h */
|
||||||
|
@ -248,6 +250,7 @@ struct config_channel_entry
|
||||||
int max_bans;
|
int max_bans;
|
||||||
int max_bans_large;
|
int max_bans_large;
|
||||||
int max_chans_per_user;
|
int max_chans_per_user;
|
||||||
|
int max_chans_per_user_large;
|
||||||
int no_create_on_split;
|
int no_create_on_split;
|
||||||
int no_join_on_split;
|
int no_join_on_split;
|
||||||
int default_split_server_count;
|
int default_split_server_count;
|
||||||
|
|
|
@ -344,6 +344,7 @@ static struct mode_table auth_table[] = {
|
||||||
{"have_ident", CONF_FLAGS_NEED_IDENTD },
|
{"have_ident", CONF_FLAGS_NEED_IDENTD },
|
||||||
{"need_ssl", CONF_FLAGS_NEED_SSL },
|
{"need_ssl", CONF_FLAGS_NEED_SSL },
|
||||||
{"need_sasl", CONF_FLAGS_NEED_SASL },
|
{"need_sasl", CONF_FLAGS_NEED_SASL },
|
||||||
|
{"extend_chans", CONF_FLAGS_EXTEND_CHANS },
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2440,6 +2441,7 @@ static struct ConfEntry conf_channel_table[] =
|
||||||
{ "max_bans", CF_INT, NULL, 0, &ConfigChannel.max_bans },
|
{ "max_bans", CF_INT, NULL, 0, &ConfigChannel.max_bans },
|
||||||
{ "max_bans_large", CF_INT, NULL, 0, &ConfigChannel.max_bans_large },
|
{ "max_bans_large", CF_INT, NULL, 0, &ConfigChannel.max_bans_large },
|
||||||
{ "max_chans_per_user", CF_INT, NULL, 0, &ConfigChannel.max_chans_per_user },
|
{ "max_chans_per_user", CF_INT, NULL, 0, &ConfigChannel.max_chans_per_user },
|
||||||
|
{ "max_chans_per_user_large", CF_INT, NULL, 0, &ConfigChannel.max_chans_per_user_large },
|
||||||
{ "no_create_on_split", CF_YESNO, NULL, 0, &ConfigChannel.no_create_on_split },
|
{ "no_create_on_split", CF_YESNO, NULL, 0, &ConfigChannel.no_create_on_split },
|
||||||
{ "no_join_on_split", CF_YESNO, NULL, 0, &ConfigChannel.no_join_on_split },
|
{ "no_join_on_split", CF_YESNO, NULL, 0, &ConfigChannel.no_join_on_split },
|
||||||
{ "only_ascii_channels", CF_YESNO, NULL, 0, &ConfigChannel.only_ascii_channels },
|
{ "only_ascii_channels", CF_YESNO, NULL, 0, &ConfigChannel.only_ascii_channels },
|
||||||
|
|
|
@ -780,6 +780,7 @@ set_default_conf(void)
|
||||||
ConfigChannel.knock_delay = 300;
|
ConfigChannel.knock_delay = 300;
|
||||||
ConfigChannel.knock_delay_channel = 60;
|
ConfigChannel.knock_delay_channel = 60;
|
||||||
ConfigChannel.max_chans_per_user = 15;
|
ConfigChannel.max_chans_per_user = 15;
|
||||||
|
ConfigChannel.max_chans_per_user_large = 60;
|
||||||
ConfigChannel.max_bans = 25;
|
ConfigChannel.max_bans = 25;
|
||||||
ConfigChannel.max_bans_large = 500;
|
ConfigChannel.max_bans_large = 500;
|
||||||
ConfigChannel.only_ascii_channels = NO;
|
ConfigChannel.only_ascii_channels = NO;
|
||||||
|
|
|
@ -868,6 +868,12 @@ report_and_set_user_flags(struct Client *source_p, struct ConfItem *aconf)
|
||||||
SetExemptShide(source_p);
|
SetExemptShide(source_p);
|
||||||
sendto_one_notice(source_p, ":*** You are exempt from serverhiding");
|
sendto_one_notice(source_p, ":*** You are exempt from serverhiding");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(IsConfExtendChans(aconf))
|
||||||
|
{
|
||||||
|
SetExtendChans(source_p);
|
||||||
|
sendto_one_notice(source_p, ":*** You are exempt from normal channel limits");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1309,6 +1315,7 @@ oper_up(struct Client *source_p, struct oper_conf *oper_p)
|
||||||
|
|
||||||
Count.oper++;
|
Count.oper++;
|
||||||
|
|
||||||
|
SetExtendChans(source_p);
|
||||||
SetExemptKline(source_p);
|
SetExemptKline(source_p);
|
||||||
|
|
||||||
source_p->flags2 |= oper_p->flags;
|
source_p->flags2 |= oper_p->flags;
|
||||||
|
|
|
@ -278,9 +278,9 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
||||||
|
|
||||||
if((rb_dlink_list_length(&source_p->user->channel) >=
|
if((rb_dlink_list_length(&source_p->user->channel) >=
|
||||||
(unsigned long) ConfigChannel.max_chans_per_user) &&
|
(unsigned long) ConfigChannel.max_chans_per_user) &&
|
||||||
(!IsOper(source_p) ||
|
(!IsExtendChans(source_p) ||
|
||||||
(rb_dlink_list_length(&source_p->user->channel) >=
|
(rb_dlink_list_length(&source_p->user->channel) >=
|
||||||
(unsigned long) ConfigChannel.max_chans_per_user * 3)))
|
(unsigned long) ConfigChannel.max_chans_per_user_large)))
|
||||||
{
|
{
|
||||||
sendto_one(source_p, form_str(ERR_TOOMANYCHANNELS),
|
sendto_one(source_p, form_str(ERR_TOOMANYCHANNELS),
|
||||||
me.name, source_p->name, name);
|
me.name, source_p->name, name);
|
||||||
|
|
|
@ -584,6 +584,12 @@ static struct InfoStruct info_table[] = {
|
||||||
&ConfigChannel.max_chans_per_user,
|
&ConfigChannel.max_chans_per_user,
|
||||||
"Maximum number of channels a user can join",
|
"Maximum number of channels a user can join",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"max_chans_per_user_large",
|
||||||
|
OUTPUT_DECIMAL,
|
||||||
|
&ConfigChannel.max_chans_per_user_large,
|
||||||
|
"Maximum extended number of channels a user can join",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"no_create_on_split",
|
"no_create_on_split",
|
||||||
OUTPUT_BOOLEAN_YN,
|
OUTPUT_BOOLEAN_YN,
|
||||||
|
|
|
@ -69,6 +69,7 @@ static struct mode_table auth_client_table[] = {
|
||||||
{"spambot_exempt", FLAGS2_EXEMPTSPAMBOT },
|
{"spambot_exempt", FLAGS2_EXEMPTSPAMBOT },
|
||||||
{"shide_exempt", FLAGS2_EXEMPTSHIDE },
|
{"shide_exempt", FLAGS2_EXEMPTSHIDE },
|
||||||
{"jupe_exempt", FLAGS2_EXEMPTJUPE },
|
{"jupe_exempt", FLAGS2_EXEMPTJUPE },
|
||||||
|
{"extend_chans", FLAGS2_EXTENDCHANS },
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue