Bram Matthys
faffe7c9a8
Fix crash in webserver
2022-06-21 17:56:25 +02:00
Bram Matthys
7c8918e22d
Update rpc_error() to use JsonRpcError (enum) and add more error values.
2022-06-20 19:02:52 +02:00
Bram Matthys
b38b0f5086
Set loop.config_state to one of CONFIG_STATE_* so modules (and core)
...
can track at what step we are during configuration file and module
processing.
2022-06-20 12:54:22 +02:00
Bram Matthys
0a4c6e877d
Fix crash if 'websocket' is loaded without 'websocket_common'.
...
Previously we did show a warning but we could crash a millisecond
later so that wasn't particularly helpful.
Now, is_module_loaded() can be used from HOOKTYPE_CONFIGPOSTTEST
to detect if a module is loaded or not, contrary to us having to
do it in MOD_LOAD when it is too late. So now the requirement is
really enforced and also works for hot-loading as well as
unloading of required modules is now prevented.
2022-06-20 08:54:53 +02:00
Bram Matthys
a14609f493
Fix small memory leak in webserver.
2022-06-20 08:25:46 +02:00
Bram Matthys
26ab79132b
Fix memory leak in webserver for HTTPS POST.
2022-06-19 20:47:48 +02:00
Bram Matthys
bbf9600504
Mention JSON-RPC documentation in early release notes.
...
https://www.unrealircd.org/docs/JSON-RPC
[skip ci]
2022-06-19 20:28:51 +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
55387a8aa4
RPC: Fix strchr() on non-nul-terminated string (leading to OOB read)
2022-06-19 17:59:05 +02:00
Bram Matthys
85784e8118
Bump version to 6.0.5-git
2022-06-19 16:30:50 +02:00
Bram Matthys
8b2caf5501
Make listen::options::rpc implicitly enable TLS, so nobody
...
accidentally allows JSON-RPC over insecure HTTP.
2022-06-19 16:17:15 +02:00
Bram Matthys
5301ab5be8
Add some TODO items
2022-06-19 13:13:33 +00:00
Bram Matthys
941439a710
Use RPC_CALL_FUNC() just like how we have CMD_FUNC()
2022-06-19 13:13:33 +00:00
Bram Matthys
c24a8e43e3
Fix outdated doxygen information on CMD_FUNC()
2022-06-19 13:13:33 +00:00
Bram Matthys
f99085fc03
RPC: add user.get()
2022-06-19 13:13:33 +00:00
Bram Matthys
0e60b8bbfb
RPC: Add ?username=xyz&password=zzz authentication as well
...
FIXME: move URI parsing to 'webserver' and deal with unescaping %xx
2022-06-19 13:13:33 +00:00
Bram Matthys
c611f18d56
RPC: Add rpc-user { } block and do authentication
2022-06-19 13:13:33 +00:00
Bram Matthys
ab999659fc
Remove some FIXME's and cleanup code a little bit.
2022-06-19 13:13:33 +00:00
Bram Matthys
feb2c9c418
Don't print "Link to server [..] closed" for RPC and control sockets.
2022-06-19 13:13:33 +00:00
Bram Matthys
e718d2021f
Make websocket work over RPC
2022-06-19 13:13:33 +00:00
Bram Matthys
853f0685ed
Split off big chunk of websocket module into websocket_common module.
...
And load the websocket_common module by default (which is just an API).
2022-06-19 13:13:33 +00:00
Bram Matthys
7679ec7920
Get rid of cast, do things properly.
2022-06-19 13:13:33 +00:00
Bram Matthys
0eb42155dd
Limit request body to 4k by default.
2022-06-19 13:13:33 +00:00
Bram Matthys
3e35b8e96a
Small code cleanup
2022-06-19 13:13:33 +00:00
Bram Matthys
467e3d847a
Handle chunked encoding in webserver (mostly meant for RPC).
2022-06-19 13:13:33 +00:00
Bram Matthys
4a68008b81
Rename some more:
...
* WEB() now has handle_request() and handle_body(), makes more sense.
* webserver_handle_body_data() -> webserver_handle_body()
* and similar cases
2022-06-19 13:13:33 +00:00
Bram Matthys
12f2cd8555
Rename webserver_handle_body_data() -> webserver_handle_request_body()
2022-06-19 13:13:33 +00:00
Bram Matthys
9afdcb7ff0
Add request body handler in webserver -- only a beginning, the
...
chunked encoding stuff is copied from the modulemanager and #if'd out.
The non-chunked is not OK yet either, as it must check the Content-Length,
while we currently assume a single packet == the complete request.
2022-06-19 13:13:33 +00:00
Bram Matthys
cf60b22b31
Close RPC web connection immediately when all has been sent.
2022-06-19 13:13:33 +00:00
Bram Matthys
f9794c7ed5
Make RPC API work over HTTP(S). Well, first steps, anyway.
...
* No ACL checking yet
* No chunked encoding support
* No multi-frame support
etc...
2022-06-19 13:13:33 +00:00
Bram Matthys
b710fb188b
Add get_nvplist() function.
...
Requested by westor in https://bugs.unrealircd.org/view.php?id=6125
2022-06-19 13:13:33 +00:00
Bram Matthys
5e81a6ee67
Add listener->start_handshake function pointer.
...
This is start_of_normal_client_handshake() by default, but is
start_of_control_client_handshake() for the control channel
(for './unrealircd rehash' and such). Previously that was hardcoded.
It is also used by the RPC code now.
2022-06-19 13:13:33 +00:00
Bram Matthys
2bf41a47d2
Don't check for connect-flood on RPC connections.
...
Same for control channel, even though it was harmless to check,
still... can now skip it so why not?
2022-06-19 13:13:33 +00:00
Bram Matthys
46588db89a
Fix rehash crash since adding RPC code.
2022-06-19 13:13:33 +00:00
Bram Matthys
2c8fc5e641
Move special handling of control socket to procio_server.c.
...
Things like setting the client->status to CLIENT_STATUS_CONTROL
and list_add(&client->lclient_node, &control_list);
This does mean that we now add clients earlier to the unknown list,
even ones that are going to be control sockets and clients that are
going to be z-lined etc, but it should be a minimal performance hit
since it are just 1-4 insertions in a circular list.
At the same time it makes the code more cleaner and more maintainable
especially with all the "special cases" and such that are there now
and will only become more and more...
2022-06-19 13:13:33 +00:00
Bram Matthys
df8c5cfd76
Add ability to skip connect-flood and zlined checks via listener->options
...
with LISTENER_NO_CHECK_CONNECT_FLOOD and LISTENER_NO_CHECK_ZLINED.
2022-06-19 13:13:33 +00:00
Bram Matthys
29eb89a528
Attach client->local->listener to a client very early, now that it is safe.
...
This makes other code safer as well since they can assume that if the
client is local (client->local) that the listener (client->local->listener)
is non-NULL and safe to access until the client is completely destroyed.
2022-06-19 13:13:33 +00:00
Bram Matthys
1d613a592c
Remove freeing of client->local->listener and refdec from exit_client()
...
to free_client().
2022-06-19 13:13:33 +00:00
Bram Matthys
60c83b4ba1
Move connect-flood and max-unknown-connections-per-ip into their own module.
...
These deal with set::anti-flood::everyone::connect-flood and
set::max-unknown-connections-per-ip respectively.
This adds a new hook HOOKTYPE_ACCEPT, that is mostly meant for internal
usage by UnrealIRCd. Most module coders will want to use the existing
hook HOOKTYPE_HANDSHAKE instead.
This also gets of check_banned() which is now spread over the individual
modules (eg: checking banned is done in tkl on HOOKTYPE_ACCEPT and
HOOKTYPE_IP_CHANGE).
2022-06-19 13:13:33 +00:00
Bram Matthys
a09d4a7e88
Add CLIENT_STATUS_RPC and add SetRPC() and IsRPC().
2022-06-19 13:13:33 +00:00
Bram Matthys
6b30482c04
Don't apply registration timeout to *NIX domain socket connections.
...
May want to reconsider this but.. for now..
2022-06-19 13:13:33 +00:00
Bram Matthys
1830f3e53f
Add RPC channel.list call to show list of channels (with all details)
2022-06-19 13:13:33 +00:00
Bram Matthys
61ba3727df
JSON-RPC: Use proper error response with error codes according to
...
the official specification (one of JSON_RPC_ERROR_*).
Add proper rpc_error() and rpc_error_fmt()
Don't steal reference in rpc_response().
2022-06-19 13:13:33 +00:00
Bram Matthys
4cd520d327
Make user.list() RPC API return a list of all users with details.
...
This is the 1st RPC API call that actually works :D
2022-06-19 13:13:33 +00:00
Bram Matthys
31fc2843a2
Add "rpc" module. Supports parsing from *NIX domain sockets for starters.
2022-06-19 13:13:33 +00:00
Bram Matthys
53732e0f78
Warn if 'websocket' module is loaded without 'webserver' (= won't work).
2022-06-19 13:13:33 +00:00
Bram Matthys
b9d1af8fa0
Call config run hooks for CONFIG_LISTEN and CONFIG_LISTEN_OPTIONS also
...
for unix domain sockets.
2022-06-19 13:13:33 +00:00
Bram Matthys
0134c435d5
Don't apply handshake-delay to any *NIX domain socket connections,
...
instead of only exempting *NIX domain socket control channels.
2022-06-19 13:13:33 +00:00
Bram Matthys
cbfcfa1428
Create src/modules/rpc directory
2022-06-19 13:13:33 +00:00
Bram Matthys
97c8274695
Add RPC API (the beginning..)
2022-06-19 13:13:33 +00:00