Files
mars-smart/root/cgi-bin/apply.in
2026-04-21 02:12:28 +02:00

510 lines
13 KiB
Bash

#!/bin/sh
#
# Apply changes
#
# Copyright 2000 Wilmer van der Gaast (lintux@lintux.cx)
#
# 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