1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-07-07 08:23:12 +02:00
Commit Graph

59 Commits

Author SHA1 Message Date
Bram Matthys 29e4f8d56f Newlog: FLOOD_BLOCKED (+s +f notices) 2021-08-05 20:42:24 +02:00
Bram Matthys e80c7b5b65 Add set::anti-flood options lag-penalty and lag-penalty-sec.
This also allows known-users to execute slightly more commands per second.

For people who want their trusted users/bots to allow even more commands
per second (eg 20cmds/sec) we now have a nice FAQ item that uses this:
https://www.unrealircd.org/docs/FAQ#high-command-rate
2021-06-23 16:21:06 +02:00
Bram Matthys 28f98da5f8 Remove debug message "Checking flood_limit_exceeded()" that was logged.
This was a leftover from debugging and should not have been present
in 5.2.0. Reported by westor.
2021-06-23 16:16:47 +02:00
Bram Matthys 3fabc1ef5f New security-group::include-mask item so you can put clients into
security-groups based on masks too.
2021-06-23 13:22:17 +02:00
Bram Matthys e28895c8a9 Show 'security-groups: known-users' etc in connect notice to opers. 2021-06-19 12:49:09 +02:00
Bram Matthys 6cc50d16d0 Fix security group code seeing remote users as always on TLS.
Likely not that important until now, but fix needed for next...
2021-06-19 12:47:52 +02:00
Bram Matthys a7f2406557 Add security-group "webirc" by default. This matches users who
connect through approved webirc gateways, the ones in
https://www.unrealircd.org/docs/WebIRC_block
2021-06-02 19:32:10 +02:00
Bram Matthys 3eb0bc24ea Add log::flags "flood" to log flood messages 2021-05-30 19:30:36 +02:00
Bram Matthys 6358a2e5ff Remove this check due to clang complaining. Whatever. 2021-05-30 19:11:50 +02:00
Bram Matthys 5acef88ceb All violatons of target-flood, nick-flood, join-flood, away-flood,
invite-flood, knock-flood, max-concurrent-conversations are now
reported to opers with the snomask 'f' (flood).
2021-05-30 19:10:18 +02:00
Bram Matthys 6f92233919 The set:anti-flood block has been redone so you can have different limits
for "unknown-users" and "known-users".
As a reminder, by default, "known-users" are users who are identified
to services OR are on an IP that has been connected for over 2 hours
in the past X days.
See https://www.unrealircd.org/docs/FAQ#new-anti-flood-block
for more information on the layout of the new block.

NOTE: This actual feature, the relase notes and the documentation
      are all work in progress.
2021-05-30 18:45:27 +02:00
Bram Matthys 36b9faa7cd Code cleanup: move flood control to generic system 2021-05-28 17:59:39 +02:00
Bram Matthys dd33b38264 Fix extended server ban ~a:accname not working for shun and also
not always kicking in on *line either.
We now check for shuns/*lines in user_account_login(), so upon
SASL or NS IDENTIFY etc. This also means that the client could
now be killed in that function, so callers should take extra
care and take that into account. We check for IsDead() in our
calls now (if it's our client anyway).

Hopefully this doesn't break anything.........
2021-04-17 14:42:40 +02:00
Bram Matthys c71214cefe Rename nvplist functions to match the rest, fix resource leak,
and move the functions to list.c where they belong.
nvplist_add()		-> add_nvplist()
nvplist_add_fmt()	-> add_fmt_nvplist()
(new)			-> free_nvplist
2021-02-02 18:39:17 +01:00
Bram Matthys 1baf5f9f7d Show reputation score and some other info in "Client connecting"
notices to IRCOps and in ircd.log.
See the release notes for more details.

Module coders:
You can use HOOKTYPE_CONNECT_EXTINFO to add your own additional
information as well. See get_connect_extinfo() for inspiration.
Use nvplist_add() or nvplist_add_fmt() to easily add your info
to the list.

Module coders II:
Small note: this moves the sending of the far connect notice
to /under/ HOOKTYPE_REMOTE_CONNECT instead of /above/.
2021-01-31 18:30:49 +01:00
Bram Matthys fa15ec1bec Add default security-group "tls-users" and "tls-and-known-users" 2021-01-01 18:42:27 +01:00
Bram Matthys 53d23038e5 Support for security groups and new +b ~G:unknown-users:
* There are two security groups by default: known-users and unknown-users.
  See https://www.unrealircd.org/docs/Security-group_block
* New extended ban ~G:securitygroupname, with the typical usage being
  MODE #chan +b ~G:unknown-users, which will ban all users from the
  channel that are not identified to services and have a reputation
  score below 25.
2020-12-30 12:42:56 +01:00
Bram Matthys 45624ff2ab Set TARGMAX= for TAGMSG to 1 (same setting as we have for NOTICE). 2020-05-06 16:51:05 +02:00
Bram Matthys 0c080b3982 Fix crash in tkldb on 32 bit systems. Reported by k4be.
Also, get rid of compiler warnings (we can use C99 types now).
2020-04-25 09:27:31 +02:00
Bram Matthys 5dc1502119 New option set::hide-idle-time which configures when/if idle time should
be hidden. The options are: never, always, usermode, oper-usermode.
See https://www.unrealircd.org/docs/Set_block#set::hide-idle-time for
full documentation.

Suggested by Koragg, via https://bugs.unrealircd.org/view.php?id=5355

Module coders: before disclosing idle time, please call this function:
int hide_idle_time(Client *client, Client *target);
In UnrealIRCd we use it from WHOIS and WHO.
2020-04-13 10:00:27 +02:00
Bram Matthys b7e2cbea0f Split off existing account-notify functionality to account-notify module
now that we have a hook, so the functionality of it is nicely contained
in a separate module.
2020-02-09 10:48:23 +01:00
k4bek4be 19e672ac22 Module coders: add ACCOUNT_LOGIN hook (#94) 2020-02-09 10:34:06 +01:00
Bram Matthys 0302ef9733 Operclass permission change: immune:target-limit is now called
immune:max-concurrent-conversations since it bypasses
set::anti-flood::max-concurrent-conversations.
Indirectly reported by westor.
2020-01-29 09:01:25 +01:00
Bram Matthys 63b77796ed sendto_server(&me, -> sendto_server(NULL,
Not sure where the &me originally came from, but it is used in a few places
and is only confusing since it has no meaning... nowadays anyway.
2019-12-27 17:23:24 +01:00
Bram Matthys ab42e12002 Make SVSLOGIN a broadcast, so all servers have the same svid information
for the user. Otherwise with post-connect SASL authentication you will
have different login information on server X compared to server Y
(the server with the user on it was always correct, though).

Also, add a function called user_account_login() which is used by both
SVSMODE/SVS2MODE and SVSLOGIN to send ACCOUNT messages to the channel.
This too was missing for SVSLOGIN (post-authentication SASL).

For this fix to be 100% effective, you need 100% UnrealIRCd 5.
2019-11-18 15:39:18 +01:00
Bram Matthys 52c8ef3815 get_sno_str -> get_snomask_string, get_mode_str -> get_usermode_string,
get_snostr -> get_snomask_string_raw, get_modestr -> get_usermode_string_raw
2019-10-26 11:42:05 +02:00
Bram Matthys 9b15c758cd make_virthost() -> make_cloakedhost() and change parameters:
/** Calculate the cloaked host for a client.
 * @param client        The client
 * @param curr          The real host or real IP
 * @param buf           Buffer to store the new cloaked host in
 * @param buflen        Length of the buffer (should be HOSTLEN+1)
 */
void make_cloakedhost(Client *client, char *curr, char *buf, size_t buflen)
2019-10-26 11:38:53 +02:00
Bram Matthys ec1b2c60f2 Remove src/cloak.c, integrate the function in src/user.c
(also move the related one from src/misc.c to the same place)
2019-10-25 11:26:08 +02:00
Bram Matthys 75fa6a25b8 Remove src/uid.c, integrate those two functions in src/user.c 2019-10-25 11:23:07 +02:00
Bram Matthys 1a1ce5716e Move hunt_server from user.c to serv.c (makes sense). 2019-10-14 08:33:12 +02:00
Bram Matthys cc36b34f93 Remove unnecessary (void) casts everywhere.
Only use (void) for system/library calls that you want to ignore
explicitly, eg (void)close, if the return value is irrelevant.
2019-10-14 08:23:30 +02:00
Bram Matthys f40c9f3c88 Change various client->name to client->id in S2S traffic. More to
follow tomorrow, including me.name to me.id changes (though these
are far less important) and send.c + non-sendto_server hunts...
2019-10-13 20:41:13 +02:00
Bram Matthys d2a93c3a03 websocket module will now only disable show-connect-info on the ports
that have listen::options::websocket. It will no longer disable it
on all ports.
2019-10-06 07:37:55 +02:00
Bram Matthys c399aab016 Support for labeled-response in LIST (I really wanted this) 2019-10-05 18:21:47 +02:00
Bram Matthys f992a0c1c0 Finish up labeled-response implementation. Load by default to get the
thing tested. Will do at least 1 other commit soon related to this.
2019-10-05 17:33:22 +02:00
Bram Matthys 2eecf4f2da Use generic numeric 531 (ERR_CANTSENDTOUSER) for all such cases and use hook
CAN_SEND_TO_USER rather than HOOKTYPE_PRE_USERMSG (which is now removed).

As for the numeric change: this makes it much easier for client devs.
You rarely need to differentiate in the client code between the various
causes. One only cares about detecting that the message was not sent and
that the user needs to be informed.
This replaces various NOTICEs, ERR_NOCTCP, ERR_NONONREG etc. with just the
new numeric 531, which is taken from InspIRCd. The syntax is:
:server 531 yourname targetname :reason for the block
This makes it similar to numeric 404 (ERR_CANNOTSENDTOCHAN) that is used to
indicate that a channel message was blocked.

For module devs, the new hook CAN_SEND_TO_USER prototype is:
int hooktype_can_send_to_user(Client *client, Client *target, char **text, char **errmsg, int notice);
You can replace the text via this, by setting *text in your function.
You can block the message, by returning HOOK_DENY. If doing so, then
you must also set *errmsg to an appropriate value.
Do not send any error message to the user! UnrealIRCd will take care of
sending the error message for you, if you set *errmsg.
Only if you need something special you could violate this rule, but
preferably not!

As you can see, CAN_SEND_TO_USER works just like CAN_SEND_TO_CHANNEL.
2019-10-05 12:53:41 +02:00
Bram Matthys 3a64077f51 Use 'client' everywhere (if there is no confusion) instead of 'sptr' or 'cptr'.
This so I - and others - don't constantly have to wonder whether the client
is called sptr, cptr or acptr in a simple routine.
Insane --> 212 files changed, 6814 insertions(+), 6945 deletions(-)
Couldn't just mass-replace of course since there are places where there
are multiple clients involved. So had to check each function.
Also renamed some 'acptr' to 'target' and such.

I will write a page with new style rules later.. but in short if there is
only 1 client involved it will now be called 'client'.
2019-10-04 15:25:35 +02:00
Bram Matthys 3126a3fae4 BIG changes internally that will break all modules and required many
code changes in UnrealIRCd itself:
1) Clients are no longer freed directly by exit_client. Most fields
   are freed, but 'sptr' itself is not, so you can use IsDead() on it.
2) exit_client now returns void rather than int
3) ALL command functions return void rather than int.
   Of course this also affects do_cmd, command overrides, etc.

This is a direct consequence of the removal of 'cptr' earlier, as that
was used to signal certain things that are now no longer possible
(and it raises the question if things were always correctly signaled
in the first place, so may fix some bugs).
It also makes the code more resillient against cases where you forgot
to check if the client was freed. Still, you are encouraged to do an
IsDead(sptr) if you are calling functions that may kill clients,
such as command functions or things that may use spamfilter.

More changes will follow, such as the removal of FLUSH_BUFFER.
2019-10-04 10:28:41 +02:00
Bram Matthys 4ac8015f84 Remove 'cptr' from all commands, hooks, etc. It only confuses people and
'sptr' is sufficient and in most cases the only one you should care about.
Should you need it, you can access sptr->direction in cases where you
need the old information (usually only for some sendto_* functions
and some protoctl checks), so 'cptr' was redundant too.

[!] This change likely introduces some bugs. This was many hours of work.
I only cut some corners in 4 functions, which will be fixed at a later
stage..... yes, more major changes to come.

On the plus side, I likely fixed some bugs in the process. Situations
where cptr vs sptr usage was incorrect. Eg using cptr->name (near server)
when sptr->name should be used (the actual source server), etc....
2019-10-02 14:25:40 +02:00
Bram Matthys d7ef752888 Detect combination of non-UTF8 nickchars in use and websocket type text.
In such a case we refuse to run since the consequences are too big.
(Actually I may change the non-UTF8 channel warning to an error as well,
 right now it isn't.. simply because I cannot read a certain setting)

From both the non-UTF8 channel and user warning/error, we now refer to:
https://www.unrealircd.org/docs/WebSocket_support#websockets-and-non-utf8
which contains a bit more detailed information as to the WHY.
2019-09-23 10:20:38 +02:00
Bram Matthys 6cc94b4b11 Move add_silence and del_silence out of the core to modules/silence 2019-09-15 07:52:04 +02:00
Bram Matthys 9fc1e758ab Mass change of dst = strdup(str) to safe_strdup(dst,str) but with a manual
audit since 'dst' must now be initialized memory.
There's still a raw_strdup() if you insist.

This is step 2 of X of memory allocation changes
2019-09-14 16:58:01 +02:00
Bram Matthys de87b439b7 Update memory allocation routines. Step 1 of X. 2019-09-14 16:52:53 +02:00
Bram Matthys baf02e8980 Rename all m_* functions to cmd_* functions. 2019-09-13 15:45:19 +02:00
Bram Matthys 70410b3f33 Remove unused variables (67 files done, will do rest another time). 2019-09-12 17:57:01 +02:00
Bram Matthys bf2c5110db IsPerson() -> IsUser(), MyClient() -> MyUser(), etc.
This so we have a few simple concepts:
Client: this can be a user, server, or something unknown yet
Then the type of clients:
User: this is a user, someone with a nick name.
Server: this is a server
Etc.
2019-09-11 17:43:17 +02:00
Bram Matthys cb236eea88 Rename cptr->from to cptr->direction, since the 'from' is rather misleading
as cptr->from is NOT (necessarily) the server where cptr is connected to.
So we now call it cptr->direction since it indicates the directly connected
server (or &me)... in other words: the direction of the client path.
2019-09-11 14:03:27 +02:00
Bram Matthys e8d53ffe8e And more type changes to make things consistent and more readable. 2019-09-11 11:04:31 +02:00
Bram Matthys 23116d344a Give structs the same name as the typedefs. Rename aClient to Client,
aChannel to Channel, and some more. Third party module coders will
love this. But.. it makes things more logical and the doxygen output
will look more clean and logical as well.
(More changes will follow)
2019-09-11 09:48:00 +02:00
Bram Matthys d434cf948b Get rid of bcmp/bcopy/bzero. 2019-09-09 14:41:40 +02:00