diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 37a12c362..726a4e324 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,15 @@ +Thu Apr 13 8:48:00 2000 Corinna Vinschen + + * 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 * path.cc (path_conv::path_conv): Ensure that suffix is correctly diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din index d809a1ca3..b36e05b27 100644 --- a/winsup/cygwin/cygwin.din +++ b/winsup/cygwin/cygwin.din @@ -1068,6 +1068,8 @@ acl _acl = acl facl _facl = facl +lacl +_lacl = lacl aclcheck _aclcheck = aclcheck aclsort diff --git a/winsup/cygwin/include/cygwin/acl.h b/winsup/cygwin/include/cygwin/acl.h index d54655a5a..58b055169 100644 --- a/winsup/cygwin/include/cygwin/acl.h +++ b/winsup/cygwin/include/cygwin/acl.h @@ -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)); diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc index 031400905..73e67e468 100644 --- a/winsup/cygwin/security.cc +++ b/winsup/cygwin/security.cc @@ -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) @@ -1616,6 +1619,20 @@ acl (const char *path, int cmd, int nentries, aclent_t *aclbufp) return -1; } +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) @@ -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"