1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-07-07 06:43:13 +02:00
Commit Graph

142 Commits

Author SHA1 Message Date
Bram Matthys 977c4b433a Make it so services can CHGHOST/CHGIDENT in the SASL / registration phase.
This so users can come online directly with the correct vhost set,
and not first with a standard (usually cloaked) host while auto-(re-)joining
followed by a CHGHOST later.

This is a long outstanding wish from users, I think.

Services can simply send a CHGHOST/CHGIDENT to the UID, for example
right before they send the SASL ... D S message (SASL succeeded)
they can send like: CHGHOST 002ABCDEF some.nice.host

Then UnrealIRCd 6.0.7-git and later will handle the CHGHOST even if
the user is not known yet. Technically, the server where the UID is
on will handle the message. And remote servers that don't know the
user with this UID yet will forward to the server with the SID-portion
of the UID. The CHGHOST will not be a broadcast but the vhost will
show up in the UID protocol message that introduces the user.
For CHGIDENT it is a similar story.

Light testing has been done but more extensive testing is welcomed.
2023-02-08 10:49:15 +01:00
Bram Matthys 4378979ad5 Add valid_username() so we can use it at multiple places.
This gets rid of duplicate code in SETIDENT, CHGIDENT, and soon
in the RPC call. It does not get rid of make_valid_username()
in src/modules/nick.c which does something slightly different.
2023-01-07 15:11:52 +01:00
Bram Matthys dc55c3ec9f Add CALL_CMD_FUNC(cmd_func_name) and use it.
This is only for calls within the same module, as otherwise you
should use do_cmd().

Benefit of this way is that it is short and you don't have to worry
about passing the right command parameters, which may change over time.
Example as used in src/modules/nick.c:
-               cmd_nick_remote(client, recv_mtags, parc, parv);
+               CALL_CMD_FUNC(cmd_nick_remote);
2022-08-28 09:04:12 +02:00
Bram Matthys 1fe6119026 Make tld::motd and tld::rules optional.
Suggested by Jellis in https://bugs.unrealircd.org/view.php?id=6072
2022-06-19 20:15:00 +02:00
Bram Matthys d5989695e8 Remove last global 'buf' variables. This was already done a lot in time
but it seems there were still a couple left. These are now gone as well.
There seem to be no issues with the ones that were left, but it is just
too easy to get it wrong. Declaring buf in function now. This should be
faster anyway, since it is located on nearby memory (stack).

Inspired by previous find from westor (c708a99955c034e842f913479cc597d87b311394).
2022-06-01 08:34:48 +02:00
Bram Matthys c183c06d06 Move HOOKTYPE_LOCAL_CONNECT slightly further down.
[skip ci]
2022-05-26 20:56:36 +02:00
Bram Matthys 510b4b5505 Integrate security-group functionality in allow::mask.
(Also call it allow::match in the future, but accept allow::mask still)

This is the first of several commits to convert all ::mask items.
See https://www.unrealircd.org/docs/Mask_item for the consequences.
In short, you can now use all of the security-group items directly
in a mask, eg:
allow {
    mask { account TrustedUser; }
    class clients;
    maxperip 10;
}
2022-05-14 07:51:51 +02:00
Bram Matthys f1a18ce37e Communicate "creationtime" of users. Right now this info is only known
locally, as the only timestamp regarding users that is communicated across
the network is about the "last nick change" ("has this nick since...").
2022-05-13 12:27:21 +02:00
Bram Matthys d77f42e4be This one should be the other way around...
Not that anything is this particular code path should trigger it (OK,
maybe if some 3rd party module kills the user from HOOKTYPE_SECURE_CONNECT)
better safe than sorry.
2021-12-17 14:20:39 +01:00
Bram Matthys 4af7a541f8 Add 'oldnick' to HOOKTYPE_POST_LOCAL_NICKCHANGE and HOOKTYPE_POST_REMOTE_NICKCHANGE 2021-12-01 08:40:02 +01:00
Bram Matthys 36274f7242 Fix nick-flood message appearing even though the user was not changing nicks. 2021-11-13 13:45:39 +01:00
Bram Matthys c35174db32 Cleanup: don't check for NULL if they can't be NULL (variables
already dereferenced before)
[skip ci]
2021-11-06 13:26:57 +01:00
Bram Matthys 5ae33809de Fix read-after-free in SVSNICK and remote NICK if there is any module
checking 'mtags' in HOOKTYPE_POST_LOCAL_NICKCHANGE.
[skip ci]
2021-11-06 11:31:40 +01:00
Bram Matthys fabe16a95c Get rid of has_voice(), is_half_op(), is_skochanop(), is_chan_op(), is_chanadmin(),
is_chanowner(). Using check_channel_access() instead now.
2021-09-25 08:00:57 +02:00
Bram Matthys 720f597ad6 Get rid of current snomask system and allow ircops to set any snomask
(that is: a-z A-Z) so to use the dynamic system with the new logging.
Largely untested.
2021-09-22 15:49:20 +02:00
Bram Matthys 8353a9e17b Change char *parv[] to const char *parv[] everywhere. This is a BIG change.
It means you can no longer modify eg parv[1] in-place with strtoken and such.

The main reason for this is that as a command handler you have no idea
where the arguments may come from. It could be from a do_cmd() with
read-only storage (eg a string literal) and so on.

It started with an experiment of how far I could get and how annoying the
side-effects would be, but they seem to be quite managable, so I'm
committing this stuff.

Hopefully this catches/solves some stupid bugs somewhere :)
2021-09-11 16:02:44 +02:00
Bram Matthys fcf020b99e It's raining consts... 2021-09-11 09:56:22 +02:00
Bram Matthys 7dac12e31e Get rid of RunHook2/3/4/5/6/etc and just have RunHook with __VA_ARGS__ 2021-09-10 19:27:18 +02:00
Bram Matthys 463c7d4ddf Spoof remote connecting/disconnecting notices with sender being the
server where the client is (or was) on. Just like we did in UnrealIRCd 5.

Not sure if API-wise and variable-name-wise I want to do it this way,
but whatever...
2021-09-10 08:54:29 +02:00
Bram Matthys 9ff56089ad Show TLS cipher in [secure: xyz] in far connects too (+s +F).
This requires both servers to be using UnrealIRCd 6 and there
should be no UnrealIRCd 5 server in-between (eg an old hub).

This also changes tls_cipher() to expect a Client * argument.
And tls_get_cipher() can now safely be called on any client,
including remote clients, and it will return the cipherstring
if it is known via moddata.
2021-08-16 14:30:21 +02:00
Bram Matthys f75a9c8544 Sync ModData in UID command if mdata.sync = MODDATA_SYNC_EARLY.
This way we should be able to show certfp and webirc status
in far connect notices, and later various other details too.
2021-08-16 14:01:45 +02:00
Bram Matthys bdef6a2af2 Move stuff from AllowClient() to register_user(), since it deals with
setting hostname and such, which does not belong there (well, mostly)
2021-08-13 13:10:23 +02:00
Bram Matthys a0a95f6cee Get rid of unnecessary check_init() stuff (and the hook) 2021-08-13 13:06:35 +02:00
Bram Matthys da3bdc0437 AllowClient() doesn't need nor use the 2nd argument. 2021-08-13 12:27:23 +02:00
Bram Matthys 9310fd3b4b Move check for valid hostname out of register_user(), we already
have that in dns.c. Also remove verify_hostname() from dns.c and
integrate it in valid_host() which now takes a second argument
named 'strict'. Call valid_host() with strict set to 1 if the
hostname should be checked to be a valid DNS hostname, eg the
host may not contain stuff like ':' or '/'. Use 0 otherwise
for the loose check, eg if you are not sure if the passed host
is an IP address or a host, or if it is for a vhost.
2021-08-13 12:17:24 +02:00
Bram Matthys 7c250188a5 Some moving around 2021-08-13 12:05:37 +02:00
Bram Matthys 72d4973840 Cleanup code that sets client->user->username based on ident config and result 2021-08-13 11:59:54 +02:00
Bram Matthys 1b3376d091 More cleanups in register_user(): Move the username checks to valid_username() 2021-08-13 11:54:43 +02:00
Bram Matthys 3a9976ef53 Get rid of ERR_HOSTILENAME which clutters the code too much
and no other IRCd seems to be using it.
2021-08-13 11:33:34 +02:00
Bram Matthys 3f8538f767 Split off part of register_user() to new function welcome_user() 2021-08-13 11:30:53 +02:00
Bram Matthys 199d7d8e65 cmd_uid: fix setting IP on the wrong client (server instead of user, oops...) 2021-08-13 11:11:05 +02:00
Bram Matthys fa875d6fd4 Cleanup: register_user() now takes only 1 argument (client) instead of 5 arguments.
The last 3 were always NULL after the remote/local split from a few commits ago.
And nick and username were useless as well as client->name and
client->user->username were always already set.
2021-08-13 11:06:30 +02:00
Bram Matthys 77a7b3aca2 More cleanups in nick.c: integrate register_user_remote() in cmd_uid() 2021-08-13 10:57:54 +02:00
Bram Matthys 33db820355 More nick.c (register user) cleanups.. 2021-08-13 10:49:45 +02:00
Bram Matthys 75a7d171b9 Test buildbot 2021-08-13 10:40:53 +02:00
Bram Matthys 8ca735a217 Split remote register_user() off into register_user_remote(),
which may or may not disappear in a future cleanup.
2021-08-13 10:23:50 +02:00
Bram Matthys f90c7a7991 Move IP validation from register_user() to cmd_uid().
This also makes it so the decoded IP is passed to register_user(),
eg "1.2.3.4" instead of binary base64'd stuff.
2021-08-12 20:09:24 +02:00
Bram Matthys 579988e07e ULOG_INFO, not LOG_INFO, strikes again! 2021-08-12 15:23:07 +02:00
Bram Matthys b48d7f8003 Fix for vhost checking code in cmd_uid, which didn't take into account '*' (no vhost set) 2021-08-12 15:20:14 +02:00
Bram Matthys 01753c67cd Validate hostname and vhost in UID command. And some very minor cleanups. 2021-08-12 09:13:02 +02:00
Bram Matthys be6928df78 Some cleanups in nick.c 2021-08-12 08:55:46 +02:00
Bram Matthys d9c940f65d Update client->flags inheritance code in register_user().
Hopefully correct... if this or ulines inheritance break you know
who did it ;)
2021-08-12 08:38:14 +02:00
Bram Matthys f9086f700e Newlog: nick.c 2021-08-12 08:37:54 +02:00
Bram Matthys e5a1a05dcf Newlog: nick: nick collision stuff
Also get rid of server<->nick collision code, as servers are guaranteed
to contain a dot now by valid_server() so this cannot happen anymore.
2021-08-11 13:51:05 +02:00
Bram Matthys 4e5dd044f5 Require module header with version "unrealircd-6" now 2021-08-10 14:37:10 +02:00
Bram Matthys 2c011202a4 Integrate iConf.network in iConf itself as the distinction between
these "network settings" and other settings has been lost in time.

Rename some of these variables and macro's.
ircnetwork -> NETWORK_NAME
ircnet005 -> NETWORK_NAME_005
defserv ->? DEFAULT_SERVER
hidden_host -> CLOAK_PREFIX
helpchan -> HELP_CHANNEL

Also one config change (visible to admins):
set::hiddenhost-prefix is now set::cloak-prefix
We still accept the old name, though.
The example conf has been updated as well, but not the wiki yet.
2021-08-10 14:22:42 +02:00
Bram Matthys 420eb2ffb6 Rename client->serv to client->server: this is set if the client is a server,
just like client->user is set if the client is a user.

Rename client->srvptr to client->uplink: this is the uplink that the client
is connected to. If the client is a user then it is set to the server that
the client is connected to, if the client is a server then it is set to the
server that the server is connected to (the.. tadah.. uplink).
For local clients it is always set to &me.
2021-08-10 12:52:46 +02:00
Bram Matthys 73f8976a3a Rename client->local->firsttime to client->local->creationtime
(Time user was created (connected on IRC))
2021-08-10 12:38:07 +02:00
Bram Matthys 6b36399533 Rename client->local->last to client->local->idle_since
(Last time a RESETIDLE message was received (PRIVMSG))
2021-08-10 12:34:13 +02:00
Bram Matthys 4dbc2ac860 Rename client->local->since to client->local->fake_lag, since it is used
for fake lag calculations only (well, except for 1 corner case).

As said, modules should use the new function:
void add_fake_lag(Client *client, long msec)
2021-08-10 12:26:19 +02:00