Warn if file/directory mismatch

This commit is contained in:
Roy Marples 2007-09-19 17:18:43 +00:00
parent 50ea72ef4b
commit c1cd1da595

View File

@ -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));