#!/bin/bash
#
# ypbind:       Starts the ypbind Daemon
#
# Version:      @(#) /etc/init.d/ypbind.init 1.3
#
# chkconfig: - 27 73
# description: This is a daemon which runs on NIS/YP clients and binds them \
#              to a NIS domain. It must be running for systems based on glibc \
#              to work as NIS clients, but it should not be enabled on systems \
#              which are not using NIS.
# processname: ypbind
# config: /etc/yp.conf

OTHER_YPBIND_OPTS=""

# Source function library.
. /etc/init.d/functions

. /etc/sysconfig/network

# Check for and source configuration file otherwise set defaults
[ -f /etc/sysconfig/ypbind ] && . /etc/sysconfig/ypbind

[ -z "$NISTIMEOUT" ] && NISTIMEOUT=20

# Check that networking is configured.
[ ${NETWORKING} = "no" ] && exit 0

selinux_on() {
        [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled || return
    echo $"Turning on allow_ypbind SELinux boolean"
        setsebool allow_ypbind=1
}

selinux_off() {
        [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled || return
    allow_ypbind=0
    .  /etc/selinux/config
    if [ -e /etc/selinux/${SELINUXTYPE}/modules/active/booleans.local ]; then
        . /etc/selinux/${SELINUXTYPE}/modules/active/booleans.local
    fi
    if [ $allow_ypbind == 0 ]; then
        echo $"Turning off allow_ypbind SELinux boolean"
        setsebool allow_ypbind=$allow_ypbind
    fi
}

start() {
    DOMAINNAME=`domainname`
    if [ "$DOMAINNAME" = "(none)" -o "$DOMAINNAME" = "" ]; then
       if [ -n "$NISDOMAIN" ]; then
        action $"Setting NIS domain name $NISDOMAIN: " domainname $NISDOMAIN
       else
        action $"Error: NIS domain name is not set." false
            exit 1
       fi
    fi
    #/etc/rpc check
    grep ypbind /etc/rpc > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        action $"Error: Missing ypbind entry in /etc/rpc." false
        exit 1
    fi

    selinux_on
    echo -n $"Binding to the NIS domain: "
    daemon ypbind $OTHER_YPBIND_OPTS
    RETVAL=$?
    echo
    if [ $RETVAL -ne 0 ]; then
        selinux_off
        return $RETVAL
    fi
    # the following fixes problems with the init scripts continuing
    # even when we are really not bound yet to a server, and then things
    # that need NIS fail.
    echo -n $"Listening for an NIS domain server."
    for (( times = 1; times < $NISTIMEOUT; times++ )); do
        /usr/sbin/rpcinfo -p | LC_ALL=C fgrep -q ypbind && ypwhich > /dev/null 2>&1
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
        break;
        fi
        sleep 1
        echo -n "."
    done
    if [ $RETVAL -eq 0 ]; then
        logger -t ypbind "bound to NIS server `ypwhich 2> /dev/null`"
        touch /var/lock/subsys/ypbind
    else
        killproc ypbind
        # if  we used brute force (like kill -9) we don't want those around
        if [ x$(domainname) != x ] ; then
        rm -f /var/yp/binding/$(domainname)*
        fi
        failure "attempting to contact yp server"
        selinux_off
    fi
    echo
    return $RETVAL
}

stop() {
    echo -n $"Shutting down NIS services: "
    killproc ypbind
    RETVAL=$?
    if [ $RETVAL -eq 0 ] ; then
      rm -f /var/lock/subsys/ypbind
      # if  we used brute force (like kill -9) we don't want those around
      if [ x$(domainname) != x ] ; then
        rm -f /var/yp/binding/$(domainname)*
      fi
    fi
    echo
           #selinux_off
    return $RETVAL
}

restart() {
    stop
    start
}

RETVAL=0

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status ypbind
    ;;
  restart|reload)
    restart
    ;;
  condrestart)
        [ -f /var/lock/subsys/ypbind ] && restart || :
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|condrestart}"
    exit 1
esac

exit $?