This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: cygwin potentially corrupting permissions?
- From: Linda Walsh <cygwin at tlinx dot org>
- To: Greg Freemyer <greg dot freemyer at gmail dot com>, "cygwin at cygwin dot com" <cygwin at cygwin dot com>
- Date: Wed, 23 Sep 2015 19:58:54 -0700
- Subject: Re: cygwin potentially corrupting permissions?
- Authentication-results: sourceware.org; auth=none
- References: <CAGpXXZKUQtAbrQ80VDHZhy0aZtzG+5fDB7bcYz-kwQ3Kgx6ueQ at mail dot gmail dot com>
Greg Freemyer wrote:
All,
I've noticed on 2 different machines that if I copy (cp) a file I can
read with cygwin, I don't have permission to read the copy.
---
What does the acl say?
(Attached a script, lsacl, that I use -- it works
with linux or cygwin and allows wildcards).
#!/bin/bash
## $Id: lsacl,v 1.5 2015-08-02 10:29:25-07 law Exp law $
# Version 2 -- try to work with getfacl on cygwin
#
shopt -s expand_aliases
alias int=declare\ -i sub=function string=declare
gfacl=$(type -P getfacl)
if ! type -f cygwin 2>/dev/null ; then
_un_=$(type -P uname)
if [[ $_un_ ]] ; then _os_=$($_un_ -o);
elif [[ -e /proc/sys/kernel ]]; then _os_=Linux;
else _os_=Cygwin;
fi
if [[ $_os_ =~ Cygwin ]]; then function cygwin () { return 0; }
else function cygwin () { return 1; }
fi
unset _un_ _os_
export -f cygwin
fi
if cygwin 2>/dev/null ;then
[[ $gfacl ]] || { printf "FATAL: Cannot find getfacl in path\n"; exit 1; }
sub gfacl () { "$gfacl" "$@"; }
else ## linux version has broken semantics requiring "-p"
sub gfacl () { "$gfacl" -p "$@" ; }
fi
export -f gfacl
sub facl2str {
string fn=${1:?"Need pathname"}
string s1='/^\#.*$/d; /^\s*$/d; s/\s*#.*$//; s/^(.)(ser|roup|ask|ther):/\1:/; y/\n/,/'
string facl=$(gfacl -a "$fn"|sed -r "$s1"|tr "\n" ",")
facl=${facl%,}
string dacl=$(gfacl -d "$fn"|sed -r "s/^default://; $s1"|tr "\n" ",")
dacl=${dacl%,}
printf "[%s/%s]\n" "$facl" "$dacl"
}
int acllen=0 maxfnln=0
#for fn in "$@" ; do if ((maxfnln<${#fn})); then maxfnln=${#fn}; fi ; done
sub acl_str () {
if cygwin ;then
perm=$(facl2str "$fn")
else
qfn=$(printf "%q " "$fn")
out="$(chacl -l "$fn")"
perm="${out#$qfn}"
fi
printf "%s\n" "$perm"
}
for fn in "$@"; do
int max=40
perm=$(acl_str "$fn")
int len=${#perm}
if ((len>_acl_len_)); then acllen=len; fi
if ((acllen>max)); then acllen=max; fi
printf "%-${acllen}s %s\n" "$perm" "$fn"
done
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple