diff --git a/shadow-copytree-usermod-fifo.patch b/shadow-copytree-usermod-fifo.patch new file mode 100644 index 0000000..aae1169 --- /dev/null +++ b/shadow-copytree-usermod-fifo.patch @@ -0,0 +1,50 @@ +From 10cd68e0f04b48363eb32d2c6e168b358fb27810 Mon Sep 17 00:00:00 2001 +From: Samanta Navarro +Date: Sun, 4 Sep 2022 11:58:03 +0000 +Subject: [PATCH] copy_tree: do not block on fifos + +Fixes regression introduced in faeab50e710131816b261de66141524898c2c487. + +If a directory contains fifos, then openat blocks until the other side +of the fifo is connected as well. + +This means that users can prevent "usermod -m" from completing if their +home directories contain at least one fifo. +--- + libmisc/copydir.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/libmisc/copydir.c b/libmisc/copydir.c +index b6025f4c7..5fb47da01 100644 +--- a/libmisc/copydir.c ++++ b/libmisc/copydir.c +@@ -126,12 +126,12 @@ static int perm_copy_path(const struct path_info *src, + { + int src_fd, dst_fd, ret; + +- src_fd = openat(src->dirfd, src->name, O_RDONLY | O_NOFOLLOW | O_CLOEXEC); ++ src_fd = openat(src->dirfd, src->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC); + if (src_fd < 0) { + return -1; + } + +- dst_fd = openat(dst->dirfd, dst->name, O_RDONLY | O_NOFOLLOW | O_CLOEXEC); ++ dst_fd = openat(dst->dirfd, dst->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC); + if (dst_fd < 0) { + (void) close (src_fd); + return -1; +@@ -152,12 +152,12 @@ static int attr_copy_path(const struct path_info *src, + { + int src_fd, dst_fd, ret; + +- src_fd = openat(src->dirfd, src->name, O_RDONLY | O_NOFOLLOW | O_CLOEXEC); ++ src_fd = openat(src->dirfd, src->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC); + if (src_fd < 0) { + return -1; + } + +- dst_fd = openat(dst->dirfd, dst->name, O_RDONLY | O_NOFOLLOW | O_CLOEXEC); ++ dst_fd = openat(dst->dirfd, dst->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC); + if (dst_fd < 0) { + (void) close (src_fd); + return -1; diff --git a/shadow.changes b/shadow.changes index 8cc1ce0..4f5874a 100644 --- a/shadow.changes +++ b/shadow.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Nov 7 11:20:36 UTC 2022 - Michael Vetter + +- Add shadow-copytree-usermod-fifo.patch: + Fix regression that prevented `usermod -m` to work when their + home directory contained at least one fifo + See https://github.com/shadow-maint/shadow/pull/565 + ------------------------------------------------------------------- Wed Nov 2 10:59:16 UTC 2022 - Michael Vetter diff --git a/shadow.spec b/shadow.spec index 0a70058..1cd492f 100644 --- a/shadow.spec +++ b/shadow.spec @@ -63,6 +63,8 @@ Patch9: disable_new_audit_function.patch Patch10: https://github.com/shadow-maint/shadow/commit/eaebea55a495a56317ed85e959b3599f73c6bdf2.patch#/shadow-prefix-overflow.patch # PATCH-FIX-UPSTREAM shadow-chage-format.patch mvetter@suse.com -- Fix chage format string Patch11: https://github.com/shadow-maint/shadow/commit/e503fd574b7dbf6b21b1168e20938f0922807916.patch#/shadow-chage-format.patch +# PATCH-FIX-UPSTREAM shadow-copytree-usermod-fifo.patch mvetter@suse.com -- Fix regression when openat blocks +Patch12: https://github.com/shadow-maint/shadow/commit/10cd68e0f04b48363eb32d2c6e168b358fb27810.patch#/shadow-copytree-usermod-fifo.patch BuildRequires: audit-devel > 2.3 BuildRequires: autoconf BuildRequires: automake @@ -135,6 +137,7 @@ Development files for libsubid4. %endif %patch10 -p1 %patch11 -p1 +%patch12 -p1 iconv -f ISO88591 -t utf-8 doc/HOWTO > doc/HOWTO.utf8 mv -v doc/HOWTO.utf8 doc/HOWTO