summaryrefslogtreecommitdiff
path: root/net/isc-dhcp30-server/files/isc-dhcpd.in
diff options
context:
space:
mode:
Diffstat (limited to 'net/isc-dhcp30-server/files/isc-dhcpd.in')
-rw-r--r--net/isc-dhcp30-server/files/isc-dhcpd.in729
1 files changed, 0 insertions, 729 deletions
diff --git a/net/isc-dhcp30-server/files/isc-dhcpd.in b/net/isc-dhcp30-server/files/isc-dhcpd.in
deleted file mode 100644
index 82f249ad5571..000000000000
--- a/net/isc-dhcp30-server/files/isc-dhcpd.in
+++ /dev/null
@@ -1,729 +0,0 @@
-#! /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"
-
-# Override /etc/rc.subr JID determiniation, because it doesn't
-# work when we launch dhcpd in a jail.
-if checkyesno dhcpd_jail_enable ; then
- read pid junk < $pidfile 2>/dev/null
- [ -n "$pid" ] && JID=`ps -o jid= -p $pid`
-fi
-
-run_rc_command "$1"