Subversion Repositories configs

Rev

Rev 4 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/bin/sh
#
# ypbind:       Starts the ypbind daemon
#
# Version:      @(#) /etc/init.d/ypbind.init 1.3
#
# chkconfig: - 24 76
# 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
#
# See https://fedoraproject.org/wiki/Packaging:SysVInitScript for 
# the guidelines document.

OTHER_YPBIND_OPTS=""

# Source function library.
[ -f /etc/rc.d/init.d/functions ] || exit 0
. /etc/rc.d/init.d/functions

# getting the YP domain name
[ -e /etc/sysconfig/network ] && . /etc/sysconfig/network

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

# NISTIMEOUT should be a multiple of 15 since
# ypwhich has a hardcoded 15sec timeout
[ -z "$NISTIMEOUT" ] && NISTIMEOUT=45

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

exec="/usr/sbin/ypbind"
prog="ypbind"
lockfile=/var/lock/subsys/$prog

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() {
    [ $UID -eq 0 ] || exit 4
    [ -x $exec ] || exit 5
    DOMAINNAME=`domainname`
    if [ "$DOMAINNAME" = "(none)" -o "$DOMAINNAME" = "" ]; then
        echo -n $"Setting NIS domain: "
        if [ -n "$NISDOMAIN" ]; then
            action $"domain is '$NISDOMAIN' " domainname $NISDOMAIN
        else # See if the domain is set in config file
            NISDOMAIN=`grep "domain" /etc/yp.conf | grep -v ^# | \
                awk '{print $2}' | head -1`
            if [ -n "$NISDOMAIN" ]; then
                action $"domain is '$NISDOMAIN' " \
                    domainname $NISDOMAIN
            else
                action $"domain not found" /bin/false
                logger -t ypbind $"domain not found"
                return 1
            fi
        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

    echo -n $"Starting NIS service: "
    selinux_on
    daemon $exec $OTHER_YPBIND_OPTS
    retval=$?
    echo
    if [ $retval -ne 0 ]; then
        #selinux_off
        logger -t ypbind "failed to start!"
        return $retval
    fi
    retval=-1
    echo -n $"Binding NIS service: "
    # 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.
    firsttime=1
    SECONDS=0
    while [ $SECONDS -lt $NISTIMEOUT ] || [ $firsttime -eq 1 ] ; do
        firsttime=0
        if /usr/sbin/rpcinfo -p | LC_ALL=C fgrep -q ypbind
        then
            /usr/bin/ypwhich > /dev/null 2>&1
            retval=$?
            if [ $retval -eq 0 ]; then
                break;
            fi
        fi
        sleep 2
        echo -n "."
    done
    if [ $retval -eq 0 ]; then
        logger -t ypbind \
            "NIS domain: `domainname`, NIS server: `ypwhich 2> /dev/null`"
        touch $lockfile
        success
    elif [ $retval -eq -1 ]; then
        logger -t ypbind \
            "NIS service failed to register to rpcbind."
        failure
        #selinux_off
        retval=90
    else
        logger -t ypbind \
            "NIS server for domain `domainname` is not responding."
        failure
        #selinux_off
        retval=100
    fi
    echo
    return $retval
}

stop() {
    [ $UID -eq 0 ] || exit 4
    [ -x $exec ] || exit 5
    echo -n $"Shutting down NIS service: "
    killproc $prog
    retval=$?
    echo
    if [ $retval -eq 0 ]; then
        rm -f $lockfile
        # 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
    #selinux_off
    return $retval
}

restart() {
    stop
    start
}

reload() {
    echo -n $"Reloading NIS service: "
    killproc $prog -HUP
    retval=$?
    echo
    return $retval
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

usage() {
    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
}

# See how we were called.
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        retval=$?
        if [ $retval -eq 100 ]; then stop; exit 1; fi
        exit $retval
        ;;
    stop)
        rh_status_q || exit 0
        $1      
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    usage)
        $1
        ;;
    *)
        usage
        exit 2
esac
exit $?