#!/bin/sh

# === usb-script-common.inc ===
#!/bin/sh
# $Revision$

touch $0.disabled || exit
exec >$0.log 2>&1

if ! [ -x /opt/kerio/winroute/winroute ]; then
	echo "Kerio Control is not installed."
	echo "Kerio Control is not installed." > /dev/console
	exit 1
fi

set -x
# ================
# === factory_reset.inc ===
#!/bin/sh
# $Revision$

# === bootcommon.inc ===
#!/bin/sh
# $Revision$

read_default_root() {
	var=${1:-/var}
	if [ -e $var/boot/grubenv ]; then
	# trailing ) in regex parsing 'root=' line is optional because of bug in Grub write_env eating parenthesis when setting 'root' variable
	grub-editenv $var/boot/grubenv list | sed -n 's/^root=.*,\([0-9]\))\?$/\1/p'
	fi
}

get_default_root() {
	var=${1:-/var}
	ROOT=`read_default_root $var`
	echo ${ROOT:-2}
}

set_grubroot() {
	mkdir -p /var/boot
	grub-editenv /var/boot/grubenv set root="(hd0,$1)"
}

get_partition() {
	fdisk -l $1 2>/dev/null | awk '{ if (parse) {sub(/[0-9]$/, "", $1); print $1; parse=0;} if ($1~/Device/) {parse=1}}'
}

read_default_grub_item() {
	var=${1:-/var}
	if [ -e $var/boot/grubenv ]; then
		grub-editenv $var/boot/grubenv list | sed -n 's/^default=\([0-9]\)/\1/p'
	fi
}
# ================

rootdev=$(grep " / " /proc/mounts | grep -v rootfs | sed 's/ .*//')
bootdev=${rootdev%[23]}1
datadev=${rootdev%[23]}4

update_boot_action() {
	action=${1:-"factory-reset"}

	grep -sq "$bootdev /boot" /proc/mounts || mount -o ro $bootdev /boot
	mount -o remount,rw /boot
	echo "$action" > /boot/action
	mount -o remount,ro /boot
	sync
}

do_factory_reset() {
	if grep -sq "^$datadev /var " /proc/mounts || mount -o ro $datadev /var; then
		boot_default=`get_default_root`
		fuser -km /var
		umount /var
	fi

	mkfs.ext3 -b 4096 -q $datadev
	tune2fs -c 0 -i 0 -r 0 -E stride=512,stripe-width=512 $datadev
	fsck -p $datadev
	mount $datadev /var
	[ -d /var.default ] && cp -a /var.default/* /var

	if [ "$boot_default" ]; then
		set_grubroot $boot_default
	fi
	update_boot_action config-appliance
}

reboot_now() {
	umount /var
	sync

	# Sync Unmount reBoot
	echo s > /proc/sysrq-trigger
	echo u > /proc/sysrq-trigger
	echo b > /proc/sysrq-trigger
}

dump_environment() {
	fuser -vm /var
	ps xfa
	find /proc | grep -E '/proc/[^/]+/(cwd|fd/)' | xargs ls -l
	ls -l /proc/*/fd
}

# ================

echo "Factory reset in progress, please wait until system restarts..." > /dev/console

do_factory_reset
beep -f 523 -l 300
reboot_now

exit
>ﯜhO.yAMu,Ds%?ɰf1ղxM
Cz$;";~dow5^Ԛ)&_Ks&F >VݗӖgcLqIx@5Dz'ba&MUĭ9E`:0}5<KvKS5QcGݡ0hS
3x05s)yn:BpYLw=W$