OSDN Git Service

* security.cc (get_nt_attribute): Always return -1 when read_sd()
authorcorinna <corinna>
Thu, 9 Jan 2003 11:44:17 +0000 (11:44 +0000)
committercorinna <corinna>
Thu, 9 Jan 2003 11:44:17 +0000 (11:44 +0000)
fails.
(get_file_attribute): Set permissions to 0 and owner/group to -1
if security descriptor is unreadable.

winsup/cygwin/ChangeLog
winsup/cygwin/security.cc

index f0d86c1..93b993c 100644 (file)
@@ -1,3 +1,10 @@
+2003-01-09  Corinna Vinschen  <corinna@vinschen.de>
+
+       * security.cc (get_nt_attribute): Always return -1 when read_sd()
+       fails.
+       (get_file_attribute): Set permissions to 0 and owner/group to -1
+       if security descriptor is unreadable.
+
 2003-01-09  Christopher Faylor  <cgf@redhat.com>
 
        Use isdirsep rather than SLASH_P throughout.
index 1416ad5..777f408 100644 (file)
@@ -1322,7 +1322,7 @@ get_nt_attribute (const char *file, int *attribute,
   if ((ret = read_sd (file, psd, &sd_size)) <= 0)
     {
       debug_printf ("read_sd %E");
-      return ret;
+      return -1;
     }
 
   PSID owner_sid;
@@ -1381,9 +1381,19 @@ get_file_attribute (int use_ntsec, const char *file,
   if (use_ntsec && allow_ntsec)
     {
       res = get_nt_attribute (file, attribute, uidret, gidret);
-      if (attribute && (*attribute & S_IFLNK) == S_IFLNK)
+      if (res)
+        {
+         /* If reading the security descriptor failed, treat the file
+            as unreadable. */
+         *attribute &= ~(S_IRWXU | S_IRWXG | S_IRWXO);
+         if (uidret)
+           *uidret = ILLEGAL_UID;
+         if (gidret)
+           *gidret = ILLEGAL_GID;
+       }
+      else if (attribute && (*attribute & S_IFLNK) == S_IFLNK)
        *attribute |= S_IRWXU | S_IRWXG | S_IRWXO;
-      return res;
+      return 0;
     }
 
   if (uidret)