#!/bin/ksh
##
## chkconfig(8) clone for Solaris , AIX to emulate Red Hat Linux
## Copyright (c) 2008-2009 SATOH Fumiyasu @ OSS Technology, Inc.
##               <http://www.osstech.co.jp>
##
## License: GNU General Public License version 2 or later
## Date: 2009-03-28, since 2008-06-14
##

set -u

PATH="/usr/sbin:/usr/bin:/sbin:/bin"
export PATH

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

pdie()
{
  perr "$*"
  exit 1
}

rc_dir="${CHKCONFIG_RC_DIR:-/etc}"
init_dir="${CHKCONFIG_INIT_DIR:-/etc/init.d}"
option=""
op=""

cmd_usage="Usage: $0 SERVICE COMMAND"

case `uname` in
SunOS)
  os_id="solaris"
  start_ls="23"
  stop_ls="S01"
  ;;
AIX)
  os_id="aix"
  start_ls="23"
  stop_ls="6"
  ;;
Linux)
  if [ -f /etc/debian_version ]; then
    os_id="debian"
    start_ls="2345"
    stop_ls="016"
  fi
  ;;
*)
  ;;
esac

case "${1-:}" in
--list|--level)
  pdie "Not implemented"
  ;;
--add)
  option="add"; shift
  ;;
--del)
  option="delete"; shift
  ;;
-*)
  pdie "Invalid option: $1"
  exit 1
  ;;
esac

if [ $# -lt 1 ] || [ $# -gt 2 ]; then
  echo "$cmd_usage"
  exit 1
fi

sv="$1"; shift
op="${1:-}"

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

sv_init="$init_dir/$sv"
if [ ! -x "$sv_init" ]; then
  pdie "Unrecognized service: $sv"
fi

init_info_re='^# chkconfig.'"$os_id"': \(['"$start_ls"']*\) \([0-9][0-9][0-9]*\) \([0-9][0-9]\)$'
init_info=$(sed -n "s/$init_info_re/start_ls=\\1;start_n=\\2;stop_n=\\3/p" "$sv_init")
if [ -z "$init_info" ]; then
  pdie "Invalid chkconfig information in the init script: $sv_init"
fi

eval "$init_info" || exit 1

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

if [ -n "$option" ]; then
  rm -f "$rc_dir"/rc?.d/[SK][0-9][0-9]*"$sv" || exit 1

  case "$option" in
  add)
    op="on"
    for rc_l_dir in "$rc_dir"/rc[$stop_ls].d; do
      rm -f "$rc_l_dir"/[SK][0-9][0-9]"$sv" || exit 1
      ln -s "$sv_init" "$rc_l_dir/K$stop_n$sv" || exit 1
    done
    ;;
  delete)
    ## Nothing to do
    exit 0
    ;;
  esac
fi

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

rm -f "$rc_dir"/rc[$start_ls].d/[SK][0-9][0-9]*"$sv" || exit 1

case "$op" in
on)
  for rc_l_dir in "$rc_dir"/rc[$start_ls].d; do
    rm -f "$rc_l_dir"/[SK][0-9][0-9]"$sv" || exit 1
    ln -s "$sv_init" "$rc_l_dir/S$start_n$sv" || exit 1
  done
  ;;
off)
  ## Nothing to do
  ;;
*)
  pdie "Unrecognized command: $op"
  ;;
esac

exit 0

