varlinkctl: add detailed error message when --more is needed

Instead of reporting a "Invalid exchange", tell the user the `--more`
flag is missing.

Closes: #39201
This commit is contained in:
Jelle van der Waa
2025-10-04 15:11:05 +02:00
committed by Mike Yuan
parent 6602a5f720
commit 42e543408b
2 changed files with 4 additions and 1 deletions

View File

@@ -783,7 +783,9 @@ static int verb_call(int argc, char *argv[], void *userdata) {
"Method call %s() returned expected error: %s", method, error);
r = 0;
} else {
} else if (streq(error, SD_VARLINK_ERROR_EXPECTED_MORE))
r = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call %s() failed: called without 'more' flag, but flag needs to be set.", method);
else {
r = sd_varlink_error_to_errno(error, reply);
if (r != -EBADR)
log_error_errno(r, "Method call %s() failed: %m", method);

View File

@@ -191,6 +191,7 @@ varlinkctl introspect /run/systemd/io.systemd.Manager io.systemd.Unit
varlinkctl --more call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{}'
varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"name": "multi-user.target"}'
varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"pid": {"pid": 0}}'
(! varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{}' |& grep -q "called without 'more' flag")
(! varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"name": ""}')
(! varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"name": "non-existent.service"}')
(! varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"pid": {"pid": -1}}' )