#!/bin/sh

add_failed() {
  if [ -n "$failed" ]; then
    failed="$failed $1"
  else
    failed="$1"
  fi
}

check_service() {
  service=$1
  state=$2
  if [ -z "$state" ]; then
     state="on"
  fi
  if [ -n "`/sbin/chkconfig --list $service | cut -f 3`" ]; then
    check_cmd="/sbin/chkconfig --level 3 $service"
  else
    check_cmd='[[ `/sbin/chkconfig --list $service | cut -f 2` = "on" ]]'
  fi
  echo "Ensuring service $service is $state"
  eval $check_cmd
  status=$?
  if [ "$state" = "on" ]; then
    req_state=0
  else
    req_state=1
  fi
  if [ $status -eq $req_state ]; then
    return 0
  fi
  /sbin/chkconfig $service $state
  eval $check_cmd
  if [ $? -eq $req_state ]; then
    return 0
  else
    add_failed $service
    return 1
  fi
}

check_service portmap on
check_service klogin on
check_service kshell on
check_service ftp on 
check_service telnet on
check_service eklogin on
# check_service lpd off
check_service rhnsd off
check_service ntpd on

if ! rpm -q kernel-pcmcia-cs >/dev/null 2>&1; then
  echo "Latop services not installed: deactivating apmd"
  /sbin/chkconfig --del apmd >/dev/null 2>&1
fi

/etc/rc.d/init.d/xinetd status | grep running >/dev/null 2>&1 && \
    /etc/rc.d/init.d/xinetd reload  

if [ -n "$failed" ]; then
  echo "The following services could not be set as desired:" 1>&2
  for service in $failed; do
    echo "  $service" 1>&2
  done
  exit 1
else
  exit 0
fi
