OSDN Git Service

* security.cc (alloc_sd): Don't set FILE_DELETE_CHILD for group
authorcorinna <corinna>
Tue, 7 Aug 2001 16:14:58 +0000 (16:14 +0000)
committercorinna <corinna>
Tue, 7 Aug 2001 16:14:58 +0000 (16:14 +0000)
        if S_ISVTX attribute is given.
        * dir.cc (mkdir): Allow immediate setting of S_ISUID, S_ISGID and
        S_ISVTX attribute.
        * syscalls.cc (_open): Ditto.

winsup/cygwin/ChangeLog
winsup/cygwin/dir.cc
winsup/cygwin/security.cc
winsup/cygwin/syscalls.cc

index fc87d8e..5e8d12e 100644 (file)
@@ -1,3 +1,11 @@
+Tue Aug  7 18:11:00 2001  Corinna Vinschen <corinna@vinschen.de>
+
+       * security.cc (alloc_sd): Don't set FILE_DELETE_CHILD for group
+       if S_ISVTX attribute is given.
+       * dir.cc (mkdir): Allow immediate setting of S_ISUID, S_ISGID and
+       S_ISVTX attribute.
+       * syscalls.cc (_open): Ditto.
+
 Tue Aug  7 16:24:00 2001  Corinna Vinschen <corinna@vinschen.de>
 
        * dir.cc (mkdir): Set security attributes correctly for
index 022a8d6..e9628b3 100644 (file)
@@ -320,14 +320,14 @@ mkdir (const char *dir, mode_t mode)
     goto done;
 
   if (allow_ntsec && real_dir.has_acls ())
-    set_security_attribute (S_IFDIR | ((mode & 0777) & ~cygheap->umask),
+    set_security_attribute (S_IFDIR | ((mode & 07777) & ~cygheap->umask),
                            &sa, alloca (256), 256);
 
   if (CreateDirectoryA (real_dir.get_win32 (), &sa))
     {
       if (!allow_ntsec && allow_ntea)
        set_file_attribute (real_dir.has_acls (), real_dir.get_win32 (),
-                           S_IFDIR | ((mode & 0777) & ~cygheap->umask));
+                           S_IFDIR | ((mode & 07777) & ~cygheap->umask));
       res = 0;
     }
   else
index d41d0a1..5a778e9 100644 (file)
@@ -1393,7 +1393,8 @@ alloc_sd (uid_t uid, gid_t gid, const char *logsrv, int attribute,
   if (attribute & S_IXGRP)
     group_allow |= FILE_GENERIC_EXECUTE;
   if ((attribute & (S_IFDIR | S_IWGRP | S_IXGRP))
-      == (S_IFDIR | S_IWGRP | S_IXGRP))
+      == (S_IFDIR | S_IWGRP | S_IXGRP)
+      && !(attribute & S_ISVTX))
     group_allow |= FILE_DELETE_CHILD;
 
   /* Construct allow attribute for everyone. */
index e7d6d73..a779c3c 100644 (file)
@@ -466,7 +466,7 @@ _open (const char *unix_path, int flags, ...)
        set_errno (ENMFILE);
       else if ((fh = cygheap->fdtab.build_fhandler (fd, unix_path, NULL)) == NULL)
        res = -1;               // errno already set
-      else if (!fh->open (unix_path, flags, (mode & 0777) & ~cygheap->umask))
+      else if (!fh->open (unix_path, flags, (mode & 07777) & ~cygheap->umask))
        {
          cygheap->fdtab.release (fd);
          res = -1;