view · edit · print · history

SambaX samba.sh

This file was originally located at http://culater.net/software/SambaX/print.php?file=samba.sh, but the website is no longer available. The author made this files available for download. I found a Google cache.

 #!/bin/sh

 # $Id: samba.sh,v 1.1 2003/12/27 23:03:10 msolomon Exp $
 #
 # @author mike-web - at - culater - dot - net
 # @description A basic control script for the Samba daemons smbd and nmbd. 


 logger -p daemon.alert "`basename ${0}` $*"

 SSCF_PATH="/Library/Samba Sharing"
 SSCF_EXT=".sscf"
 SMB_CONF_FILE="/etc/smb.conf"

 # path where the daemon
 SAMBA_DAEMON_PATH="/usr/sbin"
 SAMBA_PATH="/usr/bin"

 # notification keys
 NOTIFY_SETUP_CHANGE="Setup:/" # indicates that the location has changed
 NOTIFY_IP_CHANGE="State:/Network/Global/IPv4" # indicates that the IP address has changed

 function check_root()
 {
  if [ `id -u` -ne 0 ]; then
 	 echo "Permission denied, root permissions required"
 	 exit 2
  fi
 }

 if [ "${1}" == "start" ]; then
 	check_root
 	echo "Starting Samba..."
 	${SAMBA_DAEMON_PATH}/smbd -D
 	${SAMBA_DAEMON_PATH}/nmbd -D
 elif [ "${1}" == "stop" ];  then
 	check_root
 	echo "Stopping Samba..."
 	# smbd and nmbd gracefully exit on SIGTERM
 	ps -axco pid,command | awk '/smbd/ { print $1}' | xargs -n 1 kill
 	ps -axco pid,command | awk '/nmbd/ { print $1}' | xargs -n 1 kill
 elif [ "${1}" == "lsconfig" ];  then
 	echo "Listing Samba configurations:"
 	ls -1 "${SSCF_PATH}" | awk -F. '{print $1}'
 elif [ "${1}" = "config" ]; then
 	if [ ${#} -ne 2 ]; then
 		"${0}" lsconfig
 	else
 		echo "Switching Samba config to ${2}"
 		SSCF_FILE="${SSCF_PATH}/${2}${SSCF_EXT}"
 		if [ -f "${SSCF_FILE}" ]; then
 			ln -sf "${SSCF_FILE}" "${SMB_CONF_FILE}"
 			# don't auto restart
 			# "${0}" restart
 		else
 			echo "Error: ${SSCF_FILE} not found"
 			exit 1
 		fi
 	fi
 elif [ "${1}" == "status" ];  then
 	echo "Samba Status"
 	ps -axco command | grep -i "mbd"
 	if [ $? -eq 0 ]; then
 		${SAMBA_PATH}/smbstatus
 	else
 		echo "Samba is not running"
 	fi
 elif [ "${1}" == "restart" ];  then
 	check_root
 	echo "Restarting Samba..."
 	"${0}" stop > /dev/null
 	"${0}" start > /dev/null
 elif [ "${1}" == ${NOTIFY_SETUP_CHANGE} ];  then
 	# this was a setup change, find a matching config
 	# wait for IP change to actually restart samba, since frequently the
 	# adapter isn't in a "ready" state when this key is notified
 	BASENAME=`basename "${0}"`
 	TEMP_CONFIG_NAME="/tmp/${BASENAME}.$$"
 	scutil <<- scutil_end | \
          awk 'BEGIN { FS = " : "} /UserDefinedName/ { print $2 } END {  }' \
          > ${TEMP_CONFIG_NAME} 
 	open
 	get Setup:/
 	d.show
 	close
 scutil_end
 CONFIG_NAME=`cat < ${TEMP_CONFIG_NAME}`
 rm ${TEMP_CONFIG_NAME}
 "${0}" config "${CONFIG_NAME}"
 # if there is another argument, it is likely that it is another key
 # since they seem to get aggregated sometimes - in that case, execute
 # the script again with that as its arg.
 if [ "${2}" != "" ]; then
 	"${0}" "${2}" 
 fi
 elif [ "${1}" == ${NOTIFY_IP_CHANGE} ]; then
 	"${0}" restart
 else
 	cat <<- echo_end
            Usage:
 		 `basename "${0}"` [start | stop | status | restart | lsconfig | config <name>]
 		 config files are located in "${SSCF_PATH}" and the <name> should not
 		 include the .sscf extension
 	echo_end
 fi 

 exit 0

Nixes changes · ALL changes
Page last modified on April 09, 2005, at 01:46 PM