#!/bin/sh
#
# Usage: modsave [flash|all]

save() {
	TMPFILE=/tmp/.save.tmp

	if [ -r "/mod/etc/conf/mod.cfg" ]; then
		. /mod/etc/conf/mod.cfg
	else
		MOD_LIMIT=61440
	fi

	# not really a lock
	if [ -e "$TMPFILE" ]; then
		echo "$TMPFILE exists! Concurrent update?" 1>&2
		exit 1
	fi

	tar -cf $TMPFILE flash -C /tmp/

	let size="$(cat $TMPFILE | wc -c)"

	if [ "$size" -gt "$MOD_LIMIT" ]; then
		rm -f $TMPFILE
		echo "size: $size limit: $MOD_LIMIT" 1>&2
		echo "ERROR: /var/flash/ds_mod too big" 1>&2
		exit 1
	fi

	echo -n 'Writing /var/flash/ds_mod...'
	cat $TMPFILE > /var/flash/ds_mod
	rm -f $TMPFILE
	echo 'done.'
	echo "$size bytes written."
}

case "$1" in
	""|all)
		echo -n 'Saving passwords...'
		/usr/bin/modpasswd save
		echo 'done.'

		echo -n 'Saving config...'
		/usr/bin/modconf save mod
		if [ -e "/etc/static.pkg" ]; then
			for pkg in $(cat /etc/static.pkg); do
				if [ -r "/etc/default.$pkg/$pkg.cfg" ]; then
					/usr/bin/modconf save $pkg
				fi
			done
		fi
		echo 'done.'

		save
		;;
	flash)
		save
		;;
	*)
		echo "Usage: $0 [flash|all]" 1>&2
		exit 1
		;;
esac

exit 0