From 7491c0e5847b5b4ccca5369442ae394e34ed6cb1 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Fri, 15 Mar 2013 09:31:15 +0100 Subject: [PATCH] xbps-create: set root:root if e[gu]id == st.st_e[gu]id in package files. The rational is that packages should have proper perms to be installed globally in a system as root, and fakeroot is useless when generating packages with xbps-create when it's statically build. --- NEWS | 4 ++++ bin/xbps-create/main.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/NEWS b/NEWS index 4d683dd0..046babac 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ xbps-0.22 (???): + * xbps-create(8): if effective user/group is the same than files being + packaged in a package, set user/group to root:root. This way we don't + have to depend in an external tool to assume proper permissions (fakeroot). + * xbps-query(8): fix segfault when showing unexistent package files. * When checking for obsolete files in upgrades, ignore unexistent files in diff --git a/bin/xbps-create/main.c b/bin/xbps-create/main.c index 913f63be..fad76fd4 100644 --- a/bin/xbps-create/main.c +++ b/bin/xbps-create/main.c @@ -431,6 +431,10 @@ process_entry_file(struct archive *ar, archive_entry_set_pathname(entry, xe->file); archive_entry_copy_stat(entry, &st); archive_entry_copy_sourcepath(entry, p); + if (st.st_uid == geteuid()) + archive_entry_set_uname(entry, "root"); + if (st.st_gid == getegid()) + archive_entry_set_gname(entry, "root"); if (S_ISLNK(st.st_mode)) { len = readlink(p, buf, sizeof(buf));