#!/bin/sh
#
#     tiger - A UN*X security checking system
#     Copyright (C) 1993 Douglas Lee Schales, David K. Hess, David R. Safford
#
#     Please see the file `COPYING' for the complete copyright notice.
#
# crack_run - 06/14/93
#
#-----------------------------------------------------------------------------
#
TigerInstallDir='.'

#
# Set default base directory.
# Order or preference:
#      -B option
#      TIGERHOMEDIR environment variable
#      TigerInstallDir installed location
#
basedir=${TIGERHOMEDIR:=$TigerInstallDir}

for parm
do
   case $parm in
   -B) basedir=$2; break;;
   esac
done

#
# Verify that a config file exists there, and if it does
# source it.
#
[ ! -r $basedir/config ] && {
  echo "--ERROR-- [init002e] No 'config' file in \`$basedir'."
  exit 1
}

. $basedir/config

. $BASEDIR/initdefs

#
# If run in test mode (-t) this will verify that all required
# elements are set.
#
[ "$Tiger_TESTMODE" = 'Y' ] && {
  haveallcmds AWK CAT FMT GEN_PASSWD_SETS JOIN LS RM || exit 1
  haveallfiles BASEDIR WORKDIR || exit 1
  haveallvars TESTLINK HOSTNAME
  
  echo "--CONFIG-- [init003c] $0: Configuration ok..."
  exit 0
}

#------------------------------------------------------------------------
echo
echo "# Running Crack on password files..."

haveallcmds CRACK REPORTER 

cd $CRACKDIR
$CRACKDIR/scripts/shadmrg.sv > $CRACKDIR/run/tmppass
$CRACK $CRACKDIR/run/tmppass
sleep 60
$CRACKDIR/scripts/plaster
$REPORTER -quiet
rm $CRACKDIR/run/tmppass
make tidy

exit 0
########################################################################
haveallcmds CRACK GEN_PASSWD_SETS CAT EXPR

localflag=
[ "$Tiger_Crack_Local" = 'Y' ] && localflag="-l"

count=1
pid=$$

$GEN_PASSWD_SETS -p $localflag $WORKDIR/pass.list.$$

{

  while read pass_set
  do
    outfile=$WORKDIR/crack.out.$pid.$count
    {
      $CAT $pass_set.src
      $CRACK $pass_set 
    } > $outfile 2>&1 < /dev/null &
    echo $outfile
    count=`$EXPR $count + 1`
  done < $WORKDIR/pass.list.$$
  wait
} > $WORKDIR/file.list.$$

delete $WORKDIR/passllist.$$

while read filename
do
  {
    read source
    $AWK '$5 == "Guessed" { print $6, $10; }' > $WORKDIR/guess.list.$$
    [ -s $WORKDIR/guess.list.$$ ] && {
      echo "--WARN-- [crk001w] The following login id's have weak passwords:"
      $CAT $WORKDIR/guess.list.$$
    }
    delete $WORKDIR/guess.list.$$
  } < $filename
  delete $filename
done < $WORKDIR/file.list.$$

while read pass_set
do
  delete $pass_set $pass_set.src
done < $WORKDIR/pass.list.$$

delete $WORKDIR/file.list.$$ $WORKDIR/pass.list.$$
