#!/bin/sh
#
#     tiger - A UN*X security checking system
#     Copyright (C) 1993 Douglas Lee Schales, David K. Hess, David R. Safford
#
#    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 1, 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.
#
#     Please see the file `COPYING' for the complete copyright notice.
#
# HPUX/genpasswd - 06/14/93
# HPUX/genpasswd - 06/26/2003 - jfs - Patch to identify password hashes
# HPUX/genpasswd - 06/04/2010 - jfs - Fix shell script syntax errors 
#
#-----------------------------------------------------------------------------
#

local=0
for parm
do
  case "$parm" in
    -p) passwordflag=Y;;
    -l) local=1;;
    *)	outfile="$parm";;
  esac
done

zappasswd()
{
  IFS=:
  while read user passwd rest
  do
    tcbfile="/tcb/files/auth/${user%${user#?}}/$user"
    if [ -f $tcbfile ]; then
      passwd=`$AWK -F: '/u_pwd=/ { print substr($2, 7) }' $tcbfile`
    fi

# Do not print out the password hashes since we do not need them, instead
# print out the type of hash
    if echo $passwd | $EGREP -q "^[a-zA-Z0-9\./]{24}" ; then
# bigcrypt passwords used in trusted mode. (13 + (x * 11)), with at least 24 chars
           passwd="bigcrypt"
    elif echo $passwd | $EGREP -q "^[a-zA-Z0-9\./]{13}" ; then
# Normal UNIX passwds (13 chars)
           passwd="crypt3"
    elif ! [ -z "$passwd" ] && [ "$passwd" != "*" ] ; then
            passwd="unknown_format"
    fi


    echo "$user:$passwd:$rest"
  done
}

$GREP -v '^[-+]' /etc/passwd |
$SORT |
{
  if [ "$passwordflag" = 'Y' ]; then
    $CAT
  else
    zappasswd
  fi
} > $WORKDIR/etc_passwd.$$

echo "/etc/passwd" > $WORKDIR/etc_passwd.$$.src
echo $WORKDIR/etc_passwd.$$ >> $outfile

[ -n "$YPCAT" ] && {
  $YPCAT passwd |
  $SORT |
  $COMM -23 - $WORKDIR/etc_passwd.$$ > $WORKDIR/nis_passwd.$$
  echo "NIS" > $WORKDIR/nis_passwd.$$.src
  echo $WORKDIR/nis_passwd.$$ >> $outfile
}
