diff options
author | Luca Boccassi <bluca@debian.org> | 2024-05-15 01:26:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-15 01:26:15 +0200 |
commit | e0d13e719e08dcef0fb762e4841aa07112d52cff (patch) | |
tree | 93014630b4691487b4da06860da34d0d4026f197 | |
parent | TEST-21-DFUZZER: Fix script name (diff) | |
parent | test: add tests for "homectl --skel" (diff) | |
download | systemd-e0d13e719e08dcef0fb762e4841aa07112d52cff.tar.xz systemd-e0d13e719e08dcef0fb762e4841aa07112d52cff.zip |
Merge pull request #32830 from yuwata/home-skel
home: fix ownership of files copied from skelton directory
-rw-r--r-- | src/home/homework.c | 7 | ||||
-rwxr-xr-x | test/units/TEST-46-HOMED.sh | 8 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/home/homework.c b/src/home/homework.c index 7865772db2..af8bcd72a4 100644 --- a/src/home/homework.c +++ b/src/home/homework.c @@ -1059,12 +1059,13 @@ static int home_deactivate(UserRecord *h, bool force) { return 0; } -static int copy_skel(int root_fd, const char *skel) { +static int copy_skel(UserRecord *h, int root_fd, const char *skel) { int r; + assert(h); assert(root_fd >= 0); - r = copy_tree_at(AT_FDCWD, skel, root_fd, ".", UID_INVALID, GID_INVALID, COPY_MERGE|COPY_REPLACE, NULL, NULL); + r = copy_tree_at(AT_FDCWD, skel, root_fd, ".", h->uid, h->gid, COPY_MERGE|COPY_REPLACE, NULL, NULL); if (r == -ENOENT) { log_info("Skeleton directory %s missing, ignoring.", skel); return 0; @@ -1092,7 +1093,7 @@ int home_populate(UserRecord *h, int dir_fd) { assert(h); assert(dir_fd >= 0); - r = copy_skel(dir_fd, user_record_skeleton_directory(h)); + r = copy_skel(h, dir_fd, user_record_skeleton_directory(h)); if (r < 0) return r; diff --git a/test/units/TEST-46-HOMED.sh b/test/units/TEST-46-HOMED.sh index ea718fa37c..61590a1fa4 100755 --- a/test/units/TEST-46-HOMED.sh +++ b/test/units/TEST-46-HOMED.sh @@ -44,6 +44,9 @@ systemctl service-log-level systemd-homed debug mkdir -p /home mount -t tmpfs tmpfs /home -o size=290M +TMP_SKEL=$(mktemp -d) +echo hogehoge >"$TMP_SKEL"/hoge + # we enable --luks-discard= since we run our tests in a tight VM, hence don't # needlessly pressure for storage. We also set the cheapest KDF, since we don't # want to waste CI CPU cycles on it. We also effectively disable rate-limiting on @@ -55,7 +58,8 @@ NEWPASSWORD=xEhErW0ndafV4s homectl create test-user \ --luks-pbkdf-type=pbkdf2 \ --luks-pbkdf-time-cost=1ms \ --rate-limit-interval=1s \ - --rate-limit-burst=1000 + --rate-limit-burst=1000 \ + --skel="$TMP_SKEL" inspect test-user PASSWORD=xEhErW0ndafV4s homectl authenticate test-user @@ -211,6 +215,8 @@ PASSWORD=xEhErW0ndafV4s homectl with test-user -- test -f /home/test-user/xyz PASSWORD=xEhErW0ndafV4s homectl with test-user -- rm /home/test-user/xyz PASSWORD=xEhErW0ndafV4s homectl with test-user -- test ! -f /home/test-user/xyz (! PASSWORD=xEhErW0ndafV4s homectl with test-user -- test -f /home/test-user/xyz) +[[ $(PASSWORD=xEhErW0ndafV4s homectl with test-user -- stat -c %U /home/test-user/hoge) == "test-user" ]] +[[ $(PASSWORD=xEhErW0ndafV4s homectl with test-user -- cat /home/test-user/hoge) == "$(cat "$TMP_SKEL"/hoge)" ]] # Regression tests wait_for_state test-user inactive |