[type/{__file/__directory}] Remove special Solaris blocks

Solaris 11 has GNU stat (handled by *)
Solaris 10 (and older?) does not have stat (handled by failing command -v stat)

On Solaris 10 (at least on UFS), setgid cannot be set on directories.
Unlike on other systems `chmod 2400` is not `-r----S---`, but `-r----l---`.
This commit is contained in:
Dennis Camera 2020-07-12 12:31:55 +02:00
parent 19514662b0
commit 9fb7e151b8
2 changed files with 9 additions and 71 deletions

View file

@ -33,7 +33,7 @@ fallback() {
group=$(awk -F: -v gid="$gid" '$3 == gid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group) group=$(awk -F: -v gid="$gid" '$3 == gid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group)
mode_text=$(echo "$ls_line" | awk '{ print $1 }') mode_text=$(echo "$ls_line" | awk '{ print $1 }')
mode=$(echo "$mode_text" | awk '{for(i=8;i>=0;--i){c=substr($1,10-i,1);k+=((c~/[rwxst]/)*2^i);if(!(i%3))k+=(tolower(c)~/[st]/)*2^(9+i/3)}printf("%04o",k)}') mode=$(echo "$mode_text" | awk '{for(i=8;i>=0;--i){c=substr($1,10-i,1);k+=((c~/[rwxst]/)*2^i);if(!(i%3))k+=(tolower(c)~/[lst]/)*2^(9+i/3)}printf("%04o",k)}')
printf 'type: %s\nowner: %d %s\ngroup: %d %s\nmode: %s %s\n' \ printf 'type: %s\nowner: %d %s\ngroup: %d %s\nmode: %s %s\n' \
"$("$__type_explorer/type")" \ "$("$__type_explorer/type")" \
@ -45,11 +45,10 @@ fallback() {
# nothing to work with, nothing we could do # nothing to work with, nothing we could do
[ -e "$destination" ] || exit 0 [ -e "$destination" ] || exit 0
if ! command -v stat >/dev/null command -v stat >/dev/null 2>&1 || {
then
fallback fallback
exit exit
fi }
case $("$__explorer/os") case $("$__explorer/os")
in in
@ -60,42 +59,13 @@ group: %Dg %Sg
mode: %Mp%03Lp %Sp mode: %Mp%03Lp %Sp
' "$destination" | awk '/^type/ { print tolower($0); next } { print }' ' "$destination" | awk '/^type/ { print tolower($0); next } { print }'
;; ;;
solaris)
ls1="$( ls -ld "$destination" )"
ls2="$( ls -ldn "$destination" )"
if [ -f "$__object/parameter/mode" ]
then mode_should="$( cat "$__object/parameter/mode" )"
fi
# yes, it is ugly hack, but if you know better way...
if [ -z "$( find "$destination" -perm "$mode_should" )" ]
then octets=888
else octets="$( echo "$mode_should" | sed 's/^0//' )"
fi
case "$( echo "$ls1" | cut -c1-1 )" in
-) echo 'type: regular file' ;;
d) echo 'type: directory' ;;
esac
echo "owner: $( echo "$ls2" \
| awk '{print $3}' ) $( echo "$ls1" \
| awk '{print $3}' )"
echo "group: $( echo "$ls2" \
| awk '{print $4}' ) $( echo "$ls1" \
| awk '{print $4}' )"
echo "mode: $octets $( echo "$ls1" | awk '{print $1}' )"
;;
*) *)
# NOTE: Do not use --printf here as it is not supported by BusyBox stat. # NOTE: Do not use --printf here as it is not supported by BusyBox stat.
# NOTE: BusyBox's stat might not support the "-c" option, in which case # NOTE: BusyBox's stat might not support the "-c" option, in which case
# we fall through to the shell fallback. # we fall through to the shell fallback.
stat -c 'type: %F stat -c 'type: %F
owner: %u %U owner: %u %U
group: %g %G group: %g %G
mode: %04a %A' "$destination" 2>/dev/null || fallback mode: %04a %A' "$destination" 2>/dev/null || fallback
;; ;;
esac esac

View file

@ -34,7 +34,7 @@ fallback() {
group=$(awk -F: -v gid="$gid" '$3 == gid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group) group=$(awk -F: -v gid="$gid" '$3 == gid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group)
mode_text=$(echo "$ls_line" | awk '{ print $1 }') mode_text=$(echo "$ls_line" | awk '{ print $1 }')
mode=$(echo "$mode_text" | awk '{for(i=8;i>=0;--i){c=substr($1,10-i,1);k+=((c~/[rwxst]/)*2^i);if(!(i%3))k+=(tolower(c)~/[st]/)*2^(9+i/3)}printf("%04o",k)}') mode=$(echo "$mode_text" | awk '{for(i=8;i>=0;--i){c=substr($1,10-i,1);k+=((c~/[rwxst]/)*2^i);if(!(i%3))k+=(tolower(c)~/[lst]/)*2^(9+i/3)}printf("%04o",k)}')
size=$(echo "$ls_line" | awk '{ print $5 }') size=$(echo "$ls_line" | awk '{ print $5 }')
links=$(echo "$ls_line" | awk '{ print $2 }') links=$(echo "$ls_line" | awk '{ print $2 }')
@ -53,11 +53,10 @@ fallback() {
[ -e "$destination" ] || exit 0 [ -e "$destination" ] || exit 0
if ! command -v stat >/dev/null command -v stat >/dev/null 2>&1 || {
then
fallback fallback
exit exit
fi }
case $("$__explorer/os") case $("$__explorer/os")
@ -71,37 +70,6 @@ size: %Dz
links: %Dl links: %Dl
' "$destination" | awk '/^type/ { print tolower($0); next } { print }' ' "$destination" | awk '/^type/ { print tolower($0); next } { print }'
;; ;;
solaris)
ls1="$( ls -ld "$destination" )"
ls2="$( ls -ldn "$destination" )"
if [ -f "$__object/parameter/mode" ]
then mode_should="$( cat "$__object/parameter/mode" )"
fi
# yes, it is ugly hack, but if you know better way...
if [ -z "$( find "$destination" -perm "$mode_should" )" ]
then octets=888
else octets="$( echo "$mode_should" | sed 's/^0//' )"
fi
case "$( echo "$ls1" | cut -c1-1 )" in
-) echo 'type: regular file' ;;
d) echo 'type: directory' ;;
esac
echo "owner: $( echo "$ls2" \
| awk '{print $3}' ) $( echo "$ls1" \
| awk '{print $3}' )"
echo "group: $( echo "$ls2" \
| awk '{print $4}' ) $( echo "$ls1" \
| awk '{print $4}' )"
echo "mode: $octets $( echo "$ls1" | awk '{print $1}' )"
echo "size: $( echo "$ls1" | awk '{print $5}' )"
echo "links: $( echo "$ls1" | awk '{print $2}' )"
;;
*) *)
# NOTE: Do not use --printf here as it is not supported by BusyBox stat. # NOTE: Do not use --printf here as it is not supported by BusyBox stat.
# NOTE: BusyBox's stat might not support the "-c" option, in which case # NOTE: BusyBox's stat might not support the "-c" option, in which case
@ -112,5 +80,5 @@ group: %g %G
mode: %04a %A mode: %04a %A
size: %s size: %s
links: %h' "$destination" 2>/dev/null || fallback links: %h' "$destination" 2>/dev/null || fallback
;; ;;
esac esac