From 671fee187369c6301de1b48e8c7293bbcc3201f3 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 12 May 2020 10:37:28 +0200 Subject: [PATCH 1/3] man: run man/update-dbus-docs again --- man/org.freedesktop.systemd1.xml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml index 741fd3d481a..9a8b788982a 100644 --- a/man/org.freedesktop.systemd1.xml +++ b/man/org.freedesktop.systemd1.xml @@ -110,6 +110,8 @@ node /org/freedesktop/systemd1 { in i signal); CleanUnit(in s name, in as mask); + FreezeUnit(in s name); + ThawUnit(in s name); ResetFailedUnit(in s name); SetUnitProperties(in s name, in b runtime, @@ -485,6 +487,10 @@ node /org/freedesktop/systemd1 { + + + + @@ -743,6 +749,10 @@ node /org/freedesktop/systemd1 { + + + + @@ -1514,6 +1524,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { Ref(); Unref(); Clean(in as mask); + Freeze(); + Thaw(); properties: @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s Id = '...'; @@ -1570,6 +1582,7 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s LoadState = '...'; readonly s ActiveState = '...'; + readonly s FreezerState = '...'; readonly s SubState = '...'; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s FragmentPath = '...'; @@ -1601,6 +1614,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { readonly b CanIsolate = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly as CanClean = ['...', ...]; + @org.freedesktop.DBus.Property.EmitsChangedSignal("const") + readonly b CanFreeze = ...; readonly (uo) Job = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly b StopWhenUnneeded = ...; @@ -1678,6 +1693,10 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { + + + + @@ -1688,6 +1707,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { + + @@ -1698,6 +1719,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { + + @@ -1770,6 +1793,10 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { + + + + @@ -1826,6 +1853,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { + + @@ -1868,6 +1897,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { + + From 55842c7326b5e23cb7cb672e3ebe7aedfd08d923 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 12 May 2020 09:02:47 +0200 Subject: [PATCH 2/3] homed: fix parameter names on D-Bus methods These arguments contain UserRecord structures serialized to JSON, however only the "secret" part of it, not a whole user record. We do this since the secret part is conceptually part of the user record and in some contexts we need a user record in full with both secret and non-secret part, and in others just the secret and in other just the non-secret part, but we want to keep this in memory in the same logic. Hence, let's rename the arguments where we expect a user record consisting only of the secret part to "secret". --- man/org.freedesktop.home1.xml | 40 +++++++++++++++++------------------ src/home/homed-home-bus.c | 18 ++++++++-------- src/home/homed-manager-bus.c | 22 +++++++++---------- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/man/org.freedesktop.home1.xml b/man/org.freedesktop.home1.xml index cb1e3a182ec..3f1094595a9 100644 --- a/man/org.freedesktop.home1.xml +++ b/man/org.freedesktop.home1.xml @@ -65,30 +65,30 @@ node /org/freedesktop/home1 { out o bus_path); ListHomes(out a(susussso) home_areas); ActivateHome(in s user_name, - in s user_record); + in s secret); DeactivateHome(in s user_name); - RegisterHome(in s home_record); + RegisterHome(in s user_record); UnregisterHome(in s user_name); - CreateHome(in s home_record); + CreateHome(in s user_record); RealizeHome(in s user_name, - in s user_record); + in s secret); RemoveHome(in s user_name); FixateHome(in s user_name, - in s user_record); + in s secret); AuthenticateHome(in s user_name, - in s user_record); + in s secret); UpdateHome(in s user_record); ResizeHome(in s user_name, in t size, - in s user_record); + in s secret); ChangePasswordHome(in s user_name, - in s new_user_record, - in s old_user_record); + in s new_secret, + in s old_secret); LockHome(in s user_name); UnlockHome(in s user_name, - in s user_record); + in s secret); AcquireHome(in s user_name, - in s user_record, + in s secret, in b please_suspend, out h send_fd); RefHome(in s user_name, @@ -229,21 +229,21 @@ node /org/freedesktop/home1 { node /org/freedesktop/home1/home { interface org.freedesktop.home1.Home { methods: - Activate(in s user_record); + Activate(in s secret); Deactivate(); Unregister(); - Realize(in s user_record); + Realize(in s secret); Remove(); - Fixate(in s user_record); - Authenticate(in s user_record); + Fixate(in s secret); + Authenticate(in s secret); Update(in s user_record); Resize(in t size, - in s user_record); - ChangePassword(in s new_user_record, - in s old_user_record); + in s secret); + ChangePassword(in s new_secret, + in s old_secret); Lock(); - Unlock(in s user_record); - Acquire(in s user_record, + Unlock(in s secret); + Acquire(in s secret, in b please_suspend, out h send_fd); Ref(in b please_suspend, diff --git a/src/home/homed-home-bus.c b/src/home/homed-home-bus.c index af2ddce330b..6be361a5aac 100644 --- a/src/home/homed-home-bus.c +++ b/src/home/homed-home-bus.c @@ -798,7 +798,7 @@ const sd_bus_vtable home_vtable[] = { SD_BUS_METHOD_WITH_NAMES("Activate", "s", - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, bus_home_method_activate, SD_BUS_VTABLE_SENSITIVE), @@ -806,7 +806,7 @@ const sd_bus_vtable home_vtable[] = { SD_BUS_METHOD("Unregister", NULL, NULL, bus_home_method_unregister, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD_WITH_NAMES("Realize", "s", - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, bus_home_method_realize, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -814,13 +814,13 @@ const sd_bus_vtable home_vtable[] = { SD_BUS_METHOD("Remove", NULL, NULL, bus_home_method_remove, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD_WITH_NAMES("Fixate", "s", - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, bus_home_method_fixate, SD_BUS_VTABLE_SENSITIVE), SD_BUS_METHOD_WITH_NAMES("Authenticate", "s", - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, bus_home_method_authenticate, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -833,27 +833,27 @@ const sd_bus_vtable home_vtable[] = { SD_BUS_METHOD_WITH_NAMES("Resize", "ts", SD_BUS_PARAM(size) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, bus_home_method_resize, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), SD_BUS_METHOD_WITH_NAMES("ChangePassword", "ss", - SD_BUS_PARAM(new_user_record) - SD_BUS_PARAM(old_user_record), + SD_BUS_PARAM(new_secret) + SD_BUS_PARAM(old_secret), NULL,, bus_home_method_change_password, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), SD_BUS_METHOD("Lock", NULL, NULL, bus_home_method_lock, 0), SD_BUS_METHOD_WITH_NAMES("Unlock", "s", - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, bus_home_method_unlock, SD_BUS_VTABLE_SENSITIVE), SD_BUS_METHOD_WITH_NAMES("Acquire", "sb", - SD_BUS_PARAM(user_record) + SD_BUS_PARAM(secret) SD_BUS_PARAM(please_suspend), "h", SD_BUS_PARAM(send_fd), diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c index 6306e12d394..ce6919a1a7f 100644 --- a/src/home/homed-manager-bus.c +++ b/src/home/homed-manager-bus.c @@ -661,7 +661,7 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("ActivateHome", "ss", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, method_activate_home, SD_BUS_VTABLE_SENSITIVE), @@ -675,7 +675,7 @@ static const sd_bus_vtable manager_vtable[] = { /* Add the JSON record to homed, but don't create actual $HOME */ SD_BUS_METHOD_WITH_NAMES("RegisterHome", "s", - SD_BUS_PARAM(home_record), + SD_BUS_PARAM(user_record), NULL,, method_register_home, SD_BUS_VTABLE_UNPRIVILEGED), @@ -691,7 +691,7 @@ static const sd_bus_vtable manager_vtable[] = { /* Add JSON record, and create $HOME for it */ SD_BUS_METHOD_WITH_NAMES("CreateHome", "s", - SD_BUS_PARAM(home_record), + SD_BUS_PARAM(user_record), NULL,, method_create_home, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -700,7 +700,7 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("RealizeHome", "ss", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, method_realize_home, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -717,7 +717,7 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("FixateHome", "ss", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, method_fixate_home, SD_BUS_VTABLE_SENSITIVE), @@ -726,7 +726,7 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("AuthenticateHome", "ss", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, method_authenticate_home, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -743,7 +743,7 @@ static const sd_bus_vtable manager_vtable[] = { "sts", SD_BUS_PARAM(user_name) SD_BUS_PARAM(size) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, method_resize_home, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -751,8 +751,8 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("ChangePasswordHome", "sss", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(new_user_record) - SD_BUS_PARAM(old_user_record), + SD_BUS_PARAM(new_secret) + SD_BUS_PARAM(old_secret), NULL,, method_change_password_home, SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_SENSITIVE), @@ -769,7 +769,7 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("UnlockHome", "ss", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(user_record), + SD_BUS_PARAM(secret), NULL,, method_unlock_home, SD_BUS_VTABLE_SENSITIVE), @@ -784,7 +784,7 @@ static const sd_bus_vtable manager_vtable[] = { SD_BUS_METHOD_WITH_NAMES("AcquireHome", "ssb", SD_BUS_PARAM(user_name) - SD_BUS_PARAM(user_record) + SD_BUS_PARAM(secret) SD_BUS_PARAM(please_suspend), "h", SD_BUS_PARAM(send_fd), From 2dffb32309936bcd8817f8dec68f5870bd474636 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 12 May 2020 08:55:28 +0200 Subject: [PATCH 3/3] man: document homed D-Bus API --- man/org.freedesktop.home1.xml | 321 ++++++++++++++++++++++++---------- man/systemd-homed.service.xml | 3 +- 2 files changed, 229 insertions(+), 95 deletions(-) diff --git a/man/org.freedesktop.home1.xml b/man/org.freedesktop.home1.xml index 3f1094595a9..e7d12a031e2 100644 --- a/man/org.freedesktop.home1.xml +++ b/man/org.freedesktop.home1.xml @@ -23,8 +23,7 @@ Introduction - - systemd-homed.service8 + systemd-homed.service8 is a system service which may be used to to create, remove, change or inspect home areas. This page describes the D-Bus interface. @@ -105,54 +104,6 @@ node /org/freedesktop/home1 { }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -212,13 +163,193 @@ node /org/freedesktop/home1 { Methods - ... + GetHomeByName() returns basic user information (a minimal subset of the full + user record), provided a user name. The information supplied more or less matches what + getpwnam3 returns: + the numeric UID and GID, the real name, home directory and shell. In addition it returns a state + identifier describing the state the user's home directory is in, as well as a bus path referring to the + bus object encapsulating the user record and home directory. This object implements the + org.freedesktop.home1.Home interface documented below. + + GetHomeByUID() is similar to GetHomeByName() but + acquires the information based on the numeric UID of the user. + + GetUserRecordByName() is also similar to + GetHomeByName() but returns the full JSON user record data instead of the broken + down records. An additional returned boolean indicates whether the record is complete or not. A record + is considered complete when its privileged section is included, and incomplete if it + was removed (see JSON User Records for details + about the various sections of a user record). Generally, only privileged clients and clients running + under the identity of the user itself get access to the privileged section and will + thus see complete records. + + GetUserRecordByUID() is similar to GetUserRecordByName() + but returns the user record matching the specified numeric UID. + + ListHomes() returns an array of all locally managed users. The array + contains the same fields GetHomeByName() returns: user name, numeric UID, state, + numeric GID, real name, home directory, shell and bus path of the matching bus object. + + ActivateHome() activates (i.e. mounts) the home directory of the specified + user. The second argument shall contain a user record consisting only of a secret + section (all other sections should be stripped, see JSON + User Records for details), and should contain only the secret credentials necessary for + unlocking the home directory. Typically a client would invoke this function first with an entirely + empty record (which is possibly sufficient if single-factor authentication with a plugged-in security + token is configured), and would then retry with a record populated with more information, depending on + the returned error code, in case more credentials are necessary. This function is synchronous and + returns only after the home directory was fully activated (or the operation failed), which might take + some time. Clients must be prepared for that, and typically should extend the D-Bus method call + time-out accordingly. This method is equivalent to the Activate() method on the + org.freedesktop.home1.Home interface documented below, but may be called on the + manager object and takes a user name as additional argument, instead. + + DeactivateHome() deactivates (i.e. unmounts) the home directory of the + specified user. It is equivalent to the Deactivate() method on the + org.freedesktop.home1.Home interface documented below. + + RegisterHome() registers a new home directory locally. It receives the JSON + user record as only argument (which typically excludes the secret + section). Registering a home directory just makes the user record known to the system, it does not + create a home directory or such (which is expected to exist already, or created later). This operation + is useful to register home directories locally that are not located where + systemd-homed.service would find them automatically. + + UnregisterHome() unregisters an existing home directory. It takes a user + name as argument and undoes what RegisterHome() does. It does not attempt to + remove the home directory itself, it just unregisters it with the local system. Note that if the home + directory is placed where systemd-homed.service looks for home directories anyway + this call will only undo fixation (see below), but the record will remain known to + systemd-homed.service and be listed among known records. Since the user record is + embedded into the home directory this operation generally does not discard data belonging to the user + or their record. This method is equivalent to + Unregister() on the org.freedesktop.home1.Home + interface. + + CreateHome() registers and creates a new home directory. This takes a fully + specified JSON user record as argument (including the secret section. This registers + the user record locally and creates a home directory matching it, depending on the settings specified + in the record in combination with local configuration. + + RealizeHome() creates a home directory whose user record is already + registered locally. This takes a user name plus a user record consisting only of the + secret section. Invoking RegisterHome() followed by + RealizeHome() is mostly equivalent to calling CreateHome(), + except that the latter combines the two in atomic fashion. This method is equivalent to + Realize() on the org.freedesktop.home1.Home + interface. + + RemoveHome() unregisters a user record locally, and removes the home + directory belonging to it, if it is accessible. It takes a user name as argument. This method is equivalent to + Remove() on the org.freedesktop.home1.Home + interface. + + FixateHome() fixates an automatically discovered home + directory. systemd-homed.service automatically discovers home directories dropped + in our plugged in and adds them to the runtime list of user records it manages. A user record + discovered that way may be fixated, in which case it is copied out of the home + directory, onto persistent storage, to fixate the UID/GID assignment of the record, and extract + additional (typically previously encrypted) user record data from the home directory. A home directory + mus be fixated before it can be logged into. This method call takes a user name and a JSON user record + consisting only of the secret section as argument. This method is equivalent to + Fixate() on the org.freedesktop.home1.Home interface. + + AuthenticateHome() checks passwords or other authentication credentials + associated with the home directory. It takes a user name and a JSON user record consisting only of the + secret section as argument. Note that many of the other method calls authenticate + the user first, in order to execute some other operation. This method call only authenticates and + executes no further operation. Like ActivateHome() it is usually first invoked + with an empty JSON user record, which is then populated for subsequent tries with additional + authentication data supplied. This method is equivalent to + Authenticate() on the org.freedesktop.home1.Home + interface. + + UpdateHome() updates a locally registered user record. Takes a fully + specified JSON user record as argument (including the secret section). A user with a + matching name and realm must be registered locally already, and the last change timestamp of the newly + supplied record must be newer than the previously existing user record. Note this operation updates the + user record only, it does not propagate passwords/authentication tokens from the user record to the + storage back-end, or resizes the storage back-end. Typically a home directory is first updated, and then + the password of the underlying storage updated using ChangePasswordHome() as well + as the storage resized using ResizeHome(). This method is equivalent to + Update() on the org.freedesktop.home1.Home interface. + + ResizeHome() resizes the storage associated with a user record. Takes a user + name, a disk size in bytes and a user record consisting only of the secret section + as argument. If the size is specified as UINT64_MAX the storage is resized to the + size already specified in the user record. Typically, if the user record is updated using + UpdateHome() above this is used to propagate the size configured there-in down to + the underlying storage back-end. This method is equivalent to + Resize() on the org.freedesktop.home1.Home + interface. + + ChangePasswordHome() changes the passwords/authentication tokens of a home + directory. Takes a user name, and two JSON user record objects, each consisting only of the + secret section, for the old and for the new passwords/authentication tokens. If the + user record with the new passwords/authentication token data is specified as empty the existing user + record's settings are propagated down to the home directory storage. This is typically used after a + user record is updated using UpdateHome() in order to propagate the + secrets/authentication tokens down to the storage. This method is equivalent to + ChangePassword() on the org.freedesktop.home1.Home + interface. + + LockHome() temporarily suspends access to a home directory, flushing out any + cryptographic keys from memory. This is only supported on some back-ends, and usually done during system + suspend, in order to effectively secure home directories while the system is sleeping. Takes a user + name as single argument. If an application attempts to access a home directory while it is locked it + will typically freeze until the home directory is unlocked again. This method is equivalent to + Lock() on the org.freedesktop.home1.Home interface. + + UnlockHome() undoes the effect of LockHome(). Takes a + user name and a user record consisting only of the secret section as arguments. This + method is equivalent to Unlock() on the + org.freedesktop.home1.Home interface. + + AcquireHome() activates or unlocks a home directory in a reference counted + mode of operation. Takes a user name and user record consisting only of secret + section as argument. If the home directory is not active yet, it is activated. If it is currently + locked it is unlocked. After completion a reference to the activation/unlocking of the home directory + is returned via a file descriptor. When the last client which acquired such a file descriptor closes it + the home directory is automatically deactivated again. This method is typically invoked when a user + logs in, and the file descriptor is held until the user logs out again, thus ensuring the user's home + directory can be unmounted automatically again in a robust fashion, when the user logs out. The third + argument is a boolean which indicates whether the client invoking the call is able to automatically + re-authenticate when the system comes back from suspending. It should be set by all clients that + implement a secure lock screen running outside of the user's context, that is brought up when the + system comes back from suspend and can be used to re-acquire the credentials to unlock the user's home + directory. If a home directory has at least one client with an open reference to the home directory + that does not support this it is not suspended automatically at system suspend, otherwise it is. This + method is equivalent to Acquire() on the + org.freedesktop.home1.Home interface. + + RefHome() is similar to AcquireHome() but takes no user + record with secret section, i.e. will take an additional reference to an already + activated/unlocked home directory without attempting to activate/unlock it itself. It will fail if the + home directory is not already activated. This method is equivalent to + Ref() on the org.freedesktop.home1.Home + interface. + + ReleaseHome() releases a home directory again, if all file descriptors + referencing it are already closed, that where acquired through AcquireHome() or + RefHome(). Note that this call does not actually cause the deactivation of the + home directory (which happens automatically when the last referencing file descriptor is closed), but + is simply a synchronization mechanism that allows delaying of the user session's termination until any + triggered deactivation is completed. This method is equivalent to Release() on the + org.freedesktop.home1.Home interface. + + LockAllHomes() locks all active home directories that only have references + that opted into automatic suspending during system suspend. This is usually invoked automatically + shortly before system suspend. - Signals + Properties - ... + AutoLogin exposes an array of structures consisting of user name, seat name + and object path of an home directory object. All locally managed users that have the + autoLogin field set are listed here, with the seat name they are associated with. A + display manager may watch this property and pre-fill the login screen with the users exposed this + way. @@ -266,46 +397,6 @@ node /org/freedesktop/home1/home { }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -358,7 +449,39 @@ node /org/freedesktop/home1/home { - + + Methods + + Activate(), Deactivate(), + Unregister(), Realize(), Remove(), + Fixate(), Authenticate(), Update(), + Resize(), ChangePassword(), Lock(), + Unlock(), Acquire(), Ref(), + Release() operate like their matching counterparts on the + org.freedesktop.home1.Manager interface (see above). The main difference is that + they are methods of the home directory objects, and hence carry no additional user name + parameter. Which of the two flavors of methods to call depends on the handles to the user known on the + client side: if only the user name is known, it's preferable to use the methods on the manager object + since they operate with user names only. If however the home object path was already acquired some way + it is preferable to operate on the org.freedesktop.home1.Home objects + instead. + + + + Properties + + UserName contains the user name of the user account/home directory. + + UID contains the numeric UNIX UID of the user account. + + UnixRecord contains a structure encapsulating the six fields a + struct passwd typically contains (the password field is suppressed). + + State exposes the current state home the home directory. + + UserRecord contains the full JSON user record string of the user account. + + Versioning @@ -366,4 +489,14 @@ node /org/freedesktop/home1/home { These D-Bus interfaces follow the usual interface versioning guidelines. + + + See Also + + systemd1, + systemd-homed.service8, + homectl1 + + + diff --git a/man/systemd-homed.service.xml b/man/systemd-homed.service.xml index 049b7e9097c..ab8bcab8cb8 100644 --- a/man/systemd-homed.service.xml +++ b/man/systemd-homed.service.xml @@ -103,7 +103,8 @@ homed.conf5, homectl1, pam_systemd_home8, - userdbctl1 + userdbctl1, + org.freedesktop.home15