mirror of
https://github.com/systemd/systemd.git
synced 2025-02-08 09:57:41 +03:00
varlink: also honour new env var $SYSTEMD_VARLINK_LISTEN in varlink_server_listen_auto()
varlink_server_listen_auto() is supposed to be the one-stop solution for turning simple command line tools into IPC services. They aren't easy to test/debug however, since you have to invoke them through a service manager. Let's make this easier: if the SYSTEMD_VARLINK_LISTEN env var is set, let's listen on the socket specified therein. This makes things easier to gdb: just run the service from the cmdline.
This commit is contained in:
parent
1752a8ee33
commit
4a6fe5f05e
@ -616,3 +616,8 @@ Tools using the Varlink protocol (such as `varlinkctl`) or sd-bus (such as
|
|||||||
|
|
||||||
* `$SYSTEMD_SSH` – the ssh binary to invoke when the `ssh:` transport is
|
* `$SYSTEMD_SSH` – the ssh binary to invoke when the `ssh:` transport is
|
||||||
used. May be a filename (which is searched for in `$PATH`) or absolute path.
|
used. May be a filename (which is searched for in `$PATH`) or absolute path.
|
||||||
|
|
||||||
|
* `$SYSTEMD_VARLINK_LISTEN` – interpreted by some tools that provide a Varlink
|
||||||
|
service. Takes a file system path: if specified the tool will listen on an
|
||||||
|
`AF_UNIX` stream socket on the specified path in addition to whatever else it
|
||||||
|
would listen on.
|
||||||
|
@ -3477,6 +3477,14 @@ int varlink_server_listen_auto(VarlinkServer *s) {
|
|||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For debug purposes let's listen on an explicitly specified address */
|
||||||
|
const char *e = secure_getenv("SYSTEMD_VARLINK_LISTEN");
|
||||||
|
if (e) {
|
||||||
|
r = varlink_server_listen_address(s, e, FLAGS_SET(s->flags, VARLINK_SERVER_ROOT_ONLY) ? 0600 : 0666);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3922,6 +3930,10 @@ int varlink_invocation(VarlinkInvocationFlags flags) {
|
|||||||
|
|
||||||
/* Returns true if this is a "pure" varlink server invocation, i.e. with one fd passed. */
|
/* Returns true if this is a "pure" varlink server invocation, i.e. with one fd passed. */
|
||||||
|
|
||||||
|
const char *e = secure_getenv("SYSTEMD_VARLINK_LISTEN"); /* Permit a manual override for testing purposes */
|
||||||
|
if (e)
|
||||||
|
return true;
|
||||||
|
|
||||||
r = sd_listen_fds_with_names(/* unset_environment= */ false, &names);
|
r = sd_listen_fds_with_names(/* unset_environment= */ false, &names);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user