summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWilliam Hubbs <w.d.hubbs@gmail.com>2012-10-09 16:44:01 -0500
committerWilliam Hubbs <w.d.hubbs@gmail.com>2012-10-09 16:44:01 -0500
commit6f345abe91a57ab64a447b20b3c701d14f23ef69 (patch)
tree0a3dc67804436651b32d23efb5eaf8291f0c92fc /src
parentda842085ce3d9a8c32fdaecabefd6fd2ab123cc0 (diff)
downloadopenrc-6f345abe91a57ab64a447b20b3c701d14f23ef69.tar.gz
openrc-6f345abe91a57ab64a447b20b3c701d14f23ef69.tar.bz2
openrc-6f345abe91a57ab64a447b20b3c701d14f23ef69.tar.xz
checkpath: change the owner/group only when requested to do so
Fix checkpath so that it only changes the owner/group if -o is on the command line. Reported-by: <flameeyes@gentoo.org> X-Gentoo-Bug: 437560 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=437560
Diffstat (limited to 'src')
-rw-r--r--src/rc/checkpath.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/rc/checkpath.c b/src/rc/checkpath.c
index 7ebbb64..f984da3 100644
--- a/src/rc/checkpath.c
+++ b/src/rc/checkpath.c
@@ -60,7 +60,8 @@ extern const char *applet;
* See systemd's src/label.c:label_mkdir
*/
static int
-do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc)
+do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type,
+ bool trunc, bool chowner)
{
struct stat st;
int fd, flags;
@@ -139,7 +140,7 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc
}
}
- if (st.st_uid != uid || st.st_gid != gid) {
+ if (chowner && (st.st_uid != uid || st.st_gid != gid)) {
if (st.st_dev || st.st_ino)
einfo("%s: correcting owner", path);
if (chown(path, uid, gid)) {
@@ -223,6 +224,7 @@ checkpath(int argc, char **argv)
inode_t type = inode_unknown;
int retval = EXIT_SUCCESS;
bool trunc = 0;
+ bool chowner = 0;
while ((opt = getopt_long(argc, argv, getoptstring,
longopts, (int *) 0)) != -1)
@@ -247,6 +249,7 @@ checkpath(int argc, char **argv)
applet, optarg);
break;
case 'o':
+ chowner = 1;
if (parse_owner(&pw, &gr, optarg) != 0)
eerrorx("%s: owner `%s' not found",
applet, optarg);
@@ -272,7 +275,7 @@ checkpath(int argc, char **argv)
gid = gr->gr_gid;
while (optind < argc) {
- if (do_check(argv[optind], uid, gid, mode, type, trunc))
+ if (do_check(argv[optind], uid, gid, mode, type, trunc, chowner))
retval = EXIT_FAILURE;
optind++;
}