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

760 Commits

Author SHA1 Message Date
Bram Matthys 5425c8fbb6 Don't fail on versions older than Windows 10 version 1803.
And be a bit more informative on why unrealircdctl fails on those.
2022-01-03 13:31:24 +01:00
Bram Matthys c02eb3f16c Windows code cleanup: WSAStartup() -> init_winsock() 2022-01-03 13:19:22 +01:00
Bram Matthys 98c0e786b5 Make UnrealIRCd compile on Windows again.
Updated the makefile to build unrealircdctl.exe etc.
2022-01-03 13:10:53 +01:00
Bram Matthys 39688517b0 Make "./unrealircd rehash" show output on the terminal, same for
"./unrealircd reloadtls" and there is now also a "./unrealircd status"

The output is colorized if the terminal supports it (just like on the
boot screen) and also the exit status is 0 for success and non-0 for
failure. The purpose of all this is that you can easily detect rehash
errors on the command line.

These three commands communicate to UnrealIRCd via the new control
UNIX socket, which is in ~/data/unrealircd.ctl.
This also does a lot of other stuff because we now have an internal
tool called bin/unrealircdctl which is called by ./unrealircd for
some of the commands to communicate to the unrealircd.ctl socket.
Later on more of the existing functionality may be moved to that
tool and we may also provide it on Windows in CLI mode so people
have more of the same functionality as on *NIX.
2022-01-02 20:17:36 +01:00
Bram Matthys dbef19cd7a Add initial implementation of UNIX domain sockets (listen::file).
Various things still need to be done: a lot more testing, ability to
set permissions on the file, #ifdef's because of lack of support
on Windows (currently won't compile), etc.

One thing that I don't intend to change is that I chose not to display
the socket in the host but have clients show up as 'localhost' (and
ip '127.0.0.1'). Doing it this way keeps things easy, otherwise we risk
a lot of breakage for nearly nothing gained, really.

Things can be tested via:
listen {
        file "/tmp/listen";
}

and then with netcat:
nc -U /tmp/listen
USER x x x x
NICK hai
etc...
2022-01-01 18:48:17 +01:00
Bram Matthys 4e209968fe Fix hang on "Loading IRCd configuration" if DNS is not working correctly.
For example if the 1st DNS resolver is refusing or ignoring requests.
We forgot to call unrealdns_timeout() in the waiting loop, so DNS requests
never timed out and c-ares didn't try the 2nd/3rd server either.

Issue reported by Elodie.
2021-12-30 14:49:29 +01:00
Bram Matthys 3859c2f477 Error when an invalid (unknown) snomask is encountered in the config file.
This should help users who are upgrading to UnrealIRCd 6 spot silly mistakes
which would cause them to miss server notices.

It now errors and refers to
https://www.unrealircd.org/docs/Upgrading_from_5.x#Update_your_snomasks
2021-12-28 18:04:23 +01:00
Bram Matthys d687e310bd Add function pretty_time_val_r(), for which you can specify a buf. 2021-12-26 08:59:44 +01:00
Bram Matthys 2a574120f5 Rename function to avoid clashes 2021-12-11 10:25:15 +01:00
Bram Matthys c604a3a70e Make soft extended server bans actually work (GLINE %~country:XX)
Reported by musk in https://bugs.unrealircd.org/view.php?id=6019
2021-12-05 09:45:13 +01:00
Bram Matthys adc8d5802f Fix +s/+p during netmerge (was on todo) 2021-12-04 10:17:34 +01:00
Bram Matthys b078a9c8b5 Fix cut-off and expansion issues with MODE, which is a possible problem when
using mixed UnrealIRCd 5 and UnrealIRCd 6 networks.

This is a slightly complex rewrite of make_mode_str() and do_mode(),
as we nog go from single mode lines to potentially multiple mode lines.

In short: whenever we would be near buffer cut-off point (the famous
512 byte limit) then previously we would prevent the mode, though not
succesfully in all cases where a network consists of mixed 5.x and 6.x.
From this point onward we no longer do that. Instead we convert one
MODE command to two MODE lines if that is needed.
The benefit of this is that we no longer prevent it BEFORE processing
the MODE, which is a flawed method and could be wrong (causing desyncs).
And also, we no longer partially ignore MODE lines from clients when
they would cause the limit to be exceeded, as we replace them with
two MODE lines instead.

These are more changes than I wanted at such a late point but.. they seem
to be necessary to prevent U5-U6 compatibility issues.
2021-11-19 13:53:21 +01:00
Bram Matthys 6b87bd1b34 Only allow setting of snomasks that actually exist in the log { } blocks.
Otherwise probably too confusing. Suggested by westor in
https://bugs.unrealircd.org/view.php?id=5995
2021-11-10 15:59:10 +01:00
Bram Matthys edb33baa22 Make it so set::level-on-join can also specify a mode letter such
as 'v' instead of like 'voice'. This is needed because third party
modules can now add access levels as well (eg: X).
2021-11-03 08:44:39 +01:00
Bram Matthys 520804edc2 Add set::whois-detail which allows you to configure which items
to expose to which users and in what detail.

The default configuration is as follows:

set {
	whois-details {
		basic		{ everyone full; }
		modes		{ everyone none;	self full;	oper full; }
		realhost	{ everyone none;	self full;	oper full; }
		registered-nick	{ everyone full; }
		channels	{ everyone limited;	self full;	oper full; }
		server		{ everyone full; }
		away		{ everyone full; }
		oper		{ everyone limited;	self full;	oper full; }
		secure		{ everyone limited;	self full;	oper full; }
		bot		{ everyone full; }
		services	{ everyone full; }
		reputation	{ everyone none;	self none;	oper full; }
		geo		{ everyone none;	self none;	oper full; }
		certfp		{ everyone full; }
		shunned		{ everyone none;	self none;	oper full; }
		account		{ everyone full; }
		swhois		{ everyone full; }
		idle		{ everyone limited;	self full;	oper full; }
	}
}

Oh, yeah, and for "secure" this also adds displaying of the TLS cipher
in /WHOIS for ircops and self by default. For all others it is limited
to just "is using a Secure Connection".

This also removes the newly added set::geoip::whois-for-anyone since
it is now configured via set::whois-details::geo.

Module coders: HOOKTYPE_WHOIS changed and you may no longer send
directly to the client from this hook. Instead, you should use
add to the NameValuePrioList, usually via the functions
add_nvplist_numeric() and add_nvplist_numeric_fmt().
For inspiration see bot_whois in src/modules/usermodes/bot.c
and reputation_whois in src/modules/reputation.c
2021-09-27 17:27:26 +02:00
Bram Matthys ee8cc0e8e2 Get rid of Usermode_Table[] and use a linked list called usermodes.
Just like already done for Channelmode_Table[] -> channelmodes.
2021-09-26 12:46:34 +02:00
Bram Matthys e4b449adf8 Add set_channel_mode() which can be used to issue a server mode.
It's usage would be rare, but this is f.e. used from channeldb.
Other uses may be in some 3rd party module.
Example: set_channel_mode(channel, "+k", "key")
2021-09-25 17:42:21 +02:00
Bram Matthys 38e47b9b62 Rename find_person() to find_user() to be consistent in the naming that
we use since UnrealIRCd 5: we have users (IsUser) and servers (IsServer).
2021-09-25 16:44:11 +02:00
Bram Matthys 4a4d069f11 Get rid of ignore for -Wformat-nonliteral in two entire files,
now it is only in 5 functions in entire UnrealIRCd. Acceptable.
2021-09-25 15:16:45 +02:00
Bram Matthys 8603c2eb71 Update hunt_server() so command is really the command (eg "LUSERS") and
not a format string (eg ":%s LUSERS %s"). It now simply concats all parv[]'s.
That is, up to parc count. And it automatically does the :stuff for the
last parameter if it contains spaces or starts with a : etc.

This gets rid of a bit sketchy code with an arbitrary maximum etc.

Now it's just:
if (hunt_server(client, NULL, "REHASH", 1, parc, parv) != HUNTED_ISME)
	return;

This has one side effect, though:
Previously we used the format string, so it may be possible for S2S
traffic to now have more arguments then before here and there.
Eg:
* It could be that the caller was using a format string to
  intentionally cut off an extra parameter at the end.
  You can still do that if you call with eg parc-1 instead of parc.
  I don't think there were any such cases though, but hard to rule out.
* Extranous parameters may show up in S2S traffic where it was
  previously unexpected.
2021-09-25 14:49:19 +02:00
Bram Matthys b95eb0b3b7 Add get_operlogin() and get_operclass() functions to make things easy.
This retrieves the oper login (/OPER thislogin ...) and operclass of
local and remote users.
2021-09-25 10:57:00 +02:00
Bram Matthys edbfaaf95d JSON logging: expand user modes, snomasks, and oper login (if available)
This also adds a function get_usermode_string_r(), which requires
you to specify the buffer (and buffer length) for building the
umode string.
2021-09-25 09:45:30 +02:00
Bram Matthys 618049fca1 Add buildnumeric() function, which will only be used sporadically as you
would normally use sendnumeric() instead.

The buildnumeric() function prepares a buffer but does not send it.
It is used in eg CAN_KICK / CAN_SET_TOPIC, where you need to set an
'errbuf' with a full IRC protocol line to reject the request (which
then may or may not be sent depending on operoverride privileges).
2021-09-25 09:03:48 +02:00
Bram Matthys efb16159f3 Add check for missing include "snomasks.default.conf";
Well, not literally, but indirectly :D
2021-09-24 17:44:57 +02:00
Bram Matthys baa07b179f Get rid of some other old upgrade conf stuff as well. Remove some,
but keep some other errors, since they may still be helpful,
or at least for now.
2021-09-24 16:47:23 +02:00
Bram Matthys a2a9eebf98 Get rid of ./unrealircd upgrade-conf (was for 3.2.x to 4.x) 2021-09-24 16:40:42 +02:00
Bram Matthys 4b079dbd1b Add JOIN/PART/KICK logging (snomask 'j').
This also changes the remove_user_from_channel() function to have an
extra parameter to hide it from logs. This is used for KICK (already
logged) and QUIT (which would be stupid to generate 10 part log lines for).
2021-09-24 16:08:41 +02:00
Bram Matthys 56c3b4ced6 Automatically add default log block that logs everything if no log
block to disk is present.
Also update the English example.conf.

Both may need some default filtering (or not)...
2021-09-24 11:30:04 +02:00
Bram Matthys 52667445f2 Fix warning on vsendto_prefix_one (my mistake...) 2021-09-23 20:03:33 +02:00
Bram Matthys 43e4c5444f We already got rid of sendto_ops(), now get rid of sendto_realops().
Use the new logging instead.
2021-09-23 19:57:05 +02:00
Bram Matthys 20c4ac2cd1 Move all wallops code out of the core. 2021-09-23 19:21:19 +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 7fdd14de95 Remove sendto_snomask() and sendto_snomask_global() as this is no longer
the way we do things with the new logging stuff.

And converted the last few calls to these functions to unreal_log().
2021-09-22 14:27:50 +02:00
Bram Matthys 139098919b Get rid of PREFIX_* in sendto_channel(), message.c and in chanmsg hook.
We use char *member_modes like we now have at all the other places,
which contains eg "o".

TODO: fix prefix sending rules or remove some if 0'd out code

And not sure if we want to do it entirely this way :D
2021-09-20 15:54:57 +02:00
Bram Matthys 6277efd85e Make SAJOIN code use generic prefix framework. Also fix multi-channel
joins in such a case, code was wrong (things being done in the wrong
scope).

This also fixes a bug where an OperOverride message was generated
for SAJOIN nick @#test
2021-09-20 14:19:04 +02:00
Bram Matthys 4cea88645c Modularize member modes (vhoaq).
Still need to clean up a bit after this, but it passes all tests :)
2021-09-13 18:44:18 +02:00
Bram Matthys cf936078d4 Get rid of the legacy numeric stuff. The file src/numeric.c is removed
as all the numerics are in include/numeric.h now, so we can have
format string checks with a few macro tricks.
(See also previous commits)
2021-09-12 16:31:26 +02:00
Bram Matthys 4392468c3e Update HOOKTYPE_CAN_JOIN and HOOKTYPE_CAN_JOIN_LIMITEXCEEDED to take
an extra char **errmsg argument. Upon failure (non zero return value)
this should contain a format string to be sent to the client
(with the return value denoting the number of the numeric).

This gets rid of sendnumeric_legacy() in join.c
2021-09-12 16:09:36 +02:00
Bram Matthys fc9bf5d607 Change sendnumeric() so it can check for format string problems.
This already found a few issues.

As a side-effect, this also means you can only use RPL_xxx and
ERR_xxx in the 2nd argument from now on. You can no longer use
a dynamic integer (eg 'reply') at runtime, since then the format
string cannot be checked.

More to follow, after making sure it works on Windows too.
2021-09-12 14:30:34 +02:00
Bram Matthys 6ce95c3d79 Fixes for previous commit now that we use -Waddress (well, implicitly
through -Wall/-Wextra)
2021-09-12 09:19:46 +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 39edbd643d Get rid of proto.h and integrate the 20 lines into h.h. 2021-09-11 10:26:18 +02:00
Bram Matthys 5dc6411419 Const const const. This completes the work in h.h. 2021-09-11 10:21:54 +02:00
Bram Matthys fcf020b99e It's raining consts... 2021-09-11 09:56:22 +02:00
Bram Matthys 7cabd4b79e Const const const 2021-09-11 08:17:12 +02:00
Bram Matthys ac84d4f207 Const const const... modules.c and elsewhere. 2021-09-11 07:53:30 +02:00
Bram Matthys 5bc244c1f3 Add a lot more consts. This finishes the work for all hooktypes. 2021-09-10 20:36:38 +02:00
Bram Matthys 5b091975f5 Get rid of parv[] in HOOKTYPE_CAN_JOIN and HOOKTYPE_CAN_JOIN_LIMITEXCEEDED
as it already has a 'key' argument too.
2021-09-10 19:11:37 +02:00
k4be e13815b604 Add extjwt module 2021-09-10 16:19:07 +02:00
Bram Matthys 86fa29aaee Add consts in support.c 2021-09-10 15:48:58 +02:00