summaryrefslogtreecommitdiff
path: root/net/isc-dhcp31-server/files/isc-dhcpd.in
diff options
context:
space:
mode:
authorSergey Matveychuk <sem@FreeBSD.org>2006-08-25 12:02:58 +0000
committerSergey Matveychuk <sem@FreeBSD.org>2006-08-25 12:02:58 +0000
commit20b17ff3de68be1377183b71867b97cabf43f566 (patch)
tree1b0278e8aa695682cd7a38eb3d74fded8a1d85fa /net/isc-dhcp31-server/files/isc-dhcpd.in
parent- Respect CC (diff)
- Update to 3.0.5rc1
- New USE_RC_SUBR order - Stop daemons on ports deinstall. (Add note in UPDATING about this) PR: ports/102489 Submitted by: maintainer
Notes
Notes: svn path=/head/; revision=171378
Diffstat (limited to 'net/isc-dhcp31-server/files/isc-dhcpd.in')
-rw-r--r--net/isc-dhcp31-server/files/isc-dhcpd.in722
1 files changed, 722 insertions, 0 deletions
diff --git a/net/isc-dhcp31-server/files/isc-dhcpd.in b/net/isc-dhcp31-server/files/isc-dhcpd.in
new file mode 100644
index 000000000000..382cf789402c
--- /dev/null
+++ b/net/isc-dhcp31-server/files/isc-dhcpd.in
@@ -0,0 +1,722 @@
+#! /bin/sh
+#
+# $FreeBSD$
+#
+# PROVIDE: dhcpd
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following line to /etc/rc.conf to enable dhcpd:
+#
+# dhcpd_enable="YES"
+#
+
+. %%RC_SUBR%%
+
+name=dhcpd
+paranoia=%%PARANOIA%% # compiled in paranoia?
+jail=%%JAIL%% # compiled in jail?
+
+load_rc_config ${name}
+
+# override these variables in /etc/rc.conf
+dhcpd_enable=${dhcpd_enable:-"NO"}
+dhcpd_flags=${dhcpd_flags:-} # -q -early_chroot # command option(s)
+dhcpd_conf=${dhcpd_conf:-%%PREFIX%%/etc/${name}.conf} # configuration file
+dhcpd_ifaces=${dhcpd_ifaces:-} # ethernet interface(s)
+dhcpd_withumask=${dhcpd_withumask:-022} # file creation mask
+
+dhcpd_chuser_enable=${dhcpd_chuser_enable:-"%%PARANOIA%%"} # runs w/o privileges?
+dhcpd_withuser=${dhcpd_withuser:-${name}} # user name to run as
+dhcpd_withgroup=${dhcpd_withgroup:-${name}} # group name to run as
+
+dhcpd_chroot_enable=${dhcpd_chroot_enable:-"NO"} # runs chrooted?
+dhcpd_devfs_enable=${dhcpd_devfs_enable:-"YES"} # devfs if available?
+dhcpd_makedev_enable=${dhcpd_makedev_enable:-"NO"} # MAKEDEV instead of devfs?
+dhcpd_rootdir=${dhcpd_rootdir:-/var/db/${name}} # directory to run in
+dhcpd_includedir=${dhcpd_includedir:-} # directory for included config files
+
+# untested
+dhcpd_jail_enable=${dhcpd_jail_enable:-"NO"} # runs imprisoned?
+dhcpd_hostname=${dhcpd_hostname:-} # jail hostname
+dhcpd_ipaddress=${dhcpd_ipaddress:-} # jail ip address
+
+safe_run () # rc command [args...]
+{
+ local _rc
+
+ _rc=$1
+ shift
+
+ if [ "${_rc}" -eq 0 ]; then
+ debug safe_run: "$@"
+ "$@" || _rc=1
+ else
+ warn safe_run: "$@"
+ fi
+ return ${_rc}
+}
+
+precious () # entry...
+{
+ local _entry _rc
+
+ _rc=0
+ for _entry; do
+ # do nothing if /dev, /var/run or /var/db
+ echo ${_entry} | egrep -q '^//*(dev|var//*(run|db))?/*$' || _rc=1
+ done
+ debug precious: "$@" rc=${_rc}
+ return ${_rc}
+}
+
+lsmod () # user group file...
+{
+ local _entry _user _group _rc
+
+ _user=$1 _group=$2
+ shift 2
+
+ _rc=0
+ for _entry; do
+ ls -ld ${_entry} 2> /dev/null |
+ awk -v u=${_user} -v g=${_group} '{
+ exit ((u && $3 != u) || (g && $4 != g))
+ }' || _rc=1
+ done
+ debug lsmod: "$@" rc=${_rc}
+ return ${_rc}
+}
+
+safe_chmog () # entry...
+{
+ local _entry _user _group _usergroup _rc
+
+ _user=${dhcpd_withuser}
+ _group=${dhcpd_withgroup}
+
+ _rc=0
+ if [ -n "${_user}" -o -n "${_group}" ]; then
+ _usergroup=${_user}${_group:+:${_group}}
+ for _entry; do
+ if [ -d ${_entry} ] && mounted ${_entry}; then
+ continue
+ fi
+ if [ -e ${_entry} ] &&
+ ! precious ${_entry} &&
+ ! lsmod ${_user} ${_group} ${_entry} &&
+ ! safe_run ${_rc} chown ${_usergroup} ${_entry}; then
+ warn "unable to change permissions of ${_entry}"
+ _rc=1
+ fi
+ done
+ fi
+ return ${_rc}
+}
+
+safe_mkdir () # dir...
+{
+ local _dir _rc
+
+ _rc=0
+ for _dir; do
+ if [ ! -d ${_dir} ] &&
+ ! precious ${_dir} &&
+ ! safe_run ${_rc} mkdir -p ${_dir}; then
+ err 1 "unable to create directory ${_dir}"
+ _rc=1
+ fi
+ done
+ safe_run ${_rc} safe_chmog "$@" || _rc=1
+ return ${_rc}
+}
+
+safe_rmdir () # dir...
+{
+ local _dir _rc
+
+ _rc=0
+ for _dir; do
+ if [ -d ${_dir} ] &&
+ ! precious ${_dir} &&
+ ! mounted ${_dir}; then
+ if safe_run ${_rc} rmdir ${_dir}; then
+ safe_run ${_rc} safe_rmdir ${_dir%/*} || _rc=1
+ else
+ warn "unable to remove directory ${_dir}"
+ _rc=1
+ fi
+ fi
+ done
+ return ${_rc}
+}
+
+safe_touch () # file...
+{
+ local _file _rc
+
+ _rc=0
+ for _file; do
+ if [ ! -e ${_file} ] &&
+ ! safe_run ${_rc} touch ${_file}; then
+ err 1 "unable to create file ${_file}"
+ _rc=1
+ fi
+ done
+ safe_run ${_rc} safe_chmog "$@" || _rc=1
+ return ${_rc}
+}
+
+safe_remove () # entry...
+{
+ local _entry _rc
+
+ _rc=0
+ for _entry; do
+ if [ -f ${_entry} ]; then
+ if ! safe_run ${_rc} rm -f ${_entry}; then
+ warn "unable to remove file ${_entry}"
+ _rc=1
+ fi
+ elif [ -d ${_entry} ] &&
+ ! precious ${_entry} &&
+ ! mounted ${_entry}; then
+ if ! safe_run ${_rc} rm -rf ${_entry}; then
+ warn "unable to remove directory ${_entry}"
+ _rc=1
+ fi
+ fi
+ done
+ return ${_rc}
+}
+
+safe_copy () # src dst
+{
+ local _src _dst _rc
+
+ _src=$1 _dst=$2
+
+ _rc=0
+ if [ -f ${_src} ]; then
+ if ! safe_run ${_rc} safe_remove ${_dst} ||
+ ! safe_run ${_rc} cp -p ${_src} ${_dst}; then
+ err 1 "unable to copy file ${_src} to ${_dst}"
+ _rc=1
+ fi
+ safe_run ${_rc} safe_chmog ${_dst} || _rc=1
+ elif [ -d ${_src} ] &&
+ ! precious ${_dst} &&
+ ! mounted ${_dst}; then
+ if ! safe_run ${_rc} pax -rw -pe -ts "|^${_src}||" \
+ ${_src} ${_dst}; then
+ err 1 "unable to copy directory ${_src} to ${_dst}"
+ _rc=1
+ fi
+ else
+ err 1 "unable to copy ${_src} to ${_dst}" \
+ "-- not a file or a directory"
+ _rc=1
+ fi
+ return ${_rc}
+}
+
+mounted () # dir...
+{
+ local _rc
+
+ _rc=1
+ if checkyesno dhcpd_devfs_enable ||
+ checkyesno dhcpd_jail_enable; then
+ mount -t devfs | awk '
+ BEGIN { n = ARGC; ARGC = 2 }
+ { for (i = 2; i != n; i++) if ($3 == ARGV[i]) exit 1 }
+ ' - "$@" || _rc=0
+ fi
+ debug mounted: "$@" rc=${_rc}
+ return ${_rc}
+}
+
+safe_mount () # dir
+{
+ local _dir _rc
+
+ _dir=$1
+
+ _rc=0
+ if checkyesno dhcpd_devfs_enable &&
+ ! mounted ${_dir} &&
+ ! safe_run ${_rc} mount -t devfs devfs ${_dir}; then
+ err 1 "unable to mount ${_dir}"
+ _rc=1
+ fi
+ return ${_rc}
+}
+
+safe_umount () # dir
+{
+ local _dir _rc
+
+ _dir=$1
+
+ _rc=0
+ if checkyesno dhcpd_devfs_enable &&
+ mounted ${_dir} &&
+ ! safe_run ${_rc} umount ${_dir}; then
+ warn "unable to unmount ${_dir}"
+ _rc=1
+ fi
+ return ${_rc}
+}
+
+safe_useradd ()
+{
+ local _user _group _home _shell _gecos
+
+ _user=$1 _group=$2 _gecos=${3:-"& daemon"}
+ _home=${4:-/nonexistent} _shell=${5:-%%NOLOGIN%%}
+
+ if [ -n "${_group}" ]; then
+ if pw group show ${_group} 2>/dev/null; then
+ echo "You already have a group \"${_group}\"," \
+ "so I will use it."
+ elif pw groupadd ${_group} -h -; then
+ echo "Added group \"${_group}\"."
+ else
+ echo "Adding group \"${_group}\" failed..."
+ echo "Please create it, and try again."
+ exit 1
+ fi
+ fi
+ if [ -n "${_user}" ]; then
+ if pw user show ${_user} 2>/dev/null; then
+ echo "You already have a user \"${_user}\"," \
+ "so I will use it."
+ elif pw useradd ${_user} -g ${_group} -h - \
+ -d ${_home} -s ${_shell} -c "${_gecos}"; then
+ echo "Added user \"${_user}\"."
+ else
+ echo "Adding user \"${_user}\" failed..."
+ echo "Please create it, and try again."
+ exit 1
+ fi
+ fi
+}
+
+check_chuser ()
+{
+ if checkyesno paranoia; then
+ if checkyesno dhcpd_chuser_enable &&
+ [ -z "${dhcpd_withuser}" -a -z "${dhcpd_withgroup}" ]; then
+ err 1 "one of dhcpd_withuser and dhcpd_withgroup" \
+ "must be set if dhcpd_chuser_enable is enabled"
+ fi
+ else
+ if checkyesno dhcpd_chuser_enable; then
+ warn "dhcpd_chuser_enable disabled -- not compiled in"
+ dhcpd_chuser_enable=NO
+ fi
+ fi
+}
+
+check_jail ()
+{
+ if checkyesno paranoia && checkyesno jail; then
+ if checkyesno dhcpd_jail_enable &&
+ ! checkyesno dhcpd_chroot_enable; then
+ warn "dhcpd_chroot_enable implied by dhcpd_jail_enable"
+ dhcpd_chroot_enable=YES
+ fi
+ if checkyesno dhcpd_jail_enable &&
+ [ -n "${dhcpd_hostname}" -a -z "${dhcpd_ipaddress}" ] ||
+ [ -z "${dhcpd_hostname}" -a -n "${dhcpd_ipaddress}" ]; then
+ err 1 "both dhcpd_hostname and dhcpd_ipaddress" \
+ "must be set if dhcpd_jail_enable is enabled"
+ fi
+ else
+ if checkyesno dhcpd_jail_enable; then
+ warn "dhcpd_jail_enable disabled -- not compiled in"
+ dhcpd_jail_enable=NO
+ fi
+ fi
+}
+
+check_chroot ()
+{
+ if checkyesno paranoia; then
+ if checkyesno dhcpd_chroot_enable; then
+ if [ -z "${dhcpd_rootdir}" ]; then
+ err 1 "dhcpd_rootdir must be set" \
+ "if dhcpd_chroot_enable is enabled"
+ fi
+ if checkyesno dhcpd_devfs_enable &&
+ checkyesno dhcpd_makedev_enable; then
+ err 1 "dhcpd_devfs_enable and dhcpd_makedev_enable" \
+ "are mutually exclusive. enable only one!"
+ fi
+ if checkyesno dhcpd_devfs_enable &&
+ ! ( type mount_devfs ) > /dev/null 2>&1; then
+ warn "dhcpd_devfs_enable disabled" \
+ "-- not available"
+ dhcpd_devfs_enable=NO
+ fi
+ if checkyesno dhcpd_makedev_enable &&
+ ! [ -x ${__dhcpd_devdir}/MAKEDEV ]; then
+ warn "dhcpd_makedev_enable disabled" \
+ "-- not available"
+ dhcpd_makedev_enable=NO
+ fi
+ else
+ dhcpd_devfs_enable=NO
+ dhcpd_makedev_enable=NO
+ fi
+ else
+ if checkyesno dhcpd_chroot_enable; then
+ warn "dhcpd_chroot_enable disabled -- not compiled in"
+ dhcpd_chroot_enable=NO
+ fi
+ dhcpd_devfs_enable=NO
+ dhcpd_makedev_enable=NO
+ fi
+}
+
+rcvar_chuser ()
+{
+ if checkyesno paranoia && checkyesno dhcpd_chuser_enable; then
+ dhcpd_piddir=${__dhcpd_piddir}/${name}
+ dhcpd_leasesdir=${__dhcpd_leasesdir}/${name}
+ else
+ dhcpd_withuser= dhcpd_withgroup=
+ fi
+}
+
+rcvar_jail ()
+{
+ if ! checkyesno paranoia || ! checkyesno jail ||
+ ! checkyesno dhcpd_jail_enable; then
+ dhcpd_hostname= dhcpd_ipaddress=
+ fi
+}
+
+rcvar_chroot ()
+{
+ if ! checkyesno paranoia || ! checkyesno dhcpd_chroot_enable; then
+ dhcpd_rootdir=
+ elif checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
+ dhcpd_devdir=${__dhcpd_devdir}
+ dhcpd_etcdir=${__dhcpd_etcdir}
+ fi
+}
+
+rcvar_pidnleases ()
+{
+ if ! checkyesno dhcpd_chuser_enable; then
+ dhcpd_piddir=${__dhcpd_piddir}
+ dhcpd_leasesdir=${__dhcpd_leasesdir}
+ fi
+ dhcpd_pidfile=${dhcpd_piddir}/${name}.pid
+ dhcpd_leasesfile=${dhcpd_leasesdir}/${name}.leases
+ dhcpd_conffile=${dhcpd_conf} # for convenience only
+ dhcpd_confdir=$(dirname ${dhcpd_conffile})
+}
+
+rcvar_rooted ()
+{
+ _dhcpd_rootdir=${dhcpd_rootdir}
+ _dhcpd_devdir=${dhcpd_rootdir}${dhcpd_devdir}
+ _dhcpd_etcdir=${dhcpd_rootdir}${dhcpd_etcdir}
+ _dhcpd_confdir=${dhcpd_rootdir}${dhcpd_confdir}
+ _dhcpd_includedir=${dhcpd_rootdir}${dhcpd_includedir}
+ _dhcpd_piddir=${dhcpd_rootdir}${dhcpd_piddir}
+ _dhcpd_leasesdir=${dhcpd_rootdir}${dhcpd_leasesdir}
+ _dhcpd_conffile=${dhcpd_rootdir}${dhcpd_conffile}
+ _dhcpd_pidfile=${dhcpd_rootdir}${dhcpd_pidfile}
+ _dhcpd_leasesfile=${dhcpd_rootdir}${dhcpd_leasesfile}
+}
+
+setup_compat ()
+{
+ local dhcpd_rcconf
+
+ # suck in old configuration file and variables
+ #
+ dhcpd_rcconf=${dhcpd_confdir}/rc.isc-dhcpd.conf
+
+ if [ -f ${dhcpd_rcconf} ]; then
+ warn "${dhcpd_rcconf} is obsolete, use /etc/rc.conf and/or" \
+ "/etc/rc.conf.d/${name} instead."
+ . ${dhcpd_rcconf}
+
+ if [ -n "${dhcpd_options}" -a -z "${rc_flags}" ]; then
+ warn "dhcpd_options is obsolete," \
+ "use dhcpd_flags instead."
+ rc_flags=${dhcpd_options}
+ fi
+ fi
+}
+
+setup_umask ()
+{
+ if [ -n "${dhcpd_withumask}" ]; then
+ umask ${dhcpd_withumask}
+ fi
+}
+
+setup_chroot ()
+{
+ local _mdev _hconf _hosts _ltime _rconf
+
+ _mdev=MAKEDEV
+ _hconf=host.conf
+ _hosts=hosts
+ _ltime=localtime
+ _rconf=resolv.conf
+
+ if checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
+ if ! mounted ${_dhcpd_devdir}; then
+ safe_mkdir ${_dhcpd_devdir}/_
+ # XXX /_ hack! so, .../dev is root owned.
+ fi
+ safe_mkdir ${_dhcpd_rootdir} ${_dhcpd_etcdir}/_ ${_dhcpd_confdir}
+ # XXX /_ hack! so, .../etc is root owned.
+ if checkyesno dhcpd_devfs_enable; then
+ safe_mount ${_dhcpd_devdir}
+ elif checkyesno dhcpd_makedev_enable; then
+ safe_copy ${dhcpd_devdir}/$_mdev ${_dhcpd_devdir}/$_mdev
+ safe_run 0 sh -c "cd ${_dhcpd_devdir} && ./$_mdev jail bpf4"
+ else
+ safe_copy ${dhcpd_devdir} ${_dhcpd_devdir}
+ fi
+ safe_copy ${dhcpd_conffile} ${_dhcpd_conffile}
+ safe_copy ${dhcpd_etcdir}/$_hconf ${_dhcpd_etcdir}/$_hconf
+ safe_copy ${dhcpd_etcdir}/$_hosts ${_dhcpd_etcdir}/$_hosts
+ safe_copy ${dhcpd_etcdir}/$_ltime ${_dhcpd_etcdir}/$_ltime
+ safe_copy ${dhcpd_etcdir}/$_rconf ${_dhcpd_etcdir}/$_rconf
+ # copy dhcpd_includedir if defined and available
+ if [ -d "${dhcpd_includedir}" ]; then
+ safe_mkdir ${_dhcpd_includedir}
+ safe_copy ${dhcpd_includedir} ${_dhcpd_includedir}
+ fi
+ fi
+}
+
+setup_chuser ()
+{
+ if checkyesno paranoia && {
+ checkyesno dhcpd_chuser_enable || checkyesno dhcpd_chroot_enable
+ }; then
+ safe_mkdir ${_dhcpd_piddir} ${_dhcpd_leasesdir}
+ fi
+}
+
+setup_leases ()
+{
+ safe_touch ${_dhcpd_leasesfile}
+}
+
+setup_flags ()
+{
+ if [ -n "${dhcpd_conf}" ]; then
+ rc_flags="${rc_flags} -cf ${dhcpd_conf}"
+ fi
+ if [ -n "${dhcpd_leasesfile}" ]; then
+ rc_flags="${rc_flags} -lf ${dhcpd_leasesfile}"
+ fi
+ if [ -n "${dhcpd_pidfile}" ]; then
+ rc_flags="${rc_flags} -pf ${dhcpd_pidfile}"
+ fi
+ if [ -n "${dhcpd_withuser}" ]; then
+ rc_flags="${rc_flags} -user ${dhcpd_withuser}"
+ fi
+ if [ -n "${dhcpd_withgroup}" ]; then
+ rc_flags="${rc_flags} -group ${dhcpd_withgroup}"
+ fi
+ if [ -n "${dhcpd_rootdir}" ]; then
+ rc_flags="${rc_flags} -chroot ${dhcpd_rootdir}"
+ fi
+ if [ -n "${dhcpd_hostname}" -a -n "${dhcpd_ipaddress}" ]; then
+ rc_flags="${rc_flags} -jail ${dhcpd_hostname} ${dhcpd_ipaddress}"
+ fi
+ rc_flags="${rc_flags} ${dhcpd_ifaces}"
+}
+
+cleanup_chroot ()
+{
+ if checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
+ safe_umount ${_dhcpd_devdir}
+ fi
+}
+
+dhcpd_stop ()
+{
+ if sh $0 forcestatus; then
+ sh $0 forcestop
+ fi
+}
+
+remove_pid ()
+{
+ if [ -e ${_dhcpd_pidfile} ]; then
+ warn "${_dhcpd_pidfile} still exists! -- removing anyway"
+ fi
+ safe_remove ${_dhcpd_pidfile}
+}
+
+remove_leases ()
+{
+ if [ -s ${_dhcpd_leasesfile} ]; then
+ warn "${_dhcpd_leasesfile} not empty -- not removed --" \
+ "futher warning messages expected, don't care."
+ else
+ safe_remove ${_dhcpd_leasesfile} ${_dhcpd_leasesfile}~
+ fi
+}
+
+remove_chuser ()
+{
+ if checkyesno paranoia && {
+ checkyesno dhcpd_chuser_enable || checkyesno dhcpd_chroot_enable
+ }; then
+ safe_rmdir ${_dhcpd_piddir} ${_dhcpd_leasesdir}
+ fi
+}
+
+remove_chroot ()
+{
+ if checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
+ safe_remove ${_dhcpd_conffile} ${_dhcpd_includedir} \
+ ${_dhcpd_etcdir}
+ if checkyesno dhcpd_devfs_enable; then
+ safe_umount ${_dhcpd_devdir}
+ safe_rmdir ${_dhcpd_devdir}/_ # XXX /_ hack!
+ elif checkyesno dhcpd_jail_enable; then
+ if ! mounted ${_dhcpd_devdir}; then
+ safe_remove ${_dhcpd_devdir}
+ fi
+ else
+ safe_remove ${_dhcpd_devdir}
+ fi
+ safe_rmdir ${_dhcpd_confdir} ${_dhcpd_rootdir} # XXX /_ hack!
+ fi
+}
+
+dhcpd_check ()
+{
+ check_chuser
+ check_jail
+ check_chroot
+}
+
+dhcpd_rcvar ()
+{
+ rcvar_chuser
+ rcvar_jail
+ rcvar_chroot
+ rcvar_pidnleases
+ rcvar_rooted
+}
+
+dhcpd_precmd ()
+{
+ setup_compat
+ setup_umask
+ setup_chroot
+ setup_chuser
+ setup_leases
+ setup_flags
+}
+
+dhcpd_postcmd ()
+{
+ cleanup_chroot
+}
+
+dhcpd_install ()
+{
+ if checkyesno paranoia; then
+ safe_useradd "${dhcpd_withuser}" "${dhcpd_withgroup}" \
+ "DHCP Daemon"
+ fi
+}
+
+_dhcpd_uninstall () # user group root
+{
+ local _user _group _root
+
+ _user=$1 _group=$2 _root=$3
+
+ if [ -n "${_user}" -o -n "${_group}" ]; then
+ dhcpd_chuser_enable=YES
+ dhcpd_withuser=${_user}
+ dhcpd_withgroup=${_group}
+ else
+ dhcpd_chuser_enable=NO
+ fi
+ if [ -n "${_root}" ]; then
+ dhcpd_chroot_enable=YES
+ dhcpd_rootdir=${_root}
+ else
+ dhcpd_chroot_enable=NO
+ fi
+ dhcpd_check
+ dhcpd_rcvar
+ dhcpd_uninstall
+}
+
+dhcpd_uninstall ()
+{
+ if checkyesno __dhcpd_uninstall; then
+ dhcpd_stop
+ remove_pid
+ remove_leases
+ remove_chuser
+ remove_chroot
+ else
+ local _user _group _root
+
+ __dhcpd_uninstall=YES
+
+ _user=${dhcpd_withuser}
+ _group=${dhcpd_withgroup}
+ _root=${dhcpd_rootdir}
+
+ _dhcpd_uninstall "" "" ""
+
+ if checkyesno paranoia; then
+ if [ -n "${_user}" -o -n "${_group}" ]; then
+ _dhcpd_uninstall "${_user}" "${_group}" ""
+ fi
+ if [ -n "${_root}" ]; then
+ _dhcpd_uninstall "" "" "${_root}"
+ fi
+ if [ -n "${_user}" -o -n "${_group}" ] &&
+ [ -n "${_root}" ]; then
+ _dhcpd_uninstall "${_user}" "${_group}" "${_root}"
+ fi
+ fi
+ fi
+}
+
+rcvar=${name}_enable
+load_rc_config ${name}
+
+__dhcpd_uninstall="NO" # internal use only
+__dhcpd_devdir=/dev # devices directory
+__dhcpd_etcdir=/etc # etc directory
+__dhcpd_piddir=/var/run # pid file directory
+__dhcpd_leasesdir=/var/db # leases file directory
+#__dhcpd_rootdir=/var/db/${name} # root directory
+
+dhcpd_check
+dhcpd_rcvar
+
+command=%%PREFIX%%/sbin/${name}
+pidfile=${_dhcpd_pidfile}
+required_files=${dhcpd_conf}
+start_precmd=${name}_precmd
+stop_postcmd=${name}_postcmd
+install_cmd=dhcpd_install
+uninstall_cmd=dhcpd_uninstall
+extra_commands="install uninstall"
+
+run_rc_command "$1"