93 lines
1.8 KiB
Bash
Executable File
93 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
### Copyright 1999-2025. WebPros International GmbH. All rights reserved.
|
|
|
|
#
|
|
# Helper utility for file operations with proftpd's configuration files.
|
|
#
|
|
|
|
usage() {
|
|
cat << EOH
|
|
|
|
Usage: $0 [options]
|
|
|
|
Helper utility for working with proftpd's configuration files
|
|
|
|
OPTIONS:
|
|
-w file - Write content from stdin to the specified file. Makes backup
|
|
of target file.
|
|
|
|
EOH
|
|
}
|
|
|
|
write() {
|
|
|
|
filename="$1"
|
|
|
|
# Check target file can be replaced
|
|
if [ -f "$filename" ] ; then
|
|
if [ ! -w "$filename" -o ! -r "$filename" ] ; then
|
|
echo "Can not read/write to $filename" >&2
|
|
return 100
|
|
fi
|
|
fi
|
|
|
|
# Put new content into temporary file
|
|
tmpfile=`mktemp "$filename".XXXXXX`
|
|
if [ "x$?" != "x0" -o ! -w "$tmpfile" ] ; then
|
|
echo "Can not create temporary file $tmpfile" >&2
|
|
return 101
|
|
fi
|
|
|
|
cat > "$tmpfile"
|
|
if [ "x$?" != "x0" ] ; then
|
|
echo "Error writing to $tmpfile" >&2
|
|
rm -f "$tmpfile"
|
|
return 101
|
|
fi
|
|
|
|
# Remove existing target file
|
|
if [ -f "$filename" ] ; then
|
|
rm -f "$filename"
|
|
if [ "x$?" != "x0" ] ; then
|
|
echo "Can not remove existing file $filename" >&2
|
|
rm -f "$tmpfile"
|
|
return 100
|
|
fi
|
|
fi
|
|
|
|
# Commit changes to target file (disable interactivity in mv)
|
|
mv -f "$tmpfile" "$filename"
|
|
if [ "x$?" != "x0" ] ; then
|
|
ERROR=$?
|
|
rm -f "$tmpfile"
|
|
return $ERROR
|
|
fi
|
|
|
|
# Correct owner & permissions
|
|
chmod 644 "$filename"
|
|
chown "root":"root" "$filename"
|
|
|
|
return $?
|
|
}
|
|
|
|
if [ $# -eq 0 ] ; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
getopts "w:" OPTION
|
|
|
|
ERROR=0
|
|
case $OPTION in
|
|
w)
|
|
write "$OPTARG"
|
|
ERROR=$?
|
|
;;
|
|
*)
|
|
usage
|
|
ERROR=1
|
|
;;
|
|
esac
|
|
|
|
exit $ERROR
|