Mercurial > hg > octave-lyh > gnulib-hg
changeset 10181:5282ccc922b9
Add support for Cygwin ACLs.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 08 Jun 2008 16:52:23 +0200 |
parents | 9f98a7fc375c |
children | 4a177f4b083f |
files | ChangeLog lib/acl-internal.h lib/copy-acl.c lib/set-mode-acl.c |
diffstat | 4 files changed, 20 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-06-08 Bruno Haible <bruno@clisp.org> + + Add support for Cygwin ACLs. + * lib/acl-internal.h (MODE_INSIDE_ACL): New macro for Solaris-like API. + * lib/set-mode-acl.c (qset_acl) [!MODE_INSIDE_ACL]: Don't optimize away + the chmod_or_fchmod call. + * lib/copy-acl.c (qcopy_acl) [!MODE_INSIDE_ACL]: Likewise. + 2008-06-08 Bruno Haible <bruno@clisp.org> Fix bug with setuid modes in Solaris 10+ code.
--- a/lib/acl-internal.h +++ b/lib/acl-internal.h @@ -160,6 +160,14 @@ # elif HAVE_ACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ +/* Set to 1 if a file's mode is implicit by the ACL. + Set to 0 if a file's mode is stored independently from the ACL. */ +# if defined __CYGWIN__ /* Cygwin */ +# define MODE_INSIDE_ACL 0 +# else /* Solaris */ +# define MODE_INSIDE_ACL 1 +# endif + /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, aclent_t *entries);
--- a/lib/copy-acl.c +++ b/lib/copy-acl.c @@ -330,8 +330,7 @@ if (count == 0) return qset_acl (dst_name, dest_desc, mode); - did_chmod = 0; /* set to 1 once the mode bits in 0777 have been set, - set to 2 once the mode bits other than 0777 have been set */ + did_chmod = 0; /* set to 1 once the mode bits in 0777 have been set */ saved_errno = 0; /* the first non-ignorable error code */ /* If both ace_entries and entries are available, try SETACL before @@ -371,7 +370,8 @@ free (ace_entries); # endif - if (did_chmod <= ((mode & (S_ISUID | S_ISGID | S_ISVTX)) ? 1 : 0)) + if (!MODE_INSIDE_ACL + || did_chmod <= ((mode & (S_ISUID | S_ISGID | S_ISVTX)) ? 1 : 0)) { /* We did not call chmod so far, and either the mode and the ACL are separate or special bits are to be set which don't fit into ACLs. */