#! /bin/sh

PATH=/bin:/usr/bin:/usr/ucb/bin:/opt/csw/bin
export PATH

if [ -x $PKG_INSTALL_ROOT/opt/csw/etc/csw.conf ] ; then 
  . $PKG_INSTALL_ROOT/opt/csw/etc/csw.conf 
fi 
if [ -x $PKG_INSTALL_ROOT/etc/opt/csw/csw.conf ] ; then 
  . $PKG_INSTALL_ROOT/etc/opt/csw/csw.conf 
fi 

BOINCUSER=boinc
BOINCGROUP="`( groups ${BOINCUSER} 2>/dev/null || echo boinc ) | gawk '{print $1}'`"

MAJOR=`uname -r | gawk -F. '{print $1}'`
MINOR=`uname -r | gawk -F. '{print $2}'`
# find our run directory
if [ $MAJOR -gt 5 -o \( $MAJOR -eq 5 -a $MINOR -gt 9 \) ] ; then
  BOINCDIR=$PKG_INSTALL_ROOT/var/lib/boinc
  if [ -d $PKG_INSTALL_ROOT/var/opt/csw/boinc -a ! -d $PKG_INSTALL_ROOT/var/lib/boinc ] ; then
    mv -f $PKG_INSTALL_ROOT/var/opt/csw/boinc $PKG_INSTALL_ROOT/var/lib/boinc
  fi
else
  BOINCDIR=$PKG_INSTALL_ROOT/var/opt/csw/boinc
fi

# find out if the group $BOINCGROUP exists
GROUPENT=`getent group $BOINCGROUP`

# if we need to create the boinc group, find the first unused group number
# 2316 or highter
if [ -z "${GROUPENT}" ] ; then 
  getent group | gawk -F: '{print $3}' > /tmp/$$.grp
  try=2316
  while [ ! -z "`grep \^$try /tmp/$$.grp`" ] ; do
    try=`expr $try + 1`
  done
  GROUPNUM=${try}
  GROUPENT="${BOINCGROUP}::${try}:"
  cp $PKG_INSTALL_ROOT/etc/group $PKG_INSTALL_ROOT/etc/group.boinc_install.bak
  echo ${GROUPENT} >> $PKG_INSTALL_ROOT/etc/group
  /bin/rm /tmp/$$.grp
else 
  GROUPNUM=`echo $GROUPENT | gawk -F: '{print $3}'`
fi

# Now find out if the user ${BOINCUSER} exists.
USERENT=`getent passwd $BOINCUSER`

# if we need to create the boinc group, find the first unused user number
# ${BOINCGROUP} or highter
if [ -z "${USERENT}" ] ; then 
  getent passwd | gawk -F: '{print $3}' >/tmp/$$.user
  try="${GROUPNUM}"
  while [ ! -z "`grep \^$try /tmp/$$.user`" ] ; do
    try=`expr $try + 1`
  done
  USERENT="${BOINCUSER}:x:${try}:${GROUPNUM}:BOINC client user:${BOINCDIR}:/bin/ksh" 
  cp $PKG_INSTALL_ROOT/etc/passwd $PKG_INSTALL_ROOT/etc/passwd.boinc_install.bak
  echo $USERENT >> $PKG_INSTALL_ROOT/etc/passwd
  /bin/rm /tmp/$$.user
fi

# Does our user entry point to the correct directory?
if [ -z "`echo $USERENT | grep $BOINCDIR`" ] ; then
  # No.  We need to correct it.
  USERENT=`echo $USERENT | gawk -F: '{print $1":"$2":"$3":"$4":"$5":'$BOINCDIR':"$7}'`
  grep -v \^${BOINCUSER}: $PKG_INSTALL_ROOT/etc/passwd > /tmp/passwd.$$
  echo "$USERENT" >> /tmp/passwd.$$
  if [ ! -f $PKG_INSTALL_ROOT/etc/passwd.boinc_install.bak ] ; then 
    cp $PKG_INSTALL_ROOT/etc/passwd $PKG_INSTALL_ROOT/etc/passwd.boinc_install.bak
  fi
  mv -f /tmp/passwd.$$ $PKG_INSTALL_ROOT/etc/passwd
fi

# check for our shadow entry
shadent="`grep \^$BOINCUSER: $PKG_INSTALL_ROOT/etc/shadow`"
if [ -z "$shadent" ] ; then
  shadent="${BOINCUSER}:NP:16384::::::"
  cp $PKG_INSTALL_ROOT/etc/shadow $PKG_INSTALL_ROOT/etc/shadow.boinc_install.bak
  chmod 0400 $PKG_INSTALL_ROOT/etc/shadow.boinc_install.bak
  echo $shadent >> $PKG_INSTALL_ROOT/etc/shadow
fi

# Create the run directory and set permissions properly.
if [ ! -d $BOINCDIR ] ; then
  mkdir -p $BOINCDIR
fi
chown -R $BOINCUSER:$BOINCGROUP $BOINCDIR

