All pastes #124274 Raw Edit

Something

public text v1 · immutable
·published 2006-08-09 22:57 UTC
rendered paste body
#!/bin/bash
VERBOSE=1
#set key file locations
banlist=./firewall.banned
banlistfull=./firewall.banned.full
natlist=./firewall.nat
natlistfull=./firewall.nat.full
lockfile=/var/lock/firewall
initfile=/etc/init.d/basetables
configfile=./basetablesconfig
defaultconfing=./config.def
interfaces=/etc/network/interfaces
localrules=./firewall.local
frontend=./basetables.frontend


#Zenity frontend
#
#TODO:
#Controls for default behavior with no firewall -- Defunct
#Beginner Mode --CHECK
#Intermediat Mode --CHECK
#God Mode? -- Delayed
#Offload to file --CHECK
#Selection Persistance --CHECK
#Cancel buttons should cancel the script! -- CHECK
#Port Forwarding Configurator -- CHECK
#IP Blocking Configurator  -- CHECK
#Section Roundups
#	optional in advanced
#Multiple n00b setups
#Multiple profiles
#Fix ip syntax checking -- CHECK
#Remove Hard linked files -- CHECK
#subnet supernet logic
#Firewall on/off after config changes
#n00b groupings
#Profile Manager
#
#
echo check
function startread { #Introduction to script, purpose, and priming read of key values
#
# This area sets several key (used in iptables script) variables, they are: (in apprx order)
#
# VERBOSE
# EXTERNAL_INTERFACE
# DHCP
# EXTERNAL_IP
# BROADCAST_NET
# EXTERNAL_NETWORK
# MASQUERADING
#




VERBOSE=1


mode=`zenity --list --text="Select User Mode" --radiolist --width=600 --height=300 --column="" --column=$"Mode" --column=$"Description"\
	TRUE $"Newbie" $"Let BaseTables do the work for you!  Try Me First!"\
	FALSE $"Intermediate" $"Set Some Options, Not Fully Implimented"\
	FALSE $"Advanced" $"Set Advanced Options"\
	FALSE $"Master of the Known Universe" $"Not Implimented Yet"\
	`

	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi

if [ "$mode" = "Newbie" ]
	then
	skip=3
elif [ "$mode" = "Intermediate" ]
	then
	skip=2
elif [ "$mode" = "Advanced" ]
	then
	skip=1
else
	skip=0
fi

	 ## Cat out interfaces file, greping out the interfaces, then getting rid of any comments and loopback, then getting rid of the leftover auto	
	ifaces=$(echo `cat $interfaces | grep auto | grep -v \# | grep -v lo$ | awk '{print $2}'`)

	counter=10

##nasty zenity hack because well... it doesnt seem to set variables while running the progress bar

	counter=10
(

	for iface in ${ifaces}
	do
	ping -W 1 -c 1 -I $iface www.google.com
	if [ $? -eq 0 ]
		then
		echo $iface > iface.guess
	fi
	echo $counter
	counter=`expr $counter + 15`
	done
	) |
        zenity --progress \
        --title="Detecting Network Interface" \
        --text="Scanning all interfaces..." \
	--autoclose \
        --percentage=0 

	read bestguess < iface.guess
	[ ! $bestguess ] && bestguess=`echo $ifaces | awk '{print $1}'`


	## Prompting user for external interface, awk and sed magic dirty but it works
	EXTERNAL_INTERFACE=$(zenity --entry --title="External Interface" --text="BaseTables has detected the following interfaces: $ifaces.
Which of them is your external (internet) interface?
Note: If your interfaces is not listed, just type it in."  --entry-text=$bestguess)

	##Check for DHCP
	if [ $skip -lt 3 ]
		then	
		DHCPCHECK=`zenity --list --radiolist --width=500 --column="" --column=$"DHCP" --column=$"Description"\
			TRUE $"On" $"Your external interface uses DHCP to get an address"\
			FALSE $"Off" $"Your external interface has a static IP"
			`
			if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
				then
				$frontend &
				exit 35
			fi
			if echo $DHCPCHECK | grep "Off"
				then
				DHCP=0
			else
				DHCP=1
			fi
		else
			DHCP=1
	fi

if [ $DHCP -eq 0 ]
	then	

	## Grabbing IP of external interface
	EXTERNAL_IPGUESS=`ifconfig $EXTERNAL_INTERFACE | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}'`
	## Asking user if guessed IP is correct (should be, might remove later if success rate is 100
	EXTERNAL_IP=`zenity --entry --title="External IP" --text="BaseTables has attempted to detect your external IP.  If it is assigned by DHCP you may safely ignore this" --entry-text=$EXTERNAL_IPGUESS`
	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi

	## Grabbing Broadcast address
	BROADCAST_NETGUESS=`ifconfig $EXTERNAL_INTERFACE | grep Bcast | awk '{print $3}' | awk -F: '{print $2}'`
	## Confirming with user that guess is correct
	BROADCAST_NET=`zenity --entry --title="Broadcast Address" --text="BaseTables has attempted to detect your Bcast address.  If it is assigned by DHCP you may safely ignore this" --entry-text=$BROADCAST_NETGUESS`
	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi

	## Grabbing subnet mask to aid in grabbing of Network Address
	SUBNET_MASKNET=`ifconfig wlan0 | grep Bcast | awk '{print $4}' | awk -F: '{print $2}'`
	if [ $SUBNET_MASKNET = 255.255.255.0 ]
		then
		SUBGOOD=1
	elif [ $SUBNET_MASKNET = 255.255.0.0 ]
		then
		SUBGOOD=2
	elif [ $SUBNET_MASKNET = 255.0.0.0 ]
		then
		SUBGOOD=3
	else
		zenity --error --text="BaseTables could not guess your Network IP properly.  This is the first IP in your subnet.  This error should not occur, but the programmer who made this sucks.  He intends to fix it... as soon as he gets smarter...  You will have to manually enter this for now."
	fi

	## Making the Network Address, provided the previous grab went ok, else we just prompt.
	if [ $SUBGOOD -eq 1 ]
		then ## Here we modify the external IP based upon the broadcast address
		EXTERNAL_NETWORKGUESS=`echo $EXTERNAL_IP | awk -F. '{print $1 "." $2 "." $3 "." 0}'`
		EXTERNAL_NETWORK=`zenity --entry --title="External Network" --text="BaseTables has attempted to detect your network address.  If it is assigned by DHCP you may safely ignore this" --entry-text=$EXTERNAL_NETWORKGUESS`
	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi
	elif [ $SUBGOOD -eq 2 ]
		then
		EXTERNAL_NETWORKGUESS=`echo $EXTERNAL_IP | awk -F. '{print $1 "." $2 "." 0 "." 0}'`
		EXTERNAL_NETWORK=`zenity --entry --title="External Network" --text="BaseTables has attempted to detect your network address.  If it is assigned by DHCP you may safely ignore this" --entry-text=$EXTERNAL_NETWORKGUESS`
	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi
	elif [ $SUBGOOD -eq 3 ]
		then
		EXTERNAL_NETWORKGUESS=`echo $EXTERNAL_IP | awk -F. '{print $1 "." 0 "." 0 "." 0}'`
		EXTERNAL_NETWORK=`zenity --entry --title="External Network" --text="BaseTables has attempted to detect your network address.  If it is assigned by DHCP you may safely ignore this" --entry-text=$EXTERNAL_NETWORKGUESS`
	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi
	else
		EXTERNAL_NETWORK=`zenity --entry --title="External Network" --text="BaseTables was unable to detect your network address.  If it is assigned by DHCP you may safely ignore this" --entry-text=$EXTERNAL_NETWORKGUESS`
	if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
		then
		$frontend &
		exit 35
	fi
	fi

else # Declaring variables (probably not needed)
EXTERNAL_IP=""
EXTERNAL_NETWORK=""
BROADCAST_NET="" 
fi

if [ $skip -lt 3 ]
	then
	zenity --info --text="BaseTables is capable of configuring NAT, a method of sharing one internet connection across many comptuers.  You will now be presented with the option to configure this service."
	MASQRES=`zenity --list --radiolist --width=600 --height=300 --column="" --column=$"Value" --column=$"Description"\
		FALSE $"On" $"Clients connected to the internal network can access the internet"\
		TRUE $"Off" $"Clients connected to the internal network cannot access the internet"
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi

		if echo $MASQRES | grep "On"
			then
			MASQUERADING=1
			nat
		else
			MASQUERADING=0
		fi
	else
		MASQUERADING=0
	fi
##ROUNDUP##
#skip if in n00blerland
if [ $skip -lt 3 ]
then
	# EXTERNAL_INTERFACE DHCP EXTERNAL_IP BROADCAST_NET EXTERNAL_NETWORK MASQUERADING
	if [ $DHCP -eq 1 ]
		then 
		ROUNDDHCP=Yes
	else
		ROUNDDHCP=No
	fi
	
	if [ $MASQUERADING -eq 1 ]
		then 
		ROUNDNAT=Enabled
	else
		ROUNDNAT=Disabled
	fi
	
	zenity --question --title="Base Configuration Roundup" --width=600 --text="You have made the following selections:
External Interface: $EXTERNAL_INTERFACE
DHCP Used?: $ROUNDDHCP
	
~~NOTE~~  If DHCP is used, External IP and Broadcast Address do not matter
External IP: $EXTERNAL_IP
Broadcast Address: $BROADCAST_NET

NAT (Internet Sharing): $ROUNDNAT

You may press ok to continue, or cancel to restart this section."

	if [ $? -eq 1 ]
		then
		startread
	fi
fi
}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check
function nat { ##this whole section frustrated me to no end... at several points I wanted to use for loops and had issues with them.  I need someone smarter than me.
#
# This area sets all variables related to NAT, below you will find key variables
#
# INTERNAL_INTERFACE
# INTERNAL_IP
# INTERNAL_NETWORK
# INTERNAL_INTERFACE1
# INTERNAL_IP1
# INTERNAL_NETWORK1
#
# WANRING!!!  The scheme here is not correct.  Need to change Variables to INTERNAL_INTERFACE2 etc...

	MSQifaces=`echo $ifaces | sed -e  "s/$EXTERNAL_INTERFACE//"` ## Figuring out remaining ifaces

	MSQnmbr=`echo $MSQifaces | wc -w` ##Counting so proper number of options might be displayed


	if [ $MSQnmbr -eq 0 ]
		then
		zenity --info --text="You do not seem to have an extra interface for configuration"
	elif [ $MSQnmbr -eq 1 ]
		then
		MASQUERADERESULTS=`zenity --list --checklist --width=500 --column="" --column=$"Value" --column=$"Description"\
		TRUE $"$MSQifaces" $"Select to masquerade this interface"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	elif [ $MSQnmbr -eq 2 ]
		then
		MSQifaces1=`echo $MSQifaces | awk '{print $1}'`
		MSQifaces2=`echo $MSQifaces | awk '{print $2}'`

		MASQUERADERESULTS=`zenity --list --checklist --width=500 --column="" --column=$"Value" --column=$"Description"\
		TRUE $"$MSQifaces1" $"Select to masquerade this interface"\
		FLASE $"$MSQifaces2" $"Select to masquerade this interface"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	elif [ $MSQnmbr -eq 3 ] ## If you have 3 adapters presents a warning
		then
		zenity --info --text="It appears you have 3 or more interfaces, you may only select 2 of them for NAT.  If you select more than 2, only 2 will be configured. This is not a limitation of iptables but of this script.  I might fix it one day if I can figure out how to get it to play nice with what I want to do."

		MSQifaces1=`echo $MSQifaces | awk '{print $1}'`
		MSQifaces2=`echo $MSQifaces | awk '{print $2}'`
		MSQifaces3=`echo $MSQifaces | awk '{print $3}'`

		MASQUERADERESULTS=`zenity --list --checklist --width=500 --column="" --column=$"Value" --column=$"Description"\
		TRUE $"$MSQifaces1" $"Select to masquerade this interface"\
		FLASE $"$MSQifaces2" $"Select to masquerade this interface"\
		FLASE $"$MSQifaces3" $"Select to masquerade this interface"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	else
		zenity --info --text="It appears you have a HUGE number of network adapters (or lots of virtual ones).  Check back later when we figure out how to weed those out.  A manual override will be added sooner or later (note to self... override)."
	fi



if [ `echo $MASQUERADERESULTS | sed 's/|/ /g' | wc -w` -eq 2 ] ## checks to see if 2 results were returned
	then
	DOUBLEMASQ=1 ##used to enable second interface in iptables script
	INTERNAL_INTERFACE=`echo $MASQUERADERESULTS | awk -F"|" '{print $1}'`
	INTERNAL_INTERFACE1=`echo $MASQUERADERESULTS | awk -F"|" '{print $2}'`
elif [ `echo $MASQUERADERESULTS | sed 's/|/ /g' | wc -w` -eq 1 ] ## checks to see if 2 results were returned
	then
	INTERNAL_INTERFACE=`echo $MASQUERADERESULTS | awk -F"|" '{print $1}'` #gets rid of any extra spaces
elif [ `echo $MASQUERADERESULTS | sed 's/|/ /g' | wc -w` -eq 0 -o `echo $MASQUERADERESULTS | sed 's/|/ /g' | wc -w` -gt 2 ]
	then
	masqretry=`zenity --question --text="You did not select any interfaces or you selected too many interfaces, press OK to continue with NAT disabled or cancel to start configuring NAT again"`
	if [ $? -ne 0 ]
	then
	nat  #calls the whole thing over if you screwed up
	else
	MASQUERADE=0 ##Disables NAT
	fi
else
	zenity --error --text="A serious error has occured.  No changes have been made to your system, but BaseTables cannot continue"
	exit 1
fi

##We have FINALLY gotten our interfaces for NAT declared, now we need to configure them.  God help us.



##INTERFACE 1
	## Grabbing IP of external interface
	INTERNAL_IPGUESS=`ifconfig $INTERNAL_INTERFACE | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}'`
	## Asking user if guessed IP is correct (should be, might remove later if success rate is 100
	INTERNAL_IP=`zenity --entry --title="External IP" --text="BaseTables has attempted to detect your external IP." --entry-text=$INTERNAL_IPGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi

	## Grabbing Broadcast address
	INTBROADCAST_NETGUESS=`ifconfig $INTERNAL_INTERFACE | grep Bcast | awk '{print $3}' | awk -F: '{print $2}'`
	## Confirming with user that guess is correct
	INTBROADCAST_NET=`zenity --entry --title="Broadcast Address" --text="BaseTables has attempted to detect your Bcast address." --entry-text=$INTBROADCAST_NETGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi

	## Grabbing subnet mask to aid in grabbing of Network Address
	INTSUBNET_MASKNET=`ifconfig wlan0 | grep Bcast | awk '{print $4}' | awk -F: '{print $2}'`
	if [ $INTSUBNET_MASKNET = 255.255.255.0 ]
		then
		SUBGOOD=1
	elif [ $INTSUBNET_MASKNET = 255.255.0.0 ]
		then
		SUBGOOD=2
	elif [ $INTSUBNET_MASKNET = 255.0.0.0 ]
		then
		SUBGOOD=3
	else
		zenity --error --text="BaseTables could not guess your Network IP properly.  This is the first IP in your subnet.  This error should not occur, but the programmer who made this sucks.  He intends to fix it... as soon as he gets smarter...  You will have to manually enter this for now."
	SUBGOOD=25  ##making sure previous run doesnt mess us up here, who doesnt know how to properly use functions!?  I DONT!  So I should actually make BOTH these functions later... for now I just want it get it working.
	fi

	## Making the Network Address, provided the previous grab went ok, else we just prompt.
	if [ $SUBGOOD -eq 1 ]
		then ## Here we modify the external IP based upon the broadcast address
		INTERNAL_NETWORKGUESS=`echo $INTERNAL_IP | awk -F. '{print $1 "." $2 "." $3 "." "0/24"}'`
		INTERNAL_NETWORK=`zenity --entry --title="Internal Network" --text="BaseTables has attempted to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	elif [ $SUBGOOD -eq 2 ]
		then
		INTERNAL_NETWORKGUESS=`echo $INTERNAL_IP | awk -F. '{print $1 "." $2 "." 0 "." "0/16"}'`
		INTERNAL_NETWORK=`zenity --entry --title="Internal Network" --text="BaseTables has attempted to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	elif [ $SUBGOOD -eq 3 ]
		then
		INTERNAL_NETWORKGUESS=`echo $INTERNAL_IP | awk -F. '{print $1 "." 0 "." 0 "." "0/8"}'`
		INTERNAL_NETWORK=`zenity --entry --title="External Network" --text="BaseTables has attempted to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	else
		INTERNAL_NETWORK=`zenity --entry --title="Internal Network" --text="BaseTables was unable to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	fi

##Interface 2
if [ $DOUBLEMASQ -eq 1 ]
	then
	## Grabbing IP of external interface
	INTERNAL_IPGUESS1=`ifconfig $INTERNAL_INTERFACE1 | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}'`
	## Asking user if guessed IP is correct (should be, might remove later if success rate is 100
	INTERNAL_IP1=`zenity --entry --title="Internal IP 2" --text="BaseTables has attempted to detect your external IP." --entry-text=$INTERNAL_IPGUESS1`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	## Grabbing Broadcast address
	INTBROADCAST_NETGUESS1=`ifconfig $INTERNAL_INTERFACE1 | grep Bcast | awk '{print $3}' | awk -F: '{print $2}'`
	## Confirming with user that guess is correct
	INTBROADCAST_NET1=`zenity --entry --title="Broadcast Address" --text="BaseTables has attempted to detect your Bcast address." --entry-text=$INTBROADCAST_NETGUESS1`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	## Grabbing subnet mask to aid in grabbing of Network Address
	INTSUBNET_MASKNET1=`ifconfig wlan0 | grep Bcast | awk '{print $4}' | awk -F: '{print $2}'`
	if [ $INTSUBNET_MASKNET1 = 255.255.255.0 ]
		then
		SUBGOOD=1
	elif [ $INTSUBNET_MASKNET1 = 255.255.0.0 ]
		then
		SUBGOOD=2
	elif [ $INTSUBNET_MASKNET1 = 255.0.0.0 ]
		then
		SUBGOOD=3
	else
		zenity --error --text="BaseTables could not guess your Network IP properly.  This is the first IP in your subnet.  This error should not occur, but the programmer who made this sucks.  He intends to fix it... as soon as he gets smarter...  You will have to manually enter this for now."
	SUBGOOD=25  ##making sure previous run doesnt mess us up here, who doesnt know how to properly use functions!?  I DONT!  So I should actually make BOTH these functions later... for now I just want it get it working.
	fi

	## Making the Network Address, provided the previous grab went ok, else we just prompt.
	if [ $SUBGOOD -eq 1 ]
		then ## Here we modify the external IP based upon the broadcast address
		INTERNAL_NETWORKGUESS1=`echo $INTERNAL_IP1 | awk -F. '{print $1 "." $2 "." $3 "." "0/24"}'`
		INTERNAL_NETWORK1=`zenity --entry --title="Internal Network" --text="BaseTables has attempted to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS1`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	elif [ $SUBGOOD -eq 2 ]
		then
		INTERNAL_NETWORKGUESS1=`echo $INTERNAL_IP1 | awk -F. '{print $1 "." $2 "." 0 "." "0/16"}'`
		INTERNAL_NETWORK1=`zenity --entry --title="Internal Network" --text="BaseTables has attempted to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS1`
	elif [ $SUBGOOD -eq 3 ]
		then
		INTERNAL_NETWORKGUESS1=`echo $INTERNAL_IP1 | awk -F. '{print $1 "." 0 "." 0 "." "0/8"}'`
		INTERNAL_NETWORK1=`zenity --entry --title="Internal Network" --text="BaseTables has attempted to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	else
		INTERNAL_NETWORK1=`zenity --entry --title="Internal Network" --text="BaseTables was unable to detect your network address." --entry-text=$INTERNAL_NETWORKGUESS`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	fi
fi

###sloppy hack, just like the rest of this
INTERNAL_NETWORK2=$INTERNAL_NETWORK1
INTERNAL_IP2=$INTERNAL_IP1
INTERNAL_INTERFACE2=$INTERNAL_INTERFACE1

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check
function globalconfig {
## area for setting global options
#
# The Following options will be set in here
#
# DHCP_SERVER_IP
# SMTP_SERVER
# POP_SERVER
# POP3S_SERVER
# MY_IMAP_SERVER
# MY_IMAPS_SERVER
# NEWS_SERVER
# SNEWS_SERVER
# MY_NEWS_FEED
#
# ##PROXY OPTIONS## These are untested, but should work.  Proxy has to be flipped on for these to matter
# WEB_PROXY_SERVER
# WEB_PROXY_PORT
#
#
if [ $skip -lt 2 ]
	then

	zenity --info --text="You are about to go through the global configuration of your firewall.  It is perfectly ok to accept the default response on all of the following questions.  They are only provided if you wish to really narrow things down security wise."

	DHCP_SERVER_IP=`zenity --entry --title="DHCP Server IP" --text="Enter IP of DHCP server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	SMTP_SERVER=`zenity --entry --title="SMTP Server IP" --text="Enter IP of your SMTP server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	POP_SERVER=`zenity --entry --title="POP Server IP" --text="Enter IP of your POP server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	POP3S_SERVERS=`zenity --entry --title="POP3S Server IP" --text="Enter IP of your POP3S server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	MY_IMAP_SERVER=`zenity --entry --title="IMAP Server IP" --text="Enter IP of your IMAP server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	MY_IMAPS_SERVER=`zenity --entry --title="IMAPS Server IP" --text="Enter IP of your IMAPS server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	NEWS_SERVER=`zenity --entry --title="NNTP News Server IP" --text="Enter IP of your NNTP News server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	SNEWS_SERVER=`zenity --entry --title="Secure NNTP News Server IP" --text="Enter IP of your Secure NNTP News server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	MY_NEWS_FEED=`zenity --entry --title="NNTP News Feeds Server IP" --text="Enter IP of your NNTP News Feeds server:" --entry-text=any/0`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi

	PROXYCHECK=`zenity --list --radiolist --width=500 --column="" --column=$"Proxy" --column=$"Description"\
		FALSE $"On" $"Your external interface uses a proxy"\
		TRUE $"Off" $"Your external interface does not use a proxy"
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
		if echo $PROXYCHECK | grep "On"
			then
			HTTP_PROXY=1
			WEB_PROXY_SERVER=`zenity --entry --title="Proxy Server Domain" --text="Enter location of your proxy server:" --entry-text=ENTER IP HERE`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
			WEB_PROXY_PORT=`zenity --entry --title="Proxy Server Port" --text="Enter port for your proxy server:" --entry-text=8008`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
		else
			HTTP_PROXY=0
		fi
	else
	advperm DHCP_SERVER_IP
	DHCP_SERVER_IP="$finalperm"

	advperm SMTP_SERVER
	SMTP_SERVER="$finalperm"

	advperm POP_SERVER
	POP_SERVER="$finalperm"

	advperm POP3S_SERVERS
	POP3S_SERVERS="$finalperm"

	advperm MY_IMAP_SERVER
	MY_IMAP_SERVER="$finalperm"

	advperm MY_IMAPS_SERVER
	MY_IMAPS_SERVER="$finalperm"

	advperm NEWS_SERVER
	NEWS_SERVER="$finalperm"

	advperm SNEWS_SERVER
	SNEWS_SERVER="$finalperm"

	advperm MY_NEWS_FEED
	MY_NEWS_FEED="$finalperm"

	fi

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check
function selectorsecurity {

	if [ $skip -lt 2 ]
	then
	#Choose rules, for now, default are hardcoded, should be changed!!!
# Relevant Variables
#
# PORT_FORWARD
# OUTBOUND_PING
# INBOUND_PING
# OUTBOUND_TRACEROUTE
# INBOUND_TRACEROUTE
#
#

	RESULTSEC=`zenity --list --checklist --width=600 --height=800 --title "Beta BaseTables Script" \
		--column="" --column $"Rules" --column $"Description" \
		$PORT_FORWARD_TF $"Port Forwarding" $"Enable Port Forwarding to local clients"\
		$OUTBOUND_PING_TF $"Outbound Ping" $"Allow local network to ping external networks"\
		$INBOUND_PING_TF $"Inbound Ping" $"Allows external sites to ping firewall"\
		$OUTBOUND_TRACEROUTE_TF $"Outbound Traceroute" $"Allows internal network(s) to traceroute external networks"\
		$INBOUND_TRACEROUTE_TF $"Inbound Traceroute" $"Allows external networks to traceroute up to the firewall"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi

		if echo $RESULTSEC | grep "Port Forwarding"
			then
			if [ -f $natlist ]
				then
				PORT_FORWARD=1
			else
				zenity --info --title="Forwarding File Not Found" --text="Port Forwarding requires a file in $natlist"
			PORT_FORWARD=0
			fi
		else
			PORT_FORWARD=0
		fi

		if echo $RESULTSEC | grep "Outbound Ping"
			then
			OUTBOUND_PING=1
		else
			OUTBOUND_PING=0
		fi

		if echo $RESULTSEC | grep "Inbound Ping"
			then
			INBOUND_PING=1
		else
			INBOUNT_PING=0
		fi

		if echo $RESULTSEC | grep "Outbound Traceroute"
			then
			OUTBOUND_TRACEROUTE=1
		else
			OUTBOUND_TRACEROUTE=0
		fi

		if echo $RESULTSEC | grep "Inbound Traceroute"
			then
			INBOUND_TRACEROUTE=1
		else
			INBOUND_TRACEROUTE=0
		fi
	else
		OUTBOUND_PING=1
		INBOUND_PING=1
		OUTBOUND_TRACEROUTE=1
		INBOUND_TRACEROUTE=1
	fi
	
}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check
function selectorclient {
	#Choose rules, for now, default are hardcoded, should be changed!!!
	# LOTS of variables set here... LOTS LOTS LOTS
#SMTP_REMOTE_SERVER
#POP3_CLIENT
#IMAP_CLIENT
#IMAPS_CLIENT
#SMTP_LOCAL_SERVER
#AUTH_CLIENT	
#DNS_CLIENT		
#FINGER_CLIENT
#FTP_CLIENT
#GOPHER_CLIENT	
#HTTP_CLIENT
#HTTPS_CLIENT
#HTTP_PROXY	
#NNTP_CLIENT	
#NNTPS_CLIENT         
#NTP_CLIENT	
#SSH_CLIENT	
#TELNET_CLIENT	
#WAIS_CLIENT
#WHOIS_CLIENT	
#ICQ_CLIENT	
#RV_CLIENT
#PPTP_CLIENT		
#SAMBA_CLIENT

	RESULTCLIENT=`zenity --list --checklist --width=600 --height=800 --title "Beta BaseTables Script" \
		--column="" --column $"Rules" --column $"Description" \
		$SMTP_REMOTE_SERVER_TF $"SMTP Remote Server" $"Check if you send email via SMTP (like thunderbird or evolution)"\
		$POP3_CLIENT_TF $"POP3 Client" $"Check if you receive your email via POP3 or POP3S"\
		$IMAP_CLIENT_TF $"IMAP Client" $"Check if you receive email via IMAP"\
		$IMAPS_CLIENT_TF $"IMAPS Client" $"Check if you receive email via a secure IMAP server"\
		$SMTP_LOCAL_SERVER_TF $"SMTP Local Server" $"Check this if you are running Sendmail or Postfix for clients on your LOCAL network"\
		$AUTH_CLIENT_TF $"Auth Protocol" $"Allow internal clients to access auth protocol"\
		$DNS_CLIENT_TF $"DNS Client" $"Allow internal clients access to DNS"\
		$FINGER_CLIENT_TF $"Finger Client" $"Allow internal clients access to finger protocol"\
		$FTP_CLIENT_TF $"FTP Client" $"Allow internal clients access to FTP"\
		$GOPHER_CLIENT_TF $"Gopher Client" $"Allow internal clients access to the gopher protocol"\
		$HTTP_CLIENT_TF $"HTTP Client" $"Allow internal clients web access"\
		$HTTPS_CLIENT_TF $"HTTPS Client" $"Allow internal clients secure web access"\
		$NNTP_CLIENT_TF $"NNTP Client" $"Allow internal clients access to usenet"\
		$NNTPS_CLIENT_TF $"NNTPS Client" $"Allow internal clients access to usenet over SSL"\
		$NTP_CLIENT_TF $"NTP Client" $"Allow internal clients access to Network Time Protocol"\
		$SSH_CLIENT_TF $"SSH Client" $"Allow internal clients access to SSH servers"\
		$TELNET_CLIENT_TF $"Telnet Client" $"Allow internal clients access to Telnet"\
		$WAIS_CLIENT_TF $"WAIS Client" $"Allow internal clients access to the WAIS protocol"\
		$WHOIS_CLIENT_TF $"WHOIS Client" $"Allow internal clients access to the WHOIS protocol"\
		$ICQ_CLIENT_TF $"ICQ Client" $"Allow internal clients access to ICQ"\
		$RV_CLIENT_TF $"Real Video" $"Allow internal clients access to port 554"\
		$PPTP_CLIENT_TF $"PPTP Client" $"Allow internal clients to access PPTP servers"\
		$SAMBA_CLIENT_TF $"Samba Client" $"Allow internal clients access to SAMBA servers"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	if echo $RESULTCLIENT | grep "SMTP Remote Server"
		then
		SMTP_REMOTE_SERVER=1
	else
		SMTP_REMOTE_SERVER=0
	fi

	if echo $RESULTCLIENT | grep "POP3 Client"
		then
		POP3_CLIENT=1
	else
		POP3_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "IMAP Client"
		then
		IMAP_CLIENT=1
	else
		IMAP_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "IMAPS Client"
		then
		IMAPS_CLIENT=1
	else
		IMAPS_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "SMTP Local Server"
		then
		SMTP_LOCAL_SERVER=1
	else
		SMTP_LOCAL_SERVER=0
	fi

	if echo $RESULTCLIENT | grep "Auth Protocol"
		then
		AUTH_CLIENT=1
	else
		AUTH_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "DNS Client"
		then
		DNS_CLIENT=1
	else
		DNS_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "Finger Client"
		then
		FINGER_CLIENT=1
	else
		FINGER_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "FTP Client"
		then
		FTP_CLIENT=1
	else
		FTP_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "Gopher Client"
		then
		GOPHER_CLIENT=1
	else
		GOPHER_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "HTTP Client"
		then
		HTTP_CLIENT=1
	else
		HTTP_CLIENT=0
	fi

#	if echo $RESULTCLIENT | grep "HTTP Proxy"
#		then
#		HTTP_PROXY=1
#	else
#		HTTP_PROXY=0
#	fi

	if echo $RESULTCLIENT | grep "HTTPS Client"
		then
		HTTPS_CLIENT=1
	else
		HTTPS_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "NNTP Client"
		then
		NNTP_CLIENT=1
	else
		NNTP_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "NNTPS Client"
		then
		NNTPS_CLIENT=1
	else
		NNTPS_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "NTP Client"
		then
		NTP_CLIENT=1
	else
		NTP_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "SSH Client"
		then
		SSH_CLIENT=1
	else
		SSH_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "Telnet Client"
		then
		TELNET_CLIENT=1
	else
		TELNET_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "WAIS Client"
		then
		WAIS_CLIENT=1
	else
		WAIS_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "WHOIS Client"
		then
		WHOIS_CLIENT=1
	else
		WHOIS_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "ICQ Client"
		then
		ICQ_CLIENT=1
	else
		ICQ_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "Real Video"
		then
		RV_CLIENT=1
	else
		RV_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "PPTP Client"
		then
		PPTP_CLIENT=1
	else
		PPTP_CLIENT=0
	fi

	if echo $RESULTCLIENT | grep "Samba Client"
		then
		SAMBA_CLIENT=1
	else
		SAMBA_CLIENT=0
	fi

	}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check
function selectorserver {
# Relevant Variables
#DHCP_SERVER
#FTP_SERVER
#MY_FTP_CLIENTS
#
#DNS_CACHING_SERVER
#DNS_FULL_SERVER
#
#AUTH_SERVER
#
#POP3_SERVER
#MY_POP3_CLIENTS
#POP3S_SERVER
#MY_POP3S_CLIENTS
#
#IMAP_SERVER
#MY_IMAP_CLIENTS
#IMAPS_SERVER
#MY_IMAPS_CLIENTS
#
#NNTP_SERVER
#MY_NNTP_CLIENTS
#NNTP_NEWS_FEED
#
#TELNET_SERVER
#MY_TELNET_CLIENTS
#
#SSH_SERVER
#MY_SSH_CLIENTS
#SSH_PORT
#
#HTTP_SERVER
#MY_HTTP_CLIENTS
#HTTPS_SERVER
#MY_HTTPS_CLIENTS
#
#FINGER_SERVER
#MY_FINGER_CLIENTS
#
#SAMBA_SERVER
#MY_SAMBA_CLIENTS
#
if [ $skip -lt 3 ]
	then
	RESULTSERV=`zenity --list --checklist --width=600 --height=600 --title "Beta BaseTables Script" \
		--column="" --column $"Rules" --column $"Description" \
		$DHCP_SERVER_TF $"DHCP Server" $"Check this box of your computer is running dhcpd"\
		$FTP_SERVER_TF $"FTP Server" $"Check if you are running an FTP server"\
		$DNS_CACHING_SERVER_TF $"DNS Caching Server" $"Check if you are running a caching only DNS server"\
		$DNS_FULL_SERVER_TF $"DNS Full Server" $"Check if you have a full DNS server"\
		$AUTH_SERVER_TF $"Auth Server" $"Check for Auth Protocol Servers"\
		$POP3_SERVER_TF $"POP3 Server" $"Check if you are running a POP3 Server"\
		$POP3S_SERVER_TF $"POP3S Server" $"Chcek if you are running a secure POP3 Server"\
		$IMAP_SERVER_TF $"IMAP Server" $"Check if you are running an IMAP server"\
		$IMAPS_SERVER_TF $"IMAPS Server" $"Check if you are running a secure IMAP server"\
		$NNTP_SERVER_TF $"NNTP Server" $"Check if you are running an usenet news server"\
		$NNTP_NEWS_FEED_TF $"NNTP News Feeds" $"Check if you have NNTP news feeds"\
		$TELNET_SERVER_TF $"Telnet Server" $"Check if you are running a telnet server. Consider switching to SSH"\
		$SSH_SERVER_TF $"SSH Server" $"Check if you are running an SSH Server"\
		$HTTP_SERVER_TF $"HTTP Server" $"Check if you are running a web server"\
		$HTTPS_SERVER_TF $"HTTPS Server" $"Check if you are running a web server with SSL"\
		$FINGER_SERVER_TF $"Finger Server" $"Check if you are running a finger server"\
		$SAMBA_SERVER_TF $"Samba Server" $"Check if you are running a Samba Server"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
	if echo $RESULTSERV | grep "DHCP Server"
		then
		DHCP_SERVER=1
	else
		DHCP_SERVER=0
	fi

	if echo $RESULTSERV | grep "FTP Server"
		then
		FTP_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="FTP Server Configuration" --text="You have selected an FTP Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_FTP_CLIENTS=$range
		else
			advperm MY_FTP_CLIENTS
			MY_FTP_CLIENTS="$finalperm"
		fi
	else
		FTP_SERVER=0
	fi

	if echo $RESULTSERV | grep "DNS Caching Server"
		then
		DNS_CACHING_SERVER=1
	else
		DNS_CACHING_SERVER=0
	fi

	if echo $RESULTSERV | grep "DNS Full Server"
		then
		DNS_FULL_SERVER=1
	else
		DNS_FULL_SERVER=0
	fi

	if echo $RESULTSERV | grep "Auth Server"
		then
		AUTH_SERVER=1
	else
		AUTH_SERVER=0
	fi

	if echo $RESULTSERV | grep "POP3 Server"
		then
		POP3_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="POP3 Server Configuration" --text="You have selected a POP3 Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_POP3_CLIENTS=$range
		else
			advperm MY_POP3_CLIENTS
			MY_POP3_CLIENTS=$finalperm
		fi
	else
		POP3_SERVER=0
	fi

	if echo $RESULTSERV | grep "POP3S Server"
		then
		POP3S_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="POP3S Server Configuration" --text="You have selected a POP3S Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_POP3S_CLIENTS=$range
		else
			advperm MY_POP3S_CLIENTS
			MY_POP3S_CLIENTS=$finalperm
		fi
	else
		POP3S_SERVER=0
	fi

	if echo $RESULTSERV | grep "IMAP Server"
		then
		IMAP_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="IMAP Server Configuration" --text="You have selected a IMAP Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_IMAP_CLIENTS=$range
		else
			advperm MY_IMAP_CLIENTS
			MY_IMAP_CLIENTS=$finalperm
		fi
	else
		IMAP_SERVER=0
	fi

	if echo $RESULTSERV | grep "IMAPS Server"
		then
		IMAPS_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="IMAPS Server Configuration" --text="You have selected a IMAPS Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_IMAPS_CLIENTS=$range
		else
			advperm MY_IMAPS_CLIENTS
			MY_IMAPS_CLIENTS=$finalperm
		fi
	else
		IMAPS_SERVER=0
	fi

	if echo $RESULTSERV | grep "NNTP Server"
		then
		NNTP_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="NNTP Server Configuration" --text="You have selected a NNTP Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_NNTP_CLIENTS=$range
		else
			advperm MY_NNTP_CLIENTS
			MY_NNTP_CLIENTS=$finalperm
		fi
	else
		NNTP_SERVER=0
	fi

	if echo $RESULTSERV | grep "NNTP News Feeds"
		then
		NNTP_NEWS_FEED=1
	else
		NNTP_NEWS_FEED=0
	fi

	if echo $RESULTSERV | grep "Telnet Server"
		then
		TELNET_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="TELNET Server Configuration" --text="You have selected a TELNET Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_TELNET_CLIENTS=$range
		else
			advperm MY_TELNET_CLIENTS
			MY_TELNET_CLIENTS=$finalperm
		fi
	else
		TELNET_SERVER=0
	fi


	if echo $RESULTSERV | grep "SSH Server"
		then
		SSH_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="SSH Server Configuration" --text="You have selected to have your firewall configured for an SSH server, you will be prompted for the range of clients you would like to have able to access this server.  For all possible IP's, or if you are unsure, enter any/0."
			rangeread
			MY_SSH_CLIENTS=$range
			zenity --info --title="SSH Server Configuration" --text="If your server runs on a port other than port 22, please enter it here."
			SSH_PORT=`zenity --entry --title="Enter Port:" --entry-text="22" --text="Enter SSH Server Port"`
		else
			SSH_PORT=22
			advperm MY_TELNET_CLIENTS
			MY_TELNET_CLIENTS=$finalperm
		fi
	else
		SSH_SERVER=0		
	fi
	if echo $RESULTSERV | grep "HTTP Server"
		then
		HTTP_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="HTTP Server Configuration" --text="You have selected a HTTP Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_HTTP_CLIENTS=$range
		else
			advperm MY_HTTP_CLIENTS
			MY_HTTP_CLIENTS=$finalperm
		fi
	else
		HTTP_SERVER=0
	fi

	if echo $RESULTSERV | grep "HTTPS Server"
		then
		HTTPS_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="HTTPS Server Configuration" --text="You have selected a HTTPS Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_HTTPS_CLIENTS=$range
		else
			advperm MY_HTTPS_CLIENTS
			MY_HTTPS_CLIENTS=$finalperm
		fi
	else
		HTTPS_SERVER=0
	fi
	if echo $RESULTSERV | grep "Finger Server"
		then
		FINGER_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="FINGER Server Configuration" --text="You have selected a FINGER Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_FINGER_CLIENTS=$range
		else
			advperm MY_FINGER_CLIENTS
			MY_FINGER_CLIENTS=$finalperm
		fi
	else
		FINGER_SERVER=0
	fi

	if echo $RESULTSERV | grep "Samba Server"
		then
		SAMBA_SERVER=1
		if [ $skip -lt 2 ]
			then
			zenity --info --title="SAMBA Server Configuration" --text="You have selected a SAMBA Server configuration, you need to enter the CIDR range of clients.  Use any/0 for all, or if you are unsure."
			rangeread
			MY_SAMBA_CLIENTS=$range
		else
			advperm MY_SAMBA_CLIENTS
			MY_SAMBA_CLIENTS=$finalperm
		fi
	else
		SAMBA_SERVER=0
	fi

else #Hard coding needs to be changed to use config file for on off switches  -- FIXED
	[ ! $FTP_SERVER ] && FTP_SERVER=0
	MY_FTP_CLIENTS="any/0"	
	[ ! $DNS_CACHING_SERVER ] && DNS_CACHING_SERVER=0
	[ ! $DNS_FULL_SERVER ] && DNS_FULL_SERVER=0	
	[ ! $AUTH_SERVER ] && AUTH_SERVER=0	
	[ ! $POP3_SERVER ] && POP3_SERVER=0
	MY_POP3_CLIENTS="any/0"
	[ ! $POP3S_SERVER ] && POP3S_SERVER=0
	MY_POP3S_CLIENTS="any/0"	
	[ ! $IMAP_SERVER ] && IMAP_SERVER=0
	MY_IMAP_CLIENTS="any/0"
	[ ! $IMAPS_SERVER ] && IMAPS_SERVER=0
	MY_IMAPS_CLIENTS="any/0"	
	[ ! $NNTP_SERVER ] && NNTP_SERVER=0
	MY_NNTP_CLIENTS="any/0"
	[ ! $NNTP_NEWS_FEED ] && NNTP_NEWS_FEED=0	
	[ ! $TELNET_SERVER ] && TELNET_SERVER=0
	MY_TELNET_CLIENTS="any/0"	
	[ ! $SSH_SERVER ] && SSH_SERVER=0
	MY_SSH_CLIENTS="any/0"
	[ ! $SSH_PORT ] && SSH_PORT=22	
	[ ! $HTTP_SERVER ] && HTTP_SERVER=0
	MY_HTTP_CLIENTS="any/0"
	[ ! $HTTPS_SERVER ] && HTTPS_SERVER=0
	MY_HTTPS_CLIENTS="any/0"	
	[ ! $FINGER_SERVER ] && FINGER_SERVER=0
	MY_FINGER_CLIENTS="any/0"	
	[ ! $SAMBA_SERVER ] && SAMBA_SERVER=0
	MY_SAMBA_CLIENTS="any/0"
fi

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check
function selectorgames {
#
# HALF_LIFE
# WOLF_CLIENT
#
	if [ $skip -lt 3 ]
	then
	RESULTGAMES=`zenity --list --checklist --width=600 --height=300 --title "Beta BaseTables Script" \
		--column="" --column $"Rules" --column $"Description" \
		$HALF_LIFE_TF $"Half Life" $"Enable if you run a HL server"\
		$WOLF_CLIENT_TF $"Wolfenstein" $"Check if your clients run return to castle wolfenstein"\
		`
		if [ $? -ne 0 ] #ok so its not the best idea...  Will fix when code sees a re-write
			then
			$frontend &
			exit 35
		fi
		if echo $RESULTGAMES | grep "Half Life"
			then
			HALF_LIFE=1
		else
			HALF_LIFE=0
		fi	

		if echo $RESULTGAMES | grep "Wolfenstein"
			then
			WOLF_CLIENT=1
		else
			WOLF_CLIENT=0
		fi	

	else
		[ ! $HALF_LIFE ] && HALF_LIFE=0
		[ ! $WOLF_CLIENT ] && WOLF_CLIENT=0
	fi
}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#

function rangeread {
if [ "$1" = "nodef" ]
	then
	range=`zenity --entry --title="IP Range Entry" --text="Enter IP or range of IP's.  
e.g. 192.168.0.14/32 for single IP, or 192.168.2.0/24 for an entire network.

You may also enter a list seperated with spaces"`
	else
	range=`zenity --entry --entry-text="any/0"--title="IP Range Entry" --text="Enter IP or range of IP's.  
e.g. 192.168.0.14/32 for single IP, or 192.168.2.0/24 for an entire network.

You may also enter a list seperated with spaces"`
fi
ipcheck $range
	if [ $ipgood -eq 0 ]
		then
		zenity --error --text="You have entered an invalid range, try again"
		rangeread
	fi 
	}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
function filemake {
#Setting all unset variables to zero, probably can go now, but it just keeps thing in check in case something wonky (like pressing cancel) happens

[ $PORT_FORWARD ] || PORT_FORWARD=0
[ $SMTP_REMOTE_SERVER ] || SMTP_REMOTE_SERVER=0
[ $POP3_CLIENT ] || POP3_CLIENT=0
[ $IMAP_CLIENT ] || IMAP_CLIENT=0
[ $IMAPS_CLIENT ] || IMAPS_CLIENT=0
[ $SMTP_LOCAL_SERVER ] || SMTP_LOCAL_SERVER=0
[ $AUTH_CLIENT ] || AUTH_CLIENT=0
[ $DNS_CLIENT ] || DNS_CLIENT=0
[ $FINGER_CLIENT ] || FINGER_CLIENT=0
[ $FTP_CLIENT ] || FTP_CLIENT=0
[ $GOPHER_CLIENT ] || GOPHER_CLIENT=0
[ $HTTP_CLIENT ] || HTTP_CLIENT=0
[ $HTTPS_CLIENT ] || HTTPS_CLIENT=0
[ $HTTP_PROXY ] || HTTP_PROXY=0
[ $NNTP_CLIENT ] || NNTP_CLIENT=0
[ $NNTPS_CLIENT ] || NNTPS_CLIENT=0
[ $NTP_CLIENT ] || NTP_CLIENT=0
[ $SSH_CLIENT ] || SSH_CLIENT=0
[ $TELNET_CLIENT ] || TELNET_CLIENT=0
[ $WAIS_CLIENT ] || WAIS_CLIENT=0
[ $WHOIS_CLIENT ] || WHOIS_CLIENT=0
[ $ICQ_CLIENT ] || ICQ_CLIENT=0
[ $RV_CLIENT ] || RV_CLIENT=0
[ $PPTP_CLIENT ] || PPTP_CLIENT=0
[ $SAMBA_CLIENT ] || SAMBA_CLIENT=0
[ $FTP_SERVER ] || FTP_SERVER=0
[ $MY_FTP_CLIENTS ] || MY_FTP_CLIENTS=0
[ $DNS_CACHING_SERVER ] || DNS_CACHING_SERVER=0
[ $DNS_FULL_SERVER ] || DNS_FULL_SERVER=0
[ $AUTH_SERVER ] || AUTH_SERVER=0
[ $POP3_SERVER ] || POP3_SERVER=0
[ $MY_POP3_CLIENTS ] || MY_POP3_CLIENTS=0
[ $POP3S_SERVER ] || POP3S_SERVER=0
[ $MY_POP3S_CLIENTS ] || MY_POP3S_CLIENTS=0
[ $IMAP_SERVER ] || IMAP_SERVER=0
[ $MY_IMAP_CLIENTS ] || MY_IMAP_CLIENTS=0
[ $IMAPS_SERVER ] || IMAPS_SERVER=0
[ $MY_IMAPS_CLIENTS ] || MY_IMAPS_CLIENTS=0
[ $NNTP_SERVER ] || NNTP_SERVER=0
[ $MY_NNTP_CLIENTS ] || MY_NNTP_CLIENTS=0
[ $NNTP_NEWS_FEED ] || NNTP_NEWS_FEED=0
[ $TELNET_SERVER ] || TELNET_SERVER=0
[ $MY_TELNET_CLIENTS ] || MY_TELNET_CLIENTS=0
[ $SSH_SERVER ] || SSH_SERVER=0
[ $MY_SSH_CLIENTS ] || MY_SSH_CLIENTS=0
[ $SSH_PORT ] || SSH_PORT=0
[ $HTTP_SERVER ] || HTTP_SERVER=0
[ $MY_HTTP_CLIENTS ] || MY_HTTP_CLIENTS=0
[ $HTTPS_SERVER ] || HTTPS_SERVER=0
[ $MY_HTTPS_CLIENTS ] || MY_HTTPS_CLIENTS=0
[ $FINGER_SERVER ] || FINGER_SERVER=0
[ $MY_FINGER_CLIENTS ] || MY_FINGER_CLIENTS=0
[ $SAMBA_SERVER ] || SAMBA_SERVER=0
[ $MY_SAMBA_CLIENTS ] || MY_SAMBA_CLIENTS=0
[ $HALF_LIFE ] || HALF_LIFE=0
[ $WOLF_CLIENT ] || WOLF_CLIENT=0

#Generating config file
echo "VERBOSE=\"$VERBOSE\"" > $configfile
echo "EXTERNAL_INTERFACE=\"$EXTERNAL_INTERFACE\"" >> $configfile
echo "DHCP=\"$DHCP\"" >> $configfile
echo "EXTERNAL_IP=\"$EXTERNAL_IP\"" >> $configfile
echo "BROADCAST_NET=\"$BROADCAST_NET\"" >> $configfile
echo "EXTERNAL_NETWORK=\"$EXTERNAL_NETWORK\"" >> $configfile
echo "MASQUERADING=\"$MASQUERADING\"" >> $configfile
echo "DOUBLEMASQ=\"$DOUBLEMASQ\"" >> $configfile
echo "INTERNAL_INTERFACE=\"$INTERNAL_INTERFACE\"" >> $configfile
echo "INTERNAL_IP=\"$INTERNAL_IP\"" >> $configfile
echo "INTERNAL_NETWORK=\"$INTERNAL_NETWORK\"" >> $configfile
echo "INTERNAL_INTERFACE2=\"$INTERNAL_INTERFACE2\"" >> $configfile
echo "INTERNAL_IP2=\"$INTERNAL_IP2\"" >> $configfile
echo "INTERNAL_NETWORK2=\"$INTERNAL_NETWORK2\"" >> $configfile
echo "DHCP_SERVER_IP=\"$DHCP_SERVER_IP\"" >> $configfile
echo "SMTP_SERVER=\"$SMTP_SERVER\"" >> $configfile
echo "POP_SERVER=\"$POP_SERVER\"" >> $configfile
echo "POP3S_SERVERS=\"$POP3S_SERVERS\"" >> $configfile
echo "MY_IMAP_SERVER=\"$MY_IMAP_SERVER\"" >> $configfile
echo "MY_IMAPS_SERVER=\"$MY_IMAPS_SERVER\"" >> $configfile
echo "NEWS_SERVER=\"$NEWS_SERVER\"" >> $configfile
echo "SNEWS_SERVER=\"$SNEWS_SERVER\"" >> $configfile
echo "MY_NEWS_FEED=\"$MY_NEWS_FEED\"" >> $configfile
echo "WEB_PROXY_SERVER=\"$WEB_PROXY_SERVER\"" >> $configfile
echo "WEB_PROXY_PORT=\"$WEB_PROXY_PORT\"" >> $configfile
echo "PORT_FORWARD=\"$PORT_FORWARD\"" >> $configfile
echo "OUTBOUND_PING=\"$OUTBOUND_PING\"" >> $configfile
echo "INBOUND_PING=\"$INBOUND_PING\"" >> $configfile
echo "OUTBOUND_TRACEROUTE=\"$OUTBOUND_TRACEROUTE\"" >> $configfile
echo "INBOUND_TRACEROUTE=\"$INBOUND_TRACEROUTE\"" >> $configfile
echo "SMTP_REMOTE_SERVER=\"$SMTP_REMOTE_SERVER\"" >> $configfile
echo "POP3_CLIENT=\"$POP3_CLIENT\"" >> $configfile
echo "POP3S_CLIENT=\"$POP3S_CLIENT\"" >> $configfile
echo "IMAP_CLIENT=\"$IMAP_CLIENT\"" >> $configfile
echo "IMAPS_CLIENT=\"$IMAPS_CLIENT\"" >> $configfile
echo "SMTP_LOCAL_SERVER=\"$SMTP_LOCAL_SERVER\"" >> $configfile
echo "AUTH_CLIENT=\"$AUTH_CLIENT\"" >> $configfile
echo "DNS_CLIENT=\"$DNS_CLIENT\"" >> $configfile
echo "FINGER_CLIENT=\"$FINGER_CLIENT\"" >> $configfile
echo "FTP_CLIENT=\"$FTP_CLIENT\"" >> $configfile
echo "GOPHER_CLIENT=\"$GOPHER_CLIENT\"" >> $configfile
echo "HTTP_CLIENT=\"$HTTP_CLIENT\"" >> $configfile
echo "HTTPS_CLIENT=\"$HTTPS_CLIENT\"" >> $configfile
echo "HTTP_PROXY=\"$HTTP_PROXY\"" >> $configfile
echo "NNTP_CLIENT=\"$NNTP_CLIENT\"" >> $configfile
echo "NNTPS_CLIENT=\"$NNTPS_CLIENT\"" >> $configfile 
echo "NTP_CLIENT=\"$NTP_CLIENT\"" >> $configfile
echo "SSH_CLIENT=\"$SSH_CLIENT\"" >> $configfile
echo "TELNET_CLIENT=\"$TELNET_CLIENT\"" >> $configfile
echo "WAIS_CLIENT=\"$WAIS_CLIENT\"" >> $configfile
echo "WHOIS_CLIENT=\"$WHOIS_CLIENT\"" >> $configfile
echo "ICQ_CLIENT=\"$ICQ_CLIENT\"" >> $configfile
echo "RV_CLIENT=\"$RV_CLIENT\"" >> $configfile
echo "PPTP_CLIENT=\"$PPTP_CLIENT\"" >> $configfile
echo "SAMBA_CLIENT=\"$SAMBA_CLIENT\"" >> $configfile
echo "DHCP_SERVER=\"$DHCP_SERVER\"" >> $configfile
echo "FTP_SERVER=\"$FTP_SERVER\"" >> $configfile
echo "MY_FTP_CLIENTS=\"$MY_FTP_CLIENTS\"" >> $configfile
echo "DNS_CACHING_SERVER=\"$DNS_CACHING_SERVER\"" >> $configfile
echo "DNS_FULL_SERVER=\"$DNS_FULL_SERVER\"" >> $configfile
echo "AUTH_SERVER=\"$AUTH_SERVER\"" >> $configfile
echo "POP3_SERVER=\"$POP3_SERVER\"" >> $configfile
echo "MY_POP3_CLIENTS=\"$MY_POP3_CLIENTS\"" >> $configfile
echo "POP3S_SERVER=\"$POP3S_SERVER\"" >> $configfile
echo "MY_POP3S_CLIENTS=\"$MY_POP3S_CLIENTS\"" >> $configfile
echo "IMAP_SERVER=\"$IMAP_SERVER\"" >> $configfile
echo "MY_IMAP_CLIENTS=\"$MY_IMAP_CLIENTS\"" >> $configfile
echo "IMAPS_SERVER=\"$IMAPS_SERVER\"" >> $configfile
echo "MY_IMAPS_CLIENTS=\"$MY_IMAPS_CLIENTS\"" >> $configfile
echo "NNTP_SERVER=\"$NNTP_SERVER\"" >> $configfile
echo "MY_NNTP_CLIENTS=\"$MY_NNTP_CLIENTS\"" >> $configfile
echo "NNTP_NEWS_FEED=\"$NNTP_NEWS_FEED\"" >> $configfile
echo "TELNET_SERVER=\"$TELNET_SERVER\"" >> $configfile
echo "MY_TELNET_CLIENTS=\"$MY_TELNET_CLIENTS\"" >> $configfile
echo "SSH_SERVER=\"$SSH_SERVER\"" >> $configfile
echo "MY_SSH_CLIENTS=\"$MY_SSH_CLIENTS\"" >> $configfile
echo "SSH_PORT=\"$SSH_PORT\"" >> $configfile
echo "HTTP_SERVER=\"$HTTP_SERVER\"" >> $configfile
echo "MY_HTTP_CLIENTS=\"$MY_HTTP_CLIENTS\"" >> $configfile
echo "HTTPS_SERVER=\"$HTTPS_SERVER\"" >> $configfile
echo "MY_HTTPS_CLIENTS=\"$MY_HTTPS_CLIENTS\"" >> $configfile
echo "FINGER_SERVER=\"$FINGER_SERVER\"" >> $configfile
echo "MY_FINGER_CLIENTS=\"$MY_FINGER_CLIENTS\"" >> $configfile
echo "SAMBA_SERVER=\"$SAMBA_SERVER\"" >> $configfile
echo "MY_SAMBA_CLIENTS=\"$MY_SAMBA_CLIENTS\"" >> $configfile
echo "HALF_LIFE=\"$HALF_LIFE\"" >> $configfile
echo "WOLF_CLIENT=\"$WOLF_CLIENT\"" >> $configfile


}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
function configreadin {

. $configfile
 ##Persistance variables
 ##Yes, I do see the redundancy here too... its just a matter of how it got coded...  I'll fix it eventually
if [ $DHCP -eq 1 ]
	then DHCP_TF=TRUE
elif [ $DHCP -eq 0 ]
	then DHCP_TF=FALSE
else
	DHCP_TF=FALSE
fi
 
if [ $MASQUERADING -eq 1 ]
	then MASQUERADING_TF=TRUE
elif [ $MASQUERADING -eq 0 ]
	then MASQUERADING_TF=FALSE
else
	MASQUERADING_TF=FALSE
fi
 
if [ $PORT_FORWARD -eq 1 ]
	then PORT_FORWARD_TF=TRUE
elif [ $PORT_FORWARD -eq 0 ]
	then PORT_FORWARD_TF=FALSE
else
	PORT_FORWARD_TF=FALSE
fi
 
if [ $OUTBOUND_PING -eq 1 ]
	then OUTBOUND_PING_TF=TRUE
elif [ $OUTBOUND_PING -eq 0 ]
	then OUTBOUND_PING_TF=FALSE
else
	OUTBOUND_PING_TF=FALSE
fi
 
if [ $INBOUND_PING -eq 1 ]
	then INBOUND_PING_TF=TRUE
elif [ $INBOUND_PING -eq 0 ]
	then INBOUND_PING_TF=FALSE
else
	INBOUND_PING_TF=FALSE
fi
 
if [ $OUTBOUND_TRACEROUTE -eq 1 ]
	then OUTBOUND_TRACEROUTE_TF=TRUE
elif [ $OUTBOUND_TRACEROUTE -eq 0 ]
	then OUTBOUND_TRACEROUTE_TF=FALSE
else
	OUTBOUND_TRACEROUTE_TF=FALSE
fi
 
if [ $INBOUND_TRACEROUTE -eq 1 ]
	then INBOUND_TRACEROUTE_TF=TRUE
elif [ $INBOUND_TRACEROUTE -eq 0 ]
	then INBOUND_TRACEROUTE_TF=FALSE
else
	INBOUND_TRACEROUTE_TF=FALSE
fi
 
if [ $SMTP_REMOTE_SERVER -eq 1 ]
	then SMTP_REMOTE_SERVER_TF=TRUE
elif [ $SMTP_REMOTE_SERVER -eq 0 ]
	then SMTP_REMOTE_SERVER_TF=FALSE
else
	SMTP_REMOTE_SERVER_TF=FALSE
fi
 
if [ $POP3_CLIENT -eq 1 ]
	then POP3_CLIENT_TF=TRUE
elif [ $POP3_CLIENT -eq 0 ]
	then POP3_CLIENT_TF=FALSE
else
	POP3_CLIENT_TF=FALSE
fi
 
if [ $IMAP_CLIENT -eq 1 ]
	then IMAP_CLIENT_TF=TRUE
elif [ $IMAP_CLIENT -eq 0 ]
	then IMAP_CLIENT_TF=FALSE
else
	IMAP_CLIENT_TF=FALSE
fi
 
if [ $IMAPS_CLIENT -eq 1 ]
	then IMAPS_CLIENT_TF=TRUE
elif [ $IMAPS_CLIENT -eq 0 ]
	then IMAPS_CLIENT_TF=FALSE
else
	IMAPS_CLIENT_TF=FALSE
fi
 
if [ $SMTP_LOCAL_SERVER -eq 1 ]
	then SMTP_LOCAL_SERVER_TF=TRUE
elif [ $SMTP_LOCAL_SERVER -eq 0 ]
	then SMTP_LOCAL_SERVER_TF=FALSE
else
	SMTP_LOCAL_SERVER_TF=FALSE
fi
 
if [ $AUTH_CLIENT -eq 1 ]
	then AUTH_CLIENT_TF=TRUE
elif [ $AUTH_CLIENT -eq 0 ]
	then AUTH_CLIENT_TF=FALSE
else
	AUTH_CLIENT_TF=FALSE
fi
 
if [ $DNS_CLIENT -eq 1 ]
	then DNS_CLIENT_TF=TRUE
elif [ $DNS_CLIENT -eq 0 ]
	then DNS_CLIENT_TF=FALSE
else
	DNS_CLIENT_TF=FALSE
fi
 
if [ $FINGER_CLIENT -eq 1 ]
	then FINGER_CLIENT_TF=TRUE
elif [ $FINGER_CLIENT -eq 0 ]
	then FINGER_CLIENT_TF=FALSE
else
	FINGER_CLIENT_TF=FALSE
fi
 
if [ $FTP_CLIENT -eq 1 ]
	then FTP_CLIENT_TF=TRUE
elif [ $FTP_CLIENT -eq 0 ]
	then FTP_CLIENT_TF=FALSE
else
	FTP_CLIENT_TF=FALSE
fi
 
if [ $GOPHER_CLIENT -eq 1 ]
	then GOPHER_CLIENT_TF=TRUE
elif [ $GOPHER_CLIENT -eq 0 ]
	then GOPHER_CLIENT_TF=FALSE
else
	GOPHER_CLIENT_TF=FALSE
fi
 
if [ $HTTP_CLIENT -eq 1 ]
	then HTTP_CLIENT_TF=TRUE
elif [ $HTTP_CLIENT -eq 0 ]
	then HTTP_CLIENT_TF=FALSE
else
	HTTP_CLIENT_TF=FALSE
fi
 
if [ $HTTPS_CLIENT -eq 1 ]
	then HTTPS_CLIENT_TF=TRUE
elif [ $HTTPS_CLIENT -eq 0 ]
	then HTTPS_CLIENT_TF=FALSE
else
	HTTPS_CLIENT_TF=FALSE
fi
 
if [ $HTTP_PROXY -eq 1 ]
	then HTTP_PROXY_TF=TRUE
elif [ $HTTP_PROXY -eq 0 ]
	then HTTP_PROXY_TF=FALSE
else
	HTTP_PROXY_TF=FALSE
fi
 
if [ $NNTP_CLIENT -eq 1 ]
	then NNTP_CLIENT_TF=TRUE
elif [ $NNTP_CLIENT -eq 0 ]
	then NNTP_CLIENT_TF=FALSE
else
	NNTP_CLIENT_TF=FALSE
fi
 
if [ $NNTPS_CLIENT -eq 1 ]
	then NNTPS_CLIENT_TF=TRUE
elif [ $NNTPS_CLIENT -eq 0 ]
	then NNTPS_CLIENT_TF=FALSE
else
	NNTPS_CLIENT_TF=FALSE
fi
 
if [ $NTP_CLIENT -eq 1 ]
	then NTP_CLIENT_TF=TRUE
elif [ $NTP_CLIENT -eq 0 ]
	then NTP_CLIENT_TF=FALSE
else
	NTP_CLIENT_TF=FALSE
fi
 
if [ $SSH_CLIENT -eq 1 ]
	then SSH_CLIENT_TF=TRUE
elif [ $SSH_CLIENT -eq 0 ]
	then SSH_CLIENT_TF=FALSE
else
	SSH_CLIENT_TF=FALSE
fi
 
if [ $TELNET_CLIENT -eq 1 ]
	then TELNET_CLIENT_TF=TRUE
elif [ $TELNET_CLIENT -eq 0 ]
	then TELNET_CLIENT_TF=FALSE
else
	TELNET_CLIENT_TF=FALSE
fi
 
if [ $WAIS_CLIENT -eq 1 ]
	then WAIS_CLIENT_TF=TRUE
elif [ $WAIS_CLIENT -eq 0 ]
	then WAIS_CLIENT_TF=FALSE
else
	WAIS_CLIENT_TF=FALSE
fi
 
if [ $WHOIS_CLIENT -eq 1 ]
	then WHOIS_CLIENT_TF=TRUE
elif [ $WHOIS_CLIENT -eq 0 ]
	then WHOIS_CLIENT_TF=FALSE
else
	WHOIS_CLIENT_TF=FALSE
fi
 
if [ $ICQ_CLIENT -eq 1 ]
	then ICQ_CLIENT_TF=TRUE
elif [ $ICQ_CLIENT -eq 0 ]
	then ICQ_CLIENT_TF=FALSE
else
	ICQ_CLIENT_TF=FALSE
fi
 
if [ $RV_CLIENT -eq 1 ]
	then RV_CLIENT_TF=TRUE
elif [ $RV_CLIENT -eq 0 ]
	then RV_CLIENT_TF=FALSE
else
	RV_CLIENT_TF=FALSE
fi
 
if [ $PPTP_CLIENT -eq 1 ]
	then PPTP_CLIENT_TF=TRUE
elif [ $PPTP_CLIENT -eq 0 ]
	then PPTP_CLIENT_TF=FALSE
else
	PPTP_CLIENT_TF=FALSE
fi
 
if [ $SAMBA_CLIENT -eq 1 ]
	then SAMBA_CLIENT_TF=TRUE
elif [ $SAMBA_CLIENT -eq 0 ]
	then SAMBA_CLIENT_TF=FALSE
else
	SAMBA_CLIENT_TF=FALSE
fi

if [ $DHCP_SERVER -eq 1 ]
	then DHCP_SERVER_TF=TRUE
elif [ $DHCP_SERVER -eq 0 ]
	then DHCP_SERVER_TF=FALSE
else
	DHCP_SERVER_TF=FALSE
fi

if [ $FTP_SERVER -eq 1 ]
	then FTP_SERVER_TF=TRUE
elif [ $FTP_SERVER -eq 0 ]
	then FTP_SERVER_TF=FALSE
else
	FTP_SERVER_TF=FALSE
fi
 
if [ $DNS_CACHING_SERVER -eq 1 ]
	then DNS_CACHING_SERVER_TF=TRUE
elif [ $DNS_CACHING_SERVER -eq 0 ]
	then DNS_CACHING_SERVER_TF=FALSE
else
	DNS_CACHING_SERVER_TF=FALSE
fi
 
if [ $DNS_FULL_SERVER -eq 1 ]
	then DNS_FULL_SERVER_TF=TRUE
elif [ $DNS_FULL_SERVER -eq 0 ]
	then DNS_FULL_SERVER_TF=FALSE
else
	DNS_FULL_SERVER_TF=FALSE
fi
 
if [ $AUTH_SERVER -eq 1 ]
	then AUTH_SERVER_TF=TRUE
elif [ $AUTH_SERVER -eq 0 ]
	then AUTH_SERVER_TF=FALSE
else
	AUTH_SERVER_TF=FALSE
fi
 
if [ $POP3_SERVER -eq 1 ]
	then POP3_SERVER_TF=TRUE
elif [ $POP3_SERVER -eq 0 ]
	then POP3_SERVER_TF=FALSE
else
	POP3_SERVER_TF=FALSE
fi
 
if [ $POP3S_SERVER -eq 1 ]
	then POP3S_SERVER_TF=TRUE
elif [ $POP3S_SERVER -eq 0 ]
	then POP3S_SERVER_TF=FALSE
else
	POP3S_SERVER_TF=FALSE
fi
 
if [ $IMAP_SERVER -eq 1 ]
	then IMAP_SERVER_TF=TRUE
elif [ $IMAP_SERVER -eq 0 ]
	then IMAP_SERVER_TF=FALSE
else
	IMAP_SERVER_TF=FALSE
fi
 
if [ $IMAPS_SERVER -eq 1 ]
	then IMAPS_SERVER_TF=TRUE
elif [ $IMAPS_SERVER -eq 0 ]
	then IMAPS_SERVER_TF=FALSE
else
	IMAPS_SERVER_TF=FALSE
fi
 
if [ $NNTP_SERVER -eq 1 ]
	then NNTP_SERVER_TF=TRUE
elif [ $NNTP_SERVER -eq 0 ]
	then NNTP_SERVER_TF=FALSE
else
	NNTP_SERVER_TF=FALSE
fi
 
if [ $NNTP_NEWS_FEED -eq 1 ]
	then NNTP_NEWS_FEED_TF=TRUE
elif [ $NNTP_NEWS_FEED -eq 0 ]
	then NNTP_NEWS_FEED_TF=FALSE
else
	NNTP_NEWS_FEED_TF=FALSE
fi
 
if [ $TELNET_SERVER -eq 1 ]
	then TELNET_SERVER_TF=TRUE
elif [ $TELNET_SERVER -eq 0 ]
	then TELNET_SERVER_TF=FALSE
else
	TELNET_SERVER_TF=FALSE
fi
 
if [ $SSH_SERVER -eq 1 ]
	then SSH_SERVER_TF=TRUE
elif [ $SSH_SERVER -eq 0 ]
	then SSH_SERVER_TF=FALSE
else
	SSH_SERVER_TF=FALSE
fi
 
if [ $HTTP_SERVER -eq 1 ]
	then HTTP_SERVER_TF=TRUE
elif [ $HTTP_SERVER -eq 0 ]
	then HTTP_SERVER_TF=FALSE
else
	HTTP_SERVER_TF=FALSE
fi
 
if [ $HTTPS_SERVER -eq 1 ]
	then HTTPS_SERVER_TF=TRUE
elif [ $HTTPS_SERVER -eq 0 ]
	then HTTPS_SERVER_TF=FALSE
else
	HTTPS_SERVER_TF=FALSE
fi
 
if [ $FINGER_SERVER -eq 1 ]
	then FINGER_SERVER_TF=TRUE
elif [ $FINGER_SERVER -eq 0 ]
	then FINGER_SERVER_TF=FALSE
else
	FINGER_SERVER_TF=FALSE
fi
 
if [ $SAMBA_SERVER -eq 1 ]
	then SAMBA_SERVER_TF=TRUE
elif [ $SAMBA_SERVER -eq 0 ]
	then SAMBA_SERVER_TF=FALSE
else
	SAMBA_SERVER_TF=FALSE
fi
 
if [ $HALF_LIFE -eq 1 ]
	then HALF_LIFE_TF=TRUE
elif [ $HALF_LIFE -eq 0 ]
	then HALF_LIFE_TF=FALSE
else
	HALF_LIFE_TF=FALSE
fi
 
if [ $WOLF_CLIENT -eq 1 ]
	then WOLF_CLIENT_TF=TRUE
elif [ $WOLF_CLIENT -eq 0 ]
	then WOLF_CLIENT_TF=FALSE
else
	WOLF_CLIENT_TF=FALSE
fi



	

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check2
function banadd {
integcheck $banlistfull $banlist

temp=$banlist.temp
echo "#!/bin/bash" > $temp
echo 'zenity --list --radiolist --text="Select Rule To Edit or Remove:" --width=600 --height=300 --print-column=ALL --separator=" " --title "Beta BaseTables Script" \' >> $temp
echo '--column="" --column $"Entry" --column $"Range" \' >> $temp
count=1

while read conf
do
echo 	FALSE \$\"$count\)\" \$\"`echo $conf | awk '{print $1}'`\" \\ >> $temp
count=`expr $count + 1`

done < $banlistfull
echo FALSE $"$count\)" $"New_Entry" \ >> $temp

RESULT=`. $temp`


if [ $? -eq 1 ] #used to stop script in main loop
	then
	cancel=1
	else
	cancel=0
fi

if [ "$RESULT" ]
	then
	RESULTrange=`echo "$RESULT" | awk '{print $2}'`
	if echo $RESULT | grep "New_Entry"
		then
		rangeread nodef
	
		if [ $range ]
		then
		for ban in ${range}
			do
			if echo $ban | grep [a-Z] #this sucks, find a better way to check
				then
				zenity --error --text="Error, incorrect format"
			else
				echo $ban >> $banlist #Default active
				echo $ban >> $banlistfull #Add to full list
			fi
		done
		fi
	elif cat $banlistfull | grep "$RESLUTrange"
		then
		banmodify=`zenity --entry --title="Modify Range" --text="Enter new range or leave blank to delete" --entry-text=$RESULTrange`
		if [ "$banmodify" ] ##what to do if they choose to change it
			then
			ipcheck $banmodify
			if [ $ipgood -eq 1 ]
				then
				cat $banlistfull | grep -v "$RESULT" > temp$$
				echo $banmodify >> $banlistfull
				if cat $banlist | grep "$RESULT" ##make rule active if it was previously active
					then
					cat $banlist | grep -v "$RESULT" > temp$$
					mv temp$$ $banlist
					echo $banmodify >> $banlist
				else
					cat $banlistfull | grep -v "$RESULTrange" > temp$$
					mv temp$$ $banlistfull
					cat $banlistfull | grep -v "$RESULTrange" > temp$$
					mv temp$$ $banlist
				fi
			else
				zenity --error --text="You have entered an invalid IP range"
			fi
			
		fi
	fi
else
	cancel=1
fi
dupcheck $banlistfull $banlist
}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
echo check2
function banview {
echo "#!/bin/bash" > firewall.banned.temp
echo 'zenity --list --checklist --width=600 --height=300 --print-column=ALL --editable --separator=" " --title "Beta BaseTables Script" \' >> firewall.banned.temp
echo '--column="" --column $"Entry" --column $"Range" \' >> firewall.banned.temp
count=1
while read conf
	do
	if grep "$conf" $banlist
		then
		onoff=TRUE
	else
		onoff=FALSE
	fi
	echo 	$onoff \$\"$count\)\" \$\"`echo $conf | awk '{print $1}'`\" \\ >> firewall.banned.temp
count=`expr $count + 1`
done < $banlistfull

RESULT=`. ./firewall.banned.temp`

echo $RESULT | sed -e 's/.)/\
/g' | grep . > $banlist

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
function portenable {
#integrity check
integcheck $natlistfull $natlist

temp=./firewall.nat.temp

echo "#!/bin/bash" > $temp
echo 'zenity --list --checklist --width=600 --height=300 --print-column=ALL --editable --separator=" " --title "Beta BaseTables Script" \' >> $temp
echo '--column="" --column $"Entry" --column $"Protocol" --column $"External Port" --column $"Internal IP" --column $"Internal Port" \' >> $temp
count=1
while read conf
do
#HOLY CRAP!  If this works ill... ill be surprised, setting perminance this way is dumb, fix this!  HEY! It did work... I guess im only half as dumb as I thought...
if grep ".*`echo $conf | awk '{print $1}'`.*`echo $conf | awk '{print $2}'`.*`echo $conf | awk '{print $3}'`.*`echo $conf | awk '{print $4}'`" $natlist
	then
	onoff=TRUE
	else
	onoff=FALSE
fi
echo 	$onoff \$\"$count\)\" \$\"`echo $conf | awk '{print $1}'`\" \"`echo $conf | awk '{print $2}'`\" \$\"`echo $conf | awk '{print $3}'`\" \$\"`echo $conf | awk '{print $4}'`\" \\ >> $temp
count=`expr $count + 1`



done < $natlistfull

RESULT=`. ./firewall.nat.temp`

##replacing #) with newline, return IS important, grep . to get rid of extra return and beginning
echo $RESULT | sed -e 's/.)/\
/g' | grep . > $natlist

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
function portsetting {
temp=./firewall.nat.temp
##check file integrity
integcheck $natlistfull $natlist


echo "#!/bin/bash" > $temp
echo 'zenity --list --radiolist --text="Select Rule To Edit:" --width=600 --height=300 --print-column=ALL --separator=" " --title "Beta BaseTables Script" \' >> $temp
echo '--column="" --column $"Entry" --column $"Protocol" --column $"External Port" --column $"Internal IP" --column $"Internal Port" \' >> $temp
count=1

while read conf
do
echo 	FALSE \$\"$count\)\" \$\"`echo $conf | awk '{print $1}'`\" \"`echo $conf | awk '{print $2}'`\" \$\"`echo $conf | awk '{print $3}'`\" \$\"`echo $conf | awk '{print $4}'`\" \\ >> $temp
count=`expr $count + 1`

done < $natlistfull
echo FALSE $"$count\)" $"" $"New_Entry" $"" $"" \ >> $temp

RESULT=`. ./firewall.nat.temp`


if [ $? -eq 1 ] #used to stop script in main loop
	then
	cancel=1
	else
	cancel=0
fi

if echo $RESULT | grep "New_Entry"
	then
	protocol=`zenity --list --radiolist --title="Protocol Selection" --width=600 --height=300 \
	--column="" --column $"Protocol" --column $"Description" \
	TRUE $"TCP" $"Primary protocol of the internet, lost packets retransmitted" \
	FALSE $"UDP" $"Secondary protocol of the internet, lost packets not retransmitted" \
	`
	extport=`zenity --entry --text="Enter External Port: "`

	intip=`zenity --entry --text="Enter Internal Computer IP Address: "`

	intport=`zenity --entry --text="Enter Internal Port: "`

fi

if echo $extport | grep [a-Z]
	then
	zenity --error --text="You have entered an invalid entry, try again"
	setvar
fi

if echo $intport | grep [a-Z]
	then
	zenity --error --text="You have entered an invalid entry, try again"
	setvar
fi

ipcheck
if [ $ipgood -eq 0 ]
	then
	zenity --error --text="You have entered an invalid entry, try again"
	setvar
fi

if [ $protocol ]
	then
	echo " $protocol $extport $intip $intport" >> $natlistfull
	echo " $protocol $extport $intip $intport" >> $natlist
	#just some cleanup
	protocol=""
	extport=""
	intip=""
	intport=""
fi
##cleanup routine
dupcheck $natlistfull $natlist

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
function statuscheck {
statusmain=`zenity --list --text="Select an option:" --radiolist --width=600 --height=300 --column="" --column=$"Option" --column=$"Description"\
	TRUE $"Check Firewall" $"Check Firewall Status"\
	FALSE $"Start Firewall" $"Start BaseTables Firewall"\
	FALSE $"Stop Firewall" $"Stop BaseTables Firewall"\
	FALSE $"Restart Firewall" $"Restart BaseTables Firewall"\
	`
if [ "$statusmain" = "Check Firewall" ]
	then
	if [ -e $lockfile ]
		then
		zenity --info --text="Firewall is ON"
	else
		zenity --info --text="Firewall is OFF"
	fi
	statuscheck
elif [ "$statusmain" = "Start Firewall" ]
	then
	$initfile start
	zenity --info --text="Firewall started"
elif [ "$statusmain" = "Stop Firewall" ]
	then
	$initfile stop
	zenity --info --text="Firewall stopped"
elif [ "$statusmain" = "Restart Firewall" ]
	then
	$initfile restart
	zenity --info --text="Firewall restarted"
fi

}
#
#
#
#
#NEW FUNCTION
#Sorry, Im blind, and this was handy to find
#NEW FUNCTION
#
#
#
#
function ipcheck {
ip=`echo $1 | awk -F/ '{print $1}'`
subnet=`echo $1 | awk -F/ '{print $2}'`

ipgood=0
if [ "$1" = "any/0" ]
	then
	ipgood=1
fi
if [ `echo $ip | awk -F"." '{print $1}'` -lt 256 ]
	then
	if [ `echo $ip | awk -F"." '{print $2}'` -lt 256 ]
		then
		if [ `echo $ip | awk -F"." '{print $3}'` -lt 256 ]
			then
			if [ `echo $ip | awk -F"." '{print $4}'` -lt 256 ]
				then
				if [ $subnet -lt 33 ]
					then
					ipgood=1
				fi
			fi
		fi
	fi
fi
}

function dupcheck {
if [ `cat $2 | wc -l` -gt `cat $2 | sort | uniq | wc -l` ]
	then
	cat $2 | sort | uniq >> tmp$$
	mv tmp$$ $2
elif [ `cat $1 | wc -l` -gt `cat $1 | sort | uniq | wc -l` ]
	then
	cat $1 | sort | uniq >> tmp$$
	mv tmp$$ $1
fi
}

function integcheck {
# $1 should be .full, $2 should be active list

while read iprange
do
if cat $1 | grep "$iprange"
	then	
	echo check
else
	echo fail
	echo $iprange >> $1
fi
done < $2
}

function advperm {
finalperm="any/0"
permsearch=`cat $configfile | grep $1 | awk -F= '{print $2}' | sed 's/"//g'`
if [ "$permsearch" ]
	then
	finalperm=$permsearch
fi
echo $finalperm
}


function localadd {
custominfo=`zenity --list --width=600 --height=300 --print-column=ALL --editable --separator="_" --title "Beta BaseTables Script" \
--column $"Entry Name" --column $"TCP/UDP" --column $"Source IP" --column $"Port" --column $"ACCEPT/REJECT" \
$"Enter Name" $"TCP" $"anywhere" $"Enter Port" $"ACCEPT" `

customname=`echo $custominfo | awk -F"_" '{print $1}'`
protocol=`echo $custominfo | awk -F"_" '{print $2}'`
sport=`echo $custominfo | awk -F"_" '{print $4}'`
sip=`echo $custominfo | awk -F"_" '{print $3}'`
acrej=`echo $custominfo | awk -F"_" '{print $5}'`

if [ "$protocol" != "TCP" ]
	then
	if [ "$protocol" != "UDP" ]
	then
	zenity --error
	fi
fi

if echo $sport | grep [a-Z]
	then
	zenity --error
fi

if [ "$sip" = "anywhere" ]
	then
	sip="\$ANYWHERE"
	else
	ipcheck $sip
fi

if [ "$acrej" != "ACCEPT" ]
	then
	if [ "$acrej" != "REJECT" ]
	then
	zenity --error
	fi
fi

echo "#$customname" >> firewall.local
echo "iptables -A INPUT -i \$EXTERNAL_INTERFACE -p $protocol -m state --state ESTABLISHED,RELATED --sport $sport --dport \$UNPRIVPORTS -s $sip -d \$EXTERNAL_IP -j $acrej" >> firewall.local
}


	zenity --info --text="Welcome to BaseTables Beta, this script is designed to provide a point and click front end to some of the more advanced options for the linux firewall iptables. This script will attempt to find as much information on its own, but it will still ask you for verification.  This script is BETA, so it might hurt your firewall.  If you dont know how to flush your firewall rules, dont use it!" --title="Welcome"

quit=0
while [ $quit -eq 0 ]
do 
mode=`zenity --list --text="Welcome" --radiolist --width=700 --height=300 --column="" --column=$"Configuration" --column=$"Description"\
	TRUE $"Base Configuration" $"Initial firewall configuration.  Select to configure or reconfigure."\
	FALSE $"Profile Manager" $"Create, view, modify, and activate profiles.  Not Working"\
	FALSE $"Advanced Configuration" $"Select here to modify port forwarding settings and Banned IP Ranges"\
	FALSE $"Firewall Status" $"Check the status of the firewall and turn it on and off"\
	`
if [ $? -eq 1 ]
	then
	quit=1
fi

if [ "$mode" = "Base Configuration" ]
	then
	configreadin
	startread
	globalconfig
	selectorsecurity
	selectorclient
	selectorserver
	selectorgames
	filemake
elif [ "$mode" = "Profile Manager" ]
	then
	echo "not done"
elif [ "$mode" = "Advanced Configuration" ]
	then
	stop=0
	while [ $stop -eq 0 ]
	do
	advancemode=`zenity --list --radiolist --text="Select User Mode" --radiolist --width=600 --height=300 --column="" --column=$"DHCP" --column=$"Description"\
	FALSE $"Custom Rules" $"Make custom firewall rules"\
	FALSE $"Port Forward Disable/Enable" $"Disable and Enable Forwarded Ports"\
	FALSE $"Port Forward Add/Edit" $"Add and Edit Forwarded Ports to Configuration"\
	FALSE $"Blocked Ranges Disable/Enable" $"Disable and Enable Blocked Ranges"\
	FALSE $"Blocked Ranges Add/Edit" $"Add and Edit Blocked Ranges to Configuration"\
	`
	if [ $? -eq 1 ]
		then
		stop=1

	elif [ "$advancemode" = "Custom Rules" ]
		then
		echo "not done"

	elif [ "$advancemode" = "Port Forward Disable/Enable" ]
		then
		portenable

	elif [ "$advancemode" = "Port Forward Add/Edit" ]
		then
		cancel=0
		while [ $cancel -eq 0 ]
		do
			portsetting
		done

	elif [ "$advancemode" = "Blocked Ranges Disable/Enable" ]
		then
		banview

	elif [ "$advancemode" = "Blocked Ranges Add/Edit" ]
		then
		cancel=0
		while [ $cancel -eq 0 ]
		do
			banadd
		done
		
	fi
	done
	##making sure nothing wonky happened
	dupcheck $natlistfull $natlist
	dupcheck $banlistfull $banlist
	integcheck $natlistfull $natlist
	integcheck $banlistfull $banlist

	zenity --question --text="New Settings will not be applied until firewall is restarted.  Press ok to restart firewall now or cancel to restart later"
	if [ $? -eq 0 ]
		then
#		$initfile restart
		echo "For testing purposes this was disabled, if for some reason I forget to re-enable this before public release, please let me know"
	fi
elif [ "$mode" = "Firewall Status" ]
	then
	statuscheck
fi
done