#!/bin/sh
#
# SCOL INSTALLATION SCRIPT FOR LINUX
#
# 03/12/99 by P.Favre
#

########## Internal functions #################
Echo () {
  echo -e $*
}

Read () {
  s=""
  while [ X"$s" = X ]
  do
    Echo "$1 : \c"
    read s
  done
  eval "$2=\"$s\""
}

ReadN () {
  s=""
  Echo "$1 [$MNMANDAT] : \c"
  read s
  eval "$2=\"$s\""
}

DelSlash () {
  last=`expr "$*" : ".*\(.\)$"`
  if [ X"$last" = X"/" ]
  then
    echo "`expr \"$*\" : \"\(.*\).$\"`"
  else
    echo "$*"
  fi
}

EscSpace () {
  deb=`expr "$*" : "\(.*\) .*"`
  if [ X"$deb" = X ]
  then
    echo "$*"
  else
    fin=`expr "$*" : ".* \(.*\)"`
    echo "`EscSpace "$deb"`\ $fin"
  fi
}

YesNo () {
  Read "$1 [$MYESNO] \c" c
  case $c in
    [$MYES]*) eval "$2=y";;
    *) eval "$2=n";;
  esac
}

Cancel () {
  Echo "$MCANCEL"
  exit 1
}

IsNumber() {
  expr $1 + 1 >/dev/null 2>&1
  if [ $? -eq 0 ]
  then
    echo 1
  else
    echo 0
  fi
}

########## Main procedure #################

# Localize installation
if [ X"$LANG" = X"fr" ]
then
  DEFLANG=french
else
  DEFLANG=english
fi
lf=install_$DEFLANG.lang
if [ ! -f $lf ]
then
  Echo "Lang file $f not found"
  Cancel
fi
while read k v
do
  eval "$k=\"$v\""
done <$lf

# Initialisation
SRCDIR="`DelSlash $(pwd)`"
ID=`id -u`

# Title
Echo ""
Echo "\t\t========================="
Echo "\t\t$MTITLE"
Echo "\t\t========================="

# Get destination directory
Echo ""
Read "$MDSTDIR" DSTDIR
DSTDIR="`DelSlash $DSTDIR`"
DSTDIR2="`EscSpace $DSTDIR`"

# Create dest dir if not exist
if [ ! -d "$DSTDIR" ]
then
  Echo "$MDNEXIST"
  YesNo "$MCREATE" rep
  if [ $rep = "y" ]
  then
    mkdir -p "$DSTDIR"
    if [ ! -d "$DSTDIR" ]
    then
      Echo "$MDUNABLE"
      Cancel
    fi
  else
    Cancel
  fi
fi

# Test if Scol already installed
if [ -f "$DSTDIR"/scol/usm.ini ]
then
  Echo ""
  Echo "$MALREADY"
  YesNo "$MOVERW" rep
  if [ $rep = "n" ]
  then
    Cancel
  fi
fi

# Get Scol group name : create it if not exist
Echo ""
Read "$MGROUP" SCOL_GROUP 
grep -qs "^$SCOL_GROUP" /etc/group
if [ $? -ne 0 ]
then
  Echo "$MGNEXIST"
  if [ $ID -ne 0 ]
  then
    Echo "$MROOT"
    Cancel
  fi
  YesNo "$MCREATE" rep
  if [ $rep = "y" ]
  then
    groupadd $SCOL_GROUP
  fi
fi

# Get Scol user name : create it if not exist
Echo ""
Read "$MUSER" SCOL_USER 
grep -qs "^$SCOL_USER" /etc/passwd
if [ $? -ne 0 ]
then
  Echo "$MUNEXIST"
  if [ $ID -ne 0 ]
  then
    Echo "$MROOT"
    Cancel
  fi
  YesNo "$MCREATE" rep
  if [ $rep = "y" ]
  then
    useradd -g $SCOL_GROUP -d "$DSTDIR"/scol -m $SCOL_USER
  fi
fi

# Get server DNS and IP
Echo ""
RC=1
while [ $RC -ne 0 ]
do
  IP=""
  ReadN "$MDNS" DNS
  if [ X"$DNS" != X ]
  then
    IP1=`expr "$DNS" : "\(.*\)\..*\..*\..*"`
    IP2=`expr "$DNS" : ".*\.\(.*\)\..*\..*"`
    IP3=`expr "$DNS" : ".*\..*\.\(.*\)\..*"`
    IP4=`expr "$DNS" : ".*\..*\..*\.\(.*\)"`
    # case IP
    if [ `IsNumber $IP1` -eq 1 -a \
         `IsNumber $IP2` -eq 1 -a \
         `IsNumber $IP3` -eq 1 -a \
         `IsNumber $IP4` -eq 1 ]
    then
      IP=$DNS
      RC=0
    else
      HOSTN=`host -ta $DNS`
      RC=$?
      if [ $RC -eq 0 ]
      then
        # case DNS
        IP0=`expr "$HOSTN" : ".* \(.*\)$"`
        IP1=`expr "$IP0" : "\(.*\)\..*\..*\..*"`
        IP2=`expr "$IP0" : ".*\.\(.*\)\..*\..*"`
        IP3=`expr "$IP0" : ".*\..*\.\(.*\)\..*"`
        IP4=`expr "$IP0" : ".*\..*\..*\.\(.*\)"`
        if [ `IsNumber $IP1` -eq 1 -a \
             `IsNumber $IP2` -eq 1 -a \
             `IsNumber $IP3` -eq 1 -a \
             `IsNumber $IP4` -eq 1 ]
        then
          IP=$IP0
        fi
      fi
    fi
  else
    RC=0
  fi
done

# Test Scol tar files
nb=`ls scol-*-linux-i386.tgz|grep -c scol`
case $nb in
  0) Echo ""; Echo "$MTNEXIST"; Cancel;;
  1) ;;
  *) Echo ""; Echo "$MTMORE"; Cancel;;
esac
 
# Extracting files
Echo ""
cd "$DSTDIR"
Echo "$MEXTRACT"
tar xzf "$SRCDIR"/scol-*-linux-i386.tgz
if [ $? -ne 0 ]
then
  Cancel
fi

# Add settings into ini files
Echo ""
Echo "$MUPDAT"
cd "$DSTDIR"/scol
echo "DefaultLanguage $DEFLANG" >> usmress.ini
echo "masteruser $SCOL_USER" >> usm.ini
if [ X"$IP" != X ]
then
  echo "forcedIP $IP" >> usm.ini
fi
if [ X"$DNS" != X ]
then
  cd "$DSTDIR"/scol/data/.odbctxt
  i=1
  while read lig
  do
    if [ $i -eq 2 ]
    then
      echo "$lig"$DNS >> admin.new
    else
      echo "$lig" >> admin.new
    fi
    i=`expr $i + 1`
  done < admin
  mv admin.new admin
fi

# Get admin values
Echo ""
cd "$DSTDIR"/scol/data/.odbctxt
Read "$MACLLOGIN" ACLLOGIN
grep -qs "^$ACLLOGIN" ACL
if [ $? -eq 0 ]
then
  Echo "$MLEXIST"
else
  Read "$MACLPWD" ACLPWD
  ReadN "$MACLFNAME" ACLFNAME
  ReadN "$MACLLNAME" ACLLNAME
  Echo "$MUPDATACL"
  echo "$ACLLOGIN|$ACLPWD|$ACLFNAME|$ACLLNAME" >> ACL
fi

# Build start script
Echo ""
SCR=startscol.sh
Echo "$MBUILDSCR"
cd "$DSTDIR"/scol
echo "" > $SCR
echo "# Scol install directory" >> $SCR
echo "DSTDIR=\"$DSTDIR\"" >> $SCR
echo "" >> $SCR
echo "# unixODBC settings" >> $SCR
echo "ODBCSYSINI=\"\$DSTDIR\"/scol/unixODBC/etc ; export ODBCSYSINI" >> $SCR
echo "ODBCINI=\"\$DSTDIR\"/scol/unixODBC/.odbc.ini ; export ODBCINI" >> $SCR
echo "ODBCTXT=\"\$DSTDIR\"/scol/data ; export ODBCTXT" >> $SCR
echo "" >> $SCR
echo "# Search path for dynamic libraries" >> $SCR
echo "LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\"\$DSTDIR\"/scol ; export LD_LIBRARY_PATH" >> $SCR
echo "" >> $SCR
echo "# Scol settings" >> $SCR
echo "SCOLPATH=\"\$DSTDIR\"/scol/usmunix ; export SCOLPATH" >> $SCR
echo "" >> $SCR
echo "# Run Scol" >> $SCR
echo "\"\$SCOLPATH\" \$* >/dev/null 2>&1" >> $SCR
chmod +x $SCR

# Changing owner
Echo ""
Echo "$MCHOWN"
chown -R $SCOL_USER:$SCOL_GROUP "$DSTDIR"/scol
if [ $? -ne 0 ]
then
  Cancel
fi

# Changing suid on exe files
if [ $ID -ne 0 ]
then
  Echo "$MSUID"
else
  cd "$DSTDIR"/scol/bin
  chown root *
  chmod u+s *
fi

# Ask for scol autostart
Echo ""
SCOLINIT="s1:235:respawn:su $SCOL_USER -c \"$DSTDIR2/scol/$SCR\""
YesNo "$MAUTO" rep
if [ $rep = "y" ]
then
  if [ $ID -ne 0 ]
  then
    Echo "$MROOT"
    Echo "$MAUTOM"
    Echo "$SCOLINIT"
  else
    grep -qs "$SCR" /etc/inittab
    if [ $? -eq 0 ]
    then
      Echo "$MINITEXIST"
      Echo "$SCOLINIT"
    else
      Echo "$MUPDATINIT"
      echo "# SCOL" >> /etc/inittab
      echo "$SCOLINIT" >> /etc/inittab
    fi
  fi
else
  Echo "$MAUTOM"
  Echo "$SCOLINIT"
fi

# End
Echo ""
Echo "$MSUCCESS"
Echo ""

