#!/bin/sh
#
# chkconfig:	345 91 35
# description:	Starts and stops the Samba smbd and nmbd daemons \
#		used to provide SMB network services.
#
# config:	/etc/samba/smb.conf
# config:	/etc/samba/lmhosts
# processname:	nmbd
# processname:	smbd

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

# Source networking configuration.
. /etc/sysconfig/network

# Set default config
CFGFILE="/etc/samba/smb.conf"
smbd_pidfile="/var/run/samba/smbd.pid"
nmbd_pidfile="/var/run/samba/nmbd.pid"
lockname=smb

# Demon specified configuration.
. /etc/sysconfig/samba

# Check that networking is up.
if is_yes "${NETWORKING}"; then
	if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
		msg_network_down "Samba SMB/CIFS Server"
		exit 1
	fi
else
	exit 0
fi

export TMPDIR=/tmp
unset TMP || :

start() {
	SERVER_ROLE=$(samba-tool testparm --parameter-name="server role" 2>/dev/null | tail -n1)
	if [ "$SERVER_ROLE" = "active directory domain controller" ]; then
		exit 0
	fi

	# Check if the service is already running?
	if [ -f /var/lock/subsys/$lockname ]; then
		msg_already_running "Samba SMB/CIFS Server"
		return
	fi

	msg_starting "Samba SMB/CIFS Server"
	daemon /usr/sbin/smbd -D -s $CFGFILE
	RETVAL=$?
	NMBD_DISABLED=`testparm -s --parameter-name='disable netbios' 2>/dev/null`
	if [ "$NMBD_DISABLED" != Yes ]; then
		msg_starting "Samba NetBIOS Name Server"
		daemon /usr/sbin/nmbd -D $CFGFILE
		[ $RETVAL -eq 0 ] && RETVAL=$?
	fi
	if [ $RETVAL -eq 0 ]; then
		touch /var/lock/subsys/$lockname
	fi
}

stop() {
	# Stop daemons.
	if [ ! -f /var/lock/subsys/$lockname ]; then
		msg_not_running "Samba SMB/CIFS Server"
		return
	fi

	msg_stopping "Samba SMB/CIFS Server"
	killproc --pidfile $smbd_pidfile smbd

	NMBD_DISABLED=`testparm -s --parameter-name='disable netbios' 2>/dev/null`
	if [ "$NMBD_DISABLED" != Yes ]; then
		msg_stopping "Samba NetBIOS Name Server"
		killproc --pidfile $nmbd_pidfile nmbd
	fi
	rm -f /var/lock/subsys/$lockname >/dev/null 2>&1
}

reload() {
	if [ ! -f /var/lock/subsys/$lockname ]; then
		msg_not_running "Samba SMB/CIFS Server"
		RETVAL=7
		return
	fi

	msg_reloading "Samba SMB/CIFS Server"
	killproc --pidfile $smbd_pidfile smbd -HUP
	RETVAL=$?
}

condrestart() {
	if [ ! -f /var/lock/subsys/$lockname ]; then
		msg_not_running "Samba SMB/CIFS Server"
		RETVAL=$1
		return
	fi

	stop
	start
}

rc_status() {
	status smbd
	RETVAL=$?
	NMBD_DISABLED=`testparm -s --parameter-name='disable netbios' 2>/dev/null`
	if [ "$NMBD_DISABLED" != Yes ]; then
		status nmbd
		RET=$?
		[ $RETVAL -eq 0 ] && RETVAL=$RET
	fi
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart)
	stop
	start
	;;
  try-restart)
	condrestart 0
	;;
  reload|force-reload)
	reload
	;;
  status)
	rc_status
	;;
  *)
	msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|status}"
	exit 3
esac

exit $RETVAL
