#!/bin/bash
##
## Ad-hoc Winbind auto-unconfig script for Solaris 10 client
## Copyright (c) 2007 SATOH Fumiyasu @ OSS Technology Co., Japan
##                    <http://www.osstech.co.jp/>
##

set -u
umask 0022

PATH="/opt/osstech/bin:/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin:/sbin:/usr/sbin"
export PATH

t()
{
  echo
  echo "$@"
}

warn()
{
  echo "$0: WARNING: $1" 1>&2
}

err()
{
  echo "$0: ERROR: $1" 1>&2
}

die()
{
  err "$1"
  exit ${2:-1}
}

## ======================================================================

root=""
cmd_usage="Usage: $0 TEMPLATEDIR"

if [ $# -ne 1 ]; then
  echo "$cmd_usage"
  exit 0
fi

tmpl_dir="$1"; shift
datetime="$(date +%Y%m%d%H%M%S)"

## ----------------------------------------------------------------------

echo "Winbind auto-unconfig script for Solaris 10 client"

t "Preparing ..."
echo "datetime: $datetime"
echo "template directory: $tmpl_dir"

file_old_suffix=".$datetime.winbind-unconf.old"

tmpl_dir="$tmpl_dir/unconf"

nsswitch_conf_src="$root/etc/nsswitch.nis"
nsswitch_conf_dst="$root/etc/nsswitch.conf"
pam_conf_dst="$root/etc/pam.conf"
defaultdomain_src="$tmpl_dir/defaultdomain"
defaultdomain_dst="$root/etc/defaultdomain"

if type nawk >/dev/null 2>&1; then
  awk_cmd="nawk"
elif type awk >/dev/null 2>&1; then
  awk_cmd="awk"
else
  die "awk command not found" 1>&2
fi
echo "awk command: $awk_cmd"

## Check environment
## ======================================================================

## Backup current files
## ======================================================================

t "Backuping current config files ..."

for name in nsswitch_conf pam_conf defaultdomain; do
  eval 'file="$'"$name"'_dst"'
  file_old="$file$file_old_suffix"
  eval "$name"'_old="$file_old"'
  echo -n "config file: $file"
  [ -f "$file" ] || { echo " not found (skipped)"; continue; }
  [ -f "$file_old" ] && die "backup file already exists: $file_old"
  echo " -> $file_old"
  cp -p "$file" "$file_old"
done

## Apply configs for NIS
## ======================================================================

t "Applying configs for NIS ..."

echo "config file: $defaultdomain_dst"
cp "$defaultdomain_src" "$defaultdomain_dst"

## Apply configs for NSS/PAM
## ======================================================================

t "Applying configs for NSS/PAM ..."

echo "config file: $nsswitch_conf_dst"
sed 's/ \[NOTFOUND=return\] / /' \
  <$nsswitch_conf_src \
  >$nsswitch_conf_dst

echo "config file: $pam_conf_dst"
awk '
    $0 ~ /^#/ {
      ## Comment
      print
      next
    }
    $4 ~ /^pam_winbind\.so/ {
      ## Remove pam_winbind config
      next
    }
    {
      print
    }
  ' \
  <"$pam_conf_old" \
  >"$pam_conf_dst"

## Adjust services
## ======================================================================

## Start NIS client
## ----------------------------------------------------------------------

t "Activating NIS client ..."

svcadm enable network/nis/client
svcadm enable name-service-cache

## Stop Winbind service
## ----------------------------------------------------------------------

t "Deactivating Winbind service ..."

/etc/init.d/winbind stop
/etc/init.d/winbind off

## ======================================================================

echo
echo "Done."

echo
echo "Please reboot the system to enable NIS client completely!"

