#!/bin/sh
#
# Apply changes
#
# Copyright 2000 Wilmer van der Gaast (lintux@dds.nl)
#

#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

. $WEBSERVE_ROOT/cgi-bin/functions
. $WEBSERVE_ROOT/smart.conf

checkrefer

SECTION=`echo $REFERER | cut -d? -f2 | sed "s/ +\$//g" | cut -d
 -f1`
export `echo $* | sed "s/&/ /g"`
if [ "`echo $SECTION | grep =`" ]; then
	export `echo $SECTION | sed "s/&/ /g"`;
fi

case $SECTION in
	name )
		anticonfig 2 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "2 $NAME" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	internalnet )
		anticonfig 3 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "3 $NUM" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	version )
		cat $MARS_CONFIG | anticonfig 6 | anticonfig 30 > $MARS_CONFIG.tmp
		echo "6 $VERSION `digit $BURST`" >> $MARS_CONFIG.tmp
		echo "30 $MAXREAD $MAXWRITE" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	tests )
		anticonfig 16 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "16 $TESTS" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	timing )
		cat $MARS_CONFIG | anticonfig 210 | anticonfig 211 > $MARS_CONFIG.tmp
		echo "210 $DOWNDELAY" >> $MARS_CONFIG.tmp
		echo "211 $MESSAGEDELAY" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	configh )
		cat $MARS_CONFIG | anticonfig 60 | anticonfig 61 | anticonfig 63 | \
			anticonfig 68 | anticonfig 69 | anticonfig 70 | anticonfig 71 > $MARS_CONFIG.tmp
		if [ -n "$MAXCONN" ]; then
			echo "60 $MAXCONN" >> $MARS_CONFIG.tmp; fi
		if [ -n "$MAXVOLS" ]; then
			echo "61 $MAXVOLS" >> $MARS_CONFIG.tmp; fi
		if [ -n "$MAXDBES" ]; then
			echo "63 $MAXDBES" >> $MARS_CONFIG.tmp; fi
		if [ -n "$SERIAL" ]; then
			echo "70 $SERIAL" >> $MARS_CONFIG.tmp; fi
		if [ -n "$APPLIC" ]; then
			echo "71 $APPLIC" >> $MARS_CONFIG.tmp; fi
		if [ -n "$MMAP" ]; then
			echo "68 $MMAP" >> $MARS_CONFIG.tmp; fi
		if [ -n "$SAP" ]; then
			echo "69 $SAP" >> $MARS_CONFIG.tmp; fi
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	smart )
	{	cat $SMART_CONF | grep -v "^MARS_CONFIG=" | grep -v "^SERVER_LOGIN=" | \
			grep -v "^SERVER_LOGIN_NOPASS=" | grep -v "^SERVER_PASSWORD=" | \
			grep -v "^NWSERV_BIN=" | grep -v "^SMART_CONFIGURED=" ;
	}	> $SMART_CONF.tmp
		echo MARS_CONFIG=`convertfilename $MARSCONFIG` >> $SMART_CONF.tmp
		echo NWSERV_BIN=`convertfilename $NWSERV_BIN` >> $SMART_CONF.tmp
		echo SERVER_LOGIN=\"-S $SERVERNAME -U $SUPERVISOR -P $PASSWORD\" >> $SMART_CONF.tmp
		echo SERVER_LOGIN_NOPASS=\"-S $SERVERNAME -U $SUPERVISOR\" >> $SMART_CONF.tmp
		echo SERVER_PASSWORD=\"$PASSWORD\" >> $SMART_CONF.tmp
		echo SMART_CONFIGURED=yes >> $SMART_CONF.tmp
		mv $SMART_CONF.tmp $SMART_CONF

		cat $WEBSERVE_CONF | grep -v "^WEBSERVE_SECURITY=" > $WEBSERVE_CONF.tmp
		if [ "$SECURITY" = "on" ]; then
			echo WEBSERVE_SECURITY=on >> $WEBSERVE_CONF.tmp;
		else
			echo WEBSERVE_SECURITY=off >> $WEBSERVE_CONF.tmp;
		fi
		mv $WEBSERVE_CONF.tmp $WEBSERVE_CONF
;;
	supervisor )
		anticonfig 12 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "12 $SUPERVISOR $ROOT $PASSWORD" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	mapping )
		anticonfig 15 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "15 $AUTOMAP $PASSWORD" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	mode )
		echo Content-Type: text/plain
		anticonfig 9 < $MARS_CONFIG > $MARS_CONFIG.tmp		
		if [ "$DIR" = "DSTD" ]; then
			declare -i DIR
			DIR="0";
		elif [ "$DIR" = "DINH" ]; then
			declare -i DIR
			DIR="-1";
		else
			declare -i DIR
			DIR="0"
			if [ "$DUR" ]; then DIR=$DIR+400; fi
			if [ "$DUW" ]; then DIR=$DIR+200; fi
			if [ "$DUX" ]; then DIR=$DIR+100; fi
			if [ "$DGR" ]; then DIR=$DIR+40; fi
			if [ "$DGW" ]; then DIR=$DIR+20; fi
			if [ "$DGX" ]; then DIR=$DIR+10; fi
			if [ "$DOR" ]; then DIR=$DIR+4; fi
			if [ "$DOW" ]; then DIR=$DIR+2; fi
			if [ "$DOX" ]; then DIR=$DIR+1; fi;
		fi
		if [ "$FILE" = "FSTD" ]; then
			declare -i FILE
			FILE="0";
		else
			declare -i FILE
			FILE="0"
			if [ "$FUR" ]; then FILE=$FILE+400; fi
			if [ "$FUW" ]; then FILE=$FILE+200; fi
			if [ "$FUX" ]; then FILE=$FILE+100; fi
			if [ "$FGR" ]; then FILE=$FILE+40; fi
			if [ "$FGW" ]; then FILE=$FILE+20; fi
			if [ "$FGX" ]; then FILE=$FILE+10; fi
			if [ "$FOR" ]; then FILE=$FILE+4; fi
			if [ "$FOW" ]; then FILE=$FILE+2; fi
			if [ "$FOX" ]; then FILE=$FILE+1; fi;
		fi
		echo "9 0$DIR 0$FILE" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	guest )
		anticonfig 1[01] < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "10 $GROUP" >> $MARS_CONFIG.tmp
		echo "11 $USER" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	vadd )
		DIR=`convertfilename $DIR`
		NAME=`echo $NAME | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
		if [ "$NAME" = "SYS" ]; then
			mv $MARS_CONFIG $MARS_CONFIG.tmp;
		fi			
		echo -n "1 $NAME $DIR " >> $MARS_CONFIG
		FLAGS=""
		case "$CASE"- in
			IGNORE- )
				FLAGS="$FLAGS"i ;;
			LOWER- )
				FLAGS="$FLAGS"k ;;
		esac
		case "$TRUSTEE"- in
			UNIX- )
				FLAGS="$FLAGS"t ;;
			YES- )
				FLAGS="$FLAGS"T ;;
		esac
		if [ $OS2 ];         then FLAGS="$FLAGS"O; fi
		if [ $NFS ];         then FLAGS="$FLAGS"N; fi
		if [ $REMOVABLE ];   then FLAGS="$FLAGS"m; fi
		if [ $NOFIXINODES ]; then FLAGS="$FLAGS"n; fi
		if [ $PIPE ];        then FLAGS="$FLAGS"p; fi
		if [ $RO ];          then FLAGS="$FLAGS"r; fi
		echo "$FLAGS" >> $MARS_CONFIG
		if [ "$NAME" = "SYS" ]; then
			cat $MARS_CONFIG.tmp >> $MARS_CONFIG
			rm $MARS_CONFIG.tmp;
		fi			
		$WEBSERVE_ROOT/cgi-bin/volume list
		exit
;;
	encryption )
		anticonfig 7 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "7 $ENCRYPTION" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG	
;;
	dadd )
		echo "4 $NETNUM $INTERFACE $FRAME $TICKS" >> $MARS_CONFIG
		$WEBSERVE_ROOT/cgi-bin/device list
		exit
;;
	logwhat )
		anticonfig 10[0-9] < $MARS_CONFIG > $MARS_CONFIG.tmp
		for i in 100 101 102 103 104 105 106; do
			case $i in
				100 ) CURRENT=$d100 ;;
				101 ) CURRENT=$d101 ;;
				102 ) CURRENT=$d102 ;;
				103 ) CURRENT=$d103 ;;
				104 ) CURRENT=$d104 ;;
				105 ) CURRENT=$d105 ;;
				106 ) CURRENT=$d106 ;;
			esac
			echo $i $CURRENT >> $MARS_CONFIG.tmp
			shift;
		done
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	logfiles )
		NWLOG=`convertfilename $NWLOG`
		ROLOG=`convertfilename $ROLOG`
		anticonfig [23]01 < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "201 $NWLOG" >> $MARS_CONFIG.tmp
		echo "301 $ROLOG" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	dirs )
		anticonfig 4[012567] < $MARS_CONFIG > $MARS_CONFIG.tmp
		echo "40 `convertfilename $VOLCACHE`" >> $MARS_CONFIG.tmp
		echo "41 `convertfilename $LOCKS`" >> $MARS_CONFIG.tmp
		echo "42 `convertfilename $SPOOL`" >> $MARS_CONFIG.tmp
		echo "45 `convertfilename $BINDERY`" >> $MARS_CONFIG.tmp
		echo "46 `convertfilename $ATTRIB`" >> $MARS_CONFIG.tmp
		echo "47 `convertfilename $TRUSTEE`" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	uadd )
		nwbocreate $SERVER_LOGIN -t 1 -o $NOVELL

	{	echo 0001
		echo $NOVELL
		echo UNIX_USER
		echo 0
		echo 30
		echo $UNIX | $HEX
	} | nwbpset $SERVER_LOGIN
		
	{	echo 0001
		echo $NOVELL
		echo IDENTIFICATION
		echo 0
		echo 31
		echo "$FULLNAME" | sed "s/+/ /g" | $HEX
	} | nwbpset $SERVER_LOGIN
		
	{	echo 0001
		echo $NOVELL
		echo GROUPS_I\'M_IN
		echo 2
		echo 31
		for g in `nwbols $SERVER_LOGIN -t 2 | cut -d" " -f1`; do
			if [ "`var $g`" = "on" ]; then
				echo 0002
				echo $g
			{	nwbpvalues $SERVER_LOGIN -t 2 -o $g -p GROUP_MEMBERS -c
				echo 0001
				echo $NOVELL; 
			} | nwbpset $SERVER_LOGIN;
			fi;
		done;
	} | nwbpset $SERVER_LOGIN
		nwbpvalues $SERVER_LOGIN -t 1 -o $NOVELL -p GROUPS_I\'M_IN -c | \
			sed "3s/.*/SECURITY_EQUALS/" | nwbpset $SERVER_LOGIN
			
		if [ "$PASSWORD" ]; then
		{	echo $SERVER_PASSWORD
			echo $PASSWORD
			echo $PASSWORD;
		} | nwpasswd $SERVER_LOGIN_NOPASS -t 1 -O $NOVELL;
		fi
		
		$WEBSERVE_ROOT/cgi-bin/user list
		exit
;;
	gadd )
		nwbocreate $SERVER_LOGIN -t 2 -o $NAME

	{	echo 0002
		echo $NAME
		echo IDENTIFICATION
		echo 0
		echo 31
		echo "$FULLNAME" | sed "s/+/ /g" | $HEX
	} | nwbpset $SERVER_LOGIN
	
	{ nwbols $SERVER_LOGIN -t 1
		nwbols $SERVER_LOGIN -t 2;
	} | \
	{	echo 0002
		echo $NAME
		echo OBJ_SUPERVISORS
		echo 2
		echo 32
		read g
		while [ "$g" ]; do
			TYPE=`echo $g | cut -d" " -f3`
			NAME=`echo $g | cut -d" " -f1`
			ITEM=T$TYPE\_$NAME
			if [ "`var $ITEM`" = "on" ]; then
				echo $TYPE
				echo $NAME;
			fi
			read g;
		done;
	} | nwbpset $SERVER_LOGIN

		nwbpcreate $SERVER_LOGIN -o $NAME -t 2 -p GROUP_MEMBERS -s

		$WEBSERVE_ROOT/cgi-bin/group list
		exit
;;
	padd )
		nwbocreate $SERVER_LOGIN -t 3 -o $NAME
		
	{	echo 0003
		echo $NAME
		echo Q_OPERATORS
		echo 2
		echo 31
		echo 0001
		getconfig 12 | cut -d" " -f 2;
	} | nwbpset $SERVER_LOGIN
	
	{ echo 0003
		echo $NAME
		echo Q_USERS
		echo 2
		echo 31
		echo 0002
		echo EVERYONE;
	} | nwbpset $SERVER_LOGIN
	
		if [ -z "$SPOOL_DIR" ]; then
			SPOOL_DIR="SYS:SYSTEM/`nwbols $SERVER_LOGIN -t 3 | grep "^$NAME" | \
				cut -d" " -f2`.QDR";
		fi
	{	echo 0003
		echo $NAME
		echo Q_DIRECTORY
		echo 0
		echo 31
		echo $SPOOL_DIR | $HEX;
	} | nwbpset $SERVER_LOGIN
	
	{ echo 0003
		echo $NAME
		echo Q_UNIX_PRINT
		echo 1
		echo 31
		echo $UNIX_COMMAND | sed "s/+/ /g" | $HEX;
	} | nwbpset $SERVER_LOGIN

		nwbpcreate $SERVER_LOGIN -o $NAME -t 3 -p Q_SERVERS -s
		
		$WEBSERVE_ROOT/cgi-bin/printer list
		exit
;;
	sec-flags )
		declare -i i; i=0
		anticonfig 8 < $MARS_CONFIG > $MARS_CONFIG.tmp
		if [ "$F1" = "on" ]; then i=$i+1; fi
		if [ "$F2" = "on" ]; then i=$i+2; fi
		if [ "$F4" = "on" ]; then i=$i+4; fi
		if [ "$F8" = "on" ]; then i=$i+8; fi
		if [ "$F10" = "on" ]; then i=$i+16; fi
		if [ "$F20" = "on" ]; then i=$i+32; fi
		if [ "$F40" = "on" ]; then i=$i+64; fi
		echo "8 $i" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG		
;;
	dev-flags )
		declare -i i; i=0
		cat $MARS_CONFIG | anticonfig 5 | anticonfig 310 > $MARS_CONFIG.tmp
		if [ "$F1" != "on" ]; then i=$i+1; fi
		if [ "$F2" = "on" ]; then i=$i+2; fi
		if [ "$F4" = "on" ]; then i=$i+4; fi
		echo "5 $i" >> $MARS_CONFIG.tmp
		echo "310 $WDOG" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	bind-flags )
		declare -i i; i=0
		anticonfig 17 < $MARS_CONFIG > $MARS_CONFIG.tmp
		if [ "$F1" = "on" ]; then i=1; fi
		echo "17 $i" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	prn-flags )
		declare -i i; i=0
		anticonfig 18 < $MARS_CONFIG > $MARS_CONFIG.tmp
		if [ "$F1" = "on" ]; then i=1; fi
		echo "18 $i" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	log-flags )
		declare -i i
		cat $MARS_CONFIG | anticonfig 200 | anticonfig 202 | anticonfig 300 | \
			anticonfig 302 > $MARS_CONFIG.tmp
		echo "200 $E200" >> $MARS_CONFIG.tmp
		echo "300 $E300" >> $MARS_CONFIG.tmp
		i="$E202_1+$E202_2"
		echo "202 0x$i" >> $MARS_CONFIG.tmp
		i="$E302_1"
		if [ "$E302_2" ]; then
			i="$i+2";
		fi
		echo "302 0x$i" >> $MARS_CONFIG.tmp
		mv $MARS_CONFIG.tmp $MARS_CONFIG
;;
	* )
		if [ "$EDIT" ]; then
			export EDIT=""
			if [ "$USER" ]; then
				if [ "$USER" != "$NOVELL" ]; then
					cat << EOF
Content-Type: text/html

<HTML>
<HEAD>
<TITLE>Error</TITLE>
</HEAD>
<BODY BGCOLOR=#C0C0C0>
<TT>ERROR:</TT> You can't change a user's name!
</BODY>
</HTML>
EOF
					exit;
				fi
				nwbprm $SERVER_LOGIN -t 1 -o $USER -p IDENTIFICATION
				nwbprm $SERVER_LOGIN -t 1 -o $USER -p UNIX_USER
				nwbprm $SERVER_LOGIN -t 1 -o $USER -p GROUPS_I\'M_IN
				nwbprm $SERVER_LOGIN -t 1 -o $USER -p SECURITY_EQUALS
				export REFERER=uadd
				$0 "$*"
				exit;
			elif [ "$GROUP" ]; then
				if [ "$GROUP" != "$NAME" ]; then
					cat << EOF
Content-Type: text/html

<HTML>
<HEAD>
<TITLE>Error</TITLE>
</HEAD>
<BODY BGCOLOR=#C0C0C0>
<TT>ERROR:</TT> You can't change a group's name!
</BODY>
</HTML>
EOF
					exit;
				fi
				nwbprm $SERVER_LOGIN -t 2 -o $USER -p IDENTIFICATION
				nwbprm $SERVER_LOGIN -t 2 -o $USER -p OBJ_SUPERVISORS
				export REFERER=gadd
				$0 "$*"
				exit;
			elif [ "$QUEUE" ]; then
				if [ "$QUEUE" != "$NAME" ]; then
					cat << EOF
Content-Type: text/html

<HTML>
<HEAD>
<TITLE>Error</TITLE>
</HEAD>
<BODY BGCOLOR=#C0C0C0>
<TT>ERROR:</TT> You can't change a printer's name!
</BODY>
</HTML>
EOF
					exit;
				fi
				nwbprm $SERVER_LOGIN -t 2 -o $USER -p Q_DIRECTORY
				nwbprm $SERVER_LOGIN -t 2 -o $USER -p Q_UNIX_PRINT
				export REFERER=padd
				$0 "$*"
				exit;
			elif [ "$DEVICE" ]; then
				$WEBSERVE_ROOT/cgi-bin/device "DEVICE=$DEVICE&DELETE=Delete" 2> /dev/null > /dev/null
				export REFERER=dadd
				$0 A=B
				exit;
			elif [ "$VOLUME" ]; then
				$WEBSERVE_ROOT/cgi-bin/volume "VOLUME=$VOLUME&DELETE=Delete" 2> /dev/null > /dev/null
				export REFERER=vadd
				$0 A=B
				exit;
			fi;
		else
			echo "500 ERROR";
		fi
;;
esac

chmod 600 $MARS_CONFIG $SMART_CONF $WEBSERVE_CONF # Make sure the rights are safe

echo Content-Type: text/html
echo
cat $WEBSERVE_ROOT/start.html
