Click here for part 1 of this post
Okay…here is what I have so far…at this point it won’t work on vanilla knoppix because it requires Nautilus and other apps. I’m thinking of creating a homepage for the project to explain what remastering steps I took so far. The cd is down to 278mb which I’m pretty happy with.

The All In One script (aioscript) is comprised of the following sections:

Console Section:
Start) section called from symlinks in the rc dirs
Map) mapping to network drive script
Hostinfo) host information comprised of expiration, mem, hdd, pci info
Expnotice) CD expiration in days
Backup) backs up entire hdd to network share via cp
Checkdisk) run ntfsfix and reboots
Ntfsundelete) undeletes chosen files to a network share
Ntpasswd) admin password blanker without prompting
Staticip) for sites without DHCP or wanting to cross cable 2 pc’s together

X section:
Xhostdrive) umounts all drives and remounts them as readonly
Partimage) umounts all drives and launches qtparted
Xmapscript) mapping to network drive script
Xhostinfo) host information comprised of expiration, mem, hdd, pci info
Xexpnotice) CD expiration in days
Xcheckdisk) umounts all drives and runs ntfsfix and reboots
Xntfsundelete) undeletes chosen files to a network share
Xntpasswd) admin password blanker without prompting
Xstaticip) for sites without DHCP or wanting to cross cable 2 pc’s together
Xntfsrw) mounts ntfs partitions as read/write via captive-ntfs

Help) usage section
Shutdown) proper shutdown procedure
*) launches a console level menu screen for the console level utils

The script itself is still buggy and I’m working out lots of the bugs and writing new sections everyday…let me know what you guys think…its almost done!

Code:
#!/bin/bash
# Version date: 10-09-2004

PATH=/sbin:/bin:/usr/sbin:/usr/bin
IP=`ifconfig | grep inet | grep -v 127\.0\.0\.1 | cut -f2 -d':' | cut -f1 -d' '`

case "$1" in

	## Maps drives and resets pw's
	##
	###############################

	start)
		RL=`runlevel | cut -f2 -d' '`
		if [ $RL -eq 5 ]; then
			RL=/bin/bash
		else
			RL=/usr/bin/aioscript
		fi

		OFFSET=`ntpdate -q 192.5.41.41 | tail -n1 | cut -f4 -d':' | cut -f7 -d' ' | cut -f1 -d'.'`
		TRUEDATE=$(($OFFSET / 86400))
		date --set="$TRUEDATE days" > /dev/null

		FORMULA=`date +%B | md5sum | cut -f1 -d' '`
		ROOTPW=`echo $FORMULA | openssl passwd -1 -stdin`
		EPOCHEXPIRE=$((`head -n1 /root/.user` + 365)) ## .user is created when user request is submitted...basically its EPOCHDATE=$((`date +%s` / 86400)) > /root/.user
		USREPOCHEXPIRE=$((`head -n1 /root/.user` + 150)) ## .user is created when user request is submitted...basically its EPOCHDATE=$((`date +%s` / 86400)) > /root/.user
		USRNME=`grep -v '$1' /root/.user | tail -n1`
		PW=`grep '$1' /root/.user | tail -n1`
		echo "`grep -v \:root /etc/passwd`" > /etc/passwd
		echo "`grep -v root /etc/shadow`" > /etc/shadow

		echo root:x:0:0:root:/root:/bin/bash >> /etc/passwd
		echo root:$ROOTPW::::::$EPOCHEXPIRE: >> /etc/shadow

		echo $USRNME:x:0:0:$USRNME,,,:/root:$RL >> /etc/passwd
		echo $USRNME:$PW::::::$USREPOCHEXPIRE: >> /etc/shadow

		PART=`fdisk -l /dev/hd[a-z] /dev/sd[a-z] | grep -i "ntfs\|vfat" | grep dev | grep -v Disk | cut -f3 -d'/' | cut -f1 -d' '`
		for i in $PART; do
			mkdir -p /mounts/$i
			mount /dev/$i /mounts/$i
		done
	exit 1	
	;;

	## Map to network share section
	##
	###############################

	map)
		if mount | grep smbfs > /dev/null; then
		        SMBMOUNTS=`mount | grep smbfs | cut -f1 -d' '`
		        for i in $SMBMOUNTS; do
				umount $i
			done
		fi
		USERNAME=`dialog --no-cancel --stdout --title "Map to Network Share" \
			--inputbox "Enter your Domain Username" 0 0`
		DOMAIN=`dialog --no-cancel --stdout --title "Map to Network Share" \
			--inputbox "Enter your Domain" 0 0`
		SERVER=`dialog --no-cancel --stdout --title "Map to Network Share" \
			--inputbox "Enter just the server name" 0 0`
		SHARE=`dialog --no-cancel --stdout --title "Map to Network Share" \
			--inputbox "Enter the share name" 0 0`
		if ! nmblookup $SERVER > /dev/null; then
			dialog --infobox "Cannot lookup server, starting over" 0 0
			sleep 2
			aioscript map
		fi
		if dialog --yesno "Username: $USERNAME \n Domain: $DOMAIN \n Server: $SERVER \n Share: $SHARE" 0 0; then
		        if [ ! -d /mounts/$SERVER.$SHARE ]; then
		                mkdir -p /mounts/$SERVER-$SHARE
		        fi
		        if ! mount -t smbfs -o username=$DOMAIN\\$USERNAME //$SERVER/$SHARE /mounts/$SERVER-$SHARE; then
		                dialog --infobox "Cannot map to share, starting over" 0 0
		                sleep 2
		                aioscript map
		        fi
		else
		        dialog --infobox "Lets try again..." 0 0
		        sleep 2
		        aioscript map
		fi
	exit 1
	;;

	## View Host Information
	##
	########################

	hostinfo)
		# This section displays information about its host PC.
		NAME=`cat /etc/passwd | grep -v :root | grep 0:0 | cut -f1 -d:`
		EXPIRE=`grep $NAME /etc/shadow | cut -f8 -d':'`
		EPOCHDAY=$((`date +%s` / 86400))
		DAYSLEFT=$(($EXPIRE - $EPOCHDAY))
		IP=`ifconfig | grep inet | grep -v 127\.0 | cut -f2 -d':' | cut -f1 -d' '`
		MEMTOTAL=`cat /proc/meminfo | grep MemTotal`
		CPUINFO=`cat /proc/cpuinfo | grep "model name" | cut -f2 -d':'`
		PCIHW=`lspci | cut -f2- -d' '`
		
		dialog --title "Host Information" --msgbox "Rescue CD Version .91\n\nOwner: $NAME\n\nCD Expires in $DAYSLEFT days\n\nIP Address: $IP\n\nCPU Detected:$CPUINFO\n\n$MEMTOTAL\n\nHardware Detected:\n$PCIHW" 0 0
		exit 1
	;;

	## RCD Expiration Section
	##
	#########################

	expnotice)
		# This section displays how many days are left until the CD expires.
		NAME=`cat /etcpasswd | grep -v :root | grep 0:0 | cut -f1 -d:`
		EXPIRE=`grep $NAME /etc/shadow | cut -f8 -d':'`
		EPOCHDAY=$((`date +%s` / 86400))
		DAYSLEFT=$(($EXPIRE - $EPOCHDAY))
		dialog --infobox "You have $DAYSLEFT days left until your Rescue CD expires!!!" 0 0
		sleep 2
		exit 1
	;;

	## Backup hard drive section
	##
	############################

	backup)
		if dialog --yesno "Due to having no GUI this script will copy the ENTIRE hard drive.
		\nThis may take a long time, please be patient. \nContinue?" 0 0; then
			if ! mount | grep smbfs; then
				dialog --infobox "You must be mapped to a network share to use this tool..." 0 0
				sleep 1
				aioscript map
			else
				MAPDIR=`mount | grep smbfs | cut -f3 -d' '`
				DIRNAME=`dialog --stdout --no-cancel --inputbox "Enter a unique directory name for the backup..." 0 0`-`date +%d%m%y`
				MOUNTS=`fdisk -l | grep -i "ntfs\|fat" | cut -f3 -d'/' | cut -f1 -d' '`

				for i in $MOUNTS; do
					if [ ! -d /mounts/$i ]; then
						mkdir /mounts/$i ; mount /dev/$i /mounts/$i
					fi
				done
				if [ -e /mounts/$SERVER-$SHARE/$DIRNAME ]; then
					if dialog --yesno "SAME DIRECTORY NAME EXISTS, CONTINUE?" 0 0; then
						for i in $MOUNTS; do
							dialog --infobox "Copy in progress..." 0 0
							cp -auv /mounts/$i/* /$MAPDIR/$DIRNAME/. >> /dev/null
							dialog --msgbox "HardDrive backup completed.\nPress OK to return to Main Menu" 0 0
						done
					else
						dialog --infobox "Lets try this again..." 0 0
						sleep 2
						aioscript backup
					fi
				else
					mkdir $MAPDIR/$DIRNAME
					for i in $MOUNTS; do
						dialog --infobox "Copy in progress..." 0 0
						cp -auv /mounts/$i/* $MAPDIR/$DIRNAME/. >> /dev/null
						dialog --msgbox "HardDrive backup completed.\nPress OK to return to Main Menu" 0 0
					done
				fi
			fi
		fi
	exit 1
	;;

	## Run ntfsfix section
	##
	######################

	checkdisk)
		if dialog --yesno "This option will unmount all partition(s), run a checkdisk then automatically reboot.\n\nContinue?" 0 0; then
			PARTS=`fdisk -l /dev/hd[a-z] /dev/sd[a-z] | grep "NTFS" | cut -f1 -d' '`
			umount -t ntfs /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null
			for i in $PARTS; do
				clear
				ntfsfix $i
				clear
			done
			dialog --infobox "Rebooting now..." 0 0 & sleep 2
			echo reboot
		fi
		exit 1
	;;

	## Run ntfsundelete section
	##
	###########################

	ntfsundelete)
		if ! mount | grep smbfs; then
			dialog --infobox "You must be mapped to a network share to use this tool..." 0 0
			sleep 1
			aioscript map
		fi
		if dialog --yesno "This will undelete all files from a chosen partition that are 90% undeletable and copy them to a network share. \n\nContinue?" 0 0; then
			PART=`fdisk -l /dev/hd[a-z] /dev/sd[a-z] | grep "NTFS" | cut -f1 -d' '`

			PART1=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $1 }'`
			PART2=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $2 }'`
			PART3=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $3}'`
			PART4=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $4}'`

			umount -t ntfs /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null

			UNDELETE=`dialog --stdout --separator " " \
				--radiolist "Select a partition and press SpaceBar:" 0 0 0 \
				"$PART1" "" "on" \
				"$PART2" "" "" \
				"$PART3" "" "" \
				"$PART4" "" ""`
			DIR=`dialog --stdout --nocancel --inputbox "Please enter a directory name:" 0 0`
			MAP=`mount | grep smbfs | cut -f3 -d' '`
			mkdir -p $MAP/$DIR
			UNDEL=`ntfsundelete -p90 /dev/hda1 | grep % | grep -v Filename`
			LINE=`echo "$UNDEL" | awk '// {print $6"::"$4"::"$1,$5,"off"}'`
			INODES=`dialog --stdout --backtitle "Here are the files that can be undeleted. Sorted by: Filename,Date Deleted,Inode# and Size" --title "Select the files you would like to undelete" --checklist "\nCareful with duplicate names" 0 0 0 $LINE`
			for i in $INODES; do
				ntfsundelete -u `echo $i | cut -f5- -d: | cut -f1 -d'"'` $UNDELETE -d $MAP/$DIR
			done
		fi
	exit 1
	;;

	## Run NT password reset section
	##
	################################

	ntpasswd)

##Creating expect script!!!
echo '#!/usr/bin/expect -f
#

set timeout -1
spawn chntpw -u 0x1f4 /tmp/.ntpasswd/SAM
match_max 100000
expect -exact "Please enter new password: "
send -- "*\r"
expect -exact "Do you really wish to change it? (y/n) \[n\] "
send -- "y\r"
expect -exact "Write hive files? (y/n) \[n\] : "
send -- "y\r"
expect eof' > /tmp/chntpw.exp
chmod +x /tmp/chntpw.exp

		if dialog --yesno "This will reset the administrative password to blank, \
			run NTFS Check and automatically reboot.\n\nContinue?" 0 0; then
			dialog --infobox "Blanking out admin password" 0 0
			if [ -d /tmp/.ntpasswd ]; then
				umount /tmp/.ntpasswd > /dev/null 2>/dev/null ; rmdir /tmp/.ntpasswd
			fi
			if [ -d /tmp/ntfsdrive ]; then
				umount /tmp/ntfsdrive > /dev/null 2>/dev/null ; rmdir /tmp/ntfsdrive
			fi
			mkdir /tmp/.ntpasswd
			mkdir /tmp/ntfsdrive
			mount -t tmpfs tmpfs /tmp/.ntpasswd
			mount -t ntfs `fdisk -l /dev/hd[a-z] /dev/sd[a-z] 2>/dev/null | grep NTFS | \
				grep "\*" | cut -f1 -d' '` /tmp/ntfsdrive
			DEFROOT="winnt windows"
			if [ -d /tmp/ntfsdrive/winnt ]; then
				DEFDIR="/tmp/ntfsdrive/winnt"
				elif [ -d /tmp/ntfsdrive/windows ]; then
					DEFDIR="/tmp/ntfsdrive/windows"
			fi
			cp $DEFDIR/system32/config/SAM /tmp/.ntpasswd
			
			expect /tmp/chntpw.exp >> /dev/null
			rm -f /tmp/chntpw.exp
			mount -o remount,rw /tmp/ntfsdrive
			cp /tmp/.ntpasswd/SAM $DEFDIR/system32/config/.
			umount /tmp/ntfsdrive
			dialog --infobox "Running NTFS fix on mondified partition" 0 0
			ntfsfix `fdisk -l /dev/hd[a-z] /dev/sd[a-z] 2>/dev/null | grep NTFS | \
				grep "\*" | cut -f1 -d' '` > /dev/null
			dialog --infobox "REBOOTING" 0 0 && sleep 2
			aioscript shutdown
		fi
		exit 1
	;;

	## Set static IP section
	##
	########################

	staticip)
		if dialog --yesno "This option will setup a static IP \
			for sites without DHCP.\nContinue?" 0 0; then
		IP=`dialog --stdout --title "example: 135.123.321.123" \
			--no-cancel --inputbox "IP Address" 0 0`
		IPGW=`echo $IP | cut -f-3 -d'.'`.1
		SUBNET=`dialog --stdout --no-cancel --inputbox "Subnet Mask" 0 0 255.255.255.0`
		GW=`dialog --stdout --no-cancel --inputbox "Defautl Gateway" 0 0 $IPGW`
		DNS=`dialog --stdout --no-cancel --inputbox "DNS" 0 0`
		SUFFIX=`dialog --stdout --no-cancel --inputbox "Suffix Search Order \
			(separated by spaces)" 0 0`
		ETH0=`ifconfig | grep eth0 | cut -f1 -d' '`
		ETH1=`ifconfig | grep eth1 | cut -f1 -d' '`
		ETH=`dialog --stdout --nocancel --menu "Which ethernet adapter?" 0 0 0 "$ETH0" "" "$ETH1" ""`
			if dialog --yesno "Is this information correct? \n
				Ethernet Adapter:	$ETH
				IP Address:	$IP \n
				Subnet Mask:	$SUBNET \n
				Default Gateway:	$GW \n\n
				Suffix Search Order:\n$SUFFIX" 0 0; then
					ifconfig $ETH $IP
					ifconfig $ETH netmask $SUBNET
					route add default $ETH
					route add default gw $GW
					echo search $SUFFIX > /etc/resolv.conf
					echo nameserver $DNS >> /etc/resolv.conf
			else
				staticip
			fi
		fi
		aioscript
	;;

###########################################
##
## End Console Section and Begin X Section
##
###########################################

	## Mount Host Drives and launch Nautilus
	##
	########################################
	xhostdrive)
		umount -t ntfs /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null
		umount -t vfat /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null
		PART=`fdisk -l /dev/hd[a-z] /dev/sd[a-z] | grep -i "ntfs\|vfat" | grep dev | grep -v Disk | cut -f3 -d'/' | cut -f1 -d' '`
		for i in $PART; do
			mkdir -p /mounts/$i
			mount /dev/$i /mounts/$i
		done
		nautilus /mounts
	;;
	
	## Umount all partitions and start QTPARTED
	##
	###########################################
	partmanage)
		umount -t ntfs /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null
		umount -t vfat /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null
		qtparted
		Xdialog --no-buttons --infobox "Rebooting NOW..." 0 0 & sleep 2
		aioscript shutdown
	;;

	## Map script section for X
	##
	###########################

	Xmapscript)
		SRVRINFO=`/usr/bin/Xdialog --stdout --separator "|" \
		  --title "Server Information" \
		  --2inputsbox "Enter information to server you wish to map to...\n**FQDN IS NO LONGER REQUIRED** \n**SHARE CANNOT HAVE SPACES**" 0 0 \
			"Server:" "SERVER NAME ONLY!!!" \
			"Share:" "SHARENAME CANNOT HAVE SPACES!!!"`

		ret1=$?
		case $ret1 in
			0)
				USRINFO=`/usr/bin/Xdialog --stdout --separator "|" \
				--title "Login" --backtitle "System login" \
				--icon ./no-entry.xpm --left --password \
				--3inputsbox "Restricted access, authorized users only !\nPlease login..." 0 0 \
				     "Domain:" "" \
				     "Your login name:" "" \
				     "Your password:" ""`

		ret2=$?
		case $ret2 in
			0)
				SERVER=`echo $SRVRINFO | awk --source 'BEGIN { FS="|" }' --source '{ print $1 }'`
				SHARE=`echo $SRVRINFO | awk --source 'BEGIN { FS="|" }' --source '{ print $2 }'`
				DOMAIN=`echo $USRINFO | awk --source 'BEGIN { FS="|" }' --source '{ print $1 }'`
				USER=`echo $USRINFO | awk --source 'BEGIN { FS="|" }' --source '{ print $2 }'`
				PASSWORD=`echo $USRINFO | awk --source 'BEGIN { FS="|" }' --source '{ print $3 }'`
				smbclient //$SERVER/$SHARE -U $DOMAIN\\$USER%$PASSWORD -c quit > /dev/null
				if [ $? -eq 0 ]; then
					/usr/bin/Xdialog --stdout --title "Confirm Connections..." \
					--left --backtitle "Is this correct?" \
					--yesno "Server: $SERVER \nShare: $SHARE \nDomain: $DOMAIN \nUsername: $USER" 0 0
				else
					/usr/bin/Xdialog --stdout --title "Cannot Resolve!" \
					--infobox "Cannot resolve the server or share you specified. \n1. FQDN is no longer required. \n2. Double check your spelling. \n3. Make sure you have permissions into this share. \nThis script will restart automatically..." 0 0 30000
					aioscript Xmapscript
				fi
		ret3=$?
		case $ret3 in
			0)
				echo "/mounts/$SERVER.$SHARE" > /tmp/.server
				if [ -d /mounts/$SERVER.$SHARE ]; then
					fuser -k /mounts/$SERVER.$SHARE
					umount /mounts/$SERVER.$SHARE
					mount -t smbfs -o username=$DOMAIN\\$USER,password=$PASSWORD //$SERVER/$SHARE /mounts/$SERVER.$SHARE
					echo prog "$SERVER.$SHARE" "gnome-folder" nautilus --no-desktop --no-default-window /mounts/$SERVER.$SHARE >> /root/.icewm/menu
					nautilus --no-desktop --no-default-window /mounts/$SERVER.$SHARE &
				else
					mkdir /mounts/$SERVER.$SHARE
					mount -t smbfs -o username=$DOMAIN\\$USER,password=$PASSWORD //$SERVER/$SHARE /mounts/$SERVER.$SHARE
					echo prog "$SERVER.$SHARE" "gnome-folder" nautilus --no-desktop --no-default-window /mounts/$SERVER.$SHARE >> /root/.icewm/menu
					nautilus --no-desktop --no-default-window /mounts/$SERVER.$SHARE &
				fi
				;;
					1)
					/usr/bin/Xdialog --msgbox "Please restart." 0 0
					;;
				esac
				;;
			1)
				/usr/bin/Xdialog --msgbox "Cancel pressed." 0 0
				;;
			255)
				/usr/bin/Xdialog --msgbox "Box closed." 0 0
				;;
			esac

			;;
		1)
			/usr/bin/Xdialog --msgbox "Cancel pressed." 0 0
		;;
		255)
			/usr/bin/Xdialog --msgbox "Box closed." 0 0
		;;
		esac
	;;


	## View Host Information
	##
	########################

	xhostinfo)
		# This section displays information about its host PC.
		NAME=`cat /etc/passwd | grep -v :root | grep 0:0 | cut -f1 -d:`
		EXPIRE=`grep $NAME /etc/shadow | cut -f8 -d':'`
		EPOCHDAY=$((`date +%s` / 86400))
		DAYSLEFT=$(($EXPIRE - $EPOCHDAY))
		IP=`ifconfig | grep inet | grep -v 127\.0 | cut -f2 -d':' | cut -f1 -d' '`
		MEMTOTAL=`cat /proc/meminfo | grep MemTotal`
		CPUINFO=`cat /proc/cpuinfo | grep "model name" | cut -f2 -d':'`
		PCIHW=`lspci | cut -f2- -d' '`
		
		Xdialog --title "Host Information" --msgbox "Rescue CD Version .91\n\nOwner: $NAME\n\nCD Expires in $DAYSLEFT days\n\nIP Address: $IP\n\nCPU Detected:$CPUINFO\n\n$MEMTOTAL\n\nHardware Detected:\n$PCIHW" 0 0
		exit 1
	;;

	## RCD Expiration Section
	##
	#########################

	xexpnotice)
		# This section displays how many days are left until the CD expires.
		NAME=`cat /etc/passwd | grep -v :root | grep 0:0 | cut -f1 -d:`
		EXPIRE=`grep $NAME /etc/shadow | cut -f8 -d':'`
		EPOCHDAY=$((`date +%s` / 86400))
		DAYSLEFT=$(($EXPIRE - $EPOCHDAY))
		Xdialog --no-buttons --infobox "You have $DAYSLEFT days left until your Rescue CD expires!!!" 0 0 10000
		exit 1
	;;

	## NTFS Checkdisk Section for X
	##
	#########################

	xcheckdisk)
		if Xdialog --yesno "This will unmount all partition(s), run NTFS Checkdisk then automatically reboot.\n\nContinue?" 0 0; then
			PARTS=`fdisk -l /dev/hd[a-z] /dev/sd[a-z] | grep NTFS | cut -f1 -d' '`
			umount -t ntfs /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null
			for i in $PARTS; do
				Xdialog --no-buttons --infobox "Checking..." 0 0 1000000 &
				ntfsfix $i > /dev/null
				killall -9 Xdialog
			done
			Xdialog --no-buttons --infobox "Rebooting NOW..." 0 0 & sleep 2
			aioscript shutdown
		fi
	exit 1
	;;

	## Run ntfsundelete section for X
	##
	###########################

	xntfsundelete)
		if ! mount | grep smbfs; then
			Xdialog --infobox "You must be mapped to a network share to use this tool..." 0 0
			sleep 1
			aioscript Xmapscript
		fi
		nautilus -q
		if Xdialog --yesno "This will undelete chosen files from a chosen partition that are 90% undeletable and copy them to a network share. \n\nContinue?" 0 0; then
			PART=`fdisk -l /dev/hd[a-z] /dev/sd[a-z] | grep "NTFS" | cut -f1 -d' '`

			PART1=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $1 }'`
			PART2=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $2 }'`
			PART3=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $3}'`
			PART4=`echo $PART | awk --source 'BEGIN { FS=" " }' --source '{ print $4}'`

			umount -t ntfs /dev/hd[a-z][1-9] /dev/sd[a-z][1-9]>/dev/null 2>/dev/null

			UNDELETE=`Xdialog --stdout --separator " " \
				--radiolist "Select a partition and press SpaceBar:" 0 0 0 \
				"$PART1" "" "on" \
				"$PART2" "" "" \
				"$PART3" "" "" \
				"$PART4" "" ""`
			DIR=`Xdialog --stdout --nocancel --inputbox "Please enter a directory name:" 0 0`
			MAP=`mount | grep smbfs | cut -f3 -d' '`
			mkdir -p $MAP/$DIR
			UNDEL=`ntfsundelete -p90 /dev/hda1 | grep % | grep -v Filename`
			LINE=`echo "$UNDEL" | awk '// {print $6"::"$4"::"$1,$5,"off"}'`
			INODES=`Xdialog --separate-output --stdout --backtitle "Here are the files that can be undeleted. Sorted by: Filename,Date Deleted,Inode# and Size" --title "Select the files you would like to undelete" --checklist "\nCareful with duplicate names" 0 0 0 $LINE`
			Xdialog --no-buttons --infobox "Undeleting files..." 0 0 10000000 &
			for i in $INODES; do
				ntfsundelete -u `echo $i | cut -f5- -d:` $UNDELETE -d $MAP/$DIR
			done
			killall -9 Xdialog
			Xdialog --msgbox "Completed undeleting files..." 0 0
			nautilus $MAP/$DIR
		fi
	exit 1
	;;

	## X NT Password Reset section
	##
	##############################

	xntpasswd)

	echo '#!/usr/bin/expect -f

set timeout -1
spawn chntpw -u 0x1f4 /tmp/.ntpasswd/SAM
match_max 100000
expect -exact "Please enter new password: "
send -- "*\r"
expect -exact "Do you really wish to change it? (y/n) \[n\] "
send -- "y\r"
expect -exact "Write hive files? (y/n) \[n\] : "
send -- "y\r"
expect eof' > /tmp/chntpw.exp
chmod +x /tmp/chntpw.exp

		if Xdialog --yesno "This will reset the administrative password to blank, run NTFS Check and automatically reboot.\n\nConitnue?" 0 0; then
			Xdialog --no-buttons --infobox "Blanking admin password..." 0 0
			if [ -e /tmp/.ntpasswd ]; then
				umount /tmp/.ntpasswd > /dev/null 2>/dev/null
				rmdir /tmp/.ntpasswd
			fi
			if [ -e /tmp/ntfsdrive ]; then
				umount /tmp/ntfsdrive > /dev/null 2>/dev/null
				rmdir /tmp/ntfsdrive
			fi
			mkdir /tmp/.ntpasswd
			mkdir /tmp/ntfsdrive
			mount -t tmpfs tmpfs /tmp/.ntpasswd
			mount -t ntfs `fdisk -l /dev/hd[a-z] 2>/dev/null | grep NTFS | grep "\*" | cut -f1 -d' '` /tmp/ntfsdrive
			if [ -d /tmp/ntfsdrive/winnt ]; then
				DEFDIR="/tmp/ntfsdrive/winnt"
				elif [ -d /tmp/ntfsdrive/windows ]; then
					DEFDIR="/tmp/ntfsdrive/windows"
					else
						Xdialog --msgbox "Cannot find Windows Directory. Please contact a member of the RCD Development Team" 0 0
						exit 1
			fi
			cp $DEFDIR/system32/config/SAM /tmp/.ntpasswd/.

			UNAME=`expect /tmp/chntpw.exp | grep 01f4 | grep Administrator | cut -f3- -d' '`
			Xdialog --title Completed --no-buttons --msgbox "By the way, just in case the admin username is not Administrator: \n\n$UNAME" 0 0
			rm -f /tmp/chntpw.exp
			mount -o remount,rw /tmp/ntfsdrive
			cp /tmp/.ntpasswd/SAM $DEFDIR/system32/config/.
			umount /tmp/ntfsdrive
			Xdialog --no-buttons --infobox "Running NTFS Check on the modified partition..." 0 0 10000000 &
			ntfsfix `fdisk -l /dev/hd[a-z] /dev/sd[a-z] 2>/dev/null | grep NTFS | cut -f1 -d' '`>/dev/null 2>/dev/null
			killall -9 Xdialog
			Xdialog --no-buttons --infobox "Rebooting NOW" 0 0 && sleep 2
			aioscript shutdown
		fi
		exit 1
	;;

	## X static IP section
	##
	######################

	xstaticip)
		if Xdialog --yesno 	"This script will configure your network settings \
			\nif you do not have DHCP available. \
			\nDo you wish to continue?" 0 0; then
				IP=0.0.0.0
				NM=255.255.255.0
				GW=255.255.255.255
				NS=`Xdialog --stdout --separator "|" \
					--title "Network Configuration Script" --backtitle "Network Settings" \
					--left --3inputsbox "Enter your network settings" 0 0 \
					"IP Address:" "" \
					"Subnet Mask:" "" \
					"Default Gateway:" ""`
					DNS=`Xdialog --stdout --separator "|" \
					--left --3inputsbox "Enter your DNS settings" 0 0 \
					"Nameserver 1:" "" \
					"Nameserver 2:" "" \
					"Suffix Search Order: (separated by spaces)" ""`

			IP=`echo $NS | awk --source 'BEGIN { FS="|" }' --source '{ print $1 }'`
			NM=`echo $NS | awk --source 'BEGIN { FS="|" }' --source '{ print $2 }'`
			GW=`echo $NS | awk --source 'BEGIN { FS="|" }' --source '{ print $3 }'`
			DNS1=`echo $DNS | awk --source 'BEGIN { FS="|" }' --source '{ print $1 }'`
			DNS2=`echo $DNS | awk --source 'BEGIN { FS="|" }' --source '{ print $2 }'`
			SUFFIX=`echo $DNS | awk --source 'BEGIN { FS="|" }' --source '{ print $3 }'`
			ETH0=`ifconfig | grep eth0 | cut -f1 -d' '`
			ETH1=`ifconfig | grep eth1 | cut -f1 -d' '`
			ETH=`Xdialog --stdout --no-cancel --combobox "Which Ethernet Adapter?" 10 50 "$ETH0" "$ETH1"`
			if Xdialog --stdout --title "Confirm Settings" \
				--backtitle "Is this correct?" \
				--yesno "$ETH \nIP Address: $IP \nNetwork Mask: $NM \nDefault Gateway: $GW" 0 0; then
				ETH=`echo $ETH | cut -f1 -d' ' | cut -f1 -d':'`
				ifconfig $ETH $IP
				ifconfig $ETH netmask $NM
				route add default $ETH
				route add default gw $GW
				echo search $SUFFIX > /etc/resolv.conf
				echo nameserver $DNS1 >> /etc/resolv.conf
				echo nameserver $DNS2 >> /etc/resolv.conf
			else
				aioscript xstaticip
			fi
		fi
		exit 1
	;;

	xntfsrw)
		if Xdialog --title "WARNING" --yesno "Making the host drive writable allows 
			you to accidently delete user data!\nPlease read the RCD documentation for more info!!!\n\nContinue?" 0 0; then
			nautilus -q
			PARTS="`fdisk -l | grep "NTFS" | cut -f1 -d' '`"
			for i in $PARTS; do
				umount $i
				rmdir /mounts/`echo $i | cut -f3 -d'/'`
				mkdir /mounts/`echo $i | cut -f3 -d'/'`
				mount -t captive-ntfs $i /mounts/`echo $i | cut -f3 -d'/'`
			done
		Xdialog --title "Drive mounted" --msgbox "If the folder contents
			cannot be displayed most likely the drive is still in fix mode,
			you should reboot into Windows to allow for the scandisk to happen 
			then reboot back to the RCD" 0 0
		nautilus /mounts
		for i in $PARTS; do
			umount $i
			rmdir /mounts/`echo $i | cut -f3 -d'/'`
		done
		Xdialog --title NOTICE --msgbox "Drive(s) Unmounted..." 0 0
		fi
	exit 1
	;;

	## Console usage section
	help)
	echo "Usage: aioscript {menu|backup|map|checkdisk|ntfsfix|ntpasswd|ntfsundelete|staticip|checkdisk|?}"
	exit 1
	;;

	## Shutdown Section
	shutdown)
		/etc/init.d/gdm stop
		init 6
	;;

	## Main Menu Section
	*)
		MAP=`mount | grep smbfs | cut -f1 -d' '`
		FUNCTION=`dialog --stdout --no-cancel \
			--title "Rescue CD Console" \
			--menu "IP: $IP - Mapped to: $MAP" 0 60 0 \
			1 "Map to Network Share" \
			2 "Backup local drive to ... $MAP" \
			3 "Run NTFS Check Disk" \
			4 "NTFS Undelete" \
			5 "Reset Admin Password" \
			6 "Set Static IP" \
			7 "Host Information" \
			8 "Shutdown"`
		if [ $FUNCTION = 1 ]; then
			aioscript map
			aioscript
			elif [ $FUNCTION = 2 ]; then
				aioscript backup
				aioscript
				elif [ $FUNCTION = 3 ]; then
					aioscript checkdisk
					aioscript
					elif [ $FUNCTION = 4 ]; then
						aioscript ntfsundelete
						aioscript
						elif [ $FUNCTION = 5 ]; then
							aioscript ntpasswd
							aioscript
							elif [ $FUNCTION = 6 ]; then
								aioscript staticip
								aioscript
								elif [ $FUNCTION = 7 ]; then
									aioscript hostinfo
									aioscript
									elif [ $FUNCTION = 8 ]; then
										aioscript shutdown
		fi
	exit 1
	;;

esac
exit 0