summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2008-05-21 08:05:53 +0000
committerCorinna Vinschen <corinna@vinschen.de>2008-05-21 08:05:53 +0000
commit2762ac6c1944e320cb880f40866d47475f9892ba (patch)
treecfe0e1fe100256e55a85a3f44343a2d2e2436380
parentcb1f8161c1524fe06dd331cda3e64a0326abd51c (diff)
downloadcygnal-2762ac6c1944e320cb880f40866d47475f9892ba.tar.gz
cygnal-2762ac6c1944e320cb880f40866d47475f9892ba.tar.bz2
cygnal-2762ac6c1944e320cb880f40866d47475f9892ba.zip
* syscalls.cc (FILTERED_MODE): Define valid chmod mode mask.
(chmod): Call fh->fchmod with filtered mode. (fchmod): Ditto.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/syscalls.cc7
2 files changed, 11 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c56fc6ebf..75ce68da4 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-21 Corinna Vinschen <corinna@vinschen.de>
+
+ * syscalls.cc (FILTERED_MODE): Define valid chmod mode mask.
+ (chmod): Call fh->fchmod with filtered mode.
+ (fchmod): Ditto.
+
2008-05-20 Corinna Vinschen <corinna@vinschen.de>
* fhandler_disk_file.cc (fhandler_disk_file::fchmod): Fix test for
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index aa4819d6d..01e744570 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -1119,6 +1119,9 @@ chmod_device (path_conv& pc, mode_t mode)
return mknod_worker (pc.get_win32 (), pc.dev.mode & S_IFMT, mode, pc.dev.major, pc.dev.minor);
}
+#define FILTERED_MODE(m) ((m) & (S_ISUID | S_ISGID | S_ISVTX \
+ | S_IRWXU | S_IRWXG | S_IRWXO))
+
/* chmod: POSIX 5.6.4.1 */
extern "C" int
chmod (const char *path, mode_t mode)
@@ -1134,7 +1137,7 @@ chmod (const char *path, mode_t mode)
set_errno (fh->error ());
}
else
- res = fh->fchmod (mode);
+ res = fh->fchmod (FILTERED_MODE (mode));
delete fh;
error:
@@ -1154,7 +1157,7 @@ fchmod (int fd, mode_t mode)
return -1;
}
- return cfd->fchmod (mode);
+ return cfd->fchmod (FILTERED_MODE (mode));
}
static void