Warn if file/directory mismatch
This commit is contained in:
parent
50ea72ef4b
commit
c1cd1da595
@ -25,13 +25,13 @@
|
|||||||
|
|
||||||
static char *applet = NULL;
|
static char *applet = NULL;
|
||||||
|
|
||||||
static int do_check (char *path, uid_t uid, gid_t gid, mode_t mode, bool file)
|
static int do_check (char *path, uid_t uid, gid_t gid, mode_t mode, int file)
|
||||||
{
|
{
|
||||||
struct stat dirstat;
|
struct stat st;
|
||||||
|
|
||||||
memset (&dirstat, 0, sizeof (dirstat));
|
memset (&st, 0, sizeof (struct stat));
|
||||||
|
|
||||||
if (stat (path, &dirstat)) {
|
if (stat (path, &st)) {
|
||||||
if (file) {
|
if (file) {
|
||||||
int fd;
|
int fd;
|
||||||
einfo ("%s: creating file", path);
|
einfo ("%s: creating file", path);
|
||||||
@ -50,9 +50,19 @@ static int do_check (char *path, uid_t uid, gid_t gid, mode_t mode, bool file)
|
|||||||
}
|
}
|
||||||
mode = 0;
|
mode = 0;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if ((file && S_ISDIR (st.st_mode)) ||
|
||||||
|
(! file && ! S_ISDIR (st.st_mode)))
|
||||||
|
{
|
||||||
|
if (file)
|
||||||
|
eerror ("%s: is a directory", path);
|
||||||
|
else
|
||||||
|
eerror ("%s: is a file", path);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode && (dirstat.st_mode & 0777) != mode) {
|
if (mode && (st.st_mode & 0777) != mode) {
|
||||||
einfo ("%s: correcting mode", applet);
|
einfo ("%s: correcting mode", applet);
|
||||||
if (chmod (path, mode)) {
|
if (chmod (path, mode)) {
|
||||||
eerror ("%s: chmod: %s", applet, strerror (errno));
|
eerror ("%s: chmod: %s", applet, strerror (errno));
|
||||||
@ -60,8 +70,8 @@ static int do_check (char *path, uid_t uid, gid_t gid, mode_t mode, bool file)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirstat.st_uid != uid || dirstat.st_gid != gid) {
|
if (st.st_uid != uid || st.st_gid != gid) {
|
||||||
if (dirstat.st_dev || dirstat.st_ino)
|
if (st.st_dev || st.st_ino)
|
||||||
einfo ("%s: correcting owner", path);
|
einfo ("%s: correcting owner", path);
|
||||||
if (chown (path, uid, gid)) {
|
if (chown (path, uid, gid)) {
|
||||||
eerror ("%s: chown: %s", applet, strerror (errno));
|
eerror ("%s: chown: %s", applet, strerror (errno));
|
||||||
|
Loading…
Reference in New Issue
Block a user