diff options
author | William Hubbs <w.d.hubbs@gmail.com> | 2012-10-09 16:44:01 -0500 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2012-10-09 16:44:01 -0500 |
commit | 6f345abe91a57ab64a447b20b3c701d14f23ef69 (patch) | |
tree | 0a3dc67804436651b32d23efb5eaf8291f0c92fc /src | |
parent | da842085ce3d9a8c32fdaecabefd6fd2ab123cc0 (diff) |
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.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/rc/checkpath.c b/src/rc/checkpath.c index 7ebbb64d..f984da32 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++; } |