login: allow watching virtual machines with sd_get_machine_names()
This commit is contained in:
parent
a20affe2f0
commit
e10375f2c0
|
@ -50,7 +50,7 @@
|
||||||
<refname>sd_login_monitor_get_events</refname>
|
<refname>sd_login_monitor_get_events</refname>
|
||||||
<refname>sd_login_monitor_get_timeout</refname>
|
<refname>sd_login_monitor_get_timeout</refname>
|
||||||
<refname>sd_login_monitor</refname>
|
<refname>sd_login_monitor</refname>
|
||||||
<refpurpose>Monitor login sessions, seats and users</refpurpose>
|
<refpurpose>Monitor login sessions, seats, users and virtual machines/containers</refpurpose>
|
||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
|
@ -96,23 +96,26 @@
|
||||||
<title>Description</title>
|
<title>Description</title>
|
||||||
|
|
||||||
<para><function>sd_login_monitor_new()</function> may
|
<para><function>sd_login_monitor_new()</function> may
|
||||||
be used to monitor login sessions, users and seats. Via
|
be used to monitor login sessions, users, seats and
|
||||||
a monitor object a file descriptor can be integrated
|
virtual machines/containers. Via a monitor object a
|
||||||
into an application defined event loop which is woken
|
file descriptor can be integrated into an application
|
||||||
up each time a user logs in, logs out or a seat is
|
defined event loop which is woken up each time a user
|
||||||
added or removed, or a session, user, or seat changes
|
logs in, logs out or a seat is added or removed, or a
|
||||||
state otherwise. The first parameter takes a string
|
session, user, seat or virtual machine/container
|
||||||
which can be <literal>seat</literal> (to get
|
changes state otherwise. The first parameter takes a
|
||||||
|
string which can be <literal>seat</literal> (to get
|
||||||
only notifications about seats being added, removed or
|
only notifications about seats being added, removed or
|
||||||
changed), <literal>session</literal> (to get only
|
changed), <literal>session</literal> (to get only
|
||||||
notifications about sessions being created or removed
|
notifications about sessions being created or removed
|
||||||
or changed) or <literal>uid</literal> (to get only
|
or changed), <literal>uid</literal> (to get only
|
||||||
notifications when a user changes state in respect to
|
notifications when a user changes state in respect to
|
||||||
logins). If notifications shall be generated in all
|
logins) or <literal>machine</literal> (to get only
|
||||||
these conditions, NULL may be passed. Note that in the
|
notifications when a virtual machine or container is
|
||||||
future additional categories may be defined. The
|
started or stopped). If notifications shall be
|
||||||
second parameter returns a monitor object and needs to
|
generated in all these conditions, NULL may be
|
||||||
be freed with the
|
passed. Note that in the future additional categories
|
||||||
|
may be defined. The second parameter returns a monitor
|
||||||
|
object and needs to be freed with the
|
||||||
<function>sd_login_monitor_unref()</function> call
|
<function>sd_login_monitor_unref()</function> call
|
||||||
after use.</para>
|
after use.</para>
|
||||||
|
|
||||||
|
|
|
@ -677,6 +677,27 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) {
|
||||||
good = true;
|
good = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!category || streq(category, "machine")) {
|
||||||
|
_cleanup_free_ char *md = NULL, *p = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = cg_get_machine_path(&md);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, md, NULL, &p);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
k = inotify_add_watch(fd, p, IN_MOVED_TO|IN_CREATE|IN_DELETE);
|
||||||
|
if (k < 0) {
|
||||||
|
close_nointr_nofail(fd);
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
good = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!good) {
|
if (!good) {
|
||||||
close_nointr(fd);
|
close_nointr(fd);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -157,7 +157,8 @@ int sd_get_machine_names(char ***machines);
|
||||||
typedef struct sd_login_monitor sd_login_monitor;
|
typedef struct sd_login_monitor sd_login_monitor;
|
||||||
|
|
||||||
/* Create a new monitor. Category must be NULL, "seat", "session",
|
/* Create a new monitor. Category must be NULL, "seat", "session",
|
||||||
* "uid" to get monitor events for the specific category (or all). */
|
* "uid", "machine" to get monitor events for the specific category
|
||||||
|
* (or all). */
|
||||||
int sd_login_monitor_new(const char *category, sd_login_monitor** ret);
|
int sd_login_monitor_new(const char *category, sd_login_monitor** ret);
|
||||||
|
|
||||||
/* Destroys the passed monitor. Returns NULL. */
|
/* Destroys the passed monitor. Returns NULL. */
|
||||||
|
|
Loading…
Reference in a new issue