aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xz/file_io.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/xz/file_io.c b/src/xz/file_io.c
index 0ba8db8f..676508dc 100644
--- a/src/xz/file_io.c
+++ b/src/xz/file_io.c
@@ -368,7 +368,13 @@ io_copy_attrs(const file_pair *pair)
mode_t mode;
- if (fchown(pair->dest_fd, (uid_t)(-1), pair->src_st.st_gid)) {
+ // With BSD semantics the new dest file may have a group that
+ // does not belong to the user. If the src file has the same gid
+ // nothing has to be done. Nevertheless OpenBSD fchown(2) fails
+ // in this case which seems to be POSIX compliant. As there is
+ // nothing to do, skip the system call.
+ if (pair->dest_st.st_gid != pair->src_st.st_gid &&
+ fchown(pair->dest_fd, (uid_t)(-1), pair->src_st.st_gid)) {
message_warning(_("%s: Cannot set the file group: %s"),
pair->dest_name, strerror(errno));
// We can still safely copy some additional permissions: