#!/bin/bash
# $Id: daemons.sh,v 1.5 2007/06/03 19:49:27 juergen Exp $
# sed command

SED="sed --in-place"
CONFIG="/etc/rc.conf"

#defaults, only used in add command

before=''			# insert before 

function daemons {
    # param 1: command
    # param 2: member
    local member=${2}
    local command=${1}

    case "${command}" in
	disable)
	    sed_command="s/DAEMONS=(\([^)]*\)${member}\([^)]*\))/DAEMONS=(\1!${member}\2)/" ;;
	enable)
	    sed_command="s/DAEMONS=(\([^)]*\)!${member}\([^)]*\))/DAEMONS=(\1${member}\2)/" ;;
	add)		
	    if [[ ! -e /etc/rc.d/${member} ]]; then
		echo /etc/rc.d/${member} does not exist! >&2
		return 1
	    else
		# allign
		if [[ -z "${before}" ]]; then
		    member=" ${member}"
		else
		    member="${member} "
		fi
		sed_command="s/DAEMONS=(\([^)]*\)\(${before}[^)]*\))/DAEMONS=(\1${member}\2)/"
	    fi
	    ;;
	remove)
	    sed_command="s/DAEMONS=(\([^)]*\)\([[:space:]]${member}\|${member}[[:space:]]\)\([^)]*\))/DAEMONS=(\1\3)/" ;;
    esac
    ${SED} -e "${sed_command}" ${CONFIG}
}

function usage {
    echo "Usage: $0 [-b daemon] add|remove|enable|disable daemon [daemon]..."
}

# parse options
while getopts "b:a:" optname; do
        case "${optname}" in
	    "b")
		before="$OPTARG" ;;
	    *)
		usage 2>&1; exit 1 ;; 
	esac
done

command=${!OPTIND}
daemons=(${@:${OPTIND}+1})

# usage check
if [[ ${#daemons[@]} -lt 1 ]]; then
    usage >&2
    exit 1
fi

# check for valid command
case "${command}" in
    enable|disable|add|remove) ;;
    *) usage 2>&1 ; exit 1 ;;
esac	

for daemon in ${daemons[@]}; do
    daemons ${command} ${daemon}
done
