33 lines
836 B
Bash
Executable File
33 lines
836 B
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
validate_secret_file() {
|
|
path="$1"
|
|
label="$2"
|
|
if [ -L "$path" ] || [ ! -f "$path" ] || [ ! -r "$path" ]; then
|
|
echo "$label must be a readable regular file, not a symlink: $path" >&2
|
|
exit 2
|
|
fi
|
|
mode=$(stat -c '%a' "$path" 2>/dev/null || stat -f '%Lp' "$path" 2>/dev/null) || {
|
|
echo "cannot inspect permissions for $label: $path" >&2
|
|
exit 2
|
|
}
|
|
if [ $((0$mode & 077)) -ne 0 ]; then
|
|
echo "$label must not be readable or writable by group/other users: $path" >&2
|
|
exit 2
|
|
fi
|
|
}
|
|
|
|
read_secret_file() {
|
|
path="$1"
|
|
label="$2"
|
|
validate_secret_file "$path" "$label"
|
|
value=$(tr -d '\r' <"$path")
|
|
case "$value" in
|
|
*'
|
|
'*) echo "$label must contain exactly one line" >&2; exit 2 ;;
|
|
esac
|
|
[ -n "$value" ] || { echo "$label must not be empty" >&2; exit 2; }
|
|
printf '%s' "$value"
|
|
}
|