Commit graph

492 commits

Author SHA1 Message Date
Elizabeth Jennifer Myers 765d839d3c Port ircd-seven banfowards to charybdis.
nenolod gave the thumbs-up to port ircd-seven banfowards to charybdis to spb
for a while, and people have asked about it. Might as well do it since it's a
slow weekend.

Note that as a side effect use_forward is removed from the config and
unconditionally enabled!
2011-08-12 20:33:10 -04:00
Elizabeth Jennifer Myers 7eec45bc9d Back out chanroles.
While what chanroles are trying to accomplish is a good idea, it is
apparently unclear this is the proper way to do it. Until we figure out
the exact way we wish to do this, it should be reverted for now.
2011-07-07 21:24:14 -04:00
Elizabeth Jennifer Myers e1ee78ae30 Partially revert e794d39a80.
As jilles pointed out, it is best that the chanserv access list always
remain synced with the grant list. Thus, the ability for clients to set
this is not a good idea unless services knows about the grant, but this
leads to all sorts of messy issues and likely isn't worth it.
2011-07-06 18:14:57 -04:00
Elizabeth Jennifer Myers e794d39a80 Add client interface for GRANT.
TODO: implement notifications of grant privilege changes to the target.
2011-07-06 17:25:26 -04:00
William Pitcock 460b6d9fb2 chanroles: ENCAP GRANT should work under the assumption that we want to zero out
this makes setting new roles on a user much easier as we're just setting the roles they
should be having, instead of having to try to revoke roles we don't necessarily know
about.
2011-07-06 15:04:45 -05:00
Elizabeth Jennifer Myers 8aabb973c0 Implement chanroles, as discussed with nenolod.
The theory behind this is that services sends an ENCAP * GRANT #channel
UID :+flagspec message specifying the chanroles the user has. They are
mapped into flag bits and applied to the membership of the user. They
then are restricted or permitted to what they can do based on the
permissions mask regardless of rank.

For backwards compatibility, the default permission bit (without a GRANT
statement) allows a user to to anything an existing op can do ONLY if
they are an op.

Todo: make CHANROLE_STATUS work (the ability to apply +ov to people),
which is at the moment controlled by CHANROLE_MODE.
2011-07-06 13:46:22 -04:00
William Pitcock 0351022738 RSFNC: allow RSFNC against a target which just changes the capitalization of the nickname
this is useful for gently changing a nickname from ReTARDeDNICk to Retardednick, see
ns_cleannick in atheme git.
2011-07-02 19:53:21 -05:00
Jilles Tjoelker 45ed883584 rsfnc/svslogin: Add server notices for kills.
When we broadcast a KILL message, this generates server notices on all
other servers (assuming the target user exists). Therefore, we should
also send a notice to our local opers.
2011-06-25 15:56:22 +02:00
Jilles Tjoelker 2b843a5bdd dline,kline: Avoid breaking the protocol with bad bans. 2011-06-25 11:34:34 +02:00
Jilles Tjoelker b5d9427a78 invite: Remove useless IsChannelName check. 2011-06-25 11:34:16 +02:00
Jilles Tjoelker 0941f28e7d knock,topic: Remove useless IsChannelName checks.
If !IsChannelName(name), then certainly find_channel(name) == NULL.
2011-06-25 11:17:37 +02:00
Jilles Tjoelker a4eeda898e operspy list: Show '!' prefix for otherwise hidden channels rather than +s ones.
This is consistent with operspy whois.
2011-05-24 00:30:45 +02:00
Keith Buck bf0a45920d modules/m_list.c: Change operspy LIST syntax to match everything else that accepts operspy. 2011-05-22 20:30:49 -07:00
William Pitcock f5493691ed branding: if CUSTOM_BRANDING is defined, display charybdis version in /info
(based on ircd-seven rebrand patch)
2011-05-08 09:06:19 -05:00
Jilles Tjoelker a1574df4a2 Allow kick_on_split_riding to protect channels with mlocked keys.
Do kick_on_split_riding if services sends an SJOIN
with a lower TS and a different key. This relies on
services restoring TS (changets option in atheme) and
services not immediately parting after receiving the
KICK, which is the case in recent atheme.

For invite-only channels, still only do
kick_on_split_riding in netbursts. Services is
assumed to handle this itself (atheme does).
2011-04-06 19:05:08 +02:00
Jilles Tjoelker 572488e029 If the sasl mechanism is EXTERNAL, send the certfp in the initial S message. 2011-04-04 00:59:20 +02:00
Jilles Tjoelker f62f94b094 Back out AUTHENTICATE EXTERNAL so I can do it differently.
The current approach is fundamentally broken as it allows
anyone in that knows the certfp and uses an old ircd as
their server.
2011-04-04 00:44:07 +02:00
Jilles Tjoelker 1b19fe8b5e Revert "sasl: remove checks for impossible conditions".
This check is not impossible and can be triggered by
sending a PASS command like a server would send first.

This backs out changeset 8cba4464feec.
2011-03-31 23:26:26 +02:00
William Pitcock 27126f911d sasl: first attempt at ircv3.1 AUTHENTICATE EXTERNAL support 2011-03-31 00:35:58 -05:00
William Pitcock d8c45202e3 sasl: remove checks for impossible conditions 2011-03-31 00:18:32 -05:00
Stephen Bennett e6e54763d9 Make flood control settings configurable by those who know exactly what they're doing.
From ircd-seven git changeset 29aa4203150337925a4f5c6e7da47be5394c2125 .
2011-03-27 16:35:26 -04:00
Elizabeth Jennifer Myers 6493f05d8c m_challenge: fix use of undefined behaviour.
GCC does what we expect, but other compilers could do just about anything.
2011-02-22 12:00:45 -05:00
Jilles Tjoelker 2fb0796158 hunt_server: Disallow wildcarded nicknames.
Any hunted parameter with wildcards is now assumed
to be a server, never a user.

Reasons:
* fewer match() calls
* do not disclose existing nicknames
* more intuitive behaviour for CONNECT

m_trace has a copy of some hunt_server logic in it
(for the RPL_TRACELINK reply), so adjust that too.
2011-01-08 17:47:05 +01:00
Keith Buck 4c3f066ab8 Move list-related isupport items to the list module itself. 2011-01-06 00:40:08 -08:00
Keith Buck 096570b9f8 Add topic TS and channel TS constraints for /LIST. 2011-01-05 21:15:36 -08:00
Keith Buck bb55ebebe9 Implement operspy for /LIST. 2011-01-05 18:57:27 -08:00
Keith Buck 9ad393f677 Fix multiple RPL_LISTEND replies when aborting a /LIST. 2011-01-02 00:43:11 -08:00
Jilles Tjoelker 1987b5da5b Fix topic changes after 6af636dce2e6. 2010-12-27 17:31:11 +01:00
Stephen Bennett 341f971efa Bring across disable_local_channels config option from ircd-seven 2010-12-21 20:38:04 +00:00
William Pitcock 261e2f9399 Accountname should not be prefixed with a colon to allow future expansion. 2010-12-16 00:32:48 -06:00
William Pitcock 92052a5c24 Add extended-join client capability.
The extended-join client capability extends the JOIN message with information clients typically
query using WHO including accountname, signon TS and realname.
2010-12-16 00:24:54 -06:00
William Pitcock 805cfa5ab2 Use send_channel_join(). 2010-12-16 00:13:42 -06:00
William Pitcock 7a7f86d344 Rough implementation of the new account-notify client capability.
This replaces identify-msg in ircd-seven.
2010-12-15 23:04:57 -06:00
William Pitcock 7a948bdaa7 Add capability parameter to sendto_common_channels_local() and sendto_common_channels_local_butone(). 2010-12-15 22:55:05 -06:00
William Pitcock cddbab51bb Send ERR_TOOMANYCHANNELS for each channel join that fails due to channel limits.
The reason why we do this is because some clients are dependent on receiving a numeric
for every channel join failure, even due to this limit where it can be assumed that
subsequent joins failed.
2010-12-14 02:24:23 -06:00
William Pitcock ff0cc1e616 Add support for linking using SSL certificate fingerprints as the link credential rather than the traditional server-password pair. 2010-12-13 23:14:00 -06:00
B.Greenham 15484f02bd Move flood_attack_channel to channel.c so it can be used outside m_message.c 2010-12-09 18:29:56 -05:00
William Pitcock 0343b3c563 Use get_channel_access() for KICK/TOPIC. 2010-12-07 00:14:42 -06:00
William Pitcock 6ca4dec95a Extend hook_data_channel_activity moduledata with membership struct. 2010-12-06 22:57:04 -06:00
William Pitcock 1f679bfe7b Filter bogus CTCP ACTION messages. 2010-11-05 01:16:03 -05:00
Jilles Tjoelker 01b7a527a3 Show the services login name in WHOWAS.
The numeric is the same (330) as used in WHOIS.

This takes at most half a megabyte of memory (large network, 30 char nicks).
2010-08-29 22:30:54 +02:00
Jilles Tjoelker 5b383ce060 Move RPL_WHOISLOGGEDIN to sendto_one_numeric(). 2010-08-29 22:29:17 +02:00
Jilles Tjoelker 02e655aeac Provide an error message when a user does /quote ban. 2010-08-29 15:16:47 +02:00
Jilles Tjoelker 717238d2a2 Add target change for channels.
This has a separate enabling option channel::channel_target_change.

It applies to PRIVMSG, NOTICE and TOPIC by unvoiced unopped non-opers.

The same slots are used for channels and users.
2010-08-29 01:26:00 +02:00
Jilles Tjoelker dd9b78dc92 Remove redundant MyClient check, it is already checked above. 2010-08-24 22:46:57 +02:00
Stephen Bennett 51269a8737 Merge backout of 8939a7e03d15 2010-08-24 21:31:55 +01:00
Stephen Bennett 0f1ab797e4 Backed out changeset 8939a7e03d15
The code behind this capability was never implemented, and subsequent
discussions have agreed to approach the problem differently. There seems no
reason to continue advertising a capability that does nothing.
2010-08-24 21:30:56 +01:00
William Pitcock 6fb6bd15ae Enforce TS rules on MLOCKs. 2010-08-23 20:22:59 -05:00
Jilles Tjoelker f5455d2cd5 Tweak auto-accept:
* does not apply to NOTICE (as those may well be automated)
* mirrors +g behaviour so that no useless accept entries are added for services
* respects max_accept, if it would be exceeded the message is dropped with numeric 494
* check moved up so this is checked before floodcount/tgchange
2010-07-04 17:14:56 +02:00
William Pitcock 0770c9936e Stop griefing through taunting while hiding behind CALLERID.
This shouldn't provide any way for a client to get on a CALLERID list
without authorization, as if a client is +g already, a CTCP request, for
example, won't be replied to.
2010-07-03 00:44:55 -05:00
Jilles Tjoelker 76a2bba920 Propagate changed away messages to other servers,
even if the away status did not change.
2010-06-10 22:16:07 +02:00
Elly 15aa08eecb Fix memory leaks in PASS command, both in normal and repeated use. 2010-06-01 13:11:47 -04:00
Stephen Bennett ca656bf815 Fix compiler warning 2010-05-02 21:25:58 +01:00
Stephen Bennett 6b8db2daf2 Allow the final parameter of MLOCK to be empty, to remove an existing mlock 2010-05-02 20:42:46 +01:00
Stephen Bennett 1916ed52f8 Branch merge 2010-04-30 22:03:42 +01:00
Stephen Bennett 78e6b731e4 Rework ircd-side MLOCK enforcement: instead of trying to track modes locked on or off, instead keep a simple list of mode letters that are locked, and reject any change to those modes. 2010-04-30 22:01:21 +01:00
Jilles Tjoelker a0ce140ed6 Improve technical documentation of BAN protocol. 2010-04-29 00:26:49 +02:00
Jilles Tjoelker 406478d224 Do not allow a topic change if a user may not send to the channel
(resv, cmode +m, cmode +b, cmode +q, etc.).

This is only checked for local users.

For optimal compatibility, a failure for this reason still
returns ERR_CHANOPRIVSNEEDED.

Side effect: normal users cannot change topics of resv'ed
channels, even if they have ops, just like they already
cannot send messages. This only matters if resv_forcepart
is disabled, as the user would have been removed from the
channel otherwise.
2010-04-15 00:46:33 +02:00
William Pitcock bd44fc7b09 Automated merge with ssh://hg.atheme.org//hg/charybdis 2010-04-06 17:14:51 -05:00
William Pitcock c239b97f68 Hook up source-account-hostmask client protocol extension. 2010-04-06 17:14:44 -05:00
JD Horelick 944b0584ea Change config option for ident_timeout to default_ident_timeout as jilles
recommended.
2010-04-05 16:29:11 -04:00
JD Horelick 0ffb810660 Add a configuration option for ident_timeout. 2010-04-05 15:28:44 -04:00
Jilles Tjoelker 803ce385bf Fix various compiler warnings. 2010-03-27 20:09:46 +01:00
Jilles Tjoelker 5bd874eb41 Restore snotes, logs for UNRESV nick.
This bug was introduced when adding bandb.
2010-03-27 16:24:13 +01:00
Jilles Tjoelker dca9e55257 Add propagated resvs, like klines and xlines. 2010-03-27 16:13:57 +01:00
Jilles Tjoelker 1b5d7c2e8a XLINE: Do not cluster unxlines ON specific servers.
This bug was introduced with BAN support for XLINE.
2010-03-27 16:09:26 +01:00
Jilles Tjoelker a812a239c8 Remove unused variable. 2010-03-27 02:06:29 +01:00
Jilles Tjoelker f89191ace9 BAN: xlines do not have oper reasons, their "reason" is already oper only. 2010-03-18 00:22:35 +01:00
Jilles Tjoelker 3cbbfb2556 Add propagated xlines, like klines. 2010-03-16 23:05:50 +01:00
Jilles Tjoelker 34e02db66b Fix a signedness comparison warning. 2010-03-16 19:13:09 +01:00
Jilles Tjoelker 1702b69419 Add option general::use_propagated_bans to allow disabling new KLINE.
If this option is yes (default), KLINE by itself sets global (propagated) bans.
If this option is no, KLINE by itself sets a local kline following cluster{},
compatible with 3.2 and older versions.
2010-03-14 17:21:20 +01:00
William Pitcock 8727cbe88a Add propagation of MLOCK state for simple modes.
Special modes like +j can be tracked easily just by adding the necessary
code to parse them to set_channel_mlock().  This will cover propagation
as well.
2010-03-07 23:13:39 -06:00
Jilles Tjoelker 5c2b9eaf48 BAN: Reject bans with insufficient non-wildcard characters.
Such bans are not applied locally, but are propagated normally.
They can only be removed on a server that applies them.

Note that normally KLINE will not accept such bans.
This is mainly for services, differing min_wildcard and
ircd changes.
2010-03-06 01:45:41 +01:00
Jilles Tjoelker 416d868ed4 Add /stats g to show propagated (global) klines. 2010-03-06 00:31:51 +01:00
Jilles Tjoelker 6229f9f83b Among bans with the same creation time, prefer the one with longest lifetime. 2010-03-05 23:16:28 +01:00
Jilles Tjoelker 9470d75a42 BAN: Avoid fake direction. 2010-03-05 22:53:35 +01:00
Jilles Tjoelker cedb7d05b4 Remove +/- from the BAN message, instead indicating unban with duration=0.
A kline must now last at least one second since its creation time.

Also add better logic for bans that have already expired
when they come in.
2010-03-05 22:51:47 +01:00
Jilles Tjoelker 431a1a2784 Add propagated klines.
A KLINE command without the ON clause now sets a propagated
("global") ban. KLINE commands with the ON clause work as
before.

Propagated klines can only be removed with an UNKLINE command
without the ON clause, and this removes them everywhere.
In fact, they remain in a deactivated state until the latest
expiry ever used for the mask has passed.

Propagated klines are part of the netburst using a new BAN
message and capab. If such a burst has an effect, both the
server name and the original oper are shown in the server
notice.

No checks whatsoever are done on bursted klines at this time.

The system should be extended to XLINE and RESV later.

There is currently no way to list propagated klines,
but TESTLINE works normally.
2010-03-05 18:36:44 +01:00
Jilles Tjoelker c935336b64 kline: Fix oper reasons. 2010-03-05 18:28:59 +01:00
Jilles Tjoelker 97f44d343a Skip propagated bans in rehash txlines/tresvs. 2010-03-05 00:37:56 +01:00
Jilles Tjoelker 27f616ddf5 Track who set a dline/kline/xline/resv as in ratbox3.
Like in ratbox3, there is no way to query this information
(other than bandb's tables, but they worked before this
commit).
2010-03-01 01:23:22 +01:00
Jilles Tjoelker a12ad04472 Generate the "Temporary K-line %d min" part from aconf->hold - aconf->created. 2010-02-28 16:27:06 +01:00
Jilles Tjoelker b52c294986 Store the creation time of klines and dlines as a time_t instead of as text.
The value 0 indicates the creation time is unknown (currently the case
for bandb).
Also store a creation time for xlines and resvs, but do not use it yet.
2010-02-28 00:46:56 +01:00
Jilles Tjoelker 3102dbdc4f Use FLAGS_SENTUSER when checking whether to register when ping cookie is received. 2010-02-24 23:28:27 +01:00
Stephen Bennett 1fb3b1e1c4 Use FLAGS_SENTUSER instead of 'user' being non-empty to decide whether to register a user on CAP END.
identd and SASL can cause source_p->user to be present without USER having been sent.
Without this change, that could cause a crash later on as localClient->fullcaps is not initialised.
2010-02-23 22:35:58 +00:00
Jilles Tjoelker ff91faaf76 Do not penalize for spambot checks if creating a new channel. 2010-02-21 01:45:51 +01:00
Jilles Tjoelker 4eb9a3ca0b JOIN 0: Make spambot check equivalent to PART's. 2010-02-21 01:12:04 +01:00
Jilles Tjoelker 9148f6aa7c Remove dead code: last_join_time is already updated by check_spambot_warning(). 2010-02-21 01:10:04 +01:00
Jilles Tjoelker cf3564d61f Do not check for spambot if the user is not allowed to join the channel. 2010-02-21 01:07:32 +01:00
Jilles Tjoelker fad065bb95 challenge: Fix build. 2010-02-18 23:42:07 +01:00
William Pitcock ed8b3d69ac Add certfp check to challenge too. 2010-02-17 23:01:25 -06:00
William Pitcock 76169ea734 Clarify ERR_NOOPERHOST and convert it to use sendto_one_numeric(). 2010-02-17 06:51:41 -06:00
William Pitcock ff31db8473 Add support for client certificate fingerprints in o:lines. 2010-02-17 06:41:41 -06:00
Jilles Tjoelker 0cce7774d5 Subject /invite to umodes +g and +R.
The behaviour is the same as /msg except that where
/msg would send RPL_UMODEGMSG to the user, the /invite
is instead let through. This counts as a notification
for caller_id_wait like RPL_UMODEGMSG.

Checks are on the target user's server, which means an
error message will appear after RPL_INVITING.
This must be because the accept list is not globally
known.
2010-02-15 23:07:14 +01:00
Jilles Tjoelker 40b79a3908 Add missing return value. 2010-02-15 22:18:00 +01:00
Jilles Tjoelker 890af0e7c5 Subject /invite to target change.
Similar to /msg, inviting a user that is not in a channel
you have op or voice in requires a free target; opers always
have a free target.

Being invited adds the source as a reply target.
2010-02-15 22:08:55 +01:00
Jilles Tjoelker 4f2685f3e1 Move target change code to src/tgchange.c,
so we can use it for /invite as well.
2010-02-15 21:58:34 +01:00
Jilles Tjoelker c9f01c4f2f target change: Allow free replies.
When a user receives a private message, notice or RPL_UMODEGMSG,
add the source to a special set of 5 target slots.
These slots are checked in the normal way when sending messages,
allowing a reply without using up a free target.

This feature will not be very useful if a user is being messaged
by many different users; to help this, messages blocked entirely
by +g or +R do not affect the targets. CTCP replies also remain
free in terms of targets.
2010-02-15 01:07:07 +01:00
Jilles Tjoelker 179becdf5f target change: Overwrite the least recently used target with a new one. 2010-02-15 00:31:17 +01:00
Jilles Tjoelker ad1d39a76f Make the number of targets tracked for target change a #define. 2010-02-13 15:18:17 +01:00