#! /bin/sh
#
#   sanitize.sh -- camcontrol sanitize でデータを消去する
#
#	使い方: /bin/sh sanitize.sh ディスク
#		例: /bin/sh sanitize da0
#
#	0.0: Aug.  4, 2015 by Dai ISHIJIMA (for wpout15, FreeBSD 9.3R)
#

ERRORLOG="${ERRORLOG:-/tmp/wperrlog.txt}"
exec 2>> $ERRORLOG
echo "# start $0, $@" 1>&2
echo '# ---------------------------- #' 1>&2

# 単独でも動くように
LOGFIL="${LOGFIL:-/tmp/wpoutlog.txt}"
DMESG="${DMESG:-/var/run/dmesg.boot}"
dispupd="${DISPUPD:-2}"

echo '# ---------------------------- #' >> $LOGFIL
echo -n "script $0 started on " >> $LOGFIL
date >> $LOGFIL

#
disk="${1:-da0}"
dmesg="${DMESG:-/var/run/dmesg.boot}"

#
resultfil=/tmp/result

#
title="${TITLE:-ハードディスク消去ツール『wipe-out』}"

#
if [ ! -w /dev/$disk ]; then
	dialog	--title "$title" \
		--msgbox "ディスク $disk が存在しないか、書き込みできません" \
		5 64
	exit 1
fi

#
mount -p | sed -n -E "/^.dev.$disk/p" > $resultfil
if [ -s $resultfil ]; then
	dialog	--title "$title" \
	    --msgbox "マウント中のディスク $disk を消去することはできません" \
	    5 64
	exit 1
fi

dname=`sed -n -E "/^${disk}:.*<.*>/p" $dmesg | sed 's/.*\(<.*>\).*/\1/'`
bytes=`disksize -B /dev/$disk`
cap=`disksize -p /dev/$disk`

msg="ディスク ${disk} ${dname} の\n"
msg="${msg}全データ ${bytes}バイトを、\n"
msg="${msg}サニタイズ機能 (Sanitize Device Feature) で消去します。\n"
msg="${msg}\n                      よろしいですか?"

sh dummyread.sh
dialog --title "$title" --yesno "$msg" 9 64

case x"$?" in
	x1)
		dialog	--title "$title" \
			--infobox 'ディスクの消去をキャンセルしました' 3 64
		sleep 2
		exit 1
		;;
esac


msg="ATAデバイスやUSB接続のデバイスでは\n"
msg="${msg}サニタイズ (SCSI Sanitize) が動作しなかったり\n"
msg="${msg}正常終了してもデータの消去が実行されていないことがあります。\n"
msg="${msg}\n                      よろしいですか?"

sh dummyread.sh
dialog --title "$title" --yesno "$msg" 9 64

case x"$?" in
	x1)
		dialog	--title "$title" \
			--infobox 'ディスクの消去をキャンセルしました' 3 64
		sleep 2
		exit 1
		;;
esac


msg="本当に${disk} ($cap) のデータをサニタイズしていいですか?"

sh dummyread.sh
dialog	--title "$title" \
	--hline "$dname" \
	--yesno "$msg" \
	5 72

case x"$?" in
	x1)
		dialog	--title "$title" \
			--infobox 'ディスクの消去をキャンセルしました' 3 64
		sleep 2
		exit 1
		;;
esac

dialog	--title "$title" \
	--infobox 'ディスクをサニタイズしています' 3 64

sleep 2

# 開始時刻
startstamp=`date '+%Y-%m-%d %H:%M'`

#
echo "v ---------------------------- v" >> $LOGFIL
echo -n "sanitize started on " >> $LOGFIL
date >> $LOGFIL
echo "sanitize $disk ($dname) $bytes bytes" >> $LOGFIL
echo "Issue the SCSI SANITIZE command:" > /tmp/sanitize.txt
echo "    camcontrol sanitize $disk -v -a block" >> /tmp/sanitize.txt
/sbin/camcontrol sanitize $disk -v -a block -y >> /tmp/sanitize.txt 2>&1
case x"$?" in
	x0)
		status="finished"
		echo "サニタイズは正常終了しました" > /tmp/sanitizemsg.txt
		;;
	*)
		status="failed"
		echo "サニタイズは動作しませんでした" > /tmp/sanitizemsg.txt
		;;
esac
echo '' >> $LOGFIL
echo '::: Sanitize (camcontrol output) :::' >> $LOGFIL
cat /tmp/sanitize.txt >> $LOGFIL
cat /tmp/sanitize.txt >> /tmp/sanitizemsg.txt

sh dummyread.sh
dialog	--title 'Sanitizeログ' --textbox /tmp/sanitizemsg.txt 22 76

#

echo -n "sanitize $status on " >> $LOGFIL
date >> $LOGFIL
echo "sanitize $disk ($dname, $cap)" >> $LOGFIL
echo "^ ---------------------------- ^" >> $LOGFIL

# 終了時刻
endstamp=`date '+%H:%M'`

case x"$status" in
    xfinished)
	# ログ保存
	echo 'The contents of this storage device' > /tmp/erase-log.$disk
	echo "$disk ($cap) '$dname'" >> /tmp/erase-log.$disk
	echo -n 'were erased with ' >> /tmp/erase-log.$disk
	echo 'hard disk wiping tool "wipe-out."' >> /tmp/erase-log.$disk
	echo "Erased with 'SANITIZE'" >> /tmp/erase-log.$disk
	echo " $startstamp -> $endstamp" >> /tmp/erase-log.$disk
	echo "but NOT verified" > /tmp/verify-log.$disk
	;;
esac

#
echo '# ---------------------------- #' 1>&2

exit 0

# EOF
