#!/bin/bash
#
# yum-cron      Enable or disable scheduled yum system updates.
#
# chkconfig:	- 50 01
#
# description:  This controls whether yum-cron runs. If this service is \
#               off, the yum-cron scripts in /etc/cron.daily exit \
#               immediately; otherwise, they download and/or apply package \
#               updates as configured in /etc/sysconfig/yum-cron.
# processname:  yum-cron
# config: /etc/yum/yum-daily.yum
#

# source function library
. /etc/rc.d/init.d/functions

test -f /etc/sysconfig/yum-cron && . /etc/sysconfig/yum-cron

lockfile=/var/lock/subsys/yum-cron

# This is generated by /usr/sbin/yum-cron and will exist when that script
# is running and not otherwise.
pidfile=/var/lock/yum-cron.pid

RETVAL=0

start() {
	echo -n $"Enabling scheduled yum updates: "
	# The cron script exits silently if this file doesn't exist.
	touch "$lockfile" && success || failure
	RETVAL=$?
	echo
}

stop() {
        # Disabling this is just removing the so-called lock file.  But we
        # also have logic to delay shutdown if a transaction is in-progress.
        # All that affects is the exit of _this_ script, which may be
        # waited on by other things in the shutdown process.
	echo -n $"Disabling scheduled yum updates: "
	if [ "$SERVICE_WAITS" = "yes" ]; then
	  # if SERVICE_WAITS is yes, we check for an active pid
	  # file and recheck in 5 second increments up to 
	  # SERVICE_WAIT_TIME before continuing.
          if (set -o noclobber; ! echo "$$" > $pidfile ) 2>/dev/null; then
            # yum-cron has the lock. Read the pid, and wait and then loop
            # until it's done.
            activepid="$(< $pidfile)" 2>/dev/null
            if [ $? != 0 ]; then 
              echo; echo -n $"Stale yum-cron lock ignored. "
            else
              echo; echo -n $"Waiting for in-progress yum transaction"
              end=$( expr $( date +%s ) + ${SERVICE_WAIT_TIME:-300} )
              while checkpid $activepid 2>/dev/null ; do
                echo -n "."
                if [ $( date +%s ) -gt $end ]; then
                  echo -n " Timed out. "
                  break
                fi
                sleep 5
              done
            fi
          else
            # we got the lock. we don't really want it; remove and move on.
            rm -f "$pidfile"
          fi
	fi
	rm -f "$lockfile" && success || failure
	RETVAL=$?
	echo
}

restart() {
	stop
	start
}

case "$1" in
  start)
	start
	;;
  stop) 
	stop
	;;
  restart|force-reload)
	restart
	;;
  reload)
	;;
  condrestart)
	[ -f "$lockfile" ] && restart
	;;
  status)
	if [ -f $lockfile ]; then
		echo $"Scheduled yum updates are enabled."
		RETVAL=0
	else
		echo $"Scheduled yum updates are disabled."
		RETVAL=3
	fi
	;;
  *)
	echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
	exit 1
esac

exit $RETVAL
