Index: head/etc/rc.d/FILESYSTEMS =================================================================== --- head/etc/rc.d/FILESYSTEMS (revision 298513) +++ head/etc/rc.d/FILESYSTEMS (revision 298514) @@ -1,12 +1,12 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: FILESYSTEMS # REQUIRE: root mountcritlocal cleanvar zfs -# This is a dummy dependency, for services which require file systems +# This is a dummy dependency, for services which require filesystems # to be mounted before starting. It also serves as the default early / # late divider; after this point, rc.d directories are rescanned to -# catch scripts from other file systems than /. +# catch scripts from other filesystems than /. Index: head/etc/rc.d/abi =================================================================== --- head/etc/rc.d/abi (revision 298513) +++ head/etc/rc.d/abi (revision 298514) @@ -1,69 +1,70 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: abi # REQUIRE: archdep # KEYWORD: nojail . /etc/rc.subr name="abi" +desc="Enable foreign ABIs" start_cmd="${name}_start" stop_cmd=":" sysv_start() { echo -n ' sysvipc' load_kld sysvmsg load_kld sysvsem load_kld sysvshm } linux_start() { local _tmpdir echo -n ' linux' load_kld -e 'linux(aout|elf)' linux case `sysctl -n hw.machine_arch` in amd64) load_kld -e 'linux64elf' linux64 ;; esac if [ -x /compat/linux/sbin/ldconfigDisabled ]; then _tmpdir=`mktemp -d -t linux-ldconfig` /compat/linux/sbin/ldconfig -C ${_tmpdir}/ld.so.cache if ! cmp -s ${_tmpdir}/ld.so.cache /compat/linux/etc/ld.so.cache; then cat ${_tmpdir}/ld.so.cache > /compat/linux/etc/ld.so.cache fi rm -rf ${_tmpdir} fi } svr4_start() { echo -n ' svr4' load_kld -m svr4elf svr4 } abi_start() { local _echostop _echostop= if checkyesno sysvipc_enable || checkyesno linux_enable || checkyesno svr4_enable; then echo -n 'Additional ABI support:' _echostop=yes fi checkyesno sysvipc_enable && sysv_start checkyesno linux_enable && linux_start checkyesno svr4_enable && svr4_start [ -n "${_echostop}" ] && echo '.' } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/amd =================================================================== --- head/etc/rc.d/amd (revision 298513) +++ head/etc/rc.d/amd (revision 298514) @@ -1,48 +1,49 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: amd # REQUIRE: rpcbind ypset nfsclient FILESYSTEMS ldconfig # BEFORE: DAEMON # KEYWORD: nojail shutdown . /etc/rc.subr name="amd" +desc="Automatically mount filesystems" rcvar="amd_enable" command="/usr/sbin/${name}" start_precmd="amd_precmd" command_args="&" extra_commands="reload" amd_precmd() { force_depend nfsclient nfs_client || return 1 force_depend rpcbind || return 1 case ${amd_map_program} in [Nn][Oo] | '') ;; *) rc_flags="${rc_flags} `echo $(eval ${amd_map_program})`" ;; esac case "${amd_flags}" in '') if [ ! -r /etc/amd.conf ]; then warn 'amd will not load without arguments' return 1 fi ;; *) rc_flags="-p ${rc_flags}" command_args="> /var/run/amd.pid 2> /dev/null" ;; esac } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/apm =================================================================== --- head/etc/rc.d/apm (revision 298513) +++ head/etc/rc.d/apm (revision 298514) @@ -1,46 +1,47 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: apm # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: nojail . /etc/rc.subr name="apm" +desc="Advanced power management" rcvar="apm_enable" start_precmd="apm_precmd" command="/usr/sbin/${name}" start_cmd="${command} -e enable" stop_cmd="${command} -e disable" status_cmd="apm_status" apm_precmd() { case `${SYSCTL_N} hw.machine_arch` in i386) return 0 ;; esac return 1 } apm_status() { case `${command} -s` in 1) echo "APM is enabled." return 0 ;; 0) echo "APM is disabled" ;; esac return 1 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/apmd =================================================================== --- head/etc/rc.d/apmd (revision 298513) +++ head/etc/rc.d/apmd (revision 298514) @@ -1,37 +1,38 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: apmd # REQUIRE: DAEMON apm # BEFORE: LOGIN # KEYWORD: nojail shutdown . /etc/rc.subr name="apmd" +desc="Advanced power management daemon" rcvar="apmd_enable" command="/usr/sbin/${name}" start_precmd="apmd_prestart" apmd_prestart() { case `${SYSCTL_N} hw.machine_arch` in i386) force_depend apm || return 1 # Warn user about acpi apm compatibility support which # does not work with apmd. if [ ! -e /dev/apmctl ]; then warn "/dev/apmctl not found; kernel is missing apm(4)" fi ;; *) return 1 ;; esac } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/auditd =================================================================== --- head/etc/rc.d/auditd (revision 298513) +++ head/etc/rc.d/auditd (revision 298514) @@ -1,32 +1,33 @@ #!/bin/sh # # $FreeBSD$ # # Start up for the Audit daemon. # # PROVIDE: auditd # REQUIRE: syslogd # BEFORE: DAEMON # KEYWORD: nojail shutdown . /etc/rc.subr name="auditd" +desc="Audit daemon" stop_cmd="auditd_stop" command="/usr/sbin/${name}" rcvar="auditd_enable" command_args="${auditd_flags}" required_files="/etc/security/audit_class /etc/security/audit_control /etc/security/audit_event /etc/security/audit_user /etc/security/audit_warn" auditd_stop() { /usr/sbin/audit -t sleep 1 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/auditdistd =================================================================== --- head/etc/rc.d/auditdistd (revision 298513) +++ head/etc/rc.d/auditdistd (revision 298514) @@ -1,21 +1,22 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: auditdistd # REQUIRE: auditd # BEFORE: DAEMON # KEYWORD: nojail shutdown . /etc/rc.subr name="auditdistd" +desc="Audit trail files distribution daemon" rcvar="${name}_enable" pidfile="/var/run/${name}.pid" command="/usr/sbin/${name}" required_files="/etc/security/${name}.conf" extra_commands="reload" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/automountd =================================================================== --- head/etc/rc.d/automountd (revision 298513) +++ head/etc/rc.d/automountd (revision 298514) @@ -1,19 +1,20 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: automountd # REQUIRE: DAEMON # KEYWORD: nojail . /etc/rc.subr name="automountd" +desc="daemon handling autofs mount requests" rcvar="autofs_enable" pidfile="/var/run/${name}.pid" command="/usr/sbin/${name}" required_modules="autofs" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/autounmountd =================================================================== --- head/etc/rc.d/autounmountd (revision 298513) +++ head/etc/rc.d/autounmountd (revision 298514) @@ -1,18 +1,19 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: autounmountd # REQUIRE: DAEMON # KEYWORD: nojail . /etc/rc.subr name="autounmountd" +desc="daemon unmounting automounted filesystems" rcvar="autofs_enable" pidfile="/var/run/${name}.pid" command="/usr/sbin/${name}" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/bgfsck =================================================================== --- head/etc/rc.d/bgfsck (revision 298513) +++ head/etc/rc.d/bgfsck (revision 298514) @@ -1,49 +1,50 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: bgfsck # REQUIRE: cron devfs syslogd # KEYWORD: nojail . /etc/rc.subr name="background_fsck" +desc="Run fsck in background" rcvar="background_fsck" start_cmd="bgfsck_start" start_precmd="bgfsck_start_precmd" stop_cmd=":" bgfsck_start_precmd() { if [ $($ID -u) != 0 ]; then err 1 "Must be root." fi } bgfsck_start() { : ${background_fsck_delay=0} if [ -n "${rc_force}" ]; then background_fsck_delay=0 fi if [ ${background_fsck_delay} -lt 0 ]; then warn "Background file system checks delayed indefinitely" return 0 fi bgfsck_msg='Starting background file system checks' if [ "${background_fsck_delay}" -gt 0 ]; then bgfsck_msg="${bgfsck_msg} in ${background_fsck_delay} seconds" fi if [ -z "${rc_force}" ]; then check_startmsgs && echo "${bgfsck_msg}." fi (sleep ${background_fsck_delay}; nice -4 fsck -B -p) 2>&1 | \ logger -p daemon.notice -t fsck & } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/bluetooth =================================================================== --- head/etc/rc.d/bluetooth (revision 298513) +++ head/etc/rc.d/bluetooth (revision 298514) @@ -1,365 +1,366 @@ #!/bin/sh # # Copyright (c) 2005 Maksim Yevmenkin # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # PROVIDE: bluetooth # REQUIRE: DAEMON # KEYWORD: nojail nostart . /etc/rc.subr name="bluetooth" +desc="Bluetooth setup script" rcvar= start_cmd="bluetooth_start" stop_cmd="bluetooth_stop" required_modules="ng_bluetooth ng_hci ng_l2cap ng_btsocket" ############################################################################## # Read and parse Bluetooth device configuration file ############################################################################## bluetooth_read_conf() { local _err _file _line _namespace _file=$1 _namespace=$2 _err=0 if [ ! -e $_file ]; then return 0 fi if [ ! -f $_file -o ! -r $_file ]; then err 1 "Bluetooth configuration file $_file is not a file or not readable" fi while read _line do case "$_line" in \#*) continue ;; *) if [ -z "$_line" ]; then continue; fi if expr "$_line" : "[a-zA-Z0-9_]*=" > /dev/null 2>&1; then eval "${_namespace}${_line}" else warn "Unable to parse line \"$_line\" in $_file" _err=1 fi ;; esac done < $_file return $_err } ############################################################################## # Setup Bluetooth stack. Create and connect nodes ############################################################################## bluetooth_setup_stack() { dev=$1 shift hook=$1 shift # Setup HCI ngctl mkpeer ${dev}: hci ${hook} drv \ > /dev/null 2>&1 || return 1 ngctl name ${dev}:${hook} ${dev}hci \ > /dev/null 2>&1 || return 1 ngctl msg ${dev}hci: set_debug ${bluetooth_device_hci_debug_level} \ > /dev/null 2>&1 || return 1 # Setup L2CAP ngctl mkpeer ${dev}hci: l2cap acl hci \ > /dev/null 2>&1 || return 1 ngctl name ${dev}hci:acl ${dev}l2cap \ > /dev/null 2>&1 || return 1 ngctl msg ${dev}l2cap: set_debug ${bluetooth_device_l2cap_debug_level} \ > /dev/null 2>&1 || return 1 # Connect HCI node to the Bluetooth sockets layer ngctl connect ${dev}hci: btsock_hci_raw: raw ${dev}raw \ > /dev/null 2>&1 || return 1 # Connect L2CAP node to Bluetooth sockets layer ngctl connect ${dev}l2cap: btsock_l2c_raw: ctl ${dev}ctl \ > /dev/null 2>&1 || return 1 ngctl connect ${dev}l2cap: btsock_l2c: l2c ${dev}l2c \ > /dev/null 2>&1 || return 1 # Initilalize HCI node ${hccontrol} -n ${dev}hci reset \ > /dev/null 2>&1 || return 1 ${hccontrol} -n ${dev}hci read_bd_addr \ > /dev/null 2>&1 || return 1 ${hccontrol} -n ${dev}hci read_local_supported_features \ > /dev/null 2>&1 || return 1 ${hccontrol} -n ${dev}hci read_buffer_size \ > /dev/null 2>&1 || return 1 if checkyesno bluetooth_device_discoverable; then if checkyesno bluetooth_device_connectable; then ${hccontrol} -n ${dev}hci write_scan_enable 3 \ > /dev/null 2>&1 || return 1 else ${hccontrol} -n ${dev}hci write_scan_enable 1 \ > /dev/null 2>&1 || return 1 fi else if checkyesno bluetooth_device_connectable; then ${hccontrol} -n ${dev}hci write_scan_enable 2 \ > /dev/null 2>&1 || return 1 else ${hccontrol} -n ${dev}hci write_scan_enable 0 \ > /dev/null 2>&1 || return 1 fi fi ${hccontrol} -n ${dev}hci write_class_of_device ${bluetooth_device_class} \ > /dev/null 2>&1 || return 1 if checkyesno bluetooth_device_authentication_enable; then ${hccontrol} -n ${dev}hci write_authentication_enable 1 \ > /dev/null 2>&1 || return 1 else ${hccontrol} -n ${dev}hci write_authentication_enable 0 \ > /dev/null 2>&1 || return 1 fi case "${bluetooth_device_encryption_mode}" in [Nn][Oo][Nn][Ee]|0) ${hccontrol} -n ${dev}hci write_encryption_mode 0 \ > /dev/null 2>&1 || return 1 ;; [Pp][2][Pp]|1) ${hccontrol} -n ${dev}hci write_encryption_mode 1 \ > /dev/null 2>&1 || return 1 ;; [Al][Ll][Ll]|2) ${hccontrol} -n ${dev}hci write_encryption_mode 2 \ > /dev/null 2>&1 || return 1 ;; *) warn "Unsupported encryption mode ${bluetooth_device_encryption_mode} for device ${dev}" return 1 ;; esac if checkyesno bluetooth_device_role_switch; then ${hccontrol} -n ${dev}hci write_node_role_switch 1 \ > /dev/null 2>&1 || return 1 else ${hccontrol} -n ${dev}hci write_node_role_switch 0 \ > /dev/null 2>&1 || return 1 fi ${hccontrol} -n ${dev}hci change_local_name "${bluetooth_device_local_name}" \ > /dev/null 2>&1 || return 1 ${hccontrol} -n ${dev}hci initialize \ > /dev/null 2>&1 || return 1 return 0 } ############################################################################## # Shutdown Bluetooth stack. Destroy all nodes ############################################################################## bluetooth_shutdown_stack() { dev=$1 ngctl shutdown ${dev}hci: > /dev/null 2>&1 ngctl shutdown ${dev}l2cap: > /dev/null 2>&1 return 0 } ############################################################################## # bluetooth_start() ############################################################################## bluetooth_start() { local _file dev=$1 # Try to figure out device type by looking at device name case "${dev}" in # uartX - serial/UART Bluetooth device uart*) load_kld ng_h4 || return 1 hook="hook" # Obtain unit number from device. unit=`expr ${dev} : 'uart\([0-9]\{1,\}\)'` if [ -z "${unit}" ]; then err 1 "Unable to get uart unit number: ${dev}" fi ${hcseriald} -f /dev/cuau${unit} -n ${dev} sleep 1 # wait a little bit if [ ! -f "/var/run/hcseriald.${dev}.pid" ]; then err 1 "Unable to start hcseriald on ${dev}" fi ;; # 3Com Bluetooth Adapter 3CRWB60-A btccc*) hook="hook" # Obtain unit number from device. unit=`expr ${dev} : 'btccc\([0-9]\{1,\}\)'` if [ -z "${unit}" ]; then err 1 "Unable to get bt3c unit number: ${dev}" fi ;; # USB Bluetooth adapters ubt*) hook="hook" # Obtain unit number from device. unit=`expr ${dev} : 'ubt\([0-9]\{1,\}\)'` if [ -z "${unit}" ]; then err 1 "Unable to get ubt unit number: ${dev}" fi ;; # Unknown *) err 1 "Unsupported device: ${dev}" ;; esac # Be backward compatible and setup reasonable defaults bluetooth_device_authentication_enable="0" bluetooth_device_class="ff:01:0c" bluetooth_device_connectable="1" bluetooth_device_discoverable="1" bluetooth_device_encryption_mode="0" bluetooth_device_hci_debug_level="3" bluetooth_device_l2cap_debug_level="3" bluetooth_device_local_name="`/usr/bin/uname -n` (${dev})" bluetooth_device_role_switch="1" # Load default device configuration parameters _file="/etc/defaults/bluetooth.device.conf" if ! bluetooth_read_conf $_file bluetooth_device_ ; then err 1 "Unable to read default Bluetooth configuration from $_file" fi # Load device specific overrides _file="/etc/bluetooth/$dev.conf" if ! bluetooth_read_conf $_file bluetooth_device_ ; then err 1 "Unable to read Bluetooth device configuration from $_file" fi # Setup stack if ! bluetooth_setup_stack ${dev} ${hook} ; then bluetooth_shutdown_stack $dev err 1 "Unable to setup Bluetooth stack for device ${dev}" fi return 0 } ############################################################################## # bluetooth_stop() ############################################################################## bluetooth_stop() { dev=$1 # Try to figure out device type by looking at device name case "${dev}" in # uartX - serial/UART Bluetooth device uart*) if [ -f "/var/run/hcseriald.${dev}.pid" ]; then kill `cat /var/run/hcseriald.${dev}.pid` sleep 1 # wait a little bit fi ;; # 3Com Bluetooth Adapter 3CRWB60-A btccc*) ;; # USB Bluetooth adapters ubt*) ;; # Unknown *) err 1 "Unsupported device: ${dev}" ;; esac bluetooth_shutdown_stack ${dev} return 0 } ############################################################################## # Start here ############################################################################## load_rc_config $name hccontrol="${bluetooth_hccontrol:-/usr/sbin/hccontrol}" hcseriald="${bluetooth_hcseriald:-/usr/sbin/hcseriald}" run_rc_command $* Index: head/etc/rc.d/bootparams =================================================================== --- head/etc/rc.d/bootparams (revision 298513) +++ head/etc/rc.d/bootparams (revision 298514) @@ -1,19 +1,20 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: bootparams # REQUIRE: rpcbind DAEMON # BEFORE: LOGIN # KEYWORD: nojail . /etc/rc.subr name="bootparamd" +desc="Boot parameter daemon" rcvar="bootparamd_enable" required_files="/etc/bootparams" command="/usr/sbin/${name}" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/bridge =================================================================== --- head/etc/rc.d/bridge (revision 298513) +++ head/etc/rc.d/bridge (revision 298514) @@ -1,93 +1,94 @@ #!/bin/sh # # Copyright (c) 2006 The FreeBSD Project. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: bridge # REQUIRE: netif ppp stf # KEYWORD: nojail . /etc/rc.subr . /etc/network.subr name="bridge" +desc="Network bridge setup" start_cmd="bridge_start" stop_cmd="bridge_stop" cmd="" glob_int() { case "$1" in $2 ) true ;; * ) false ;; esac } bridge_test() { bridge=$1 iface=$2 eval interfaces=\$autobridge_${bridge} if [ -n "${interfaces}" ]; then for i in ${interfaces}; do if glob_int $iface $i ; then ifconfig $bridge $cmd $iface > /dev/null 2>&1 return fi done fi } autobridge() { if [ -n "${autobridge_interfaces}" ]; then if [ -z "$iflist" ]; then # We're operating as a general network start routine. iflist="`list_net_interfaces`" fi for br in ${autobridge_interfaces}; do for i in $iflist; do bridge_test $br $i done done fi } bridge_start() { cmd="addm" autobridge } bridge_stop() { cmd="deletem" autobridge } iflist=$2 load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/bsnmpd =================================================================== --- head/etc/rc.d/bsnmpd (revision 298513) +++ head/etc/rc.d/bsnmpd (revision 298514) @@ -1,19 +1,20 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: bsnmpd # REQUIRE: NETWORKING syslogd # KEYWORD: nojail shutdown . /etc/rc.subr name="bsnmpd" +desc="Simple and extensible SNMP daemon" rcvar="bsnmpd_enable" command="/usr/sbin/${name}" load_rc_config $name pidfile="${bsnmpd_pidfile:-/var/run/snmpd.pid}" command_args="-p ${pidfile}" run_rc_command "$1" Index: head/etc/rc.d/bthidd =================================================================== --- head/etc/rc.d/bthidd (revision 298513) +++ head/etc/rc.d/bthidd (revision 298514) @@ -1,33 +1,34 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: bthidd # REQUIRE: DAEMON hcsecd # BEFORE: LOGIN # KEYWORD: nojail shutdown . /etc/rc.subr name="bthidd" +desc="Bluetooth HID daemon" rcvar="bthidd_enable" command="/usr/sbin/${name}" pidfile="/var/run/${name}.pid" start_precmd="bthidd_prestart" bthidd_prestart() { load_kld -m kbdmux kbdmux load_kld -m vkbd vkbd load_kld -m ng_btsocket ng_btsocket return 0 } load_rc_config $name config="${bthidd_config:-/etc/bluetooth/${name}.conf}" hids="${bthidd_hids:-/var/db/${name}.hids}" command_args="-c ${config} -H ${hids} -p ${pidfile}" required_files="${config}" run_rc_command "$1" Index: head/etc/rc.d/ccd =================================================================== --- head/etc/rc.d/ccd (revision 298513) +++ head/etc/rc.d/ccd (revision 298514) @@ -1,24 +1,25 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: disks # KEYWORD: nojail . /etc/rc.subr name="ccd" +desc"Concatenated disks setup" start_cmd="ccd_start" stop_cmd=":" ccd_start() { if [ -f /etc/ccd.conf ]; then echo "Configuring CCD devices." ccdconfig -C fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/cleanvar =================================================================== --- head/etc/rc.d/cleanvar (revision 298513) +++ head/etc/rc.d/cleanvar (revision 298514) @@ -1,71 +1,72 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: cleanvar # REQUIRE: var . /etc/rc.subr name="cleanvar" +desc="Purge /var directory" rcvar="cleanvar_enable" start_precmd="${name}_prestart" start_cmd="${name}_start" stop_cmd=":" extra_commands="reload" reload_cmd="${name}_start" purgedir() { local dir file if [ $# -eq 0 ]; then purgedir . else for dir do ( cd "$dir" && for file in .* * do # Skip over logging sockets [ -S "$file" -a "$file" = "log" ] && continue [ -S "$file" -a "$file" = "logpriv" ] && continue [ ."$file" = .. -o ."$file" = ... ] && continue if [ -d "$file" -a ! -L "$file" ] then purgedir "$file" else rm -f -- "$file" fi done ) done fi } cleanvar_prestart() { # These files must be removed only the first time this script is run # on boot. # rm -f /var/run/clean_var /var/spool/lock/clean_var } cleanvar_start() { if [ -d /var/run -a ! -f /var/run/clean_var ]; then purgedir /var/run >/var/run/clean_var fi if [ -d /var/spool/lock -a ! -f /var/spool/lock/clean_var ]; then purgedir /var/spool/lock >/var/spool/lock/clean_var fi rm -rf /var/spool/uucp/.Temp/* } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/cleartmp =================================================================== --- head/etc/rc.d/cleartmp (revision 298513) +++ head/etc/rc.d/cleartmp (revision 298514) @@ -1,60 +1,61 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: cleartmp # REQUIRE: mountcritremote tmp # BEFORE: DAEMON . /etc/rc.subr name="cleartmp" +desc="Purge /tmp directory" # Disguise rcvar for the start method to run irrespective of its setting. rcvar1="clear_tmp_enable" start_cmd="${name}_start" stop_cmd=":" cleartmp_start() { # Make /tmp location variable for easier debugging. local tmp="/tmp" # X related directories to create in /tmp. local x11_socket_dirs="${tmp}/.X11-unix ${tmp}/.XIM-unix \ ${tmp}/.ICE-unix ${tmp}/.font-unix" if checkyesno ${rcvar1}; then check_startmsgs && echo "Clearing ${tmp}." # This is not needed for mfs, but doesn't hurt anything. # Things to note: # + The dot in ${tmp}/. is important. # + Put -prune before -exec so find never descends # into a directory that was already passed to rm -rf. # + "--" in rm arguments isn't strictly necessary, but # it can prevent foot-shooting in future. # + /tmp/lost+found is preserved, but its contents are removed. # + lost+found and quota.* in subdirectories are removed. # + .sujournal and .snap are preserved. find -x ${tmp}/. ! -name . \ ! \( -name .sujournal -type f -user root \) \ ! \( -name .snap -type d -user root \) \ ! \( -name lost+found -type d -user root \) \ ! \( \( -name quota.user -or -name quota.group \) \ -type f -user root \) \ -prune -exec rm -rf -- {} + elif checkyesno clear_tmp_X; then # Remove X lock files, since they will prevent you from # restarting X. Remove other X related directories. check_startmsgs && echo "Clearing ${tmp} (X related)." rm -rf ${tmp}/.X[0-9]-lock ${x11_socket_dirs} fi if checkyesno clear_tmp_X; then # Create X related directories with proper permissions. mkdir -m 1777 ${x11_socket_dirs} fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/cron =================================================================== --- head/etc/rc.d/cron (revision 298513) +++ head/etc/rc.d/cron (revision 298514) @@ -1,23 +1,24 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: cron # REQUIRE: LOGIN FILESYSTEMS # BEFORE: securelevel # KEYWORD: shutdown . /etc/rc.subr name="cron" +desc="Daemon to execute scheduled commands" rcvar="cron_enable" command="/usr/sbin/${name}" pidfile="/var/run/${name}.pid" load_rc_config $name if checkyesno cron_dst then cron_flags="$cron_flags -s" fi run_rc_command "$1" Index: head/etc/rc.d/ctld =================================================================== --- head/etc/rc.d/ctld (revision 298513) +++ head/etc/rc.d/ctld (revision 298514) @@ -1,22 +1,23 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ctld # REQUIRE: FILESYSTEMS # BEFORE: DAEMON # KEYWORD: nojail . /etc/rc.subr name="ctld" +desc="CAM Target Layer / iSCSI target daemon" rcvar="ctld_enable" pidfile="/var/run/${name}.pid" command="/usr/sbin/${name}" required_files="/etc/ctl.conf" required_modules="ctl" extra_commands="reload" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ddb =================================================================== --- head/etc/rc.d/ddb (revision 298513) +++ head/etc/rc.d/ddb (revision 298514) @@ -1,32 +1,33 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ddb # REQUIRE: dumpon # BEFORE: disks # KEYWORD: nojail . /etc/rc.subr name="ddb" +desc="DDB kernel debugger" rcvar="ddb_enable" command="/sbin/${name}" start_precmd="ddb_prestart" stop_cmd=":" ddb_prestart() { # Silently exit if ddb is not enabled if [ -z "`sysctl -Nq debug.ddb.scripting.scripts`" ]; then return 1 fi } load_rc_config $name required_files="${ddb_config}" command_args="${ddb_config}" run_rc_command "$1" Index: head/etc/rc.d/defaultroute =================================================================== --- head/etc/rc.d/defaultroute (revision 298513) +++ head/etc/rc.d/defaultroute (revision 298514) @@ -1,73 +1,74 @@ #!/bin/sh # # Wait for the default route to be up if DHCP is in use # # $FreeBSD$ # # PROVIDE: defaultroute # REQUIRE: devd netif stf # KEYWORD: nojail . /etc/rc.subr . /etc/network.subr name="defaultroute" +desc="Setup default router" start_cmd="defaultroute_start" stop_cmd=":" # Does any interface have a carrier? defaultroute_carrier() { local carrier nocarrier carrier=1 for _if in ${dhcp_interfaces}; do output=`/sbin/ifconfig ${_if}` nocarrier=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'` [ -z "${nocarrier}" ] && carrier=0 done return ${carrier} } defaultroute_start() { local nl waited afexists inet || return 0 # Return without waiting if we don't have dhcp interfaces or # if none of the dhcp interfaces is plugged in. dhcp_interfaces=`list_net_interfaces dhcp` [ -z "${dhcp_interfaces}" ] && return # Wait for a default route waited=0 while [ ${waited} -lt ${defaultroute_delay} ]; do defif=`get_default_if -inet` if [ -n "${defif}" ]; then if [ ${waited} -ne 0 ]; then echo -n "($defif)" nl=1 fi break fi if [ ${waited} -eq 0 ]; then echo -n "Waiting ${defaultroute_delay}s for the default route interface: " else echo -n . fi if [ ${waited} -eq ${defaultroute_carrier_delay} ] && ! defaultroute_carrier; then echo -n "(no carrier)" break fi nl=1 sleep 1 waited=$(($waited + 1)) done [ -n "$nl" ] && echo } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/devd =================================================================== --- head/etc/rc.d/devd (revision 298513) +++ head/etc/rc.d/devd (revision 298514) @@ -1,41 +1,42 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: devd # REQUIRE: netif ldconfig # BEFORE: NETWORKING mountcritremote # KEYWORD: nojail shutdown . /etc/rc.subr name="devd" +desc="Device state change daemon" rcvar="devd_enable" command="/sbin/${name}" start_precmd=${name}_prestart stop_precmd=find_pidfile find_pidfile() { if get_pidfile_from_conf pid-file /etc/devd.conf; then pidfile="$_pidfile_from_conf" else pidfile="/var/run/${name}.pid" fi } devd_prestart() { find_pidfile # If devd is disabled, turn it off in the kernel to avoid unnecessary # memory usage. if ! checkyesno ${rcvar}; then $SYSCTL hw.bus.devctl_queue=0 fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/devfs =================================================================== --- head/etc/rc.d/devfs (revision 298513) +++ head/etc/rc.d/devfs (revision 298514) @@ -1,71 +1,72 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: devfs # REQUIRE: mountcritremote # BEFORE: SERVERS securelevel # KEYWORD: nojail . /etc/rc.subr name="devfs" +desc="Device filesystem" start_cmd='devfs_start' stop_cmd=':' devfs_start() { if [ -n "$devfs_system_ruleset" -o -n "$devfs_set_rulesets" ] || checkyesno devfs_load_rulesets; then devfs_init_rulesets if [ -n "$devfs_system_ruleset" ]; then devfs_set_ruleset $devfs_system_ruleset /dev devfs_apply_ruleset $devfs_system_ruleset /dev fi if [ -n "$devfs_set_rulesets" ]; then local _dir_set local _dir local _set for _dir_set in $devfs_set_rulesets; do _dir=${_dir_set%=*} _set=${_dir_set#*=} devfs_set_ruleset $_set $_dir devfs_apply_ruleset $_set $_dir done fi fi read_devfs_conf } read_devfs_conf() { if [ -r /etc/devfs.conf ]; then cd /dev while read action devicelist parameter; do case "${action}" in l*) for device in ${devicelist}; do if [ ! -e ${parameter} ]; then ln -fs ${device} ${parameter} fi done ;; o*) for device in ${devicelist}; do if [ -c ${device} ]; then chown ${parameter} ${device} fi done ;; p*) for device in ${devicelist}; do if [ -c ${device} ]; then chmod ${parameter} ${device} fi done ;; esac done < /etc/devfs.conf fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/dhclient =================================================================== --- head/etc/rc.d/dhclient (revision 298513) +++ head/etc/rc.d/dhclient (revision 298514) @@ -1,64 +1,65 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: dhclient # KEYWORD: nojail nostart . /etc/rc.subr . /etc/network.subr ifn="$2" name="dhclient" +desc="Dynamic Host Configuration Protocol (DHCP) client" rcvar= pidfile="/var/run/${name}.${ifn}.pid" start_precmd="dhclient_prestart" stop_precmd="dhclient_pre_check" # rc_force check can only be done at the run_rc_command # time, so we're testing it in the pre* hooks. dhclient_pre_check() { if [ -z "${rc_force}" ] && ! dhcpif $ifn; then local msg msg="'$ifn' is not a DHCP-enabled interface" if [ -z "${rc_quiet}" ]; then echo "$msg" else debug "$msg" fi exit 1 fi } dhclient_prestart() { dhclient_pre_check # Interface-specific flags (see rc.subr for $flags setting) specific=$(get_if_var $ifn dhclient_flags_IF) if [ -z "$flags" -a -n "$specific" ]; then rc_flags=$specific fi background_dhclient=$(get_if_var $ifn background_dhclient_IF $background_dhclient) if checkyesno background_dhclient; then rc_flags="${rc_flags} -b" fi rc_flags="${rc_flags} ${ifn}" } load_rc_config $name load_rc_config network if [ -z $ifn ] ; then # only complain if a command was specified but no interface if [ -n "$1" ] ; then err 1 "$0: no interface specified" fi fi run_rc_command "$1" Index: head/etc/rc.d/dmesg =================================================================== --- head/etc/rc.d/dmesg (revision 298513) +++ head/etc/rc.d/dmesg (revision 298514) @@ -1,26 +1,27 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: dmesg # REQUIRE: mountcritremote FILESYSTEMS # BEFORE: DAEMON # KEYWORD: nojail . /etc/rc.subr name="dmesg" +desc="Save kernel boot messages to disk" rcvar="dmesg_enable" dmesg_file="/var/run/dmesg.boot" start_cmd="do_dmesg" stop_cmd=":" do_dmesg() { rm -f ${dmesg_file} ( umask 022 ; /sbin/dmesg $rc_flags > ${dmesg_file} ) } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/dumpon =================================================================== --- head/etc/rc.d/dumpon (revision 298513) +++ head/etc/rc.d/dumpon (revision 298514) @@ -1,69 +1,70 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: dumpon # REQUIRE: zvol # BEFORE: disks # KEYWORD: nojail . /etc/rc.subr name="dumpon" +desc="Dump kernel corefiles from swap to disk" start_cmd="dumpon_start" stop_cmd="dumpon_stop" dumpon_try() { if /sbin/dumpon "${1}" ; then # Make a symlink in devfs for savecore ln -fs "${1}" /dev/dumpdev return 0 fi warn "unable to specify $1 as a dump device" return 1 } dumpon_start() { # Enable dumpdev so that savecore can see it. Enable it # early so a crash early in the boot process can be caught. # case ${dumpdev} in [Nn][Oo] | '') ;; [Aa][Uu][Tt][Oo]) dev=$(/bin/kenv -q dumpdev) if [ -n "${dev}" ] ; then dumpon_try "${dev}" return $? fi while read dev mp type more ; do [ "${type}" = "swap" ] || continue [ -c "${dev}" ] || continue dumpon_try "${dev}" 2>/dev/null && return 0 done &2 return 1 ;; *) dumpon_try "${dumpdev}" ;; esac } dumpon_stop() { case ${dumpdev} in [Nn][Oo] | '') ;; *) rm -f /dev/dumpdev /sbin/dumpon -v off ;; esac } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/fsck =================================================================== --- head/etc/rc.d/fsck (revision 298513) +++ head/etc/rc.d/fsck (revision 298514) @@ -1,78 +1,79 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: fsck # REQUIRE: swap # KEYWORD: nojail . /etc/rc.subr name="fsck" +desc="Run file system checks" start_cmd="fsck_start" stop_cmd=":" fsck_start() { if [ "$autoboot" = no ]; then echo "Fast boot: skipping disk checks." elif [ ! -r /etc/fstab ]; then echo "Warning! No /etc/fstab: skipping disk checks." elif [ "$autoboot" = yes ]; then # During fsck ignore SIGQUIT trap : 3 check_startmsgs && echo "Starting file system checks:" if checkyesno background_fsck; then fsck -F -p else fsck -p fi case $? in 0) ;; 2) stop_boot ;; 4) echo "Rebooting..." reboot echo "Reboot failed; help!" stop_boot ;; 8) if checkyesno fsck_y_enable; then echo "File system preen failed, trying fsck -y ${fsck_y_flags}" fsck -y ${fsck_y_flags} case $? in 0) ;; *) echo "Automatic file system check failed; help!" stop_boot ;; esac else echo "Automatic file system check failed; help!" stop_boot fi ;; 12) echo "Boot interrupted." stop_boot ;; 130) stop_boot ;; *) echo "Unknown error; help!" stop_boot ;; esac fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ftp-proxy =================================================================== --- head/etc/rc.d/ftp-proxy (revision 298513) +++ head/etc/rc.d/ftp-proxy (revision 298514) @@ -1,75 +1,76 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ftp-proxy # REQUIRE: DAEMON pf # KEYWORD: shutdown . /etc/rc.subr name="ftpproxy" +desc="Internet File Transfer Protocol proxy daemon" rcvar="ftpproxy_enable" command="/usr/sbin/ftp-proxy" load_rc_config $name # # manage_pid argument # Create or remove a pidfile manually, for daemons that can't be bothered # to do it themselves. Takes one argument, which is the argument provided # to the rc script. The pidfile will be named /var/run/<$name>.pid, # unless $pidfile is defined. # # The method used to determine the pid is rather hacky; grep ps output to # find '$procname|$command', then grep for ${name}_flags. If at all # possible, use another method if at all possible, to avoid that dirty- # code feeling. # manage_pid() { local search_string ps_pid case $1 in *start) cmd_string=`basename ${procname:-${command}}` eval flag_string=\"\$${name}_flags\" # Determine the pid. ps_pid=`ps ax -o pid= -o command= | grep $cmd_string | grep -e "$flag_string" | grep -v grep | awk '{ print $1 }'` # Write the pidfile depending on $pidfile status. echo $ps_pid > ${pidfile:-"/var/run/$name.pid"} ;; stop) rm $pidfile ;; esac } # Allow ftp-proxy to start up in two different ways. The typical behavior # is to start up one instance of ftp-proxy by setting ftpproxy_enable and # ftpproxy_flags. The alternate behavior allows multiple instances of ftp- # proxy to be started, allowing different types of proxy behavior. To use the # new behavior, a list of instances must be defined, and a list of flags for # each instance. For example, if we want to start two instances of ftp-proxy, # foo and bar, we would set the following vars. # ftpproxy_enable="YES" # ftpproxy_instances="foo bar" # ftpproxy_foo="" # ftpproxy_bar="" # # Starting more than one ftp-proxy? if [ "$ftpproxy_instances" ] && [ -n "${ftpproxy_instances}" ]; then # Iterate through instance list. for i in $ftpproxy_instances; do #eval ftpproxy_${i}_flags=\$ftpproxy_${i} #eval name=ftpproxy_${i} # Set flags for this instance. eval ftpproxy_flags=\$ftpproxy_${i} # Define a unique pid file name. pidfile="/var/run/ftp-proxy.$i.pid" run_rc_command "$1" manage_pid $1 done else # Traditional single-instance behavior run_rc_command "$1" fi Index: head/etc/rc.d/ftpd =================================================================== --- head/etc/rc.d/ftpd (revision 298513) +++ head/etc/rc.d/ftpd (revision 298514) @@ -1,25 +1,26 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ftpd # REQUIRE: LOGIN FILESYSTEMS # KEYWORD: shutdown . /etc/rc.subr name="ftpd" +desc="Internet File Transfer Protocol daemon" rcvar="ftpd_enable" command="/usr/libexec/${name}" pidfile="/var/run/${name}.pid" start_precmd=ftpd_prestart ftpd_prestart() { rc_flags="-D ${rc_flags}" return 0 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/gbde =================================================================== --- head/etc/rc.d/gbde (revision 298513) +++ head/etc/rc.d/gbde (revision 298514) @@ -1,119 +1,120 @@ #!/bin/sh # # This file, originally written by Garrett A. Wollman, is in the public # domain. # # $FreeBSD$ # # PROVIDE: disks # KEYWORD: nojail . /etc/rc.subr name="gbde" +desc="GEOM Based Disk Encryption" start_precmd="find_gbde_devices start" stop_precmd="find_gbde_devices stop" start_cmd="gbde_start" stop_cmd="gbde_stop" find_gbde_devices() { case "${gbde_devices-auto}" in [Aa][Uu][Tt][Oo]) gbde_devices="" ;; *) return 0 ;; esac case "$1" in start) fstab="/etc/fstab" ;; stop) fstab=$(mktemp /tmp/mtab.XXXXXX) mount -p >${fstab} ;; esac # # We can't use "mount -p | while ..." because when a shell loop # is the target of a pipe it executes in a subshell, and so can't # modify variables in the script. # while read device mountpt type options dump pass; do case "$device" in *.bde) # Ignore swap devices case "$type" in swap) continue ;; esac case "$options" in *noauto*) if checkyesno gbde_autoattach_all; then gbde_devices="${gbde_devices} ${device}" fi ;; *) gbde_devices="${gbde_devices} ${device}" ;; esac ;; esac done <${fstab} case "$1" in stop) rm -f ${fstab} ;; esac return 0 } gbde_start() { for device in $gbde_devices; do parent=${device%.bde} parent=${parent#/dev/} parent_=`ltr ${parent} '/' '_'` eval "lock=\${gbde_lock_${parent_}-\"${gbde_lockdir}/${parent_}.lock\"}" if [ -e "/dev/${parent}" -a ! -e "/dev/${parent}.bde" ]; then echo "Configuring Disk Encryption for ${parent}." count=1 while [ ${count} -le ${gbde_attach_attempts} ]; do if [ -e "${lock}" ]; then gbde attach ${parent} -l ${lock} else gbde attach ${parent} fi if [ -e "/dev/${parent}.bde" ]; then break fi echo "Attach failed; attempt ${count} of ${gbde_attach_attempts}." count=$((${count} + 1)) done fi done } gbde_stop() { for device in $gbde_devices; do parent=${device%.bde} parent=${parent#/dev/} if [ -e "/dev/${parent}.bde" ]; then umount "/dev/${parent}.bde" 2>/dev/null gbde detach "${parent}" fi done } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/geli =================================================================== --- head/etc/rc.d/geli (revision 298513) +++ head/etc/rc.d/geli (revision 298514) @@ -1,89 +1,90 @@ #!/bin/sh # # Copyright (c) 2005 Pawel Jakub Dawidek # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: disks # KEYWORD: nojail . /etc/rc.subr name="geli" +desc="GELI disk encryption" start_precmd='[ -n "$(geli_make_list)" ]' start_cmd="geli_start" stop_cmd="geli_stop" required_modules="geom_eli:g_eli" geli_start() { devices=`geli_make_list` if [ -z "${geli_tries}" ]; then if [ -n "${geli_attach_attempts}" ]; then # Compatibility with rc.d/gbde. geli_tries=${geli_attach_attempts} else geli_tries=`${SYSCTL_N} kern.geom.eli.tries` fi fi for provider in ${devices}; do provider_=`ltr ${provider} '/-' '_'` eval "flags=\${geli_${provider_}_flags}" if [ -z "${flags}" ]; then flags=${geli_default_flags} fi if [ -e "/dev/${provider}" -a ! -e "/dev/${provider}.eli" ]; then echo "Configuring Disk Encryption for ${provider}." count=1 while [ ${count} -le ${geli_tries} ]; do geli attach ${flags} ${provider} if [ -e "/dev/${provider}.eli" ]; then break fi echo "Attach failed; attempt ${count} of ${geli_tries}." count=$((count+1)) done fi done } geli_stop() { devices=`geli_make_list` for provider in ${devices}; do if [ -e "/dev/${provider}.eli" ]; then umount "/dev/${provider}.eli" 2>/dev/null geli detach "${provider}" fi done } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/geli2 =================================================================== --- head/etc/rc.d/geli2 (revision 298513) +++ head/etc/rc.d/geli2 (revision 298514) @@ -1,58 +1,59 @@ #!/bin/sh # # Copyright (c) 2005 Pawel Jakub Dawidek # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: geli2 # REQUIRE: FILESYSTEMS # KEYWORD: nojail . /etc/rc.subr name="geli2" +name="GELI disk encryption" start_cmd="geli2_start" stop_cmd=":" geli2_start() { devices=`geli_make_list` for provider in ${devices}; do provider_=`ltr ${provider} '/-' '_'` eval "autodetach=\${geli_${provider_}_autodetach}" if [ -z "${autodetach}" ]; then autodetach=${geli_autodetach} fi if checkyesno autodetach && [ -e "/dev/${provider}.eli" ]; then geli detach -l ${provider} fi done } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/growfs =================================================================== --- head/etc/rc.d/growfs (revision 298513) +++ head/etc/rc.d/growfs (revision 298514) @@ -1,96 +1,97 @@ #!/bin/sh # # Copyright 2014 John-Mark Gurney # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: growfs # BEFORE: sysctl # KEYWORD: firstboot # This allows us to distribute a image # and have it work on essentially any size drive. # # TODO: Figure out where this should really be ordered. # I suspect it should go just after fsck but before mountcritlocal. # . /etc/rc.subr name="growfs" +desc="Grow root partition to fill device" start_cmd="growfs_start" stop_cmd=":" rcvar="growfs_enable" growfs_start () { echo "Growing root partition to fill device" rootdev=$(df / | tail -n 1 | awk '{ sub("/dev/", "", $1); print $1 }') if [ x"$rootdev" = x"${rootdev%/*}" ]; then # raw device rawdev="$rootdev" else rawdev=$(glabel status | awk '$1 == "'"$rootdev"'" { print $3 }') if [ x"$rawdev" = x"" ]; then echo "Can't figure out device for: $rootdev" return fi fi sysctl -b kern.geom.conftxt | awk ' { lvl=$1 device[lvl] = $3 type[lvl] = $2 idx[lvl] = $7 parttype[lvl] = $13 if (dev == $3) { for (i = 1; i <= lvl; i++) { # resize if (type[i] == "PART") { pdev = device[i - 1] cmd[i] = "gpart resize -i " idx[i] " " pdev if (parttype[i] == "GPT") cmd[i] = "gpart recover " pdev " ; " cmd[i] } else if (type[i] == "LABEL") { continue } else { print "unhandled type: " type[i] exit 1 } } for (i = 1; i <= lvl; i++) { if (cmd[i]) system(cmd[i]) } exit 0 } }' dev="$rawdev" growfs -y /dev/"$rootdev" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/gssd =================================================================== --- head/etc/rc.d/gssd (revision 298513) +++ head/etc/rc.d/gssd (revision 298514) @@ -1,16 +1,17 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: gssd # REQUIRE: root # KEYWORD: nojail shutdown . /etc/rc.subr name=gssd +desc="Generic Security Services Daemon" rcvar=gssd_enable load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/hastd =================================================================== --- head/etc/rc.d/hastd (revision 298513) +++ head/etc/rc.d/hastd (revision 298514) @@ -1,29 +1,30 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: hastd # REQUIRE: NETWORKING syslogd # BEFORE: DAEMON # KEYWORD: nojail shutdown . /etc/rc.subr name="hastd" +desc="Highly Available Storage daemon" rcvar="hastd_enable" pidfile="/var/run/${name}.pid" command="/sbin/${name}" hastctl="/sbin/hastctl" required_files="/etc/hast.conf" stop_precmd="hastd_stop_precmd" required_modules="geom_gate:g_gate" extra_commands="reload" hastd_stop_precmd() { ${hastctl} role init all } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/hcsecd =================================================================== --- head/etc/rc.d/hcsecd (revision 298513) +++ head/etc/rc.d/hcsecd (revision 298514) @@ -1,24 +1,25 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: hcsecd # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: nojail shutdown . /etc/rc.subr name="hcsecd" +desc="Control link keys and PIN codes for Bluetooth devices" rcvar="hcsecd_enable" command="/usr/sbin/${name}" pidfile="/var/run/${name}.pid" required_modules="ng_btsocket" load_rc_config $name config="${hcsecd_config:-/etc/bluetooth/${name}.conf}" command_args="-f ${config}" required_files="${config}" run_rc_command "$1" Index: head/etc/rc.d/hostapd =================================================================== --- head/etc/rc.d/hostapd (revision 298513) +++ head/etc/rc.d/hostapd (revision 298514) @@ -1,32 +1,33 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: hostapd # REQUIRE: mountcritremote # KEYWORD: nojail shutdown . /etc/rc.subr name="hostapd" +desc="Authenticator for IEEE 802.11 networks" command="/usr/sbin/${name}" ifn="$2" if [ -z "$ifn" ]; then rcvar="hostapd_enable" conf_file="/etc/${name}.conf" pidfile="/var/run/${name}.pid" else rcvar= conf_file="/etc/${name}-${ifn}.conf" pidfile="/var/run/${name}-${ifn}.pid" fi command_args="-P ${pidfile} -B ${conf_file}" required_files="${conf_file}" required_modules="wlan_xauth wlan_wep wlan_tkip wlan_ccmp" extra_commands="reload" load_rc_config ${name} run_rc_command "$1" Index: head/etc/rc.d/hostid =================================================================== --- head/etc/rc.d/hostid (revision 298513) +++ head/etc/rc.d/hostid (revision 298514) @@ -1,151 +1,152 @@ #!/bin/sh # # Copyright (c) 2007 Pawel Jakub Dawidek # Copyright (c) 2015 Xin LI # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: hostid # REQUIRE: sysctl # KEYWORD: nojail . /etc/rc.subr name="hostid" +desc="Generate a unique host ID" start_cmd="hostid_start" stop_cmd=":" reset_cmd="hostid_reset" extra_commands="reset" rcvar="hostid_enable" hostid_set() { uuid=$1 # Generate hostid based on hostuuid - take first four bytes from md5(uuid). id=`echo -n $uuid | /sbin/md5` id="0x${id%????????????????????????}" # Set both kern.hostuuid and kern.hostid. # check_startmsgs && echo "Setting hostuuid: ${uuid}." ${SYSCTL} kern.hostuuid="${uuid}" >/dev/null check_startmsgs && echo "Setting hostid: ${id}." ${SYSCTL} kern.hostid=${id} >/dev/null } valid_hostid() { uuid=$1 x="[0-9a-f]" y=$x$x$x$x # Check against a blacklist before # accepting the UUID. case "${uuid}" in 00000000-0000-0000-0000-000000000000) ;; 00020003-0004-0005-0006-000700080009) ;; 03000200-0400-0500-0006-000700080009) ;; 07090201-0103-0301-0807-060504030201) ;; 11111111-1111-1111-1111-111111111111) ;; 11111111-2222-3333-4444-555555555555) ;; 4c4c4544-0000-2010-8020-80c04f202020) ;; 58585858-5858-5858-5858-585858585858) ;; 890e2d14-cacd-45d1-ae66-bc80e8bfeb0f) ;; 8e275844-178f-44a8-aceb-a7d7e5178c63) ;; dc698397-fa54-4cf2-82c8-b1b5307a6a7f) ;; fefefefe-fefe-fefe-fefe-fefefefefefe) ;; *-ffff-ffff-ffff-ffffffffffff) ;; $y$y-$y-$y-$y-$y$y$y) return 0 ;; esac return 1 } hostid_hardware() { uuid=`kenv -q smbios.system.uuid` if valid_hostid $uuid; then echo "${uuid}" fi } hostid_generate() { # First look for UUID in hardware. uuid=`hostid_hardware` if [ -z "${uuid}" ]; then warn "hostid: unable to figure out a UUID from DMI data, generating a new one" sleep 2 # If not found, fall back to software-generated UUID. uuid=`uuidgen` fi hostid_set $uuid } hostid_reset() { hostid_generate # Store newly generated UUID in ${hostid_file}. echo $uuid > ${hostid_file} if [ $? -ne 0 ]; then warn "could not store hostuuid in ${hostid_file}." fi } hostid_start() { # If ${hostid_file} already exists, we take UUID from there. if [ -r ${hostid_file} ]; then read saved_hostid < ${hostid_file} if valid_hostid ${saved_hostid}; then hostid_set `cat ${hostid_file}` exit 0 fi fi # No hostid file, generate UUID. hostid_generate } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/hostid_save =================================================================== --- head/etc/rc.d/hostid_save (revision 298513) +++ head/etc/rc.d/hostid_save (revision 298514) @@ -1,35 +1,36 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: hostid_save # REQUIRE: root # KEYWORD: nojail . /etc/rc.subr name="hostid_save" +desc="Save unique host ID to disk" start_cmd="hostid_save" stop_cmd=":" rcvar="hostid_enable" hostid_save() { current_hostid=`$SYSCTL_N kern.hostuuid` if [ -r ${hostid_file} ]; then read saved_hostid < ${hostid_file} if [ ${saved_hostid} = ${current_hostid} ]; then exit 0 fi fi echo ${current_hostid} > ${hostid_file} if [ $? -ne 0 ]; then warn "could not store hostuuid in ${hostid_file}." fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/hostname =================================================================== --- head/etc/rc.d/hostname (revision 298513) +++ head/etc/rc.d/hostname (revision 298514) @@ -1,78 +1,79 @@ #!/bin/sh # # Copyright (c) 2003 The FreeBSD Project. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: hostname # REQUIRE: FILESYSTEMS # BEFORE: netif . /etc/rc.subr . /etc/network.subr name="hostname" +desc="Set the system\'s hostname" start_cmd="hostname_start" stop_cmd=":" hostname_start() { # If we are not inside a jail, set the host name. # If we are inside a jail, set the host name if it is permitted. # if [ `$SYSCTL_N security.jail.jailed` -eq 1 ]; then if [ `$SYSCTL_N security.jail.set_hostname_allowed` -eq 0 ]; then return fi else # If we're not in a jail and rc.conf doesn't specify a # hostname, see if we can get one from kenv. # if [ -z "${hostname}" -a \ -n "`/bin/kenv dhcp.host-name 2> /dev/null`" ]; then hostname=`/bin/kenv dhcp.host-name` fi fi # Have we got a hostname yet? # if [ -z "${hostname}" ]; then # Null hostname is probably OK if DHCP is in use. # if [ -z "`list_net_interfaces dhcp`" ]; then warn "\$hostname is not set -- see rc.conf(5)." fi return fi # All right, it is safe to invoke hostname(1) now. # check_startmsgs && echo -n "Setting hostname: ${hostname}" /bin/hostname "${hostname}" check_startmsgs && echo '.' } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/inetd =================================================================== --- head/etc/rc.d/inetd (revision 298513) +++ head/etc/rc.d/inetd (revision 298514) @@ -1,20 +1,21 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: inetd # REQUIRE: DAEMON LOGIN FILESYSTEMS # KEYWORD: shutdown . /etc/rc.subr name="inetd" +desc="Internet \"super-server\"" rcvar="inetd_enable" command="/usr/sbin/${name}" pidfile="/var/run/${name}.pid" required_files="/etc/${name}.conf" extra_commands="reload" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ip6addrctl =================================================================== --- head/etc/rc.d/ip6addrctl (revision 298513) +++ head/etc/rc.d/ip6addrctl (revision 298514) @@ -1,123 +1,124 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ip6addrctl # REQUIRE: FILESYSTEMS # BEFORE: netif # KEYWORD: nojail . /etc/rc.subr . /etc/network.subr name="ip6addrctl" +desc="configure address selection policy for IPv6 and IPv4" rcvar="ip6addrctl_enable" start_cmd="ip6addrctl_start" stop_cmd="ip6addrctl_stop" extra_commands="status prefer_ipv6 prefer_ipv4" status_cmd="ip6addrctl" prefer_ipv6_cmd="ip6addrctl_prefer_ipv6" prefer_ipv4_cmd="ip6addrctl_prefer_ipv4" config_file="/etc/ip6addrctl.conf" set_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces set_rcvar_obsolete ipv6_prefer ip6addrctl_policy IP6ADDRCTL_CMD="/usr/sbin/ip6addrctl" ip6addrctl_prefer_ipv6() { afexists inet6 || return 0 ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 cat </dev/null 2>&1 cat </dev/null 2>&1 ${IP6ADDRCTL_CMD} install "${config_file}" else if checkyesno ipv6_activate_all_interfaces; then ip6addrctl_prefer_ipv6 elif [ -n "$(list_vars ifconfig_\*_ipv6)" ]; then ip6addrctl_prefer_ipv6 else ip6addrctl_prefer_ipv4 fi fi ;; ipv4_prefer) ip6addrctl_prefer_ipv4 ;; ipv6_prefer) ip6addrctl_prefer_ipv6 ;; [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) # Backward compatibility when ipv6_prefer=YES ip6addrctl_prefer_ipv6 ;; [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) # Backward compatibility when ipv6_prefer=NO ip6addrctl_prefer_ipv4 ;; [Nn][Oo][Nn][Ee]) ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 ;; *) warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \ " \"ipv4_prefer\" is used instead." ip6addrctl_prefer_ipv4 ;; esac if checkyesno ip6addrctl_verbose; then echo 'Address selection policy table for IPv4 and IPv6:' ${IP6ADDRCTL_CMD} fi } ip6addrctl_stop() { afexists inet6 || return 0 ip6addrctl flush >/dev/null 2>&1 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ipfilter =================================================================== --- head/etc/rc.d/ipfilter (revision 298513) +++ head/etc/rc.d/ipfilter (revision 298514) @@ -1,89 +1,90 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ipfilter # REQUIRE: FILESYSTEMS # KEYWORD: nojail . /etc/rc.subr name="ipfilter" +desc="IP packet filter" rcvar="ipfilter_enable" load_rc_config $name stop_precmd="test -f ${ipfilter_rules} -o -f ${ipv6_ipfilter_rules}" start_precmd="$stop_precmd" start_cmd="ipfilter_start" stop_cmd="ipfilter_stop" reload_precmd="$stop_precmd" reload_cmd="ipfilter_reload" resync_precmd="$stop_precmd" resync_cmd="ipfilter_resync" status_precmd="$stop_precmd" status_cmd="ipfilter_status" extra_commands="reload resync" required_modules="ipl:ipfilter" ipfilter_start() { echo "Enabling ipfilter." if ! ${ipfilter_program:-/sbin/ipf} -V | grep -q 'Running: yes'; then ${ipfilter_program:-/sbin/ipf} -E fi ${ipfilter_program:-/sbin/ipf} -Fa if [ -r "${ipfilter_rules}" ]; then ${ipfilter_program:-/sbin/ipf} \ -f "${ipfilter_rules}" ${ipfilter_flags} fi if [ -r "${ipv6_ipfilter_rules}" ]; then ${ipfilter_program:-/sbin/ipf} -6 \ -f "${ipv6_ipfilter_rules}" ${ipfilter_flags} fi } ipfilter_stop() { if ${ipfilter_program:-/sbin/ipf} -V | grep -q 'Running: yes'; then echo "Saving firewall state tables" ${ipfs_program:-/sbin/ipfs} -W ${ipfs_flags} echo "Disabling ipfilter." ${ipfilter_program:-/sbin/ipf} -D fi } ipfilter_reload() { echo "Reloading ipfilter rules." ${ipfilter_program:-/sbin/ipf} -I -Fa if [ -r "${ipfilter_rules}" ]; then ${ipfilter_program:-/sbin/ipf} -I \ -f "${ipfilter_rules}" ${ipfilter_flags} if [ $? -ne 0 ]; then err 1 'Load of rules into alternate set failed; aborting reload' fi fi if [ -r "${ipv6_ipfilter_rules}" ]; then ${ipfilter_program:-/sbin/ipf} -I -6 \ -f "${ipv6_ipfilter_rules}" ${ipfilter_flags} if [ $? -ne 0 ]; then err 1 'Load of IPv6 rules into alternate set failed; aborting reload' fi fi ${ipfilter_program:-/sbin/ipf} -s } ipfilter_resync() { ${ipfilter_program:-/sbin/ipf} -y ${ipfilter_flags} } ipfilter_status() { ${ipfilter_program:-/sbin/ipf} -V } run_rc_command "$1" Index: head/etc/rc.d/ipfs =================================================================== --- head/etc/rc.d/ipfs (revision 298513) +++ head/etc/rc.d/ipfs (revision 298514) @@ -1,51 +1,52 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ipfs # REQUIRE: ipnat # KEYWORD: nojail shutdown . /etc/rc.subr name="ipfs" +desc="Saves and restores information for NAT and state tables" rcvar="ipfs_enable" start_cmd="ipfs_start" stop_cmd="ipfs_stop" start_precmd="ipfs_prestart" ipfs_prestart() { # Do not continue if either ipnat or ipfilter is not enabled or # if the ipfilter module is not loaded. # if ! checkyesno ipfilter_enable -o ! checkyesno ipnat_enable ; then err 1 "${name} requires either ipfilter or ipnat enabled" fi if ! ${ipfilter_program:-/sbin/ipf} -V | grep -q 'Running: yes' >/dev/null 2>&1; then err 1 "ipfilter module is not loaded" fi return 0 } ipfs_start() { if [ -r /var/db/ipf/ipstate.ipf -a -r /var/db/ipf/ipnat.ipf ]; then ${ipfs_program} -R ${rc_flags} rm -f /var/db/ipf/ipstate.ipf /var/db/ipf/ipnat.ipf fi } ipfs_stop() { if [ ! -d /var/db/ipf ]; then mkdir /var/db/ipf chmod 700 /var/db/ipf chown root:wheel /var/db/ipf fi ${ipfs_program} -W ${rc_flags} } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ipfw =================================================================== --- head/etc/rc.d/ipfw (revision 298513) +++ head/etc/rc.d/ipfw (revision 298514) @@ -1,114 +1,115 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ipfw # REQUIRE: ppp # KEYWORD: nojailvnet . /etc/rc.subr . /etc/network.subr name="ipfw" +desc="Firewall, traffic shaper, packet scheduler, in-kernel NAT" rcvar="firewall_enable" start_cmd="ipfw_start" start_precmd="ipfw_prestart" start_postcmd="ipfw_poststart" stop_cmd="ipfw_stop" required_modules="ipfw" set_rcvar_obsolete ipv6_firewall_enable ipfw_prestart() { if checkyesno dummynet_enable; then required_modules="$required_modules dummynet" fi if checkyesno natd_enable; then required_modules="$required_modules ipdivert" fi if checkyesno firewall_nat_enable; then required_modules="$required_modules ipfw_nat" fi } ipfw_start() { local _firewall_type _firewall_type=$1 # set the firewall rules script if none was specified [ -z "${firewall_script}" ] && firewall_script=/etc/rc.firewall if [ -r "${firewall_script}" ]; then /bin/sh "${firewall_script}" "${_firewall_type}" echo 'Firewall rules loaded.' elif [ "`ipfw list 65535`" = "65535 deny ip from any to any" ]; then echo 'Warning: kernel has firewall functionality, but' \ ' firewall rules are not enabled.' echo ' All ip services are disabled.' fi # Firewall logging # if checkyesno firewall_logging; then echo 'Firewall logging enabled.' sysctl net.inet.ip.fw.verbose=1 >/dev/null fi if checkyesno firewall_logif; then ifconfig ipfw0 create echo 'Firewall logging pseudo-interface (ipfw0) created.' fi } ipfw_poststart() { local _coscript # Start firewall coscripts # for _coscript in ${firewall_coscripts} ; do if [ -f "${_coscript}" ]; then ${_coscript} quietstart fi done # Enable the firewall # if ! ${SYSCTL} net.inet.ip.fw.enable=1 1>/dev/null 2>&1; then warn "failed to enable IPv4 firewall" fi if afexists inet6; then if ! ${SYSCTL} net.inet6.ip6.fw.enable=1 1>/dev/null 2>&1 then warn "failed to enable IPv6 firewall" fi fi } ipfw_stop() { local _coscript # Disable the firewall # ${SYSCTL} net.inet.ip.fw.enable=0 if afexists inet6; then ${SYSCTL} net.inet6.ip6.fw.enable=0 fi # Stop firewall coscripts # for _coscript in `reverse_list ${firewall_coscripts}` ; do if [ -f "${_coscript}" ]; then ${_coscript} quietstop fi done } load_rc_config $name firewall_coscripts="/etc/rc.d/natd ${firewall_coscripts}" run_rc_command $* Index: head/etc/rc.d/ipmon =================================================================== --- head/etc/rc.d/ipmon (revision 298513) +++ head/etc/rc.d/ipmon (revision 298514) @@ -1,33 +1,34 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ipmon # REQUIRE: FILESYSTEMS hostname sysctl ipfilter # BEFORE: SERVERS # KEYWORD: nojail . /etc/rc.subr name="ipmon" +desc="Monitors /dev/ipl for logged packets" rcvar="ipmon_enable" command="/sbin/${name}" start_precmd="ipmon_precmd" ipmon_precmd() { # Continue only if ipfilter or ipnat is enabled and the # ipfilter module is loaded. # if ! checkyesno ipfilter_enable && ! checkyesno ipnat_enable ; then err 1 "${name} requires either ipfilter or ipnat enabled" fi if ! ${ipfilter_program:-/sbin/ipf} -V | grep -q 'Running: yes' >/dev/null 2>&1; then err 1 "ipfilter module is not loaded" fi return 0 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ipnat =================================================================== --- head/etc/rc.d/ipnat (revision 298513) +++ head/etc/rc.d/ipnat (revision 298514) @@ -1,28 +1,29 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ipnat # REQUIRE: ipfilter # KEYWORD: nojail . /etc/rc.subr name="ipnat" +desc="user interface to the NAT subsystem" rcvar="ipnat_enable" load_rc_config $name start_cmd="ipnat_start" stop_cmd="${ipnat_program} -F -C" reload_cmd="${ipnat_program} -F -C -f ${ipnat_rules}" extra_commands="reload" required_files="${ipnat_rules}" required_modules="ipl:ipfilter" ipnat_start() { echo "Installing NAT rules." ${ipnat_program} -CF -f ${ipnat_rules} ${ipnat_flags} } run_rc_command "$1" Index: head/etc/rc.d/ipsec =================================================================== --- head/etc/rc.d/ipsec (revision 298513) +++ head/etc/rc.d/ipsec (revision 298514) @@ -1,59 +1,60 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ipsec # REQUIRE: FILESYSTEMS # BEFORE: DAEMON mountcritremote # KEYWORD: nojail . /etc/rc.subr name="ipsec" +desc="Internet Protocol Security protocol" rcvar="ipsec_enable" start_precmd="ipsec_prestart" start_cmd="ipsec_start" stop_precmd="test -f $ipsec_file" stop_cmd="ipsec_stop" reload_cmd="ipsec_reload" extra_commands="reload" ipsec_program="/sbin/setkey" # ipsec_file is set by rc.conf ipsec_prestart() { if [ ! -f "$ipsec_file" ]; then warn "$ipsec_file not readable; ipsec start aborted." stop_boot return 1 fi return 0 } ipsec_start() { echo "Installing ipsec manual keys/policies." ${ipsec_program} -f $ipsec_file } ipsec_stop() { echo "Clearing ipsec manual keys/policies." # Still not 100% sure if we would like to do this. # It is very questionable to do this during shutdown session # since it can hang any of the remaining IPv4/v6 sessions. # ${ipsec_program} -F ${ipsec_program} -FP } ipsec_reload() { echo "Reloading ipsec manual keys/policies." ${ipsec_program} -f "$ipsec_file" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/iscsictl =================================================================== --- head/etc/rc.d/iscsictl (revision 298513) +++ head/etc/rc.d/iscsictl (revision 298514) @@ -1,20 +1,21 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: iscsictl # REQUIRE: NETWORK iscsid # BEFORE: DAEMON # KEYWORD: nojail . /etc/rc.subr name="iscsictl" +desc="iSCSI initiator management utility" rcvar="iscsictl_enable" command="/usr/bin/${name}" command_args="${iscsictl_flags}" required_modules="iscsi" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/iscsid =================================================================== --- head/etc/rc.d/iscsid (revision 298513) +++ head/etc/rc.d/iscsid (revision 298514) @@ -1,20 +1,21 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: iscsid # REQUIRE: NETWORK # BEFORE: DAEMON # KEYWORD: nojail . /etc/rc.subr name="iscsid" +desc="iSCSI initiator daemon" rcvar="iscsid_enable" pidfile="/var/run/${name}.pid" command="/usr/sbin/${name}" required_modules="iscsi" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/jail =================================================================== --- head/etc/rc.d/jail (revision 298513) +++ head/etc/rc.d/jail (revision 298514) @@ -1,596 +1,597 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: jail # REQUIRE: LOGIN FILESYSTEMS # BEFORE: securelevel # KEYWORD: nojail shutdown . /etc/rc.subr name="jail" +desc="Manage system jails" rcvar="jail_enable" start_cmd="jail_start" start_postcmd="jail_warn" stop_cmd="jail_stop" config_cmd="jail_config" console_cmd="jail_console" status_cmd="jail_status" extra_commands="config console status" : ${jail_conf:=/etc/jail.conf} : ${jail_program:=/usr/sbin/jail} : ${jail_consolecmd:=/usr/bin/login -f root} : ${jail_jexec:=/usr/sbin/jexec} : ${jail_jls:=/usr/sbin/jls} need_dad_wait= # extract_var jv name param num defval # Extract value from ${jail_$jv_$name} or ${jail_$name} and # set it to $param. If not defined, $defval is used. # When $num is [0-9]*, ${jail_$jv_$name$num} are looked up and # $param is set by using +=. $num=0 is optional (params may start at 1). # When $num is YN or NY, the value is interpreted as boolean. # When $num is @, the value is interpreted as an array separted by IFS. extract_var() { local i _jv _name _param _num _def _name1 _name2 _jv=$1 _name=$2 _param=$3 _num=$4 _def=$5 case $_num in YN) _name1=jail_${_jv}_${_name} _name2=jail_${_name} eval $_name1=\"\${$_name1:-\${$_name2:-$_def}}\" if checkyesno $_name1; then echo " $_param = 1;" else echo " $_param = 0;" fi ;; NY) _name1=jail_${_jv}_${_name} _name2=jail_${_name} eval $_name1=\"\${$_name1:-\${$_name2:-$_def}}\" if checkyesno $_name1; then echo " $_param = 0;" else echo " $_param = 1;" fi ;; [0-9]*) i=$_num while : ; do _name1=jail_${_jv}_${_name}${i} _name2=jail_${_name}${i} eval _tmpargs=\"\${$_name1:-\${$_name2:-$_def}}\" if [ -n "$_tmpargs" ]; then echo " $_param += \"$_tmpargs\";" elif [ $i != 0 ]; then break; fi i=$(($i + 1)) done ;; @) _name1=jail_${_jv}_${_name} _name2=jail_${_name} eval _tmpargs=\"\${$_name1:-\${$_name2:-$_def}}\" set -- $_tmpargs if [ $# -gt 0 ]; then echo -n " $_param = " while [ $# -gt 1 ]; do echo -n "\"$1\", " shift done echo "\"$1\";" fi ;; *) _name1=jail_${_jv}_${_name} _name2=jail_${_name} eval _tmpargs=\"\${$_name1:-\${$_name2:-$_def}}\" if [ -n "$_tmpargs" ]; then echo " $_param = \"$_tmpargs\";" fi ;; esac } # parse_options _j _jv # Parse options and create a temporary configuration file if necessary. # parse_options() { local _j _jv _p _j=$1 _jv=$2 _confwarn=0 if [ -z "$_j" ]; then warn "parse_options: you must specify a jail" return fi eval _jconf=\"\${jail_${_jv}_conf:-/etc/jail.${_j}.conf}\" eval _rootdir=\"\$jail_${_jv}_rootdir\" eval _hostname=\"\$jail_${_jv}_hostname\" if [ -z "$_rootdir" -o \ -z "$_hostname" ]; then if [ -r "$_jconf" ]; then _conf="$_jconf" return 0 elif [ -r "$jail_conf" ]; then _conf="$jail_conf" return 0 else warn "Invalid configuration for $_j " \ "(no jail.conf, no hostname, or no path). " \ "Jail $_j was ignored." fi return 1 fi eval _ip=\"\$jail_${_jv}_ip\" if [ -z "$_ip" ] && ! check_kern_features vimage; then warn "no ipaddress specified and no vimage support. " \ "Jail $_j was ignored." return 1 fi _conf=/var/run/jail.${_j}.conf # # To relieve confusion, show a warning message. # _confwarn=1 if [ -r "$jail_conf" -o -r "$_jconf" ]; then if ! checkyesno jail_parallel_start; then warn "$_conf is created and used for jail $_j." fi fi /usr/bin/install -m 0644 -o root -g wheel /dev/null $_conf || return 1 eval : \${jail_${_jv}_flags:=${jail_flags}} eval _exec=\"\$jail_${_jv}_exec\" eval _exec_start=\"\$jail_${_jv}_exec_start\" eval _exec_stop=\"\$jail_${_jv}_exec_stop\" if [ -n "${_exec}" ]; then # simple/backward-compatible execution _exec_start="${_exec}" _exec_stop="" else # flexible execution if [ -z "${_exec_start}" ]; then _exec_start="/bin/sh /etc/rc" if [ -z "${_exec_stop}" ]; then _exec_stop="/bin/sh /etc/rc.shutdown" fi fi fi eval _interface=\"\${jail_${_jv}_interface:-${jail_interface}}\" eval _parameters=\"\${jail_${_jv}_parameters:-${jail_parameters}}\" eval _fstab=\"\${jail_${_jv}_fstab:-${jail_fstab:-/etc/fstab.$_j}}\" ( date +"# Generated by rc.d/jail at %Y-%m-%d %H:%M:%S" echo "$_j {" extract_var $_jv hostname host.hostname - "" extract_var $_jv rootdir path - "" if [ -n "$_ip" ]; then extract_var $_jv interface interface - "" jail_handle_ips_option $_ip $_interface alias=0 while : ; do eval _x=\"\$jail_${_jv}_ip_multi${alias}\" [ -z "$_x" ] && break jail_handle_ips_option $_x $_interface alias=$(($alias + 1)) done case $need_dad_wait in 1) # Sleep to let DAD complete before # starting services. echo " exec.start += \"sleep " \ $(($(${SYSCTL_N} net.inet6.ip6.dad_count) + 1)) \ "\";" ;; esac # These are applicable only to non-vimage jails. extract_var $_jv fib exec.fib - "" extract_var $_jv socket_unixiproute_only \ allow.raw_sockets NY YES else echo " vnet;" extract_var $_jv vnet_interface vnet.interface @ "" fi echo " exec.clean;" echo " exec.system_user = \"root\";" echo " exec.jail_user = \"root\";" extract_var $_jv exec_prestart exec.prestart 0 "" extract_var $_jv exec_poststart exec.poststart 0 "" extract_var $_jv exec_prestop exec.prestop 0 "" extract_var $_jv exec_poststop exec.poststop 0 "" echo " exec.start += \"$_exec_start\";" extract_var $_jv exec_afterstart exec.start 0 "" echo " exec.stop = \"$_exec_stop\";" extract_var $_jv consolelog exec.consolelog - \ /var/log/jail_${_j}_console.log if [ -r $_fstab ]; then echo " mount.fstab = \"$_fstab\";" fi eval : \${jail_${_jv}_devfs_enable:=${jail_devfs_enable:-NO}} if checkyesno jail_${_jv}_devfs_enable; then echo " mount.devfs;" eval _ruleset=\${jail_${_jv}_devfs_ruleset:-${jail_devfs_ruleset}} case $_ruleset in "") ;; [0-9]*) echo " devfs_ruleset = \"$_ruleset\";" ;; devfsrules_jail) # XXX: This is the default value, # Let jail(8) to use the default because # mount(8) only accepts an integer. # This should accept a ruleset name. ;; *) warn "devfs_ruleset must be an integer." ;; esac fi eval : \${jail_${_jv}_fdescfs_enable:=${jail_fdescfs_enable:-NO}} if checkyesno jail_${_jv}_fdescfs_enable; then echo " mount.fdescfs;" fi eval : \${jail_${_jv}_procfs_enable:=${jail_procfs_enable:-NO}} if checkyesno jail_${_jv}_procfs_enable; then echo " mount.procfs;" fi eval : \${jail_${_jv}_mount_enable:=${jail_mount_enable:-NO}} if checkyesno jail_${_jv}_mount_enable; then echo " allow.mount;" fi extract_var $_jv set_hostname_allow allow.set_hostname YN NO extract_var $_jv sysvipc_allow allow.sysvipc YN NO extract_var $_jv osreldate osreldate extract_var $_jv osrelease osrelease for _p in $_parameters; do echo " ${_p%\;};" done echo "}" ) >> $_conf return 0 } # jail_extract_address argument iface # The second argument is the string from one of the _ip # or the _multi variables. In case of a comma separated list # only one argument must be passed in at a time. # The function alters the _type, _iface, _addr and _mask variables. # jail_extract_address() { local _i _interface _i=$1 _interface=$2 if [ -z "${_i}" ]; then warn "jail_extract_address: called without input" return fi # Check if we have an interface prefix given and split into # iFace and rest. case "${_i}" in *\|*) # ifN|.. prefix there _iface=${_i%%|*} _r=${_i##*|} ;; *) _iface="" _r=${_i} ;; esac # In case the IP has no interface given, check if we have a global one. _iface=${_iface:-${_interface}} # Set address, cut off any prefix/netmask/prefixlen. _addr=${_r} _addr=${_addr%%[/ ]*} # Theoretically we can return here if interface is not set, # as we only care about the _mask if we call ifconfig. # This is not done because we may want to santize IP addresses # based on _type later, and optionally change the type as well. # Extract the prefix/netmask/prefixlen part by cutting off the address. _mask=${_r} _mask=`expr "${_mask}" : "${_addr}\(.*\)"` # Identify type {inet,inet6}. case "${_addr}" in *\.*\.*\.*) _type="inet" ;; *:*) _type="inet6" ;; *) warn "jail_extract_address: type not identified" ;; esac # Handle the special /netmask instead of /prefix or # "netmask xxx" case for legacy IP. # We do NOT support shortend class-full netmasks. if [ "${_type}" = "inet" ]; then case "${_mask}" in /*\.*\.*\.*) _mask=" netmask ${_mask#/}" ;; *) ;; esac # In case _mask is still not set use /32. _mask=${_mask:-/32} elif [ "${_type}" = "inet6" ]; then # In case _mask is not set for IPv6, use /128. _mask=${_mask:-/128} fi } # jail_handle_ips_option input iface # Handle a single argument imput which can be a comma separated # list of addresses (theoretically with an option interface and # prefix/netmask/prefixlen). # jail_handle_ips_option() { local _x _type _i _defif _x=$1 _defif=$2 if [ -z "${_x}" ]; then # No IP given. This can happen for the primary address # of each address family. return fi # Loop, in case we find a comma separated list, we need to handle # each argument on its own. while [ ${#_x} -gt 0 ]; do case "${_x}" in *,*) # Extract the first argument and strip it off the list. _i=`expr "${_x}" : '^\([^,]*\)'` _x=`expr "${_x}" : "^[^,]*,\(.*\)"` ;; *) _i=${_x} _x="" ;; esac _type="" _addr="" _mask="" _iface="" jail_extract_address $_i $_defif # make sure we got an address. case $_addr in "") continue ;; *) ;; esac # Append address to list of addresses for the jail command. case $_type in inet) echo " ip4.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";" ;; inet6) echo " ip6.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";" need_dad_wait=1 ;; esac done } jail_config() { local _j _jv case $1 in _ALL) return ;; esac for _j in $@; do _j=$(echo $_j | tr /. _) _jv=$(echo -n $_j | tr -c '[:alnum:]' _) if parse_options $_j $_jv; then echo "$_j: parameters are in $_conf." fi done } jail_console() { local _j _jv _cmd # One argument that is not _ALL. case $#:$1 in 0:*|1:_ALL) err 3 "Specify a jail name." ;; 1:*) ;; esac _j=$(echo $1 | tr /. _) _jv=$(echo -n $1 | tr -c '[:alnum:]' _) shift case $# in 0) eval _cmd=\${jail_${_jv}_consolecmd:-$jail_consolecmd} ;; *) _cmd=$@ ;; esac $jail_jexec $_j $_cmd } jail_status() { $jail_jls -N } jail_start() { local _j _jv _jid _jl _id _name if [ $# = 0 ]; then return fi echo -n 'Starting jails:' case $1 in _ALL) command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -c" _tmp=`mktemp -t jail` || exit 3 if $command $rc_flags $command_args >> $_tmp 2>&1; then $jail_jls jid name | while read _id _name; do echo -n " $_name" echo $_id > /var/run/jail_${_name}.id done else tail -1 $_tmp fi rm -f $_tmp echo '.' return ;; esac if checkyesno jail_parallel_start; then # # Start jails in parallel and then check jail id when # jail_parallel_start is YES. # _jl= for _j in $@; do _j=$(echo $_j | tr /. _) _jv=$(echo -n $_j | tr -c '[:alnum:]' _) parse_options $_j $_jv || continue _jl="$_jl $_j" eval rc_flags=\${jail_${_jv}_flags:-$jail_flags} eval command=\${jail_${_jv}_program:-$jail_program} command_args="-i -f $_conf -c $_j" $command $rc_flags $command_args \ >/dev/null 2>&1 /var/run/jail_${_j}.id else rm -f /var/run/jail_${_j}.id echo " cannot start jail " \ "\"${_hostname:-${_j}}\": " fi done else # # Start jails one-by-one when jail_parallel_start is NO. # for _j in $@; do _j=$(echo $_j | tr /. _) _jv=$(echo -n $_j | tr -c '[:alnum:]' _) parse_options $_j $_jv || continue eval rc_flags=\${jail_${_jv}_flags:-$jail_flags} eval command=\${jail_${_jv}_program:-$jail_program} command_args="-i -f $_conf -c $_j" _tmp=`mktemp -t jail` || exit 3 if $command $rc_flags $command_args \ >> $_tmp 2>&1 /var/run/jail_${_j}.id else rm -f /var/run/jail_${_j}.id echo " cannot start jail " \ "\"${_hostname:-${_j}}\": " cat $_tmp fi rm -f $_tmp done fi echo '.' } jail_stop() { local _j _jv if [ $# = 0 ]; then return fi echo -n 'Stopping jails:' case $1 in _ALL) command=$jail_program rc_flags=$jail_flags command_args="-f $jail_conf -r" if checkyesno jail_reverse_stop; then $jail_jls name | tail -r else $jail_jls name fi | while read _j; do echo -n " $_j" _tmp=`mktemp -t jail` || exit 3 $command $rc_flags $command_args $_j >> $_tmp 2>&1 if $jail_jls -j $_j > /dev/null 2>&1; then tail -1 $_tmp else rm -f /var/run/jail_${_j}.id fi rm -f $_tmp done echo '.' return ;; esac checkyesno jail_reverse_stop && set -- $(reverse_list $@) for _j in $@; do _j=$(echo $_j | tr /. _) _jv=$(echo -n $_j | tr -c '[:alnum:]' _) parse_options $_j $_jv || continue if ! $jail_jls -j $_j > /dev/null 2>&1; then continue fi eval command=\${jail_${_jv}_program:-$jail_program} echo -n " ${_hostname:-${_j}}" _tmp=`mktemp -t jail` || exit 3 $command -q -f $_conf -r $_j >> $_tmp 2>&1 if $jail_jls -j $_j > /dev/null 2>&1; then tail -1 $_tmp else rm -f /var/run/jail_${_j}.id fi rm -f $_tmp done echo '.' } jail_warn() { # To relieve confusion, show a warning message. case $_confwarn in 1) warn "Per-jail configuration via jail_* variables " \ "is obsolete. Please consider migrating to $jail_conf." ;; esac } load_rc_config $name case $# in 1) run_rc_command $@ ${jail_list:-_ALL} ;; *) jail_reverse_stop="no" run_rc_command $@ ;; esac Index: head/etc/rc.d/kadmind =================================================================== --- head/etc/rc.d/kadmind (revision 298513) +++ head/etc/rc.d/kadmind (revision 298514) @@ -1,28 +1,29 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: kadmind # REQUIRE: kdc # KEYWORD: shutdown . /etc/rc.subr name=kadmind +desc="Server for administrative access to Kerberos database" rcvar=${name}_enable required_vars=kdc_enable start_precmd=${name}_start_precmd set_rcvar_obsolete kadmind5_server_enable kadmind_enable set_rcvar_obsolete kadmind5_server kadmind_program set_rcvar_obsolete kerberos5_server_enable kdc_enable kadmind_start_precmd() { command_args="$command_args &" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/kdc =================================================================== --- head/etc/rc.d/kdc (revision 298513) +++ head/etc/rc.d/kdc (revision 298514) @@ -1,27 +1,28 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: kdc # REQUIRE: NETWORKING # KEYWORD: shutdown . /etc/rc.subr name=kdc +desc="Kerberos 5 server" rcvar=${name}_enable start_precmd=${name}_start_precmd set_rcvar_obsolete kerberos5_server_enable kdc_enable set_rcvar_obsolete kerberos5_server kdc_program set_rcvar_obsolete kerberos5_server_flags kdc_flags kdc_start_precmd() { command_args="$command_args --detach" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/keyserv =================================================================== --- head/etc/rc.d/keyserv (revision 298513) +++ head/etc/rc.d/keyserv (revision 298514) @@ -1,26 +1,27 @@ #!/bin/sh # # $FreeBSD$ # # Start keyserv if we are running Secure RPC # PROVIDE: keyserv # REQUIRE: ypset # BEFORE: DAEMON # KEYWORD: shutdown . /etc/rc.subr name="keyserv" +desc="Server for storing private encryption keys" rcvar="keyserv_enable" command="/usr/sbin/${name}" start_precmd="keyserv_prestart" keyserv_prestart() { force_depend rpcbind || return 1 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/kfd =================================================================== --- head/etc/rc.d/kfd (revision 298513) +++ head/etc/rc.d/kfd (revision 298514) @@ -1,23 +1,24 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: kfd # REQUIRE: NETWORK # KEYWORD: shutdown . /etc/rc.subr name=kfd +desc="Receive forwarded tickets" rcvar=${name}_enable start_precmd=${name}_start_precmd kfd_start_precmd() { command_args="$command_args -i &" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/kld =================================================================== --- head/etc/rc.d/kld (revision 298513) +++ head/etc/rc.d/kld (revision 298514) @@ -1,53 +1,54 @@ #!/bin/sh # Copyright (c) 2011 Douglas Barton # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: kld # REQUIRE: kldxref # KEYWORD: nojail . /etc/rc.subr name="kld" +desc="Load kernel modules" start_cmd="${name}_start" stop_cmd=':' kld_start() { [ -n "$kld_list" ] || return local _kld echo 'Loading kernel modules:' for _kld in $kld_list ; do load_kld -e ${_kld}.ko $_kld done } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/kldxref =================================================================== --- head/etc/rc.d/kldxref (revision 298513) +++ head/etc/rc.d/kldxref (revision 298514) @@ -1,35 +1,36 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: kldxref # REQUIRE: FILESYSTEMS # BEFORE: netif # KEYWORD: nojail . /etc/rc.subr rcvar="kldxref_enable" name="kldxref" +desc="Generate hints for the kernel loader" stop_cmd=":" start_cmd="kldxref_start" kldxref_start() { if [ -n "$kldxref_module_path" ]; then MODULE_PATHS="$kldxref_module_path" else MODULE_PATHS=`sysctl -n kern.module_path` fi IFS=';' for MODULE_DIR in $MODULE_PATHS; do if [ ! -f "$MODULE_DIR/linker.hints" ] || checkyesno kldxref_clobber; then echo "Building $MODULE_DIR/linker.hints" kldxref "$MODULE_DIR" fi done } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/kpasswdd =================================================================== --- head/etc/rc.d/kpasswdd (revision 298513) +++ head/etc/rc.d/kpasswdd (revision 298514) @@ -1,28 +1,29 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: kpasswdd # REQUIRE: kdc # KEYWORD: shutdown . /etc/rc.subr name=kpasswdd +desc="Kerberos 5 password changing" rcvar=${name}_enable required_vars=kdc_enable start_precmd=${name}_start_precmd set_rcvar_obsolete kpasswdd_server_enable kpasswdd_enable set_rcvar_obsolete kpasswdd_server kpasswdd_program set_rcvar_obsolete kerberos5_server_enable kdc_enable kpasswdd_start_precmd() { command_args="$command_args &" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/ldconfig =================================================================== --- head/etc/rc.d/ldconfig (revision 298513) +++ head/etc/rc.d/ldconfig (revision 298514) @@ -1,105 +1,106 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: ldconfig # REQUIRE: mountcritremote FILESYSTEMS # BEFORE: DAEMON . /etc/rc.subr name="ldconfig" +desc="Configure the shared library cache" ldconfig_command="/sbin/ldconfig" start_cmd="ldconfig_start" stop_cmd=":" ldconfig_start() { local _files _ins _ins= ldconfig=${ldconfig_command} checkyesno ldconfig_insecure && _ins="-i" if [ -x "${ldconfig_command}" ]; then _LDC="/lib /usr/lib" for i in ${ldconfig_local_dirs}; do if [ -d "${i}" ]; then _files=`find ${i} -type f` if [ -n "${_files}" ]; then ldconfig_paths="${ldconfig_paths} `cat ${_files} | sort -u`" fi fi done for i in ${ldconfig_paths} /etc/ld-elf.so.conf; do if [ -r "${i}" ]; then _LDC="${_LDC} ${i}" fi done check_startmsgs && echo 'ELF ldconfig path:' ${_LDC} ${ldconfig} -elf ${_ins} ${_LDC} case `sysctl -n hw.machine_arch` in amd64) for i in ${ldconfig_local32_dirs}; do if [ -d "${i}" ]; then _files=`find ${i} -type f` if [ -n "${_files}" ]; then ldconfig32_paths="${ldconfig32_paths} `cat ${_files} | sort -u`" fi fi done _LDC="" for i in ${ldconfig32_paths}; do if [ -r "${i}" ]; then _LDC="${_LDC} ${i}" fi done check_startmsgs && echo '32-bit compatibility ldconfig path:' ${_LDC} ${ldconfig} -32 -m ${_ins} ${_LDC} ;; esac case `sysctl -n hw.machine_arch` in armv6) for i in ${ldconfig_localsoft_dirs}; do if [ -d "${i}" ]; then _files=`find ${i} -type f` if [ -n "${_files}" ]; then ldconfigsoft_paths="${ldconfigsoft_paths} `cat ${_files} | sort -u`" fi fi done _LDC="" for i in ${ldconfigsoft_paths}; do if [ -r "${i}" ]; then _LDC="${_LDC} ${i}" fi done check_startmsgs && echo 'Soft Float compatibility ldconfig path:' ${_LDC} ${ldconfig} -soft -m ${_ins} ${_LDC} ;; esac # Legacy aout support for i386 only case `sysctl -n hw.machine_arch` in i386) # Default the a.out ldconfig path. : ${ldconfig_paths_aout=${ldconfig_paths}} _LDC="" for i in /usr/lib/aout ${ldconfig_paths_aout} /etc/ld.so.conf; do if [ -r "${i}" ]; then _LDC="${_LDC} ${i}" fi done check_startmsgs && echo 'a.out ldconfig path:' ${_LDC} ${ldconfig} -aout ${_ins} ${_LDC} ;; esac fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/local =================================================================== --- head/etc/rc.d/local (revision 298513) +++ head/etc/rc.d/local (revision 298514) @@ -1,36 +1,37 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: local # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown . /etc/rc.subr name="local" +desc="Run /etc/rc.local and /etc/shutdown.local" start_cmd="local_start" stop_cmd="local_stop" local_start() { if [ -f /etc/rc.local ]; then echo -n 'Starting local daemons:' . /etc/rc.local echo '.' fi } local_stop() { if [ -f /etc/rc.shutdown.local ]; then echo -n 'Shutting down local daemons:' . /etc/rc.shutdown.local echo '.' fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/local_unbound =================================================================== --- head/etc/rc.d/local_unbound (revision 298513) +++ head/etc/rc.d/local_unbound (revision 298514) @@ -1,115 +1,115 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: local_unbound # REQUIRE: FILESYSTEMS netif resolv # BEFORE: NETWORKING # KEYWORD: shutdown . /etc/rc.subr name="local_unbound" -desc="local caching forwarding resolver" +desc="Local caching forwarding resolver" rcvar="local_unbound_enable" command="/usr/sbin/unbound" extra_commands="anchor configtest reload setup" start_precmd="local_unbound_prestart" start_postcmd="local_unbound_poststart" reload_precmd="local_unbound_configtest" anchor_cmd="local_unbound_anchor" configtest_cmd="local_unbound_configtest" setup_cmd="local_unbound_setup" pidfile="/var/run/${name}.pid" load_rc_config $name : ${local_unbound_workdir:=/var/unbound} : ${local_unbound_config:=${local_unbound_workdir}/unbound.conf} : ${local_unbound_flags:="-c ${local_unbound_config}"} : ${local_unbound_forwardconf:=${local_unbound_workdir}/forward.conf} : ${local_unbound_controlconf:=${local_unbound_workdir}/control.conf} : ${local_unbound_anchor:=${local_unbound_workdir}/root.key} : ${local_unbound_forwarders:=} do_as_unbound() { echo "$@" | su -m unbound } # # Retrieve or update the DNSSEC root anchor # local_unbound_anchor() { do_as_unbound /usr/sbin/unbound-anchor -a ${local_unbound_anchor} # we can't trust the exit code - check if the file exists [ -f ${local_unbound_anchor} ] } # # Check the unbound configuration file # local_unbound_configtest() { do_as_unbound /usr/sbin/unbound-checkconf ${local_unbound_config} } # # Create the unbound configuration file and update resolv.conf to # point to unbound. # local_unbound_setup() { echo "Performing initial setup." /usr/sbin/local-unbound-setup -n \ -u unbound \ -w ${local_unbound_workdir} \ -c ${local_unbound_config} \ -f ${local_unbound_forwardconf} \ -o ${local_unbound_controlconf} \ -a ${local_unbound_anchor} \ ${local_unbound_forwarders} } # # Before starting, check that the configuration file and root anchor # exist. If not, attempt to generate them. # local_unbound_prestart() { # Create configuration file if [ ! -f ${local_unbound_config} ] ; then run_rc_command setup fi # Retrieve DNSSEC root key if [ ! -f ${local_unbound_anchor} ] ; then run_rc_command anchor fi } # # After starting, wait for Unbound to report that it is ready to avoid # race conditions with services which require functioning DNS. # local_unbound_poststart() { local retry=5 echo -n "Waiting for nameserver to start..." until "${command}-control" status | grep -q "is running" ; do if [ $((retry -= 1)) -eq 0 ] ; then echo " giving up" return 1 fi echo -n "." sleep 1 done echo " good" } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/localpkg =================================================================== --- head/etc/rc.d/localpkg (revision 298513) +++ head/etc/rc.d/localpkg (revision 298514) @@ -1,77 +1,78 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: localpkg # REQUIRE: abi # BEFORE: securelevel # KEYWORD: shutdown . /etc/rc.subr name="localpkg" +desc="Run local init scripts" start_cmd="pkg_start" stop_cmd="pkg_stop" pkg_start() { local initdone # For each dir in $local_startup, search for init scripts matching *.sh # case ${local_startup} in [Nn][Oo] | '') ;; *) initdone= find_local_scripts_old for script in ${zlist} ${slist}; do if [ -z "${initdone}" -a -f "${script}" ]; then echo -n 'Local package initialization:' initdone=yes fi if [ -x "${script}" ]; then (set -T trap 'exit 1' 2 ${script} start) elif [ -f "${script}" -o -L "${script}" ]; then echo -n " (skipping ${script}, not executable)" fi done [ -n "${initdone}" ] && echo '.' ;; esac } pkg_stop() { local initdone case ${local_startup} in [Nn][Oo] | '') ;; *) initdone= find_local_scripts_old for script in `reverse_list ${slist} ${zlist}`; do if [ -z "${initdone}" -a -f "${script}" ]; then echo -n 'Shutting down local packages:' initdone=yes fi if [ -x "${script}" ]; then if [ `sysctl -n debug.bootverbose` -eq 1 ]; then echo "==>" ${script} fi (set -T trap 'exit 1' 2 ${script} stop) fi done [ -n "${initdone}" ] && echo '.' ;; esac } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/lockd =================================================================== --- head/etc/rc.d/lockd (revision 298513) +++ head/etc/rc.d/lockd (revision 298514) @@ -1,31 +1,32 @@ #!/bin/sh # # FreeBSD History: src/etc/rc.d/nfslocking,v 1.11 2004/10/07 13:55:26 mtm # $FreeBSD$ # # PROVIDE: lockd # REQUIRE: nfsclient nfsd rpcbind statd # BEFORE: DAEMON # KEYWORD: nojail shutdown . /etc/rc.subr name="lockd" +desc="NFS file locking daemon" rcvar=rpc_lockd_enable command="/usr/sbin/rpc.${name}" start_precmd='lockd_precmd' # Make sure that we are either an NFS client or server, and that we get # the correct flags from rc.conf(5). # lockd_precmd() { force_depend rpcbind || return 1 force_depend statd rpc_statd || return 1 rc_flags=${rpc_lockd_flags} } load_rc_config $name run_rc_command $1 Index: head/etc/rc.d/lpd =================================================================== --- head/etc/rc.d/lpd (revision 298513) +++ head/etc/rc.d/lpd (revision 298514) @@ -1,27 +1,28 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: lpd # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown . /etc/rc.subr name="lpd" +desc="Line printer spooler daemon" rcvar="lpd_enable" command="/usr/sbin/${name}" required_files="/etc/printcap" start_precmd="chkprintcap" chkprintcap() { if checkyesno chkprintcap_enable ; then /usr/sbin/chkprintcap ${chkprintcap_flags} fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/mdconfig =================================================================== --- head/etc/rc.d/mdconfig (revision 298513) +++ head/etc/rc.d/mdconfig (revision 298514) @@ -1,196 +1,197 @@ #!/bin/sh # # Copyright (c) 2006 The FreeBSD Project # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: mdconfig # REQUIRE: swap root . /etc/rc.subr name="mdconfig" +desc="Create and control memory disks" stop_cmd="mdconfig_stop" start_cmd="mdconfig_start" start_precmd='[ -n "${_mdconfig_list}" ]' required_modules="geom_md:g_md" is_readonly() { local _mp _ret _mp=$1 _ret=`mount | while read _line; do case ${_line} in *" ${_mp} "*read-only*) echo "yes" ;; *) ;; esac; done` if [ -n "${_ret}" ]; then return 0 else return 1 fi } init_variables() { local _i _fs="" _mp="" _dev="/dev/${_md}" eval _config=\$mdconfig_${_md} eval _newfs=\$mdconfig_${_md}_newfs _type=${_config##*-t\ } _type=${_type%%\ *} if [ -z "${_type}" ]; then err 1 "You need to specify \"-t \" in mdconfig_${_md}" fi if [ "${_type}" = "vnode" ]; then _file=${_config##*-f\ } _file=${_file%%\ *} if [ -z "${_file}" ]; then err 2 "You need to specify \"-f \" in mdconfig_${_md} for vnode devices" fi if [ "${_file}" != "${_file%.uzip}" ]; then _dev="/dev/${_md}.uzip" fi for _i in `df ${_file} 2>/dev/null`; do _fs=${_i}; done fi # Debugging help. debug "${_md} config: ${_config}" debug "${_md} type: ${_type}" debug "${_md} dev: ${_dev}" debug "${_md} file: ${_file}" debug "${_md} fs: ${_fs}" debug "${_md} newfs flags: ${_newfs}" } mdconfig_start() { local _md _mp _config _type _dev _file _fs _newfs _fsck_cmd for _md in ${_mdconfig_list}; do init_variables ${_md} # Create md(4) devices of types swap, malloc and vnode if the # file is on the root partition. if [ "${_type}" != "vnode" -o "${_fs}" = "/" ]; then if [ "${_type}" = "vnode" ]; then if is_readonly ${_fs}; then warn "${_fs} is mounted read-only, skipping ${_md}." continue fi if [ "${_file}" != "${_file%.uzip}" ]; then load_kld -m g_uzip geom_uzip || return 3 # sleep a bit to allow creation of /dev/mdX.uzip sleep 2 fi fi if mdconfig -l -u ${_md} >/dev/null 2>&1; then err 3 "${_md} already exists" fi echo "Creating ${_md} device (${_type})." if ! mdconfig -a ${_config} -u ${_md}; then echo "Creating ${_md} device failed, moving on." continue fi # Skip fsck for uzip devices. if [ "${_type}" = "vnode" ]; then if [ "${_file}" != "${_file%.uzip}" ]; then _fsck_cmd=":" elif checkyesno background_fsck; then _fsck_cmd="fsck -F" else _fsck_cmd="fsck" fi if ! eval ${_fsck_cmd} -p ${_dev} >/dev/null; then echo "Fsck failed on ${_dev}, not mounting the filesystem." continue fi else newfs ${_newfs} ${_dev} >/dev/null fi if mount -d ${_dev} 2>&1 >/dev/null; then echo "Mounting ${_dev}." mount ${_dev} fi fi done } mdconfig_stop() { local _md _mp _config _type _dev _file _fs _newfs _i for _md in ${_mdconfig_list}; do init_variables ${_md} if [ "${_type}" != "vnode" -o "${_fs}" = "/" ]; then for _i in `df ${_dev} 2>/dev/null`; do _mp=${_i}; done if [ -z "${_mp}" -o "${_mp}" != "${_mp%%%}" ]; then echo "Device ${_dev} isn't mounted." else echo "Umounting ${_dev}." umount ${_dev} fi if mdconfig -l -u ${_md} >/dev/null 2>&1; then echo "Destroying ${_md}." mdconfig -d -u ${_md} fi fi done } _mdconfig_cmd="$1" if [ $# -gt 0 ]; then shift fi [ -n "$*" ] && _mdconfig_list="$*" load_rc_config $name if [ -z "${_mdconfig_list}" ]; then for _mdconfig_config in `list_vars mdconfig_md[0-9]\* | sort_lite -nk1.12` do _mdconfig_unit=${_mdconfig_config#mdconfig_md} [ "${_mdconfig_unit#*[!0-9]}" = "$_mdconfig_unit" ] || continue _mdconfig_list="$_mdconfig_list md$_mdconfig_unit" done _mdconfig_list="${_mdconfig_list# }" fi run_rc_command "${_mdconfig_cmd}" Index: head/etc/rc.d/mdconfig2 =================================================================== --- head/etc/rc.d/mdconfig2 (revision 298513) +++ head/etc/rc.d/mdconfig2 (revision 298514) @@ -1,226 +1,227 @@ #!/bin/sh # # Copyright (c) 2006 The FreeBSD Project # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: mdconfig2 # REQUIRE: mountcritremote # BEFORE: SERVERS . /etc/rc.subr name="mdconfig2" +desc="Create and control memory disks" stop_cmd="mdconfig2_stop" start_cmd="mdconfig2_start" start_precmd='[ -n "${_mdconfig2_list}" ]' required_modules="geom_md:g_md" is_readonly() { local _mp _ret _mp=$1 _ret=`mount | while read _line; do case ${_line} in *" ${_mp} "*read-only*) echo "yes" ;; *) ;; esac; done` if [ -n "${_ret}" ]; then return 0 else return 1 fi } init_variables() { local _i _fs="" _mp="" _mounted="no" _dev="/dev/${_md}" eval _config=\$mdconfig_${_md} eval _owner=\$mdconfig_${_md}_owner eval _perms=\$mdconfig_${_md}_perms eval _files=\$mdconfig_${_md}_files eval _populate=\$mdconfig_${_md}_cmd _type=${_config##*-t\ } _type=${_type%%\ *} if [ -z "${_type}" ]; then err 1 "You need to specify \"-t \" in mdconfig_${_md}" fi if [ "${_type}" = "vnode" ]; then _file=${_config##*-f\ } _file=${_file%%\ *} if [ -z "${_file}" ]; then err 2 "You need to specify \"-f \" in mdconfig_${_md} for vnode devices" fi if [ "${_file}" != "${_file%.uzip}" ]; then _dev="/dev/${_md}.uzip" fi for _i in `df ${_file} 2>/dev/null`; do _fs=${_i}; done fi # Debugging help. debug "${_md} config: ${_config}" debug "${_md} type: ${_type}" debug "${_md} dev: ${_dev}" debug "${_md} file: ${_file}" debug "${_md} fs: ${_fs}" debug "${_md} owner: ${_owner}" debug "${_md} perms: ${_perms}" debug "${_md} files: ${_files}" debug "${_md} populate cmd: ${_populate}" } mdconfig2_start() { local _md _fs _mp _mounted _dev _config _type _file _owner _perms _files _populate _fsck_cmd _i for _md in ${_mdconfig2_list}; do init_variables ${_md} if [ ! -r ${_file} ]; then err 3 "${_file} doesn't exist" continue fi # First pass: create md(4) vnode devices from files stored on # non-root partition. Swap and malloc md(4) devices have already # been created. if [ "${_type}" = "vnode" -a "${_fs}" != "/" ]; then if [ "${_file}" != "${_file%.uzip}" ]; then load_kld -m g_uzip geom_uzip || return 3 fi if is_readonly ${_fs}; then warn "${_fs} is mounted read-only, skipping ${_md}." continue fi if mdconfig -l -u ${_md} >/dev/null 2>&1; then err 3 "${_md} already exists" fi echo "Creating ${_md} device (${_type})." if ! mdconfig -a ${_config} -u ${_md}; then echo "Creating ${_md} device failed, moving on." continue fi # Skip fsck for uzip devices. if [ "${_file}" != "${_file%.uzip}" ]; then _fsck_cmd=":" elif checkyesno background_fsck; then _fsck_cmd="fsck -F" else _fsck_cmd="fsck" fi if ! eval ${_fsck_cmd} -p ${_dev} >/dev/null; then echo "Fsck failed on ${_dev}, not mounting the filesystem." continue fi if mount -d ${_dev} >/dev/null 2>&1; then echo "Mounting ${_dev}." mount ${_dev} fi fi for _i in `df ${_dev} 2>/dev/null`; do _mp=${_i}; done if [ ! -z "${_mp}" -a "${_mp}" = "${_mp%%%}" ]; then _mounted="yes" fi if checkyesno _mounted; then # Second pass: change permissions and ownership. [ -z "${_owner}" ] || chown -f ${_owner} ${_dev} ${_mp} [ -z "${_perms}" ] || chmod -f ${_perms} ${_dev} ${_mp} # Third pass: populate with foreign files. if [ -n "${_files}" -o -n "${_populate}" ]; then echo "Populating ${_dev}." fi if [ -n "${_files}" ]; then cp -Rp ${_files} ${_mp} fi if [ -n "${_populate}" ]; then eval ${_populate} fi fi done } mdconfig2_stop() { local _md _fs _mp _mounted _dev _config _type _file _owner _perms _files _populate for _md in ${_mdconfig2_list}; do init_variables ${_md} if [ "${_type}" = "vnode" ]; then for i in `df ${_dev} 2>/dev/null`; do _mp=$i; done if [ ! -r "${_file}" -o "${_fs}" = "/" ]; then continue fi if [ -z "${_mp}" -o "${_mp}" != "${_mp%%%}" ]; then echo "Device ${_dev} isn't mounted." else echo "Umounting ${_dev}." umount ${_dev} fi if mdconfig -l -u ${_md} >/dev/null 2>&1; then echo "Destroying ${_md}." mdconfig -d -u ${_md} fi fi done } _mdconfig2_cmd="$1" if [ $# -gt 0 ]; then shift fi [ -n "$*" ] && _mdconfig2_list="$*" load_rc_config $name if [ -z "${_mdconfig2_list}" ]; then for _mdconfig2_config in `list_vars mdconfig_md[0-9]\* | sort_lite -nk1.12` do _mdconfig2_unit=${_mdconfig2_config#mdconfig_md} [ "${_mdconfig2_unit#*[!0-9]}" = "$_mdconfig2_unit" ] || continue _mdconfig2_list="$_mdconfig2_list md$_mdconfig2_unit" done _mdconfig2_list="${_mdconfig2_list# }" fi run_rc_command "${_mdconfig2_cmd}" Index: head/etc/rc.d/mixer =================================================================== --- head/etc/rc.d/mixer (revision 298513) +++ head/etc/rc.d/mixer (revision 298514) @@ -1,103 +1,104 @@ #!/bin/sh - # # Copyright (c) 2004 The FreeBSD Project # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: mixer # REQUIRE: FILESYSTEMS # KEYWORD: nojail shutdown . /etc/rc.subr name="mixer" +desc="Save and restore soundcard mixer values" rcvar="mixer_enable" stop_cmd="mixer_stop" start_cmd="mixer_start" reload_cmd="mixer_start" extra_commands="reload" # # List current mixer devices to stdout. # list_mixers() { ( cd /dev ; ls mixer* 2>/dev/null ) } # # Save state of an individual mixer specified as $1 # mixer_save() { local dev dev="/dev/${1}" if [ -r ${dev} ]; then /usr/sbin/mixer -f ${dev} -s > /var/db/${1}-state 2>/dev/null fi } # # Restore the state of an individual mixer specified as $1 # mixer_restore() { local file dev dev="/dev/${1}" file="/var/db/${1}-state" if [ -r ${dev} -a -r ${file} ]; then /usr/sbin/mixer -f ${dev} `cat ${file}` > /dev/null fi } # # Restore state of all mixers # mixer_start() { local mixer for mixer in `list_mixers`; do mixer_restore ${mixer} done } # # Save the state of all mixers # mixer_stop() { local mixer for mixer in `list_mixers`; do mixer_save ${mixer} done } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/motd =================================================================== --- head/etc/rc.d/motd (revision 298513) +++ head/etc/rc.d/motd (revision 298514) @@ -1,49 +1,50 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: motd # REQUIRE: mountcritremote # BEFORE: LOGIN . /etc/rc.subr name="motd" +desc="Update /etc/motd" rcvar="update_motd" start_cmd="motd_start" stop_cmd=":" PERMS="644" motd_start() { # Update kernel info in /etc/motd # Must be done *before* interactive logins are possible # to prevent possible race conditions. # check_startmsgs && echo -n 'Updating motd:' if [ ! -f /etc/motd ]; then install -c -o root -g wheel -m ${PERMS} /dev/null /etc/motd fi if [ ! -w /etc/motd ]; then echo ' /etc/motd is not writable, update failed.' return fi T=`mktemp -t motd` uname -v | sed -e 's,^\([^#]*\) #\(.* [1-2][0-9][0-9][0-9]\).*/\([^\]*\) $,\1 (\3) #\2,' > ${T} awk '{if (NR == 1) {if ($1 == "FreeBSD") {next} else {print "\n"$0}} else {print}}' < /etc/motd >> ${T} cmp -s $T /etc/motd || { cp $T /etc/motd chmod ${PERMS} /etc/motd } rm -f $T check_startmsgs && echo '.' } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/mountcritlocal =================================================================== --- head/etc/rc.d/mountcritlocal (revision 298513) +++ head/etc/rc.d/mountcritlocal (revision 298514) @@ -1,88 +1,89 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: mountcritlocal # REQUIRE: root hostid_save mdconfig # KEYWORD: nojail shutdown . /etc/rc.subr name="mountcritlocal" +desc="Mount critical local filesystems" start_cmd="mountcritlocal_start" stop_cmd=sync mountcritlocal_start() { local err holders waited # Set up the list of network filesystem types for which mounting # should be delayed until after network initialization. case ${extra_netfs_types} in [Nn][Oo]) ;; *) netfs_types="${netfs_types} ${extra_netfs_types}" ;; esac # Mount everything except nfs filesystems. - check_startmsgs && echo -n 'Mounting local file systems:' + check_startmsgs && echo -n 'Mounting local filesystems:' mount_excludes='no' for i in ${netfs_types}; do fstype=${i%:*} mount_excludes="${mount_excludes}${fstype}," done mount_excludes=${mount_excludes%,} # Originally, root mount hold had to be released before mounting # the root filesystem. This delayed the boot, so it was changed # to only wait if the root device isn't readily available. This # can result in this script executing before all the devices - such # as graid(8) - are available. Thus, should the mount fail, # we will wait for the root mount hold release and retry. mount -a -t ${mount_excludes} err=$? if [ ${err} -ne 0 ]; then echo echo 'Mounting /etc/fstab filesystems failed,' \ 'will retry after root mount hold release' waited=0 while [ ${waited} -lt ${root_hold_delay} ]; do holders="$(sysctl -n vfs.root_mount_hold)" if [ -z "${holders}" ]; then break; fi if [ ${waited} -eq 0 ]; then echo -n "Waiting ${root_hold_delay}s" \ "for the root mount holders: ${holders}" else echo -n . fi if [ ${waited} -eq ${root_hold_delay} ]; then break 2 fi sleep 1 waited=$(($waited + 1)) done mount -a -t ${mount_excludes} err=$? fi check_startmsgs && echo '.' case ${err} in 0) ;; *) echo 'Mounting /etc/fstab filesystems failed,' \ 'startup aborted' stop_boot true ;; esac } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/mountcritremote =================================================================== --- head/etc/rc.d/mountcritremote (revision 298513) +++ head/etc/rc.d/mountcritremote (revision 298514) @@ -1,79 +1,80 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: mountcritremote # REQUIRE: NETWORKING FILESYSTEMS ipsec netwait # KEYWORD: nojail . /etc/rc.subr name="mountcritremote" +desc="Mount critical remote filesystems" stop_cmd=":" start_cmd="mountcritremote_start" start_precmd="mountcritremote_precmd" # Mount NFS filesystems if present in /etc/fstab # # XXX When the vfsload() issues with nfsclient support and related sysctls # have been resolved, this block can be removed, and the condition that # skips nfs in the following block (for "other network filesystems") can # be removed. # mountcritremote_precmd() { case "`mount -d -a -t nfs 2> /dev/null`" in *mount_nfs*) # Handle absent nfs client support load_kld -m nfs nfscl || return 1 ;; esac return 0 } mountcritremote_start() { # Mount nfs filesystems. # case "`/sbin/mount -d -a -t nfs`" in '') ;; *) - echo -n 'Mounting NFS file systems:' + echo -n 'Mounting NFS filesystems:' mount -a -t nfs echo '.' ;; esac # Mount other network filesystems if present in /etc/fstab. case ${extra_netfs_types} in [Nn][Oo]) ;; *) netfs_types="${netfs_types} ${extra_netfs_types}" ;; esac for i in ${netfs_types}; do fstype=${i%:*} fsdecr=${i#*:} [ "${fstype}" = "nfs" ] && continue case "`mount -d -a -t ${fstype}`" in *mount_${fstype}*) - echo -n "Mounting ${fsdecr} file systems:" + echo -n "Mounting ${fsdecr} filesystems:" mount -a -t ${fstype} echo '.' ;; esac done # Cleanup /var again just in case it's a network mount. /etc/rc.d/cleanvar quietreload rm -f /var/run/clean_var /var/spool/lock/clean_var } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/mountd =================================================================== --- head/etc/rc.d/mountd (revision 298513) +++ head/etc/rc.d/mountd (revision 298514) @@ -1,46 +1,47 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: mountd # REQUIRE: NETWORKING rpcbind quota # KEYWORD: nojail shutdown . /etc/rc.subr name="mountd" +desc="Service remote NFS mount requests" rcvar="mountd_enable" command="/usr/sbin/${name}" pidfile="/var/run/${name}.pid" required_files="/etc/exports" start_precmd="mountd_precmd" extra_commands="reload" mountd_precmd() { force_depend rpcbind || return 1 # mountd flags will differ depending on rc.conf settings # if checkyesno nfs_server_enable ; then if checkyesno weak_mountd_authentication; then rc_flags="${mountd_flags} -n" fi else if checkyesno mountd_enable; then checkyesno weak_mountd_authentication && rc_flags="-n" fi fi if checkyesno zfs_enable; then rc_flags="${rc_flags} /etc/exports /etc/zfs/exports" fi rm -f /var/db/mountdtab ( umask 022 ; > /var/db/mountdtab ) || err 1 'Cannot create /var/db/mountdtab' } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/mountlate =================================================================== --- head/etc/rc.d/mountlate (revision 298513) +++ head/etc/rc.d/mountlate (revision 298514) @@ -1,47 +1,48 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: mountlate # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: nojail . /etc/rc.subr name="mountlate" +desc="Mount filesystems with \"late\" option from /etc/fstab" start_cmd="mountlate_start" stop_cmd=":" mountlate_start() { local err latefs # Mount "late" filesystems. # err=0 - echo -n 'Mounting late file systems:' + echo -n 'Mounting late filesystems:' mount -a -L err=$? echo '.' case ${err} in 0) ;; *) echo 'Mounting /etc/fstab filesystems failed,' \ ' startup aborted' stop_boot true ;; esac # If we booted a special kernel remove the record # so we will boot the default kernel next time. if [ -x /sbin/nextboot ]; then /sbin/nextboot -D fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/moused =================================================================== --- head/etc/rc.d/moused (revision 298513) +++ head/etc/rc.d/moused (revision 298514) @@ -1,72 +1,73 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: moused # REQUIRE: DAEMON FILESYSTEMS # KEYWORD: nojail shutdown . /etc/rc.subr name="moused" +desc="Mouse daemon" rcvar="moused_enable" command="/usr/sbin/${name}" start_cmd="moused_start" pidprefix="/var/run/moused" pidfile="${pidprefix}.pid" pidarg= load_rc_config $name # Set the pid file and variable name. The second argument, if it exists, is # expected to be the mouse device. # if [ -n "$2" ]; then eval moused_$2_enable=\${moused_$2_enable-${moused_nondefault_enable}} rcvar="moused_${2}_enable" pidfile="${pidprefix}.$2.pid" pidarg="-I $pidfile" fi moused_start() { local ms myflags myport mytype # Set the mouse device and get any related variables. If # a moused device has been specified on the commandline, then # rc.conf(5) variables defined for that device take precedence # over the generic moused_* variables. The only exception is # the moused_port variable, which if not defined sets it to the # passed in device name. # ms=$1 if [ -n "$ms" ]; then eval myflags=\${moused_${ms}_flags-$moused_flags} eval myport=\${moused_${ms}_port-/dev/$ms} eval mytype=\${moused_${ms}_type-$moused_type} else ms="default" myflags="$moused_flags" myport="$moused_port" mytype="$moused_type" fi check_startmsgs && echo -n "Starting ${ms} moused" /usr/sbin/moused ${myflags} -p ${myport} -t ${mytype} ${pidarg} check_startmsgs && echo '.' mousechar_arg= case ${mousechar_start} in [Nn][Oo] | '') ;; *) mousechar_arg="-M ${mousechar_start}" ;; esac for ttyv in /dev/ttyv* ; do vidcontrol < ${ttyv} ${mousechar_arg} -m on done } run_rc_command $* Index: head/etc/rc.d/msgs =================================================================== --- head/etc/rc.d/msgs (revision 298513) +++ head/etc/rc.d/msgs (revision 298514) @@ -1,25 +1,26 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: msgs # REQUIRE: LOGIN . /etc/rc.subr name="msgs" +desc="Make a bounds file for msgs(1)" start_cmd="msgs_start" stop_cmd=":" msgs_start() { # Make a bounds file for msgs(1) if there isn't one already # if [ -d /var/msgs -a ! -f /var/msgs/bounds -a ! -L /var/msgs/bounds ]; then echo 0 > /var/msgs/bounds fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/natd =================================================================== --- head/etc/rc.d/natd (revision 298513) +++ head/etc/rc.d/natd (revision 298514) @@ -1,43 +1,44 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: natd # KEYWORD: nostart nojail . /etc/rc.subr . /etc/network.subr name="natd" +desc="Network Address Translation daemon" rcvar="natd_enable" command="/sbin/${name}" pidfile="/var/run/${name}.pid" start_precmd="natd_precmd" required_modules="ipdivert" natd_precmd() { if [ -n "${natd_interface}" ]; then dhcp_list="`list_net_interfaces dhcp`" for ifn in ${dhcp_list}; do case "${natd_interface}" in ${ifn}) rc_flags="$rc_flags -dynamic" ;; esac done if echo "${natd_interface}" | \ grep -q -E '^[0-9]+(\.[0-9]+){0,3}$'; then rc_flags="$rc_flags -a ${natd_interface}" else rc_flags="$rc_flags -n ${natd_interface}" fi fi return 0 } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/netif =================================================================== --- head/etc/rc.d/netif (revision 298513) +++ head/etc/rc.d/netif (revision 298514) @@ -1,271 +1,272 @@ #!/bin/sh # # Copyright (c) 2003 The FreeBSD Project. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: netif # REQUIRE: atm1 FILESYSTEMS iovctl serial sppp sysctl # REQUIRE: ipfilter ipfs # KEYWORD: nojailvnet . /etc/rc.subr . /etc/network.subr name="netif" +desc="Network interface setup" rcvar="${name}_enable" start_cmd="netif_start" stop_cmd="netif_stop" wlanup_cmd="wlan_up" wlandown_cmd="wlan_down" cloneup_cmd="clone_up" clonedown_cmd="clone_down" clear_cmd="doclear" vnetup_cmd="vnet_up" vnetdown_cmd="vnet_down" extra_commands="cloneup clonedown clear vnetup vnetdown" cmdifn= set_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces set_rcvar_obsolete ipv6_prefer netif_start() { local _if # Set the list of interfaces to work on. # cmdifn=$* if [ -z "$cmdifn" ]; then # # We're operating as a general network start routine. # # disable SIGINT (Ctrl-c) when running at startup trap : 2 fi # Create IEEE802.11 interface wlan_up $cmdifn # Create cloned interfaces clone_up $cmdifn # Rename interfaces. ifnet_rename $cmdifn # Configure the interface(s). netif_common ifn_start $cmdifn if [ -f /etc/rc.d/ipfilter ] ; then # Resync ipfilter /etc/rc.d/ipfilter quietresync fi if [ -f /etc/rc.d/bridge -a -n "$cmdifn" ] ; then /etc/rc.d/bridge start $cmdifn fi if [ -f /etc/rc.d/routing -a -n "$cmdifn" ] ; then for _if in $cmdifn; do /etc/rc.d/routing static any $_if done fi } netif_stop() { _clone_down=1 _wlan_down=1 netif_stop0 $* } doclear() { _clone_down= _wlan_down= netif_stop0 $* } netif_stop0() { local _if # Set the list of interfaces to work on. # cmdifn=$* # Deconfigure the interface(s) netif_common ifn_stop $cmdifn # Destroy wlan interfaces if [ -n "$_wlan_down" ]; then wlan_down $cmdifn fi # Destroy cloned interfaces if [ -n "$_clone_down" ]; then clone_down $cmdifn fi if [ -f /etc/rc.d/routing -a -n "$cmdifn" ] ; then for _if in $cmdifn; do /etc/rc.d/routing stop any $_if done fi } vnet_up() { cmdifn=$* netif_common ifn_vnetup $cmdifn } vnet_down() { cmdifn=$* netif_common ifn_vnetdown $cmdifn } # netif_common routine # Common configuration subroutine for network interfaces. This # routine takes all the preparatory steps needed for configuriing # an interface and then calls $routine. netif_common() { local _cooked_list _tmp_list _fail _func _ok _str _cmdifn _func= if [ -z "$1" ]; then err 1 "netif_common(): No function name specified." else _func="$1" shift fi # Set the scope of the command (all interfaces or just one). # _cooked_list= _tmp_list= _cmdifn=$* if [ -n "$_cmdifn" ]; then # Don't check that the interface(s) exist. We need to run # the down code even when the interface doesn't exist to # kill off wpa_supplicant. # XXXBED: is this really true or does wpa_supplicant die? # if so, we should get rid of the devd entry _cooked_list="$_cmdifn" else _cooked_list="`list_net_interfaces`" fi # Expand epair[0-9] to epair[0-9][ab]. for ifn in $_cooked_list; do case ${ifn#epair} in [0-9]*[ab]) ;; # Skip epair[0-9]*[ab]. [0-9]*) for _str in $_cooked_list; do case $_str in $ifn) _tmp_list="$_tmp_list ${ifn}a ${ifn}b" ;; *) _tmp_list="$_tmp_list ${ifn}" ;; esac done _cooked_list=${_tmp_list# } ;; esac done _dadwait= _fail= _ok= for ifn in ${_cooked_list# }; do # Skip if ifn does not exist. case $_func in ifn_stop) if ! ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then warn "$ifn does not exist. Skipped." _fail="${_fail} ${ifn}" continue fi ;; esac if ${_func} ${ifn} $2; then _ok="${_ok} ${ifn}" if ipv6if ${ifn}; then _dadwait=1 fi else _fail="${_fail} ${ifn}" fi done # inet6 address configuration needs sleep for DAD. case ${_func}:${_dadwait} in ifn_start:1|ifn_vnetup:1|ifn_vnetdown:1) sleep `${SYSCTL_N} net.inet6.ip6.dad_count` sleep 1 ;; esac _str= if [ -n "${_ok}" ]; then case ${_func} in ifn_start) _str='Starting' ;; ifn_stop) _str='Stopping' ;; ifn_vnetup) _str='Moving' ;; ifn_vnetdown) _str='Reclaiming' ;; esac echo "${_str} Network:${_ok}." case ${_func} in ifn_vnetup) # Clear _ok not to do "ifconfig $ifn" # because $ifn is no longer in the current vnet. _ok= ;; esac if check_startmsgs; then for ifn in ${_ok}; do /sbin/ifconfig ${ifn} done fi fi debug "The following interfaces were not configured: $_fail" } # Load the old "network" config file also for compatibility. # This is needed for mfsBSD at least. load_rc_config network load_rc_config $name run_rc_command $* Index: head/etc/rc.d/netoptions =================================================================== --- head/etc/rc.d/netoptions (revision 298513) +++ head/etc/rc.d/netoptions (revision 298514) @@ -1,125 +1,126 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: netoptions # REQUIRE: FILESYSTEMS # BEFORE: netif # KEYWORD: nojail . /etc/rc.subr . /etc/network.subr name="netoptions" +desc="Network options setup" start_cmd="netoptions_start" stop_cmd=: _netoptions_initdone= netoptions_init() { if [ -z "${_netoptions_initdone}" ]; then echo -n 'Additional TCP/IP options:' _netoptions_initdone=yes fi } netoptions_start() { local _af for _af in inet inet6; do afexists ${_af} && eval netoptions_${_af} done [ -n "${_netoptions_initdone}" ] && echo '.' } netoptions_inet() { case ${log_in_vain} in [12]) netoptions_init echo -n " log_in_vain=${log_in_vain}" ${SYSCTL} net.inet.tcp.log_in_vain=${log_in_vain} >/dev/null ${SYSCTL} net.inet.udp.log_in_vain=${log_in_vain} >/dev/null ;; *) ${SYSCTL} net.inet.tcp.log_in_vain=0 >/dev/null ${SYSCTL} net.inet.udp.log_in_vain=0 >/dev/null ;; esac if checkyesno tcp_extensions; then ${SYSCTL} net.inet.tcp.rfc1323=1 >/dev/null else netoptions_init echo -n " rfc1323 extensions=${tcp_extensions}" ${SYSCTL} net.inet.tcp.rfc1323=0 >/dev/null fi if checkyesno tcp_keepalive; then ${SYSCTL} net.inet.tcp.always_keepalive=1 >/dev/null else netoptions_init echo -n " TCP keepalive=${tcp_keepalive}" ${SYSCTL} net.inet.tcp.always_keepalive=0 >/dev/null fi if checkyesno tcp_drop_synfin; then netoptions_init echo -n " drop SYN+FIN packets=${tcp_drop_synfin}" ${SYSCTL} net.inet.tcp.drop_synfin=1 >/dev/null else ${SYSCTL} net.inet.tcp.drop_synfin=0 >/dev/null fi case ${ip_portrange_first} in [0-9]*) netoptions_init echo -n " ip_portrange_first=$ip_portrange_first" ${SYSCTL} net.inet.ip.portrange.first=$ip_portrange_first >/dev/null ;; esac case ${ip_portrange_last} in [0-9]*) netoptions_init echo -n " ip_portrange_last=$ip_portrange_last" ${SYSCTL} net.inet.ip.portrange.last=$ip_portrange_last >/dev/null ;; esac } netoptions_inet6() { if checkyesno ipv6_ipv4mapping; then netoptions_init echo -n " ipv4-mapped-ipv6=${ipv6_ipv4mapping}" ${SYSCTL} net.inet6.ip6.v6only=0 >/dev/null else ${SYSCTL} net.inet6.ip6.v6only=1 >/dev/null fi if checkyesno ipv6_privacy; then netoptions_init echo -n " IPv6 Privacy Addresses" ${SYSCTL} net.inet6.ip6.use_tempaddr=1 >/dev/null ${SYSCTL} net.inet6.ip6.prefer_tempaddr=1 >/dev/null fi case $ipv6_cpe_wanif in ""|[Nn][Oo]|[Nn][Oo][Nn][Ee]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) ${SYSCTL} net.inet6.ip6.no_radr=0 >/dev/null ${SYSCTL} net.inet6.ip6.rfc6204w3=0 >/dev/null ;; *) netoptions_init echo -n " IPv6 CPE WANIF=${ipv6_cpe_wanif}" ${SYSCTL} net.inet6.ip6.no_radr=1 >/dev/null ${SYSCTL} net.inet6.ip6.rfc6204w3=1 >/dev/null ;; esac } load_rc_config $name run_rc_command $1 Index: head/etc/rc.d/netwait =================================================================== --- head/etc/rc.d/netwait (revision 298513) +++ head/etc/rc.d/netwait (revision 298514) @@ -1,115 +1,116 @@ #!/bin/sh # $FreeBSD$ # # PROVIDE: netwait # REQUIRE: devd ipfilter ipfw pf routing # KEYWORD: nojail # # The netwait script helps handle two situations: # - Systems with USB or other late-attaching network hardware which # is initialized by devd events. The script waits for all the # interfaces named in the netwait_if list to appear. # - Systems with statically-configured IP addresses in rc.conf(5). # The IP addresses in the netwait_ip list are pinged. The script # waits for any single IP in the list to respond to the ping. If your # system uses DHCP, you should probably use synchronous_dhclient="YES" # in your /etc/rc.conf instead of netwait_ip. # Either or both of the wait lists can be used (at least one must be # non-empty if netwait is enabled). . /etc/rc.subr name="netwait" +desc="Wait for network devices or the network being up" rcvar="netwait_enable" start_cmd="${name}_start" stop_cmd=":" netwait_start() { local ip rc count output link wait_if got_if any_error if [ -z "${netwait_if}" ] && [ -z "${netwait_ip}" ]; then err 1 "No interface or IP addresses listed, nothing to wait for" fi if [ ${netwait_timeout} -lt 1 ]; then err 1 "netwait_timeout must be >= 1" fi if [ -n "${netwait_if}" ]; then any_error=0 for wait_if in ${netwait_if}; do echo -n "Waiting for ${wait_if}" link="" got_if=0 count=1 # Handle SIGINT (Ctrl-C); force abort of while() loop trap break SIGINT while [ ${count} -le ${netwait_if_timeout} ]; do if output=`/sbin/ifconfig ${wait_if} 2>/dev/null`; then if [ ${got_if} -eq 0 ]; then echo -n ", interface present" got_if=1 fi link=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'` if [ -z "${link}" ]; then echo ', got link.' break fi fi sleep 1 count=$((count+1)) done # Restore default SIGINT handler trap - SIGINT if [ ${got_if} -eq 0 ]; then echo ", wait failed: interface never appeared." any_error=1 elif [ -n "${link}" ]; then echo ", wait failed: interface still has no link." any_error=1 fi done if [ ${any_error} -eq 1 ]; then warn "Continuing with startup, but be aware you may not have " warn "a fully functional networking layer at this point." fi fi if [ -n "${netwait_ip}" ]; then # Handle SIGINT (Ctrl-C); force abort of for() loop trap break SIGINT for ip in ${netwait_ip}; do echo -n "Waiting for ${ip} to respond to ICMP ping" count=1 while [ ${count} -le ${netwait_timeout} ]; do /sbin/ping -t 1 -c 1 -o ${ip} >/dev/null 2>&1 rc=$? if [ $rc -eq 0 ]; then # Restore default SIGINT handler trap - SIGINT echo ', got response.' return fi count=$((count+1)) done echo ', failed: No response from host.' done # Restore default SIGINT handler trap - SIGINT warn "Exhausted IP list. Continuing with startup, but be aware you may" warn "not have a fully functional networking layer at this point." fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/newsyslog =================================================================== --- head/etc/rc.d/newsyslog (revision 298513) +++ head/etc/rc.d/newsyslog (revision 298514) @@ -1,26 +1,27 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: newsyslog # REQUIRE: FILESYSTEMS mountcritremote . /etc/rc.subr name="newsyslog" +desc="Logfile rotation" rcvar="newsyslog_enable" required_files="/etc/newsyslog.conf" command="/usr/sbin/${name}" start_cmd="newsyslog_start" stop_cmd=":" newsyslog_start() { check_startmsgs && echo -n 'Creating and/or trimming log files' ${command} ${rc_flags} check_startmsgs && echo '.' } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/nfscbd =================================================================== --- head/etc/rc.d/nfscbd (revision 298513) +++ head/etc/rc.d/nfscbd (revision 298514) @@ -1,19 +1,20 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: nfscbd # REQUIRE: NETWORKING nfsuserd # KEYWORD: nojail shutdown . /etc/rc.subr name="nfscbd" +desc="NFSv4 client side callback daemon" rcvar="nfscbd_enable" command="/usr/sbin/${name}" sig_stop="USR1" load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/nfsclient =================================================================== --- head/etc/rc.d/nfsclient (revision 298513) +++ head/etc/rc.d/nfsclient (revision 298514) @@ -1,50 +1,51 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: nfsclient # REQUIRE: NETWORKING mountcritremote rpcbind # KEYWORD: nojail shutdown . /etc/rc.subr name="nfsclient" +desc="NFS client setup" rcvar="nfs_client_enable" start_cmd="nfsclient_start" stop_cmd="unmount_all" required_modules="nfscl:nfs" nfsclient_start() { # # Set some nfs client related sysctls # if [ -n "${nfs_access_cache}" ]; then check_startmsgs && echo "NFS access cache time=${nfs_access_cache}" if ! sysctl vfs.nfs.access_cache_timeout=${nfs_access_cache} >/dev/null; then warn "failed to set access cache timeout" fi fi if [ -n "${nfs_bufpackets}" ]; then if ! sysctl vfs.nfs.bufpackets=${nfs_bufpackets} > /dev/null; then warn "failed to set vfs.nfs.bufpackets" fi fi unmount_all } unmount_all() { # If /var/db/mounttab exists, some nfs-server has not been # successfully notified about a previous client shutdown. # If there is no /var/db/mounttab, we do nothing. if [ -f /var/db/mounttab ]; then rpc.umntall -k fi } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/nfsd =================================================================== --- head/etc/rc.d/nfsd (revision 298513) +++ head/etc/rc.d/nfsd (revision 298514) @@ -1,51 +1,52 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: nfsd # REQUIRE: mountd hostname gssd nfsuserd # KEYWORD: nojail shutdown . /etc/rc.subr name="nfsd" +desc="Remote NFS server" rcvar="nfs_server_enable" command="/usr/sbin/${name}" load_rc_config $name start_precmd="nfsd_precmd" sig_stop="USR1" nfsd_precmd() { rc_flags="${nfs_server_flags}" # Load the modules now, so that the vfs.nfsd sysctl # oids are available. load_kld nfsd if checkyesno nfs_reserved_port_only; then echo 'NFS on reserved port only=YES' sysctl vfs.nfsd.nfs_privport=1 > /dev/null else sysctl vfs.nfsd.nfs_privport=0 > /dev/null fi if checkyesno nfsv4_server_enable || \ checkyesno nfs_server_managegids; then force_depend nfsuserd || err 1 "Cannot run nfsuserd" fi if checkyesno nfsv4_server_enable; then sysctl vfs.nfsd.server_max_nfsvers=4 > /dev/null else echo 'NFSv4 is disabled' sysctl vfs.nfsd.server_max_nfsvers=3 > /dev/null fi force_depend rpcbind || return 1 force_depend mountd || return 1 } run_rc_command "$1" Index: head/etc/rc.d/nfsuserd =================================================================== --- head/etc/rc.d/nfsuserd (revision 298513) +++ head/etc/rc.d/nfsuserd (revision 298514) @@ -1,28 +1,29 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: nfsuserd # REQUIRE: NETWORKING # KEYWORD: nojail shutdown . /etc/rc.subr name="nfsuserd" +desc="Load user and group information into the kernel for NFSv4 services and support manage-gids for all NFS versions" rcvar="nfsuserd_enable" command="/usr/sbin/${name}" sig_stop="USR1" load_rc_config $name start_precmd="nfsuserd_precmd" nfsuserd_precmd() { if checkyesno nfs_server_managegids; then rc_flags="-manage-gids ${nfsuserd_flags}" fi return 0 } run_rc_command "$1" Index: head/etc/rc.d/nisdomain =================================================================== --- head/etc/rc.d/nisdomain (revision 298513) +++ head/etc/rc.d/nisdomain (revision 298514) @@ -1,54 +1,55 @@ #!/bin/sh # # Copyright (c) 1993 - 2003 The FreeBSD Project. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $FreeBSD$ # # PROVIDE: nisdomain # REQUIRE: SERVERS rpcbind # BEFORE: ypset ypbind ypserv ypxfrd . /etc/rc.subr name="nisdomain" +desc="Set NIS domain name" start_cmd="nisdomain_start" stop_cmd=":" nisdomain_start() { # Set the domainname if we're using NIS # case ${nisdomainname} in [Nn][Oo]|'') ;; *) domainname ${nisdomainname} echo "Setting NIS domain: `/bin/domainname`." ;; esac } load_rc_config $name run_rc_command "$1" Index: head/etc/rc.d/nscd =================================================================== --- head/etc/rc.d/nscd (revision 298513) +++ head/etc/rc.d/nscd (revision 298514) @@ -1,53 +1,54 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: nscd # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable nscd: # # nscd_enable="YES" # # See nscd(8) for flags # . /etc/rc.subr name="nscd" +desc="Name-service caching daemon" rcvar="nscd_enable" command=/usr/sbin/nscd extra_commands="flush" flush_cmd="${command} -I all" # usage: _nscd_set_option