OSDN Git Service

* cygwin.din: Add symbol for `lacl'.
authorcorinna <corinna>
Thu, 13 Apr 2000 06:53:23 +0000 (06:53 +0000)
committercorinna <corinna>
Thu, 13 Apr 2000 06:53:23 +0000 (06:53 +0000)
* security.cc (ReadSD): Add debug output.
(acl_worker):  New static function.
(acl): Call acl_worker now.
(lacl): New function.
(facl): Call acl_worker now.
* include/cygwin/acl.h: Add prototype for `lacl'.

winsup/cygwin/ChangeLog
winsup/cygwin/cygwin.din
winsup/cygwin/include/cygwin/acl.h
winsup/cygwin/security.cc

index 37a12c3..726a4e3 100644 (file)
@@ -1,3 +1,15 @@
+Thu Apr 13  8:48:00 2000  Corinna Vinschen <corinna@vinschen.de>
+
+       * path.cc (conv_to_win32_path): Detect a win32 path
+       if path contains backslashes.
+        * cygwin.din: Add symbol for `lacl'.
+        * security.cc (ReadSD): Add debug output.
+        (acl_worker):  New static function.
+        (acl): Call acl_worker now.
+        (lacl): New function.
+        (facl): Call acl_worker now.
+       * include/cygwin/acl.h: Add prototype for `lacl'.
+
 Wed Apr 12 18:48:33 2000  Christopher Faylor <cgf@cygnus.com>
 
        * path.cc (path_conv::path_conv): Ensure that suffix is correctly
index d809a1c..b36e05b 100644 (file)
@@ -1068,6 +1068,8 @@ acl
 _acl = acl
 facl
 _facl = facl
+lacl
+_lacl = lacl
 aclcheck
 _aclcheck = aclcheck
 aclsort
index d54655a..58b0551 100644 (file)
@@ -65,6 +65,7 @@ typedef struct acl {
 } aclent_t;
 
 int _EXFUN(acl,(const char *path, int cmd, int nentries, aclent_t *aclbufp));
+int _EXFUN(lacl,(const char *path, int cmd, int nentries, aclent_t *aclbufp));
 int _EXFUN(facl,(int fd, int cmd, int nentries, aclent_t *aclbufp));
 int _EXFUN(aclcheck,(aclent_t *aclbufp, int nentries, int *which));
 int _EXFUN(aclsort,(int nentries, int calclass, aclent_t *aclbufp));
index 0314009..73e67e4 100644 (file)
@@ -396,6 +396,7 @@ ReadSD(const char *file, PSECURITY_DESCRIPTOR sdBuf, LPDWORD sdBufSize)
     }
 
   /* Open file for read */
+  debug_printf("file = %s", file);
   HANDLE hFile = CreateFile (file, GENERIC_READ,
                             FILE_SHARE_READ | FILE_SHARE_WRITE,
                             &sec_none_nih, OPEN_EXISTING,
@@ -1518,11 +1519,12 @@ acl_access (const char *path, int flags)
   return -1;
 }
 
-extern "C"
+static
 int
-acl (const char *path, int cmd, int nentries, aclent_t *aclbufp)
+acl_worker (const char *path, int cmd, int nentries, aclent_t *aclbufp,
+            int nofollow)
 {
-  path_conv real_path (path);
+  path_conv real_path (path, nofollow ? SYMLINK_NOFOLLOW : SYMLINK_FOLLOW, 1);
   if (real_path.error)
     {
       set_errno (real_path.error);
@@ -1542,7 +1544,8 @@ acl (const char *path, int cmd, int nentries, aclent_t *aclbufp)
         case GETACL:
           if (nentries < 1)
             set_errno (EINVAL);
-          else if (! stat (path, &st))
+          else if ((nofollow && ! lstat (path, &st))
+                   || (!nofollow && ! stat (path, &st)))
             {
               aclent_t lacl[4];
               if (nentries > 0)
@@ -1618,6 +1621,20 @@ acl (const char *path, int cmd, int nentries, aclent_t *aclbufp)
 
 extern "C"
 int
+acl (const char *path, int cmd, int nentries, aclent_t *aclbufp)
+{
+  return acl_worker (path, cmd, nentries, aclbufp, 0);
+}
+
+extern "C"
+int
+lacl (const char *path, int cmd, int nentries, aclent_t *aclbufp)
+{
+  return acl_worker (path, cmd, nentries, aclbufp, 1);
+}
+
+extern "C"
+int
 facl (int fd, int cmd, int nentries, aclent_t *aclbufp)
 {
   if (dtable.not_open (fd))
@@ -1634,7 +1651,7 @@ facl (int fd, int cmd, int nentries, aclent_t *aclbufp)
       return -1;
     }
   syscall_printf ("facl (%d): calling acl (%s)", fd, path);
-  return acl (path, cmd, nentries, aclbufp);
+  return acl_worker (path, cmd, nentries, aclbufp, 0);
 }
 
 extern "C"