#!/bin/sh
#
# This script is used by busybox and procps-ng.
#
# With procps-ng, the "--system" option of sysctl also enables "--ignore", so
# errors are not reported via syslog. Use the run_logger function to mimic the
# --system behavior, still reporting errors via syslog. Users not interested
# on error reports can add "-e" to SYSCTL_ARGS.
#
# busybox does not have a "--system" option neither reports errors via syslog,
# so the scripting provides a consistent behavior between the implementations.
# Testing the busybox sysctl exit code is fruitless, as at the moment, since
# its exit status is zero even if errors happen. Hopefully this will be fixed
# in a future busybox version.

PROGRAM="sysctl"

SYSCTL_ARGS=""

# shellcheck source=/dev/null
[ -r "/etc/default/$PROGRAM" ] && . "/etc/default/$PROGRAM"

# Files are read from directories in the SYSCTL_SOURCES list, in the given
# order. A file may be used more than once, since there can be multiple
# symlinks to it. No attempt is made to prevent this.
SYSCTL_SOURCES="/etc/sysctl.d/ /usr/local/lib/sysctl.d/ /usr/lib/sysctl.d/ /lib/sysctl.d/ /etc/sysctl.conf"

# If the logger utility is available all messages are sent to syslog, except
# for the final status. The file redirections do the following:
#
# - stdout is redirected to syslog with facility.level "kern.info"
# - stderr is redirected to syslog with facility.level "kern.err"
# - file dscriptor 4 is used to pass the result to the "start" function.
#
run_logger() {
	# shellcheck disable=SC2086 # we need the word splitting
	find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \
	xargs -0 -r -n 1 readlink -f | {
		prog_status="OK"
		while :; do
			read -r file || {
				echo "$prog_status" >&4
				break
			}
			echo "* Applying $file ..."
			/sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL"
		done 2>&1 >&3 | /usr/bin/logger -t sysctl -p kern.err
	} 3>&1 | /usr/bin/logger -t sysctl -p kern.info
}

# If logger is not available all messages are sent to stdout/stderr.
run_std() {
	# shellcheck disable=SC2086 # we need the word splitting
	find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \
	xargs -0 -r -n 1 readlink -f | {
		prog_status="OK"
		while :; do
			read -r file || {
				echo "$prog_status" >&4
				break
			}
			echo "* Applying $file ..."
			/sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL"
		done
	}
}

if [ -x /usr/bin/logger ]; then
	run_program="run_logger"
else
	run_program="run_std"
fi

start() {
	printf '%s %s: ' "$1" "$PROGRAM"
	status=$("$run_program" 4>&1)
	echo "$status"
	if [ "$status" = "OK" ]; then
		return 0
	fi
	return 1
}

case "$1" in
	start)
		start "Running";;
	restart|reload)
		start "Rerunning";;
	stop)
		:;;
	*)
		echo "Usage: $0 {start|stop|restart|reload}"
		exit 1
esac
