Removing glines

This commit is contained in:
Valery Yatsko 2008-04-11 18:47:03 +04:00
parent 14485efa7f
commit 170703fe3a
43 changed files with 31 additions and 1475 deletions

3
TODO
View file

@ -33,11 +33,10 @@
this will help us making support for native characters sets/slashes in host etc
[F] auth checker module
[F] resolver module
[ ] Remove glines entirely
[x] Remove glines entirely
[ ] other stuff
[?] internally split out +o/+v "ranks" into a series of permissions. this could allow for configure-defined
special access levels, halfops, etc. (would need to match globally, somehow. extra SVINFO param?)
[?] somehow hide channel operators like ircnet can do?
[x] merge m_join.c and m_sjoin.c in one module (same functions, done in ratbox3)
[ ] merge s_gline.c and m_gline.c in one module (for pretty look, done in ratbox3)
[x] create chmode.h and put there all declarations of chm_* - this will make some modules clean

View file

@ -81,7 +81,6 @@ log {
fname_operlog = "logs/operlog";
#fname_foperlog = "logs/foperlog";
fname_serverlog = "logs/serverlog";
fname_glinelog = "logs/glinelog";
#fname_klinelog = "logs/klinelog";
fname_killlog = "logs/killlog";
fname_operspylog = "logs/operspylog";
@ -164,7 +163,6 @@ auth {
* exceed_limit (old > flag) | allow user to exceed class user limits
* kline_exempt (old ^ flag) | exempt this user from k/g/xlines&dnsbls
* dnsbl_exempt | exempt this user from dnsbls
* gline_exempt (old _ flag) | exempt this user from glines
* spambot_exempt | exempt this user from spambot checks
* shide_exempt | exempt this user from serverhiding
* jupe_exempt | exempt this user from generating
@ -234,7 +232,6 @@ operator "god" {
* remote: allows remote SQUIT and CONNECT (OLD 'R' flag)
* kline: allows KLINE and DLINE (OLD 'K' flag)
* unkline: allows UNKLINE and UNDLINE (OLD 'U' flag)
* gline: allows GLINE (OLD 'G' flag)
* nick_changes: allows oper to see nickchanges (OLD 'N' flag)
* via snomask +n
* rehash: allows oper to REHASH config (OLD 'H' flag)
@ -254,7 +251,7 @@ operator "god" {
* remoteban: allows remote kline etc [DEFAULT]
* mass_notice: allows sending wallops and mass notices [DEFAULT]
*/
flags = global_kill, remote, kline, unkline, gline,
flags = global_kill, remote, kline, unkline,
die, rehash, admin, xline, operwall;
};
@ -452,9 +449,6 @@ general {
connect_timeout = 30 seconds;
disable_auth = no;
no_oper_flood = yes;
glines = no;
gline_time = 1 day;
gline_min_cidr = 16;
max_targets = 4;
client_flood = 20;
use_whois_actually = no;

View file

@ -13,14 +13,6 @@ Where token is one of:
O = remote oper, local target
S = server
fname_glinelog
--------------
<date> <time> <token> <src nick> <src username> <src host> <src server> <user> <host> <reason>
Where token is one of:
R = gline request
T = gline trigger, always by previous three requests
fname_klinelog
--------------
<date> <time> [U]<token> <source> <time> <info> <reason>[|<oper_reason>]

View file

@ -164,7 +164,6 @@ log {
* - operlog: /oper usage
* - foperlog: failed /oper usage
* - serverlog: server connects/disconnects
* - glinelog: glines
* - klinelog: klines, etc
* - killlog: kills
* - operspylog: operspy usage
@ -175,7 +174,6 @@ log {
fname_operlog = "logs/operlog";
#fname_foperlog = "logs/foperlog";
fname_serverlog = "logs/serverlog";
fname_glinelog = "logs/glinelog";
#fname_klinelog = "logs/klinelog";
fname_killlog = "logs/killlog";
fname_operspylog = "logs/operspylog";
@ -319,7 +317,6 @@ auth {
* exceed_limit (old > flag) | allow user to exceed class user limits
* kline_exempt (old ^ flag) | exempt this user from k/g/xlines&dnsbls
* dnsbl_exempt | exempt this user from dnsbls
* gline_exempt (old _ flag) | exempt this user from glines
* spambot_exempt | exempt this user from spambot checks
* shide_exempt | exempt this user from serverhiding
* jupe_exempt | exempt this user from generating
@ -410,7 +407,6 @@ operator "god" {
* remote: allows remote SQUIT and CONNECT (OLD 'R' flag)
* kline: allows KLINE and DLINE (OLD 'K' flag)
* unkline: allows UNKLINE and UNDLINE (OLD 'U' flag)
* gline: allows GLINE (OLD 'G' flag)
* nick_changes: allows oper to see nickchanges (OLD 'N' flag)
* via snomask +n
* rehash: allows oper to REHASH config (OLD 'H' flag)
@ -430,7 +426,7 @@ operator "god" {
* remoteban: allows remote kline etc [DEFAULT]
* mass_notice: allows sending wallops and mass notices [DEFAULT]
*/
flags = global_kill, remote, kline, unkline, gline,
flags = global_kill, remote, kline, unkline,
die, rehash, admin, xline, operwall;
};
@ -947,7 +943,7 @@ general {
*/
kline_delay = 0 seconds;
/* kline reason: show the user the reason why they are k/d/glined
/* kline reason: show the user the reason why they are k/dlined
* on exit. may give away who set k/dline when set via tcm.
*/
kline_with_reason = yes;
@ -1059,17 +1055,6 @@ general {
/* no oper flood: increase flood limits for opers. */
no_oper_flood = yes;
/* glines: enable glines, network wide temp klines */
glines = no;
/* gline time: the amount of time a gline will remain before expiring */
gline_time = 1 day;
/* gline_min_cidr: If using a CIDR gline, the minimum length the
* mask must be
*/
gline_min_cidr = 16;
/* REMOVE ME. The following line checks you've been reading. */
havent_read_conf = yes;

View file

@ -17,10 +17,6 @@
+----------------------------+
| 'e' | USE_EXCEPT |
|------+---------------------|
| 'g' | NO_FAKE_GLINES |
|------+---------------------|
| 'G' | GLINES |
|------+---------------------|
| 'H' | HUB |
|------+---------------------|
| 'I' | USE_INVEX |

View file

@ -42,8 +42,6 @@
<arg>DNS</arg>
<arg>MOTD</arg>
<arg>OMOTD</arg>
<arg>GLINES</arg>
<arg>PGLINES</arg>
<arg>TKLINES</arg>
<arg>TDLINES</arg>
<arg>TXLINES</arg>
@ -83,18 +81,6 @@
<para>Reload the operator MOTD file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>GLINES</term>
<listitem>
<para>Clears G:lines.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>PGLINES</term>
<listitem>
<para>Clears pending G:lines.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>TKLINES</term>
<listitem>
@ -457,46 +443,6 @@
a temporary D:line.
</para>
</sect2>
<sect2>
<title>GLINE</title>
<cmdsynopsis>
<command>GLINE</command>
<group>
<arg choice=plain><replaceable>user</replaceable>@<replaceable>host</replaceable></arg>
<arg choice=plain><replaceable>user</replaceable>@<replaceable>a</replaceable>.<replaceable>b</replaceable>.<replaceable>c</replaceable>.<replaceable>d</replaceable></arg>
</group>
<arg choice=plain>:<replaceable>reason</replaceable></arg>
</cmdsynopsis>
<para>
Attempts to add a network-wide ban for the given mask.
It takes three different opers on three different servers
requesting the same G:line to have it triggered for a configured
time.
</para>
<para>
Once triggered, a G:line is similar to a temporary K:line on
each server. No further propagation or on-disk storage is done.
</para>
<note><para>
This command can be enabled or disabled in the configuration file.
If it is disabled, no oper on the server can issue a G:line and no
G:lined user is banned, but G:lines are still propagated to other
servers which may have G:lines enabled.
</para></note>
</sect2>
<sect2>
<title>UNGLINE</title>
<cmdsynopsis>
<command>UNGLINE</command>
<group>
<arg choice=plain><replaceable>user</replaceable>@<replaceable>host</replaceable></arg>
<arg choice=plain><replaceable>user</replaceable>@<replaceable>a</replaceable>.<replaceable>b</replaceable>.<replaceable>c</replaceable>.<replaceable>d</replaceable></arg>
</group>
</cmdsynopsis>
<para>
Removes the given G:line on this server.
</para>
</sect2>
<sect2>
<title>TESTGECOS</title>
<cmdsynopsis>
@ -898,18 +844,6 @@
<para>Show file descriptors</para>
</listitem>
</varlistentry>
<varlistentry>
<term>g</term>
<listitem>
<para>Show pending glines</para>
</listitem>
</varlistentry>
<varlistentry>
<term>G</term>
<listitem>
<para>Show active glines</para>
</listitem>
</varlistentry>
<varlistentry>
<term>h</term>
<listitem>

View file

@ -22,12 +22,6 @@
Anything from a # to the end of a line is a comment. Blank lines are ignored. C-style comments are also supported.
</para>
</sect1>
<sect1 id="configlines">
<title>Specific blocks and directives</title>
<para>
Not all configuration blocks and directives are listed here, only the most common ones. More blocks and directives will
be documented in later revisions of this manual.
</para>
<sect2>
<title>loadmodule directive</title>
<synopsis>
@ -362,12 +356,6 @@ auth {
<para>Users in this auth{} block are exempted from DNS blacklists, k:lines, g:lines and x:lines.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>gline_exempt (_)</term>
<listitem>
<para>Users in this auth{} block are exempted from g:lines.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>spambot_exempt</term>
<listitem>

View file

@ -43,14 +43,6 @@
or restarting the server.
</para>
</sect2>
<sect2>
<title>gline (G), gline</title>
<para>
This allows using GLINE (network wide temp bans if 3 opers agree).
If unkline privilege is also possessed, allow UNGLINE (remove gline
locally).
</para>
</sect2>
<sect2>
<title>rehash (H), rehash</title>
<para>
@ -143,8 +135,7 @@
<sect2>
<title>unkline (U), unkline</title>
<para>
Allows using UNKLINE and UNDLINE, and if gline privilege is also
possessed, UNGLINE.
Allows using UNKLINE and UNDLINE.
</para>
</sect2>
<sect2>

View file

@ -11,7 +11,6 @@ IE - supports invite exceptions (+I)
EOB - supports end of burst notification (EOB token)
KLN - supports remote KLINE
UNKLN - supports remote UNKLINE
GLN - supports hybrid7-style GLINE (:oper GLINE user host :reason)
HOPS - supports halfops (+h -- %<nick>)
HUB - denotes that the target server is a HUB
AOPS - supports anonymous ops (+a, op hiding/op status hiding)

View file

@ -33,9 +33,8 @@
* Possible flags:
* encrypted - password is encrypted (recommended)
* kline_exempt - k/g lines on the cgiirc ip are ignored
* gline_exempt - glines on the cgiirc ip are ignored
* dlines are checked on the cgiirc ip (of course).
* k/d/g/x lines, auth blocks, user limits, etc are checked using the
* k/d/x lines, auth blocks, user limits, etc are checked using the
* real host/ip.
* The password should be specified unencrypted in webirc_password in
* cgiirc.config
@ -129,7 +128,7 @@ mr_webirc(struct Client *client_p, struct Client *source_p, int parc, const char
del_unknown_ip(source_p);
inetpton_sock(parv[4], (struct sockaddr *)&source_p->localClient->ip);
/* Check dlines now, k/glines will be checked on registration */
/* Check dlines now, klines will be checked on registration */
if((aconf = find_dline((struct sockaddr *)&source_p->localClient->ip,
source_p->localClient->ip.ss_family)))
{

View file

@ -45,7 +45,7 @@ h_gla_client_exit(hook_data_client_exit *hdata)
!strcmp(hdata->comment, ConfigFileEntry.kline_reason))
{
sendto_realops_snomask_from(SNO_GENERAL, L_ALL, source_p->servptr,
"K/D/GLINE active for %s[%s@%s]",
"K/DLINE active for %s[%s@%s]",
source_p->name, source_p->username, source_p->host);
}
}

View file

@ -1,11 +0,0 @@
GLINE <user@host> :[reason]
-- if glines are enabled --
Attempts to add a global IRC-network wide ban on
<user@host> for the reason [reason].
It takes three different opers on three different
servers to do the same GLINE within a short interval,
to have a GLINE triggered for a compiled time of hours.
- Requires Oper Priv: G

View file

@ -4,21 +4,20 @@ ACCEPT ADMIN AWAY CAPAB
CHALLENGE CHANTRACE CLOSE CMODE
CNOTICE CONNECT CPRIVMSG CREDITS
DIE DLINE ERROR ETRACE
GLINE HELP INDEX INFO
INVITE ISON JOIN KICK
KILL KLINE KNOCK LINKS
LIST LOCOPS LUSERS MAP
MASKTRACE MODLIST MODLOAD MODRESTART
MODUNLOAD MOTD NAMES NICK
NOTICE OPER OPERSPY OPERWALL
PART PASS PING PONG
POST PRIVMSG QUIT REHASH
RESTART RESV SCAN SERVER
SET SJOIN SNOMASK SQUIT
STATS SVINFO TESTGECOS TESTLINE
TESTMASK TIME TOPIC TRACE
UHELP UMODE UNDLINE UNGLINE
UNKLINE UNREJECT UNRESV UNXLINE
USER USERHOST USERS VERSION
WALLOPS WHO WHOIS WHOWAS
XLINE
HELP INDEX INFO INVITE
ISON JOIN KICK KILL
KLINE KNOCK LINKS LIST
LOCOPS LUSERS MAP MASKTRACE
MODLIST MODLOAD MODRESTART MODUNLOAD
MOTD NAMES NICK NOTICE
OPER OPERSPY OPERWALL PART
PASS PING PONG POST
PRIVMSG QUIT REHASH RESTART
RESV SCAN SERVER SET
SJOIN SNOMASK SQUIT STATS
SVINFO TESTGECOS TESTLINE TESTMASK
TIME TOPIC TRACE UHELP
UMODE UNDLINE UNKLINE UNREJECT
UNRESV UNXLINE USER USERHOST
USERS VERSION WALLOPS WHO
WHOIS WHOWAS XLINE

View file

@ -6,12 +6,10 @@ ircd.conf file.
[option] can be one of the following:
BANS - Re-reads kline.conf, dline.conf, resv.conf and xline.conf
DNS - Re-read the /etc/resolv.conf file
GLINES - Clears G Lines
HELP - Re-reads help files
MOTD - Re-reads MOTD file
NICKDELAY - Clears delayed nicks
OMOTD - Re-reads Oper MOTD file
PGLINES - Clears pending G Lines
REJECTCACHE - Clears the reject cache
TDLINES - Clears temporary D Lines
TKLINES - Clears temporary K Lines

View file

@ -1,8 +0,0 @@
UNGLINE <user@host>
-- if glines are enabled --
Will attempt to remove gline matching <user@host>
This will only remove the gline from YOUR server, it
does not try to remove it globally.
- Requires Oper Privs: G and U

View file

@ -441,9 +441,8 @@ struct exit_client_hook
/* overflow flags */
/* EARLIER FLAGS ARE IN s_newconf.h */
#define FLAGS2_EXEMPTRESV 0x00400000
#define FLAGS2_EXEMPTGLINE 0x00800000
#define FLAGS2_EXEMPTKLINE 0x01000000
#define FLAGS2_EXEMPTFLOOD 0x02000000
#define FLAGS2_EXEMPTKLINE 0x00800000
#define FLAGS2_EXEMPTFLOOD 0x01000000
#define FLAGS2_IP_SPOOFING 0x10000000
#define FLAGS2_EXEMPTSPAMBOT 0x20000000
#define FLAGS2_EXEMPTSHIDE 0x40000000
@ -537,8 +536,6 @@ struct exit_client_hook
*/
#define IsExemptKline(x) ((x)->flags2 & FLAGS2_EXEMPTKLINE)
#define SetExemptKline(x) ((x)->flags2 |= FLAGS2_EXEMPTKLINE)
#define IsExemptGline(x) ((x)->flags2 & FLAGS2_EXEMPTGLINE)
#define SetExemptGline(x) ((x)->flags2 |= FLAGS2_EXEMPTGLINE)
#define IsExemptFlood(x) ((x)->flags2 & FLAGS2_EXEMPTFLOOD)
#define SetExemptFlood(x) ((x)->flags2 |= FLAGS2_EXEMPTFLOOD)
#define IsExemptSpambot(x) ((x)->flags2 & FLAGS2_EXEMPTSPAMBOT)
@ -573,7 +570,6 @@ struct exit_client_hook
extern void check_banned_lines(void);
extern void check_klines_event(void *unused);
extern void check_klines(void);
extern void check_glines(void);
extern void check_dlines(void);
extern void check_xlines(void);

View file

@ -57,10 +57,6 @@ struct ConfItem *find_dline(struct sockaddr *, int);
(x)->orighost, \
(struct sockaddr *)&(x)->localClient->ip, CONF_KILL,\
(x)->localClient->ip.ss_family, (x)->username))
#define find_gline(x) (find_conf_by_address((x)->host, (x)->sockhost, \
(x)->orighost, \
(struct sockaddr *)&(x)->localClient->ip, CONF_GLINE,\
(x)->localClient->ip.ss_family, (x)->username))
void report_Klines(struct Client *);
void report_auth(struct Client *);

View file

@ -108,7 +108,7 @@
* takes at most 246 bytes (including CRLF and '\0') and together with the
* quit reason should fit in 512 */
#define REASONLEN 260 /* kick/part/quit */
#define BANREASONLEN 390 /* kline/dline/gline */
#define BANREASONLEN 390 /* kline/dline */
#define AWAYLEN TOPICLEN
#define KILLLEN 200 /* with Killed (nick ()) added this should fit in quit */

View file

@ -46,7 +46,6 @@ typedef enum ilogfile
L_SERVER,
L_KILL,
L_KLINE,
L_GLINE,
L_OPERSPY,
L_IOERROR,
LAST_LOGFILE

View file

@ -80,7 +80,6 @@ struct ConfItem
#define CONF_RESV_NICK 0x0200
#define CONF_RESV (CONF_RESV_CHANNEL | CONF_RESV_NICK)
#define CONF_GLINE 0x10000
#define CONF_DLINE 0x20000
#define CONF_EXEMPTDLINE 0x100000
@ -97,7 +96,6 @@ struct ConfItem
#define CONF_FLAGS_SPOOF_IP 0x00000200
#define CONF_FLAGS_SPOOF_NOTICE 0x00000400
#define CONF_FLAGS_REDIR 0x00000800
#define CONF_FLAGS_EXEMPTGLINE 0x00001000
#define CONF_FLAGS_EXEMPTRESV 0x00002000 /* exempt from resvs */
#define CONF_FLAGS_EXEMPTFLOOD 0x00004000
#define CONF_FLAGS_EXEMPTSPAMBOT 0x00008000
@ -120,7 +118,6 @@ struct ConfItem
#define IsNeedIdentd(x) ((x)->flags & CONF_FLAGS_NEED_IDENTD)
#define IsConfExemptKline(x) ((x)->flags & CONF_FLAGS_EXEMPTKLINE)
#define IsConfExemptLimits(x) ((x)->flags & CONF_FLAGS_NOLIMIT)
#define IsConfExemptGline(x) ((x)->flags & CONF_FLAGS_EXEMPTGLINE)
#define IsConfExemptFlood(x) ((x)->flags & CONF_FLAGS_EXEMPTFLOOD)
#define IsConfExemptSpambot(x) ((x)->flags & CONF_FLAGS_EXEMPTSPAMBOT)
#define IsConfExemptShide(x) ((x)->flags & CONF_FLAGS_EXEMPTSHIDE)
@ -163,7 +160,6 @@ struct config_file_entry
char *fname_foperlog;
char *fname_serverlog;
char *fname_killlog;
char *fname_glinelog;
char *fname_klinelog;
char *fname_operspylog;
char *fname_ioerrorlog;
@ -200,10 +196,6 @@ struct config_file_entry
int pace_wait_simple;
int short_motd;
int no_oper_flood;
int glines;
int gline_time;
int gline_min_cidr;
int gline_min_cidr6;
int hide_server;
int hide_spoof_ips;
int hide_error_messages;

View file

@ -1,73 +0,0 @@
/*
* ircd-ratbox: A slightly useful ircd.
* s_gline.h: A header for the gline functions.
*
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
* Copyright (C) 1996-2002 Hybrid Development Team
* Copyright (C) 2002-2004 ircd-ratbox 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
*
* $Id: s_gline.h 6 2005-09-10 01:02:21Z nenolod $
*/
#ifndef INCLUDED_s_gline_h
#define INCLUDED_s_gline_h
#include "config.h"
#include "ircd_defs.h"
struct Client;
struct ConfItem;
extern struct ConfItem *find_is_glined(const char *host, const char *name);
extern void cleanup_glines(void *unused);
extern void add_gline(struct ConfItem *);
typedef struct gline_pending
{
char oper_nick1[NICKLEN + 1];
char oper_user1[USERLEN + 1];
char oper_host1[HOSTLEN + 1];
const char *oper_server1; /* point to scache */
char *reason1;
time_t time_request1;
char oper_nick2[NICKLEN + 1];
char oper_user2[USERLEN + 1];
char oper_host2[HOSTLEN + 1];
const char *oper_server2; /* point to scache */
char *reason2;
time_t time_request2;
time_t last_gline_time; /* for expiring entry */
char user[USERLEN + 1];
char host[HOSTLEN + 1];
}
gline_pending_t;
/* how long a pending G line can be around
* 10 minutes should be plenty
*/
#define GLINE_PENDING_EXPIRE 600
#define CLEANUP_GLINES_TIME 300
rb_dlink_list pending_glines;
extern rb_dlink_list glines;
#endif

View file

@ -139,7 +139,6 @@ extern void cluster_generic(struct Client *, const char *, int cltype,
#define OPER_LOCKILL 0x00008
#define OPER_GLOBKILL 0x00010
#define OPER_REMOTE 0x00020
#define OPER_GLINE 0x00040
#define OPER_XLINE 0x00080
#define OPER_RESV 0x00100
#define OPER_NICKS 0x00200
@ -155,7 +154,7 @@ extern void cluster_generic(struct Client *, const char *, int cltype,
/* 0x400000 and above are in client.h */
#define OPER_FLAGS (OPER_KLINE|OPER_UNKLINE|OPER_LOCKILL|OPER_GLOBKILL|\
OPER_REMOTE|OPER_GLINE|OPER_XLINE|OPER_RESV|\
OPER_REMOTE|OPER_XLINE|OPER_RESV|\
OPER_NICKS|OPER_REHASH|OPER_DIE|OPER_ADMIN|\
OPER_HADMIN|OPER_OPERWALL|OPER_INVIS|OPER_SPY|\
OPER_REMOTEBAN|OPER_MASSNOTICE)
@ -166,7 +165,6 @@ extern void cluster_generic(struct Client *, const char *, int cltype,
#define IsOperLocalKill(x) ((x)->flags2 & OPER_LOCKILL)
#define IsOperRemote(x) ((x)->flags2 & OPER_REMOTE)
#define IsOperUnkline(x) ((x)->flags2 & OPER_UNKLINE)
#define IsOperGline(x) ((x)->flags2 & OPER_GLINE)
#define IsOperN(x) ((x)->flags2 & OPER_NICKS)
#define IsOperK(x) ((x)->flags2 & OPER_KLINE)
#define IsOperXline(x) ((x)->flags2 & OPER_XLINE)

View file

@ -59,7 +59,6 @@ struct Capability
#define CAP_CHW 0x00008 /* Can do channel wall @# */
#define CAP_IE 0x00010 /* Can do invite exceptions */
#define CAP_KLN 0x00040 /* Can do KLINE message */
#define CAP_GLN 0x00080 /* Can do GLINE message */
#define CAP_ZIP 0x00100 /* Can do ZIPlinks */
#define CAP_KNOCK 0x00400 /* supports KNOCK */
#define CAP_TB 0x00800 /* supports TBURST */

View file

@ -63,7 +63,6 @@ TSRCS = \
m_dline.c \
m_encap.c \
m_etrace.c \
m_gline.c \
m_help.c \
m_info.c \
m_invite.c \

View file

@ -1,730 +0,0 @@
/*
* ircd-ratbox: A slightly useful ircd.
* m_gline.c: Votes towards globally banning a mask.
*
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
* Copyright (C) 1996-2002 Hybrid Development Team
* Copyright (C) 2002-2005 ircd-ratbox 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
*
* $Id: m_gline.c 3225 2007-03-04 23:42:55Z jilles $
*/
#include "stdinc.h"
#include "s_gline.h"
#include "channel.h"
#include "client.h"
#include "common.h"
#include "config.h"
#include "irc_string.h"
#include "sprintf_irc.h"
#include "ircd.h"
#include "hostmask.h"
#include "numeric.h"
#include "s_conf.h"
#include "s_newconf.h"
#include "scache.h"
#include "send.h"
#include "msg.h"
#include "s_serv.h"
#include "hash.h"
#include "parse.h"
#include "modules.h"
#include "logger.h"
#include "reject.h"
static int mo_gline(struct Client *, struct Client *, int, const char **);
static int mc_gline(struct Client *, struct Client *, int, const char **);
static int ms_gline(struct Client *, struct Client *, int, const char **);
static int mo_ungline(struct Client *, struct Client *, int, const char **);
struct Message gline_msgtab = {
"GLINE", 0, 0, 0, MFLG_SLOW,
{mg_unreg, mg_not_oper, {mc_gline, 3}, {ms_gline, 7}, mg_ignore, {mo_gline, 3}}
};
struct Message ungline_msgtab = {
"UNGLINE", 0, 0, 0, MFLG_SLOW,
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_ungline, 2}}
};
mapi_clist_av1 gline_clist[] = { &gline_msgtab, &ungline_msgtab, NULL };
DECLARE_MODULE_AV1(gline, NULL, NULL, gline_clist, NULL, NULL, "$Revision: 3225 $");
static int majority_gline(struct Client *source_p, const char *user,
const char *host, const char *reason);
static void set_local_gline(struct Client *source_p, const char *user,
const char *host, const char *reason);
static int check_wild_gline(const char *, const char *);
static int invalid_gline(struct Client *, const char *, const char *, char *);
static int remove_temp_gline(const char *, const char *);
/* mo_gline()
*
* inputs - The usual for a m_ function
* output -
* side effects - place a gline if 3 opers agree
*/
static int
mo_gline(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
const char *user = NULL;
char *host = NULL; /* user and host of GLINE "victim" */
char *reason = NULL; /* reason for "victims" demise */
char splat[] = "*";
char *ptr;
if(!ConfigFileEntry.glines)
{
sendto_one_notice(source_p, ":GLINE disabled, perhaps you want a clustered or remote KLINE?");
return 0;
}
if(!IsOperGline(source_p))
{
sendto_one(source_p, form_str(ERR_NOPRIVS),
me.name, source_p->name, "gline");
return 0;
}
host = strchr(parv[1], '@');
/* specific user@host */
if(host != NULL)
{
user = parv[1];
*(host++) = '\0';
/* gline for "@host", use *@host */
if(*user == '\0')
user = splat;
}
/* just a host? */
else
{
/* ok, its not a host.. abort */
if(strchr(parv[1], '.') == NULL)
{
sendto_one_notice(source_p, ":Invalid parameters");
return 0;
}
user = splat;
host = LOCAL_COPY(parv[1]);
}
reason = LOCAL_COPY(parv[2]);
if(invalid_gline(source_p, user, host, reason))
return 0;
/* Not enough non-wild characters were found, assume they are trying to gline *@*. */
if(check_wild_gline(user, host))
{
if(MyClient(source_p))
sendto_one_notice(source_p,
":Please include at least %d non-wildcard characters with the user@host",
ConfigFileEntry.min_nonwildcard);
return 0;
}
if((ptr = strchr(host, '/')) != NULL)
{
int bitlen;
bitlen = strtol(++ptr, NULL, 10);
/* ipv4? */
if(strchr(host, ':') == NULL)
{
if(bitlen < ConfigFileEntry.gline_min_cidr)
{
sendto_one_notice(source_p, ":Cannot set G-Lines with cidr length < %d",
ConfigFileEntry.gline_min_cidr);
return 0;
}
}
/* ipv6 */
else if(bitlen < ConfigFileEntry.gline_min_cidr6)
{
sendto_one_notice(source_p, ":Cannot set G-Lines with cidr length < %d",
ConfigFileEntry.gline_min_cidr6);
return 0;
}
}
/* inform users about the gline before we call majority_gline()
* so already voted comes below gline request --fl
*/
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s!%s@%s on %s is requesting gline for [%s@%s] [%s]",
source_p->name, source_p->username,
source_p->host, me.name, user, host, reason);
ilog(L_GLINE, "R %s %s %s %s %s %s %s",
source_p->name, source_p->username, source_p->host,
source_p->servptr->name, user, host, reason);
/* If at least 3 opers agree this user should be G lined then do it */
majority_gline(source_p, user, host, reason);
/* 4 param version for hyb-7 servers */
sendto_server(NULL, NULL, CAP_GLN|CAP_TS6, NOCAPS,
":%s GLINE %s %s :%s",
use_id(source_p), user, host, reason);
sendto_server(NULL, NULL, CAP_GLN, CAP_TS6,
":%s GLINE %s %s :%s",
source_p->name, user, host, reason);
/* 8 param for hyb-6 */
sendto_server(NULL, NULL, NOCAPS, CAP_GLN,
":%s GLINE %s %s %s %s %s %s :%s",
me.name, source_p->name, source_p->username,
source_p->host, source_p->servptr->name,
user, host, reason);
return 0;
}
/* mc_gline()
*/
static int
mc_gline(struct Client *client_p, struct Client *source_p,
int parc, const char *parv[])
{
struct Client *acptr;
const char *user;
const char *host;
char *reason;
char *ptr;
/* hyb6 allows empty gline reasons */
if(parc < 4 || EmptyString(parv[3]))
return 0;
acptr = source_p;
user = parv[1];
host = parv[2];
reason = LOCAL_COPY(parv[3]);
if(invalid_gline(acptr, user, host, reason))
return 0;
sendto_server(client_p, NULL, CAP_GLN|CAP_TS6, NOCAPS,
":%s GLINE %s %s :%s",
use_id(acptr), user, host, reason);
sendto_server(client_p, NULL, CAP_GLN, CAP_TS6,
":%s GLINE %s %s :%s",
acptr->name, user, host, reason);
sendto_server(client_p, NULL, NOCAPS, CAP_GLN,
":%s GLINE %s %s %s %s %s %s :%s",
acptr->servptr->name, acptr->name,
acptr->username, acptr->host,
acptr->servptr->name, user, host, reason);
if(!ConfigFileEntry.glines)
return 0;
/* check theres enough non-wildcard chars */
if(check_wild_gline(user, host))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s!%s@%s on %s is requesting a gline without "
"%d non-wildcard characters for [%s@%s] [%s]",
acptr->name, acptr->username,
acptr->host, acptr->servptr->name,
ConfigFileEntry.min_nonwildcard,
user, host, reason);
return 0;
}
if((ptr = strchr(host, '/')) != NULL)
{
int bitlen;
bitlen = strtol(++ptr, NULL, 10);
/* ipv4? */
if(strchr(host, ':') == NULL)
{
if(bitlen < ConfigFileEntry.gline_min_cidr)
{
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s!%s@%s on %s is requesting a "
"gline with a cidr mask < %d for [%s@%s] [%s]",
acptr->name, acptr->username, acptr->host,
acptr->servptr->name,
ConfigFileEntry.gline_min_cidr,
user, host, reason);
return 0;
}
}
/* ipv6 */
else if(bitlen < ConfigFileEntry.gline_min_cidr6)
{
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s!%s@%s on %s is requesting a "
"gline with a cidr mask < %d for [%s@%s] [%s]",
acptr->name, acptr->username, acptr->host,
acptr->servptr->name,
ConfigFileEntry.gline_min_cidr6,
user, host, reason);
return 0;
}
}
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s!%s@%s on %s is requesting gline for [%s@%s] [%s]",
acptr->name, acptr->username, acptr->host,
acptr->servptr->name, user, host, reason);
ilog(L_GLINE, "R %s %s %s %s %s %s %s",
source_p->name, source_p->username, source_p->host,
source_p->servptr->name, user, host, reason);
/* If at least 3 opers agree this user should be G lined then do it */
majority_gline(acptr, user, host, reason);
return 0;
}
/* ms_gline()
*
* inputs - The usual for a m_ function
* output -
* side effects - attempts to place a gline, if 3 opers agree
*/
static int
ms_gline(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Client *acptr;
const char *user;
const char *host;
char *reason;
/* hyb6 allows empty gline reasons */
if(parc < 8 || EmptyString(parv[7]))
return 0;
/* client doesnt exist.. someones messing */
if((acptr = find_client(parv[1])) == NULL)
return 0;
/* client that sent the gline, isnt on the server that sent
* the gline out. somethings fucked.
*/
if(acptr->servptr != source_p)
return 0;
user = parv[5];
host = parv[6];
reason = LOCAL_COPY(parv[7]);
if(invalid_gline(acptr, user, host, reason))
return 0;
sendto_server(client_p, NULL, CAP_GLN|CAP_TS6, NOCAPS,
":%s GLINE %s %s :%s",
use_id(acptr), user, host, reason);
sendto_server(client_p, NULL, CAP_GLN, CAP_TS6,
":%s GLINE %s %s :%s",
acptr->name, user, host, reason);
sendto_server(client_p, NULL, NOCAPS, CAP_GLN,
":%s GLINE %s %s %s %s %s %s :%s",
acptr->servptr->name, acptr->name,
acptr->username, acptr->host,
acptr->servptr->name, user, host, reason);
if(!ConfigFileEntry.glines)
return 0;
/* check theres enough non-wildcard chars */
if(check_wild_gline(user, host))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s!%s@%s on %s is requesting a gline without "
"%d non-wildcard characters for [%s@%s] [%s]",
acptr->name, acptr->username,
acptr->host, acptr->servptr->name,
ConfigFileEntry.min_nonwildcard,
user, host, reason);
return 0;
}
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s!%s@%s on %s is requesting gline for [%s@%s] [%s]",
acptr->name, acptr->username, acptr->host,
acptr->servptr->name, user, host, reason);
ilog(L_GLINE, "R %s %s %s %s %s %s %s",
acptr->name, acptr->username, acptr->host,
acptr->servptr->name, user, host, reason);
/* If at least 3 opers agree this user should be G lined then do it */
majority_gline(acptr, user, host, reason);
return 0;
}
/* mo_ungline()
*
* parv[0] = sender nick
* parv[1] = gline to remove
*/
static int
mo_ungline(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
const char *user;
char *h = LOCAL_COPY(parv[1]);
char *host;
char splat[] = "*";
if(!ConfigFileEntry.glines)
{
sendto_one_notice(source_p, ":UNGLINE disabled, perhaps you want UNKLINE?");
return 0;
}
if(!IsOperUnkline(source_p) || !IsOperGline(source_p))
{
sendto_one(source_p, form_str(ERR_NOPRIVS),
me.name, source_p->name, "unkline");
return 0;
}
if((host = strchr(h, '@')) || *h == '*')
{
/* Explicit user@host mask given */
if(host)
{
*host++ = '\0';
/* check for @host */
if(*h)
user = h;
else
user = splat;
if(!*host)
host = splat;
}
else
{
user = splat;
host = h;
}
}
else
{
sendto_one_notice(source_p, ":Invalid parameters");
return 0;
}
if(remove_temp_gline(user, host))
{
sendto_one_notice(source_p, ":Un-glined [%s@%s]", user, host);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s has removed the G-Line for: [%s@%s]",
get_oper_name(source_p), user, host);
ilog(L_GLINE, "U %s %s %s %s %s %s",
source_p->name, source_p->username, source_p->host,
source_p->servptr->name, user, host);
}
else
{
sendto_one_notice(source_p, ":No G-Line for %s@%s", user, host);
}
return 0;
}
/*
* check_wild_gline
*
* inputs - user, host of gline
* output - 1 if not enough non-wildchar char's, 0 if ok
* side effects - NONE
*/
static int
check_wild_gline(const char *user, const char *host)
{
const char *p;
char tmpch;
int nonwild;
nonwild = 0;
p = user;
while ((tmpch = *p++))
{
if(!IsKWildChar(tmpch))
{
/* enough of them, break */
if(++nonwild >= ConfigFileEntry.min_nonwildcard)
break;
}
}
if(nonwild < ConfigFileEntry.min_nonwildcard)
{
/* user doesnt, try host */
p = host;
while ((tmpch = *p++))
{
if(!IsKWildChar(tmpch))
if(++nonwild >= ConfigFileEntry.min_nonwildcard)
break;
}
}
if(nonwild < ConfigFileEntry.min_nonwildcard)
return 1;
else
return 0;
}
/* invalid_gline
*
* inputs - pointer to source client, ident, host and reason
* outputs - 1 if invalid, 0 if valid
* side effects -
*/
static int
invalid_gline(struct Client *source_p, const char *luser,
const char *lhost, char *lreason)
{
if(strchr(luser, '!'))
{
sendto_one_notice(source_p, ":Invalid character '!' in gline");
return 1;
}
if(strlen(lreason) > BANREASONLEN)
lreason[BANREASONLEN] = '\0';
return 0;
}
/*
* set_local_gline
*
* inputs - pointer to oper nick/username/host/server,
* victim user/host and reason
* output - NONE
* side effects -
*/
static void
set_local_gline(struct Client *source_p, const char *user,
const char *host, const char *reason)
{
char buffer[IRCD_BUFSIZE];
struct ConfItem *aconf;
const char *current_date;
char *my_reason;
char *oper_reason;
current_date = smalldate();
my_reason = LOCAL_COPY(reason);
aconf = make_conf();
aconf->status = CONF_GLINE;
aconf->flags |= CONF_FLAGS_TEMPORARY;
if(strlen(my_reason) > BANREASONLEN)
my_reason[BANREASONLEN-1] = '\0';
if((oper_reason = strchr(my_reason, '|')) != NULL)
{
*oper_reason = '\0';
oper_reason++;
if(!EmptyString(oper_reason))
aconf->spasswd = rb_strdup(oper_reason);
}
rb_snprintf(buffer, sizeof(buffer), "%s (%s)", reason, current_date);
aconf->passwd = rb_strdup(buffer);
aconf->user = rb_strdup(user);
aconf->host = rb_strdup(host);
aconf->hold = rb_current_time() + ConfigFileEntry.gline_time;
add_gline(aconf);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"%s!%s@%s on %s has triggered gline for [%s@%s] [%s]",
source_p->name, source_p->username,
source_p->host, source_p->servptr->name,
user, host, reason);
ilog(L_GLINE, "T %s %s %s %s %s %s %s",
source_p->name, source_p->username, source_p->host,
source_p->servptr->name, user, host, reason);
check_glines();
}
/* majority_gline()
*
* input - client doing gline, user, host and reason of gline
* output - YES if there are 3 different opers/servers agree, else NO
* side effects -
*/
static int
majority_gline(struct Client *source_p, const char *user,
const char *host, const char *reason)
{
rb_dlink_node *pending_node;
struct gline_pending *pending;
/* to avoid desync.. --fl */
cleanup_glines(NULL);
/* if its already glined, why bother? :) -- fl_ */
if(find_is_glined(host, user))
return NO;
RB_DLINK_FOREACH(pending_node, pending_glines.head)
{
pending = pending_node->data;
if((irccmp(pending->user, user) == 0) &&
(irccmp(pending->host, host) == 0))
{
/* check oper or server hasnt already voted */
if(((irccmp(pending->oper_user1, source_p->username) == 0) ||
(irccmp(pending->oper_host1, source_p->host) == 0)))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL, "oper has already voted");
return NO;
}
else if(irccmp(pending->oper_server1, source_p->servptr->name) == 0)
{
sendto_realops_snomask(SNO_GENERAL, L_ALL, "server has already voted");
return NO;
}
if(pending->oper_user2[0] != '\0')
{
/* if two other opers on two different servers have voted yes */
if(((irccmp(pending->oper_user2, source_p->username) == 0) ||
(irccmp(pending->oper_host2, source_p->host) == 0)))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"oper has already voted");
return NO;
}
else if(irccmp(pending->oper_server2, source_p->servptr->name) == 0)
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"server has already voted");
return NO;
}
/* trigger the gline using the original reason --fl */
set_local_gline(source_p, user, host,
pending->reason1);
cleanup_glines(NULL);
return YES;
}
else
{
strlcpy(pending->oper_nick2, source_p->name,
sizeof(pending->oper_nick2));
strlcpy(pending->oper_user2, source_p->username,
sizeof(pending->oper_user2));
strlcpy(pending->oper_host2, source_p->host,
sizeof(pending->oper_host2));
pending->reason2 = rb_strdup(reason);
pending->oper_server2 = scache_get_name(source_p->servptr->serv->nameinfo);
pending->last_gline_time = rb_current_time();
pending->time_request2 = rb_current_time();
return NO;
}
}
}
/* no pending gline, create a new one */
pending = (struct gline_pending *)
rb_malloc(sizeof(struct gline_pending));
strlcpy(pending->oper_nick1, source_p->name,
sizeof(pending->oper_nick1));
strlcpy(pending->oper_user1, source_p->username,
sizeof(pending->oper_user1));
strlcpy(pending->oper_host1, source_p->host,
sizeof(pending->oper_host1));
pending->oper_server1 = scache_get_name(source_p->servptr->serv->nameinfo);
strlcpy(pending->user, user, sizeof(pending->user));
strlcpy(pending->host, host, sizeof(pending->host));
pending->reason1 = rb_strdup(reason);
pending->reason2 = NULL;
pending->last_gline_time = rb_current_time();
pending->time_request1 = rb_current_time();
rb_dlinkAddAlloc(pending, &pending_glines);
return NO;
}
/* remove_temp_gline()
*
* inputs - username, hostname to ungline
* outputs -
* side effects - tries to ungline anything that matches
*/
static int
remove_temp_gline(const char *user, const char *host)
{
struct ConfItem *aconf;
rb_dlink_node *ptr;
struct rb_sockaddr_storage addr, caddr;
int bits, cbits;
int mtype, gtype;
mtype = parse_netmask(host, (struct sockaddr *)&addr, &bits);
RB_DLINK_FOREACH(ptr, glines.head)
{
aconf = ptr->data;
gtype = parse_netmask(aconf->host, (struct sockaddr *)&caddr, &cbits);
if(gtype != mtype || (user && irccmp(user, aconf->user)))
continue;
if(gtype == HM_HOST)
{
if(irccmp(aconf->host, host))
continue;
}
else if(bits != cbits ||
!comp_with_mask_sock((struct sockaddr *)&addr,
(struct sockaddr *)&caddr, bits))
continue;
rb_dlinkDestroy(ptr, &glines);
remove_reject_mask(aconf->user, aconf->host);
delete_one_address_conf(aconf->host, aconf);
return YES;
}
return NO;
}

View file

@ -218,12 +218,6 @@ static struct InfoStruct info_table[] = {
&ConfigFileEntry.fname_klinelog,
"KLINE etc log file"
},
{
"fname_glinelog",
OUTPUT_STRING,
&ConfigFileEntry.fname_glinelog,
"GLINE log file"
},
{
"fname_operspylog",
OUTPUT_STRING,
@ -236,30 +230,6 @@ static struct InfoStruct info_table[] = {
&ConfigFileEntry.fname_ioerrorlog,
"IO error log file"
},
{
"glines",
OUTPUT_BOOLEAN,
&ConfigFileEntry.glines,
"G-line (network-wide K-line) support"
},
{
"gline_time",
OUTPUT_DECIMAL,
&ConfigFileEntry.gline_time,
"Expiry time for G-lines"
},
{
"gline_min_cidr",
OUTPUT_DECIMAL,
&ConfigFileEntry.gline_min_cidr,
"Minimum CIDR bitlen for ipv4 glines"
},
{
"gline_min_cidr6",
OUTPUT_DECIMAL,
&ConfigFileEntry.gline_min_cidr6,
"Minimum CIDR bitlen for ipv6 glines"
},
{
"global_snotices",
OUTPUT_BOOLEAN_YN,

View file

@ -67,7 +67,6 @@ static struct mode_table oper_table[] = {
{"remote", OPER_REMOTE },
{"kline", OPER_KLINE },
{"unkline", OPER_UNKLINE },
{"gline", OPER_GLINE },
{"nick_changes", OPER_NICKS },
{"rehash", OPER_REHASH },
{"die", OPER_DIE },
@ -86,7 +85,6 @@ static struct mode_table oper_table[] = {
/* there is no such table like this anywhere else */
static struct mode_table auth_client_table[] = {
{"resv_exempt", FLAGS2_EXEMPTRESV },
{"gline_exempt", FLAGS2_EXEMPTGLINE },
{"kline_exempt", FLAGS2_EXEMPTKLINE },
{"flood_exempt", FLAGS2_EXEMPTFLOOD },
{"spambot_exempt", FLAGS2_EXEMPTSPAMBOT },

View file

@ -30,7 +30,6 @@
#include "common.h"
#include "irc_string.h"
#include "ircd.h"
#include "s_gline.h"
#include "s_serv.h"
#include "numeric.h"
#include "res.h"
@ -104,45 +103,6 @@ rehash_omotd(struct Client *source_p)
oper_motd = cache_file(OPATH, "opers.motd", 0);
}
static void
rehash_glines(struct Client *source_p)
{
struct ConfItem *aconf;
rb_dlink_node *ptr, *next_ptr;
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing G-lines",
get_oper_name(source_p));
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, glines.head)
{
aconf = ptr->data;
delete_one_address_conf(aconf->host, aconf);
rb_dlinkDestroy(ptr, &glines);
}
}
static void
rehash_pglines(struct Client *source_p)
{
struct gline_pending *glp_ptr;
rb_dlink_node *ptr;
rb_dlink_node *next_ptr;
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing pending glines",
get_oper_name(source_p));
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, pending_glines.head)
{
glp_ptr = ptr->data;
rb_free(glp_ptr->reason1);
rb_free(glp_ptr->reason2);
rb_free(glp_ptr);
rb_dlinkDestroy(ptr, &pending_glines);
}
}
static void
rehash_tklines(struct Client *source_p)
{
@ -288,8 +248,6 @@ static struct hash_commands rehash_commands[] =
{"DNS", rehash_dns },
{"MOTD", rehash_motd },
{"OMOTD", rehash_omotd },
{"GLINES", rehash_glines },
{"PGLINES", rehash_pglines },
{"TKLINES", rehash_tklines },
{"TDLINES", rehash_tdlines },
{"TXLINES", rehash_txlines },

View file

@ -31,7 +31,6 @@
#include "irc_string.h"
#include "ircd.h" /* me */
#include "listener.h" /* show_ports */
#include "s_gline.h"
#include "msg.h" /* Message */
#include "hostmask.h" /* report_mtrie_conf_links */
#include "numeric.h" /* ERR_xxx */
@ -95,8 +94,6 @@ static void stats_tdeny(struct Client *);
static void stats_deny(struct Client *);
static void stats_exempt(struct Client *);
static void stats_events(struct Client *);
static void stats_glines(struct Client *);
static void stats_pending_glines(struct Client *);
static void stats_hubleaf(struct Client *);
static void stats_auth(struct Client *);
static void stats_tklines(struct Client *);
@ -139,8 +136,6 @@ static struct StatsStruct stats_cmd_table[] = {
{'E', stats_events, 1, 1, },
{'f', stats_comm, 1, 1, },
{'F', stats_comm, 1, 1, },
{'g', stats_pending_glines, 1, 0, },
{'G', stats_glines, 1, 0, },
{'h', stats_hubleaf, 0, 0, },
{'H', stats_hubleaf, 0, 0, },
{'i', stats_auth, 0, 0, },
@ -459,89 +454,6 @@ stats_events (struct Client *source_p)
rb_dump_events(stats_events_cb, source_p);
}
/* stats_pending_glines()
*
* input - client pointer
* output - none
* side effects - client is shown list of pending glines
*/
static void
stats_pending_glines (struct Client *source_p)
{
if(ConfigFileEntry.glines)
{
rb_dlink_node *pending_node;
struct gline_pending *glp_ptr;
char timebuffer[MAX_DATE_STRING];
struct tm *tmptr;
RB_DLINK_FOREACH (pending_node, pending_glines.head)
{
glp_ptr = pending_node->data;
tmptr = localtime (&glp_ptr->time_request1);
strftime (timebuffer, MAX_DATE_STRING, "%Y/%m/%d %H:%M:%S", tmptr);
sendto_one_notice(source_p,
":1) %s!%s@%s on %s requested gline at %s for %s@%s [%s]",
glp_ptr->oper_nick1,
glp_ptr->oper_user1, glp_ptr->oper_host1,
glp_ptr->oper_server1, timebuffer,
glp_ptr->user, glp_ptr->host, glp_ptr->reason1);
if(glp_ptr->oper_nick2[0])
{
tmptr = localtime (&glp_ptr->time_request2);
strftime (timebuffer, MAX_DATE_STRING, "%Y/%m/%d %H:%M:%S", tmptr);
sendto_one_notice(source_p,
":2) %s!%s@%s on %s requested gline at %s for %s@%s [%s]",
glp_ptr->oper_nick2,
glp_ptr->oper_user2, glp_ptr->oper_host2,
glp_ptr->oper_server2, timebuffer,
glp_ptr->user, glp_ptr->host, glp_ptr->reason2);
}
}
if(rb_dlink_list_length (&pending_glines) > 0)
sendto_one_notice(source_p, ":End of Pending G-lines");
}
else
sendto_one_notice(source_p, ":This server does not support G-Lines");
}
/* stats_glines()
*
* input - client pointer
* output - none
* side effects - client is shown list of glines
*/
static void
stats_glines (struct Client *source_p)
{
if(ConfigFileEntry.glines)
{
rb_dlink_node *gline_node;
struct ConfItem *kill_ptr;
RB_DLINK_FOREACH_PREV (gline_node, glines.tail)
{
kill_ptr = gline_node->data;
sendto_one_numeric(source_p, RPL_STATSKLINE,
form_str(RPL_STATSKLINE), 'G',
kill_ptr->host ? kill_ptr->host : "*",
kill_ptr->user ? kill_ptr->user : "*",
kill_ptr->passwd ? kill_ptr->passwd : "No Reason",
kill_ptr->spasswd ? "|" : "",
kill_ptr->spasswd ? kill_ptr->spasswd : "");
}
}
else
sendto_one_notice(source_p, ":This server does not support G-Lines");
}
static void
stats_hubleaf(struct Client *source_p)
{

View file

@ -172,16 +172,6 @@ mo_testline(struct Client *client_p, struct Client *source_p, int parc, const ch
buf, aconf->passwd);
return 0;
}
else if(aconf->status & CONF_GLINE)
{
rb_snprintf(buf, sizeof(buf), "%s@%s",
aconf->user, aconf->host);
sendto_one(source_p, form_str(RPL_TESTLINE),
me.name, source_p->name,
'G', (long) ((aconf->hold - rb_current_time()) / 60),
buf, aconf->passwd);
return 0;
}
}
/* they asked us to check a nick, so hunt for resvs.. */

View file

@ -1,6 +1,6 @@
/*
* m_testmask.c: Shows the number of matching local and global clients
* for a user@host mask, helpful when setting GLINE's
* for a user@host mask
*
* Copyright (C) 2003 by W. Campbell
* Coypright (C) 2004 ircd-ratbox development team

View file

@ -122,10 +122,6 @@ confopts(struct Client *source_p)
if(ConfigChannel.use_except)
*p++ = 'e';
if(ConfigFileEntry.glines)
*p++ = 'g';
*p++ = 'G';
/* might wanna hide this :P */
if(ServerInfo.hub)
*p++ = 'H';

View file

@ -86,7 +86,6 @@ SRCS = \
s_auth.c \
s_conf.c \
s_newconf.c \
s_gline.c \
s_serv.c \
s_user.c \
scache.c \

View file

@ -34,7 +34,6 @@
#include "irc_string.h"
#include "sprintf_irc.h"
#include "ircd.h"
#include "s_gline.h"
#include "numeric.h"
#include "packet.h"
#include "s_auth.h"
@ -444,7 +443,7 @@ notify_banned_client(struct Client *client_p, struct ConfItem *aconf, int ban)
* check_banned_lines
* inputs - NONE
* output - NONE
* side effects - Check all connections for a pending k/d/gline against the
* side effects - Check all connections for a pending k/dline against the
* client, exit the client if found.
*/
void
@ -495,33 +494,6 @@ check_banned_lines(void)
notify_banned_client(client_p, aconf, K_LINED);
continue;
}
else if((aconf = find_gline(client_p)) != NULL)
{
if(IsExemptKline(client_p))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"GLINE over-ruled for %s, client is kline_exempt [%s@%s]",
get_client_name(client_p, HIDE_IP),
aconf->user, aconf->host);
continue;
}
if(IsExemptGline(client_p))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"GLINE over-ruled for %s, client is gline_exempt [%s@%s]",
get_client_name(client_p, HIDE_IP),
aconf->user, aconf->host);
continue;
}
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"GLINE active for %s",
get_client_name(client_p, HIDE_IP));
notify_banned_client(client_p, aconf, G_LINED);
continue;
}
else if((aconf = find_xline(client_p->info, 1)) != NULL)
{
if(IsExemptKline(client_p))
@ -611,55 +583,6 @@ check_klines(void)
}
}
/* check_glines()
*
* inputs -
* outputs -
* side effects - all clients will be checked for glines
*/
void
check_glines(void)
{
struct Client *client_p;
struct ConfItem *aconf;
rb_dlink_node *ptr;
rb_dlink_node *next_ptr;
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
{
client_p = ptr->data;
if(IsMe(client_p) || !IsPerson(client_p))
continue;
if((aconf = find_gline(client_p)) != NULL)
{
if(IsExemptKline(client_p))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"GLINE over-ruled for %s, client is kline_exempt",
get_client_name(client_p, HIDE_IP));
continue;
}
if(IsExemptGline(client_p))
{
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"GLINE over-ruled for %s, client is gline_exempt",
get_client_name(client_p, HIDE_IP));
continue;
}
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"GLINE active for %s",
get_client_name(client_p, HIDE_IP));
notify_banned_client(client_p, aconf, K_LINED);
continue;
}
}
}
/* check_dlines()
*
* inputs -

View file

@ -404,15 +404,6 @@ find_address_conf(const char *host, const char *sockhost, const char *user,
return kconf;
}
/* hunt for a gline */
if(ConfigFileEntry.glines)
{
kconf = find_conf_by_address(host, sockhost, NULL, ip, CONF_GLINE, aftype, user);
if((kconf != NULL) && !IsConfExemptGline(iconf))
return kconf;
}
return iconf;
}
@ -683,8 +674,6 @@ show_iline_prefix(struct Client *sptr, struct ConfItem *aconf, char *name)
*prefix_ptr++ = '=';
if(IsOper(sptr) && IsConfExemptFlood(aconf))
*prefix_ptr++ = '|';
if(IsOper(sptr) && IsConfExemptGline(aconf) && !IsConfExemptKline(aconf))
*prefix_ptr++ = '_';
if(IsOper(sptr) && IsConfExemptDNSBL(aconf) && !IsConfExemptKline(aconf))
*prefix_ptr++ = '$';
if(IsOper(sptr) && IsConfExemptKline(aconf))

View file

@ -37,7 +37,6 @@
#include "irc_string.h"
#include "ircd_signal.h"
#include "sprintf_irc.h"
#include "s_gline.h"
#include "msg.h" /* msgtab */
#include "hostmask.h"
#include "numeric.h"
@ -685,8 +684,6 @@ main(int argc, char *argv[])
ilog(L_MAIN, "Server Ready");
rb_event_addish("cleanup_glines", cleanup_glines, NULL, CLEANUP_GLINES_TIME);
/* We want try_connections to be called as soon as possible now! -- adrian */
/* No, 'cause after a restart it would cause all sorts of nick collides */
/* um. by waiting even longer, that just means we have even *more*

View file

@ -50,7 +50,6 @@ static FILE *log_oper;
static FILE *log_foper;
static FILE *log_server;
static FILE *log_kill;
static FILE *log_gline;
static FILE *log_kline;
static FILE *log_operspy;
static FILE *log_ioerror;
@ -71,7 +70,6 @@ static struct log_struct log_table[LAST_LOGFILE] =
{ &ConfigFileEntry.fname_serverlog, &log_server },
{ &ConfigFileEntry.fname_killlog, &log_kill },
{ &ConfigFileEntry.fname_klinelog, &log_kline },
{ &ConfigFileEntry.fname_glinelog, &log_gline },
{ &ConfigFileEntry.fname_operspylog, &log_operspy },
{ &ConfigFileEntry.fname_ioerrorlog, &log_ioerror }
};

View file

@ -312,7 +312,6 @@ static struct mode_table oper_table[] = {
{"remote", OPER_REMOTE },
{"kline", OPER_KLINE },
{"unkline", OPER_UNKLINE },
{"gline", OPER_GLINE },
{"nick_changes", OPER_NICKS },
{"rehash", OPER_REHASH },
{"die", OPER_DIE },
@ -334,7 +333,6 @@ static struct mode_table auth_table[] = {
{"exceed_limit", CONF_FLAGS_NOLIMIT },
{"dnsbl_exempt", CONF_FLAGS_EXEMPTDNSBL },
{"kline_exempt", CONF_FLAGS_EXEMPTKLINE },
{"gline_exempt", CONF_FLAGS_EXEMPTGLINE },
{"flood_exempt", CONF_FLAGS_EXEMPTFLOOD },
{"spambot_exempt", CONF_FLAGS_EXEMPTSPAMBOT },
{"shide_exempt", CONF_FLAGS_EXEMPTSHIDE },
@ -1943,7 +1941,6 @@ static struct ConfEntry conf_log_table[] =
{ "fname_foperlog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_foperlog },
{ "fname_serverlog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_serverlog },
{ "fname_killlog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_killlog },
{ "fname_glinelog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_glinelog },
{ "fname_klinelog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_klinelog },
{ "fname_operspylog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_operspylog },
{ "fname_ioerrorlog", CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.fname_ioerrorlog },
@ -2041,10 +2038,6 @@ static struct ConfEntry conf_general_table[] =
{ "disable_auth", CF_YESNO, NULL, 0, &ConfigFileEntry.disable_auth },
{ "dots_in_ident", CF_INT, NULL, 0, &ConfigFileEntry.dots_in_ident },
{ "failed_oper_notice", CF_YESNO, NULL, 0, &ConfigFileEntry.failed_oper_notice },
{ "glines", CF_YESNO, NULL, 0, &ConfigFileEntry.glines },
{ "gline_min_cidr", CF_INT, NULL, 0, &ConfigFileEntry.gline_min_cidr },
{ "gline_min_cidr6", CF_INT, NULL, 0, &ConfigFileEntry.gline_min_cidr6 },
{ "gline_time", CF_TIME, NULL, 0, &ConfigFileEntry.gline_time },
{ "global_snotices", CF_YESNO, NULL, 0, &ConfigFileEntry.global_snotices },
{ "hide_spoof_ips", CF_YESNO, NULL, 0, &ConfigFileEntry.hide_spoof_ips },
{ "dline_with_reason", CF_YESNO, NULL, 0, &ConfigFileEntry.dline_with_reason },

View file

@ -44,7 +44,6 @@
#include "numeric.h"
#include "logger.h"
#include "send.h"
#include "s_gline.h"
#include "reject.h"
#include "cache.h"
#include "blacklist.h"
@ -379,18 +378,6 @@ verify_access(struct Client *client_p, const char *username)
add_reject(client_p, aconf->user, aconf->host);
return (BANNED_CLIENT);
}
else if(aconf->status & CONF_GLINE)
{
sendto_one_notice(client_p, ":*** G-lined");
if(ConfigFileEntry.kline_with_reason)
sendto_one(client_p,
form_str(ERR_YOUREBANNEDCREEP),
me.name, client_p->name, aconf->passwd);
add_reject(client_p, aconf->user, aconf->host);
return (BANNED_CLIENT);
}
return NOT_AUTHORISED;
}
@ -776,15 +763,10 @@ set_default_conf(void)
ConfigFileEntry.fname_operlog = NULL;
ConfigFileEntry.fname_foperlog = NULL;
ConfigFileEntry.fname_serverlog = NULL;
ConfigFileEntry.fname_glinelog = NULL;
ConfigFileEntry.fname_klinelog = NULL;
ConfigFileEntry.fname_operspylog = NULL;
ConfigFileEntry.fname_ioerrorlog = NULL;
ConfigFileEntry.glines = NO;
ConfigFileEntry.use_egd = NO;
ConfigFileEntry.gline_time = 12 * 3600;
ConfigFileEntry.gline_min_cidr = 16;
ConfigFileEntry.gline_min_cidr6 = 48;
ConfigFileEntry.hide_spoof_ips = YES;
ConfigFileEntry.hide_error_messages = 1;
ConfigFileEntry.dots_in_ident = 0;

View file

@ -1,163 +0,0 @@
/*
* ircd-ratbox: A slightly useful ircd.
* s_gline.c: GLine global ban functions.
*
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
* Copyright (C) 1996-2002 Hybrid Development Team
* Copyright (C) 2002-2005 ircd-ratbox 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
*
* $Id: s_gline.c 254 2005-09-21 23:35:12Z nenolod $
*/
#include "stdinc.h"
#include "channel.h"
#include "client.h"
#include "common.h"
#include "config.h"
#include "irc_string.h"
#include "ircd.h"
#include "hostmask.h"
#include "numeric.h"
#include "s_conf.h"
#include "scache.h"
#include "send.h"
#include "msg.h"
#include "s_serv.h"
#include "s_gline.h"
#include "hash.h"
rb_dlink_list glines;
static void expire_glines(void);
static void expire_pending_glines(void);
/* add_gline
*
* inputs - pointer to struct ConfItem
* output - none
* Side effects - links in given struct ConfItem into gline link list
*/
void
add_gline(struct ConfItem *aconf)
{
rb_dlinkAddTailAlloc(aconf, &glines);
add_conf_by_address(aconf->host, CONF_GLINE, aconf->user, aconf);
}
/*
* find_is_glined
* inputs - hostname
* - username
* output - pointer to struct ConfItem if user@host glined
* side effects -
*/
struct ConfItem *
find_is_glined(const char *host, const char *user)
{
rb_dlink_node *gline_node;
struct ConfItem *kill_ptr;
RB_DLINK_FOREACH(gline_node, glines.head)
{
kill_ptr = gline_node->data;
if((kill_ptr->user && (!user || match(kill_ptr->user, user)))
&& (kill_ptr->host && (!host || match(kill_ptr->host, host))))
{
return (kill_ptr);
}
}
return (NULL);
}
/*
* cleanup_glines
*
* inputs - NONE
* output - NONE
* side effects - expire gline lists
* This is an event started off in ircd.c
*/
void
cleanup_glines(void *unused)
{
expire_glines();
expire_pending_glines();
}
/*
* expire_glines
*
* inputs - NONE
* output - NONE
* side effects -
*
* Go through the gline list, expire any needed.
*/
static void
expire_glines()
{
rb_dlink_node *gline_node;
rb_dlink_node *next_node;
struct ConfItem *kill_ptr;
RB_DLINK_FOREACH_SAFE(gline_node, next_node, glines.head)
{
kill_ptr = gline_node->data;
/* these are in chronological order */
if(kill_ptr->hold > rb_current_time())
break;
rb_dlinkDestroy(gline_node, &glines);
delete_one_address_conf(kill_ptr->host, kill_ptr);
}
}
/*
* expire_pending_glines
*
* inputs - NONE
* output - NONE
* side effects -
*
* Go through the pending gline list, expire any that haven't had
* enough "votes" in the time period allowed
*/
static void
expire_pending_glines()
{
rb_dlink_node *pending_node;
rb_dlink_node *next_node;
struct gline_pending *glp_ptr;
RB_DLINK_FOREACH_SAFE(pending_node, next_node, pending_glines.head)
{
glp_ptr = pending_node->data;
if(((glp_ptr->last_gline_time + GLINE_PENDING_EXPIRE) <=
rb_current_time()) || find_is_glined(glp_ptr->host, glp_ptr->user))
{
rb_free(glp_ptr->reason1);
rb_free(glp_ptr->reason2);
rb_free(glp_ptr);
rb_dlinkDestroy(pending_node, &pending_glines);
}
}
}

View file

@ -327,7 +327,6 @@ struct oper_flags
};
static struct oper_flags oper_flagtable[] =
{
{ OPER_GLINE, 'G', 'g' },
{ OPER_KLINE, 'K', 'k' },
{ OPER_XLINE, 'X', 'x' },
{ OPER_RESV, 'Q', 'q' },

View file

@ -818,15 +818,6 @@ report_and_set_user_flags(struct Client *source_p, struct ConfItem *aconf)
sendto_one_notice(source_p, ":*** You are exempt from K/G/X lines. congrats.");
}
if(IsConfExemptGline(aconf))
{
SetExemptGline(source_p);
/* dont send both a kline and gline exempt notice */
if(!IsConfExemptKline(aconf))
sendto_one_notice(source_p, ":*** You are exempt from G lines.");
}
if(IsConfExemptDNSBL(aconf))
/* kline exempt implies this, don't send both */
if(!IsConfExemptKline(aconf))

View file

@ -38,7 +38,6 @@
#define FLAGS_RESTRICTED 0x001
#define FLAGS_EXCEEDLIMIT 0x002
#define FLAGS_KLINEEXEMPT 0x004
#define FLAGS_GLINEEXEMPT 0x008
#define FLAGS_NEEDIDENT 0x010
#define FLAGS_NOTILDE 0x020
@ -52,7 +51,6 @@ static struct flag_table_struct flag_table[] =
{ "restricted", FLAGS_RESTRICTED },
{ "exceed_limit", FLAGS_EXCEEDLIMIT },
{ "kline_exempt", FLAGS_KLINEEXEMPT },
{ "gline_exempt", FLAGS_GLINEEXEMPT },
{ "need_ident", FLAGS_NEEDIDENT },
{ "no_tilde", FLAGS_NOTILDE },
{ NULL, 0 }
@ -592,11 +590,6 @@ void set_flags(struct AuthBlock *ptr, const char *user_field, const char *host_f
ptr->special = 1;
break;
case '_':
ptr->flags |= FLAGS_GLINEEXEMPT;
ptr->special = 1;
break;
case '!':
case '$':
case '%':