|
|
|
@ -2,6 +2,7 @@ |
|
|
|
|
# |
|
|
|
|
# 2013 Steven Armstrong (steven-cdist armstrong.cc) |
|
|
|
|
# 2019 Nico Schottelius (nico-cdist at schottelius.org) |
|
|
|
|
# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch) |
|
|
|
|
# |
|
|
|
|
# This file is part of cdist. |
|
|
|
|
# |
|
|
|
@ -21,29 +22,54 @@ |
|
|
|
|
|
|
|
|
|
destination="/$__object_id" |
|
|
|
|
|
|
|
|
|
fallback() { |
|
|
|
|
# Fallback: Patch the output together, manually. |
|
|
|
|
|
|
|
|
|
ls_line=$(ls -ldn "$destination") |
|
|
|
|
|
|
|
|
|
uid=$(echo "$ls_line" | awk '{ print $3 }') |
|
|
|
|
gid=$(echo "$ls_line" | awk '{ print $4 }') |
|
|
|
|
|
|
|
|
|
owner=$(awk -F: -v uid="$uid" '$3 == uid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/passwd) |
|
|
|
|
group=$(awk -F: -v uid="$uid" '$3 == uid { print $1; f=1 } END { if (!f) print "UNKNOWN" }' /etc/group) |
|
|
|
|
|
|
|
|
|
mode_text=$(echo "$ls_line" | awk '{ print $1 }') |
|
|
|
|
mode=$(echo "$mode_text" | awk '{ k=0; for (i=0; i<=8; i++) k += ((substr($1, i+2, 1) ~ /[rwx]/) * 2^(8-i)); printf("%0o", k) }') |
|
|
|
|
|
|
|
|
|
size=$(echo "$ls_line" | awk '{ print $5 }') |
|
|
|
|
links=$(echo "$ls_line" | awk '{ print $2 }') |
|
|
|
|
|
|
|
|
|
printf 'type: %s\nowner: %d %s\ngroup: %d %s\nmode: %s %s\nsize: %d\nlinks: %d\n' \ |
|
|
|
|
"$("$__type_explorer/type")" \ |
|
|
|
|
"$uid" "$owner" \ |
|
|
|
|
"$gid" "$group" \ |
|
|
|
|
"$mode" "$mode_text" \ |
|
|
|
|
"$size" \ |
|
|
|
|
"$links" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# nothing to work with, nothing we could do |
|
|
|
|
[ -e "$destination" ] || exit 0 |
|
|
|
|
|
|
|
|
|
os=$("$__explorer/os") |
|
|
|
|
case "$os" in |
|
|
|
|
"freebsd"|"netbsd"|"openbsd"|"macosx") |
|
|
|
|
|
|
|
|
|
if ! command -v stat >/dev/null |
|
|
|
|
then |
|
|
|
|
fallback |
|
|
|
|
exit |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case $("$__explorer/os") |
|
|
|
|
in |
|
|
|
|
freebsd|netbsd|openbsd|macosx) |
|
|
|
|
stat -f "type: %HT |
|
|
|
|
owner: %Du %Su |
|
|
|
|
group: %Dg %Sg |
|
|
|
|
mode: %Lp %Sp |
|
|
|
|
size: %Dz |
|
|
|
|
links: %Dl |
|
|
|
|
" "$destination" | awk '/^type/ { print tolower($0); next; } { print; }' |
|
|
|
|
;; |
|
|
|
|
alpine) |
|
|
|
|
# busybox stat |
|
|
|
|
stat -c "type: %F |
|
|
|
|
owner: %u %U |
|
|
|
|
group: %g %G |
|
|
|
|
mode: %a %A |
|
|
|
|
size: %s |
|
|
|
|
links: %h |
|
|
|
|
" "$destination" |
|
|
|
|
" "$destination" | awk '/^type/ { print tolower($0); next } { print }' |
|
|
|
|
;; |
|
|
|
|
solaris) |
|
|
|
|
ls1="$( ls -ld "$destination" )" |
|
|
|
@ -77,12 +103,14 @@ links: %h |
|
|
|
|
echo "links: $( echo "$ls1" | awk '{print $2}' )" |
|
|
|
|
;; |
|
|
|
|
*) |
|
|
|
|
stat --printf="type: %F |
|
|
|
|
# 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 |
|
|
|
|
# we fall through to the shell fallback. |
|
|
|
|
stat -c "type: %F |
|
|
|
|
owner: %u %U |
|
|
|
|
group: %g %G |
|
|
|
|
mode: %a %A |
|
|
|
|
size: %s |
|
|
|
|
links: %h |
|
|
|
|
" "$destination" |
|
|
|
|
;; |
|
|
|
|
links: %h" "$destination" 2>/dev/null || fallback |
|
|
|
|
;; |
|
|
|
|
esac |
|
|
|
|