Source code pulled from OpenBSD for OpenNTPD. The place to contribute to this code is via the OpenBSD CVS tree.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

869 lines
20 KiB

22 years ago
26 years ago
28 years ago
28 years ago
20 years ago
26 years ago
25 years ago
26 years ago
20 years ago
23 years ago
  1. # $OpenBSD: rc,v 1.348 2011/01/14 00:05:42 deraadt Exp $
  2. # System startup script run by init on autoboot
  3. # or after single-user.
  4. # Output and error are redirected to console by init,
  5. # and the console is the controlling terminal.
  6. # Subroutines (have to come first).
  7. # Strip comments (and leading/trailing whitespace if IFS is set)
  8. # from a file and spew to stdout
  9. stripcom() {
  10. local _file="$1"
  11. local _line
  12. {
  13. while read _line ; do
  14. _line=${_line%%#*} # strip comments
  15. test -z "$_line" && continue
  16. echo $_line
  17. done
  18. } < $_file
  19. }
  20. # Update resource limits when sysctl changes
  21. # Usage: update_limit -X loginconf_name
  22. update_limit() {
  23. local _fl="$1" # ulimit flag
  24. local _lc="$2" # login.conf name
  25. local _new _suf
  26. for _suf in "" -cur -max; do
  27. _new=`getcap -f /etc/login.conf -s ${_lc}${_suf} daemon 2>/dev/null`
  28. if [ X"$_new" != X"" ]; then
  29. if [ X"$_new" = X"infinity" ]; then
  30. _new=unlimited
  31. fi
  32. case "$_suf" in
  33. -cur)
  34. ulimit -S $_fl $_new
  35. ;;
  36. -max)
  37. ulimit -H $_fl $_new
  38. ;;
  39. *)
  40. ulimit $_fl $_new
  41. return
  42. ;;
  43. esac
  44. fi
  45. done
  46. }
  47. sysctl_conf() {
  48. test -s /etc/sysctl.conf || return
  49. # delete comments and blank lines
  50. set -- `stripcom /etc/sysctl.conf`
  51. while [ $# -ge 1 ] ; do
  52. sysctl $1
  53. # update limits if needed
  54. case $1 in
  55. kern.maxproc=*)
  56. update_limit -p maxproc
  57. ;;
  58. kern.maxfiles=*)
  59. update_limit -n openfiles
  60. ;;
  61. esac
  62. shift
  63. done
  64. }
  65. mixerctl_conf()
  66. {
  67. test -s /etc/mixerctl.conf || return
  68. # delete comments and blank lines
  69. set -- `stripcom /etc/mixerctl.conf`
  70. while [ $# -ge 1 ] ; do
  71. mixerctl -q $1 > /dev/null 2>&1
  72. shift
  73. done
  74. }
  75. wsconsctl_conf()
  76. {
  77. local save_IFS="$IFS"
  78. test -x /sbin/wsconsctl -a -s /etc/wsconsctl.conf || return
  79. # delete comments and blank lines
  80. IFS="
  81. "
  82. set -- `stripcom /etc/wsconsctl.conf`
  83. IFS="$save_IFS"
  84. while [ $# -ge 1 ] ; do
  85. eval /sbin/wsconsctl $1
  86. shift
  87. done
  88. }
  89. random_seed()
  90. {
  91. if [ -f /var/db/host.random -a "X$random_seed_done" = "X" ]; then
  92. dd if=/var/db/host.random of=/dev/arandom bs=65536 count=1 \
  93. > /dev/null 2>&1
  94. # reset seed file, so that if a shutdown-less reboot occurs,
  95. # the next seed is not a repeat
  96. dd if=/dev/arandom of=/var/db/host.random bs=65536 count=1 \
  97. > /dev/null 2>&1
  98. random_seed_done=1
  99. fi
  100. }
  101. fill_baddynamic()
  102. {
  103. local _service="$1"
  104. local _sysctl="net.inet.${_service}.baddynamic"
  105. local _name _port _srv _junk _ban
  106. local _i=0
  107. grep "/${_service}" /etc/services | {
  108. IFS=" /"
  109. while read _name _port _srv _junk; do
  110. [ "x${_srv}" = "x${_service}" ] || continue;
  111. if [ "x${_ban}" = "x" ]; then
  112. _ban="+${_port}"
  113. else
  114. _ban="${_ban},+${_port}"
  115. fi
  116. # Flush before argv gets too long
  117. if [ $((++_i)) -gt 128 ]; then
  118. sysctl ${_sysctl}=${_ban} >/dev/null
  119. _ban=""
  120. _i=0
  121. fi
  122. done;
  123. if [ "x${_ban}" != "x" ]; then
  124. sysctl ${_sysctl}=${_ban} >/dev/null
  125. fi
  126. }
  127. }
  128. # End subroutines
  129. stty status '^T'
  130. # Set shell to ignore SIGINT (2), but not children;
  131. # shell catches SIGQUIT (3) and returns to single user after fsck.
  132. trap : 2
  133. trap : 3 # shouldn't be needed
  134. HOME=/; export HOME
  135. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  136. export PATH
  137. # pick up option configuration
  138. . /etc/rc.conf
  139. if [ X"$1" = X"shutdown" ]; then
  140. dd if=/dev/arandom of=/var/db/host.random bs=65536 count=1 >/dev/null 2>&1
  141. chmod 600 /var/db/host.random >/dev/null 2>&1
  142. if [ $? -eq 0 -a -f /etc/rc.shutdown ]; then
  143. echo /etc/rc.shutdown in progress...
  144. . /etc/rc.shutdown
  145. echo /etc/rc.shutdown complete.
  146. # bring carp interfaces down gracefully
  147. ifconfig | while read a b; do
  148. case $a in
  149. carp+([0-9]):) ifconfig ${a%:} down ;;
  150. esac
  151. done
  152. if [ X"${powerdown}" = X"YES" ]; then
  153. exit 2
  154. fi
  155. else
  156. echo single user: not running /etc/rc.shutdown
  157. fi
  158. exit 0
  159. fi
  160. # Configure ccd devices.
  161. if [ -f /etc/ccd.conf ]; then
  162. ccdconfig -C
  163. fi
  164. # Configure raid devices.
  165. for dev in 0 1 2 3; do
  166. if [ -f /etc/raid$dev.conf ]; then
  167. raidctl -c /etc/raid$dev.conf raid$dev
  168. fi
  169. done
  170. # Check parity on raid devices.
  171. raidctl -P all
  172. swapctl -A -t blk
  173. if [ -e /fastboot ]; then
  174. echo "Fast boot: skipping disk checks."
  175. elif [ X"$1" = X"autoboot" ]; then
  176. echo "Automatic boot in progress: starting file system checks."
  177. fsck -p
  178. case $? in
  179. 0)
  180. ;;
  181. 2)
  182. exit 1
  183. ;;
  184. 4)
  185. echo "Rebooting..."
  186. reboot
  187. echo "Reboot failed; help!"
  188. exit 1
  189. ;;
  190. 8)
  191. echo "Automatic file system check failed; help!"
  192. exit 1
  193. ;;
  194. 12)
  195. echo "Boot interrupted."
  196. exit 1
  197. ;;
  198. 130)
  199. # interrupt before catcher installed
  200. exit 1
  201. ;;
  202. *)
  203. echo "Unknown error; help!"
  204. exit 1
  205. ;;
  206. esac
  207. fi
  208. trap "echo 'Boot interrupted.'; exit 1" 3
  209. umount -a >/dev/null 2>&1
  210. mount -a -t nonfs,vnd
  211. mount -uw / # root on nfs requires this, others aren't hurt
  212. rm -f /fastboot # XXX (root now writeable)
  213. random_seed
  214. # set flags on ttys. (do early, in case they use tty for SLIP in netstart)
  215. echo 'setting tty flags'
  216. ttyflags -a
  217. if [ -f /sbin/kbd -a -f /etc/kbdtype ]; then
  218. kbd `cat /etc/kbdtype`
  219. fi
  220. wsconsctl_conf
  221. if [ X"${pf}" != X"NO" ]; then
  222. RULES="block all"
  223. RULES="$RULES\npass on lo0"
  224. RULES="$RULES\npass in proto tcp from any to any port 22 keep state"
  225. RULES="$RULES\npass out proto { tcp, udp } from any to any port 53 keep state"
  226. RULES="$RULES\npass out inet proto icmp all icmp-type echoreq keep state"
  227. if ifconfig lo0 inet6 >/dev/null 2>&1; then
  228. RULES="$RULES\npass out inet6 proto icmp6 all icmp6-type neighbrsol"
  229. RULES="$RULES\npass in inet6 proto icmp6 all icmp6-type neighbradv"
  230. RULES="$RULES\npass out inet6 proto icmp6 all icmp6-type routersol"
  231. RULES="$RULES\npass in inet6 proto icmp6 all icmp6-type routeradv"
  232. fi
  233. RULES="$RULES\npass proto carp keep state (no-sync)"
  234. case `sysctl vfs.mounts.nfs 2>/dev/null` in
  235. *[1-9]*)
  236. # don't kill NFS
  237. RULES="set reassemble yes no-df\n$RULES"
  238. RULES="$RULES\npass in proto { tcp, udp } from any port { 111, 2049 } to any"
  239. RULES="$RULES\npass out proto { tcp, udp } from any to any port { 111, 2049 }"
  240. ;;
  241. esac
  242. echo $RULES | pfctl -f -
  243. pfctl -e
  244. fi
  245. # Fill net.inet.(tcp|udp).baddynamic lists from /etc/services
  246. fill_baddynamic udp
  247. fill_baddynamic tcp
  248. sysctl_conf
  249. # set hostname, turn on network
  250. echo 'starting network'
  251. ifconfig -g carp carpdemote 128
  252. if [ -f /etc/resolv.conf.save ]; then
  253. mv -f /etc/resolv.conf.save /etc/resolv.conf
  254. touch /etc/resolv.conf
  255. fi
  256. . /etc/netstart
  257. echo rekey > /dev/arandom # any write triggers an RC4 rekey
  258. if [ X"${pf}" != X"NO" ]; then
  259. if [ -f ${pf_rules} ]; then
  260. pfctl -f ${pf_rules}
  261. fi
  262. # bring up pfsync after the working ruleset has been loaded
  263. if [ -f /etc/hostname.pfsync0 ]; then
  264. . /etc/netstart pfsync0
  265. fi
  266. fi
  267. mount -s /usr >/dev/null 2>&1
  268. mount -s /var >/dev/null 2>&1
  269. # if there's no /var/db/host.random, use /dev/arandom to create one
  270. if [ ! -f /var/db/host.random ]; then
  271. dd if=/dev/arandom of=/var/db/host.random bs=65536 count=1 \
  272. >/dev/null 2>&1
  273. chmod 600 /var/db/host.random >/dev/null 2>&1
  274. else
  275. # Try to read seed if it was not initially present (e.g. /var on NFS)
  276. random_seed
  277. fi
  278. # clean up left-over files
  279. rm -f /etc/nologin
  280. rm -f /var/spool/lock/LCK.*
  281. rm -f /var/spool/uucp/STST/*
  282. (cd /var/run && { rm -rf -- *; install -c -m 664 -g utmp /dev/null utmp; })
  283. (cd /var/authpf && rm -rf -- *)
  284. # save a copy of the boot messages
  285. dmesg >/var/run/dmesg.boot
  286. echo 'starting system logger'
  287. rm -f /dev/log
  288. if [ X"${httpd_flags}" != X"-u" ]; then
  289. rm -f /var/www/dev/log
  290. syslogd_flags="${syslogd_flags} -a /var/www/dev/log"
  291. fi
  292. if [ X"${named_flags}" != X"NO" ]; then
  293. rm -f /var/named/dev/log
  294. syslogd_flags="${syslogd_flags} -a /var/named/dev/log"
  295. fi
  296. if [ X"${nsd_flags}" != X"NO" ]; then
  297. rm -f /var/nsd/dev/log
  298. syslogd_flags="${syslogd_flags} -a /var/nsd/dev/log"
  299. fi
  300. if [ -d /var/empty ]; then
  301. rm -f /var/empty/dev/log
  302. mkdir -p -m 0555 /var/empty/dev
  303. syslogd_flags="${syslogd_flags} -a /var/empty/dev/log"
  304. fi
  305. syslogd ${syslogd_flags}
  306. if [ X"${pf}" != X"NO" ]; then
  307. ifconfig pflog0 create >/dev/null 2>&1
  308. if ifconfig pflog0 >/dev/null 2>&1; then
  309. ifconfig pflog0 up
  310. if [ X"${pflogd_flags}" != X"NO" ]; then
  311. pflogd ${pflogd_flags}
  312. fi
  313. fi
  314. fi
  315. if [ X"${named_flags}" != X"NO" ]; then
  316. if ! cmp -s /etc/rndc.key /var/named/etc/rndc.key ; then
  317. echo -n "rndc-confgen: generating new shared secret... "
  318. if /usr/sbin/rndc-confgen -a -t /var/named >/dev/null 2>&1; then
  319. chmod 0640 /var/named/etc/rndc.key >/dev/null 2>&1
  320. echo done.
  321. else
  322. echo failed.
  323. fi
  324. fi
  325. echo 'starting named'; named $named_flags
  326. fi
  327. if [ X"${nsd_flags}" != X"NO" ]; then
  328. echo 'starting nsd'; nsd $nsd_flags
  329. fi
  330. if [ ! -f /etc/isakmpd/private/local.key ]; then
  331. echo -n "openssl: generating new isakmpd/iked RSA key... "
  332. if /usr/sbin/openssl genrsa -out /etc/isakmpd/private/local.key 2048 \
  333. > /dev/null 2>&1; then
  334. chmod 600 /etc/isakmpd/private/local.key
  335. openssl rsa -out /etc/isakmpd/local.pub \
  336. -in /etc/isakmpd/private/local.key -pubout > /dev/null 2>&1
  337. echo done.
  338. else
  339. echo failed.
  340. fi
  341. fi
  342. if [ ! -f /etc/iked/private/local.key ]; then
  343. # Just copy the generated isakmpd key
  344. cp /etc/isakmpd/private/local.key /etc/iked/private/local.key
  345. chmod 600 /etc/iked/private/local.key
  346. cp /etc/isakmpd/local.pub /etc/iked/local.pub
  347. fi
  348. if [ X"${isakmpd_flags}" != X"NO" ]; then
  349. if [ X"${sasyncd_flags}" != X"NO" ]; then
  350. isakmpd_flags="-S ${isakmpd_flags}"
  351. fi
  352. echo 'starting isakmpd'; isakmpd ${isakmpd_flags}
  353. fi
  354. if [ X"${iked_flags}" != X"NO" ]; then
  355. if [ X"${sasyncd_flags}" != X"NO" ]; then
  356. iked_flags="-S ${iked_flags}"
  357. fi
  358. echo 'starting iked'; iked ${iked_flags}
  359. fi
  360. if [ X"${sasyncd_flags}" != X"NO" ]; then
  361. echo 'starting sasyncd'; sasyncd ${sasyncd_flags}
  362. fi
  363. if [ X"${ipsec}" != X"NO" ]; then
  364. if [ -f ${ipsec_rules} ]; then
  365. ipsecctl -f ${ipsec_rules}
  366. fi
  367. fi
  368. echo -n 'starting initial daemons:'
  369. if [ X"${portmap}" = X"YES" ]; then
  370. echo -n ' portmap'; portmap
  371. fi
  372. if [ X`domainname` != X ]; then
  373. if [ -d /var/yp/`domainname` ]; then
  374. # YP server capabilities needed...
  375. echo -n ' ypserv'; ypserv ${ypserv_flags}
  376. #echo -n ' ypxfrd'; ypxfrd
  377. fi
  378. if [ -d /var/yp/binding ]; then
  379. # YP client capabilities needed...
  380. echo -n ' ypbind'; ypbind
  381. fi
  382. if [ X"${yppasswdd_flags}" != X"NO" -a -d /var/yp/`domainname` ]; then
  383. # if we are the master server, run rpc.yppasswdd
  384. _host1=`ypwhich -m passwd 2> /dev/null`
  385. _host2=`hostname`
  386. if [ `grep '^lookup' /etc/resolv.conf | grep yp | wc -c` -ne 0 ]; then
  387. _host1=`ypmatch $_host1 hosts | cut -d' ' -f2`
  388. _host2=`ypmatch $_host2 hosts | cut -d' ' -f2 | head -1`
  389. else
  390. _host1=`echo $_host1 | nslookup | grep '^Name: ' | \
  391. sed -e 's/^Name: //'`
  392. _host2=`echo $_host2 | nslookup | grep '^Name: ' | \
  393. sed -e 's/^Name: //'`
  394. fi
  395. if [ "$_host2" = "$_host1" ]; then
  396. echo -n ' rpc.yppasswdd'
  397. rpc.yppasswdd ${yppasswdd_flags}
  398. fi
  399. fi
  400. fi
  401. if [ X"${nfs_server}" = X"YES" -a -s /etc/exports -a \
  402. `sed -e '/^#/d' < /etc/exports | wc -l` -ne 0 ]; then
  403. rm -f /var/db/mountdtab
  404. echo -n > /var/db/mountdtab
  405. echo -n ' mountd'; mountd
  406. echo -n ' nfsd'; nfsd ${nfsd_flags}
  407. if [ X"${lockd}" = X"YES" ]; then
  408. echo -n ' rpc.lockd'; rpc.lockd
  409. echo -n ' rpc.statd'; rpc.statd
  410. fi
  411. fi
  412. if [ X"${amd}" = X"YES" -a -e ${amd_master} ]; then
  413. echo -n ' amd'
  414. (cd /etc/amd; amd `cat ${amd_master}`)
  415. fi
  416. # run rdate before timed/ntpd
  417. if [ X"${rdate_flags}" != X"NO" ]; then
  418. echo -n ' rdate'; rdate -s ${rdate_flags}
  419. fi
  420. if [ X"${timed_flags}" != X"NO" ]; then
  421. echo -n ' timed'; timed $timed_flags
  422. fi
  423. if [ X"${ldattach_flags}" != X"NO" -a -n "${ldattach_flags}" ]; then
  424. echo -n ' ldattach'; ldattach ${ldattach_flags}
  425. fi
  426. if [ X"${ntpd_flags}" != X"NO" ]; then
  427. echo -n ' ntpd'; ntpd $ntpd_flags
  428. fi
  429. echo '.'
  430. mount -a
  431. swapctl -A -t noblk
  432. # /var/crash should be a directory or a symbolic link
  433. # to the crash directory if core dumps are to be saved.
  434. if [ -d /var/crash ]; then
  435. savecore ${savecore_flags} /var/crash
  436. fi
  437. if [ X"${afs}" = X"YES" -a -c /dev/nnpfs0 ]; then
  438. echo -n 'mounting afs:'
  439. mkdir -p -m 0755 /afs
  440. mount -t nnpfs /dev/nnpfs0 /afs
  441. /usr/libexec/afsd ${afsd_flags}
  442. echo ' done.'
  443. fi
  444. if [ X"${check_quotas}" = X"YES" ]; then
  445. echo -n 'checking quotas:'
  446. quotacheck -a
  447. echo ' done.'
  448. quotaon -a
  449. fi
  450. # build ps databases
  451. echo -n 'building ps databases:'
  452. echo -n " kvm"
  453. kvm_mkdb
  454. echo -n " dev"
  455. dev_mkdb
  456. echo "."
  457. chmod 666 /dev/tty[pqrstuvwxyzPQRST]*
  458. chown root:wheel /dev/tty[pqrstuvwxyzPQRST]*
  459. # check the password temp/lock file
  460. if [ -f /etc/ptmp ]; then
  461. logger -s -p auth.err \
  462. 'password file may be incorrect -- /etc/ptmp exists'
  463. fi
  464. echo clearing /tmp
  465. # prune quickly with one rm, then use find to clean up /tmp/[lq]*
  466. # (not needed with mfs /tmp, but doesn't hurt there...)
  467. (cd /tmp && rm -rf [a-km-pr-zA-Z]*)
  468. (cd /tmp &&
  469. find . ! -name . ! -name lost+found ! -name quota.user \
  470. ! -name quota.group -execdir rm -rf -- {} \; -type d -prune)
  471. # create Unix sockets directories for X if needed and make sure they have
  472. # correct permissions
  473. if [ -d /usr/X11R6/lib ]; then
  474. for d in /tmp/.X11-unix /tmp/.ICE-unix ; do
  475. if [ -d $d ]; then
  476. if [ `ls -ld $d | cut -d' ' -f4` != root ]; then
  477. chown root $d
  478. fi
  479. if [ `ls -ld $d | cut -d' ' -f1` != drwxrwxrwt ]; then
  480. chmod 1777 $d
  481. fi
  482. elif [ -e $d ]; then
  483. echo "Error: $d exists and isn't a directory."
  484. else
  485. mkdir -m 1777 $d
  486. fi
  487. done
  488. fi
  489. [ -f /etc/rc.securelevel ] && . /etc/rc.securelevel
  490. if [ X"${securelevel}" != X"" ]; then
  491. echo -n 'setting kernel security level: '
  492. sysctl kern.securelevel=${securelevel}
  493. fi
  494. # patch /etc/motd
  495. if [ ! -f /etc/motd ]; then
  496. install -c -o root -g wheel -m 664 /dev/null /etc/motd
  497. fi
  498. T=`mktemp /tmp/_motd.XXXXXXXXXX`
  499. if [ $? -eq 0 ]; then
  500. sysctl -n kern.version | sed 1q > $T
  501. echo "" >> $T
  502. sed '1,/^$/d' < /etc/motd >> $T
  503. cmp -s $T /etc/motd || cp $T /etc/motd
  504. rm -f $T
  505. fi
  506. if [ X"${accounting}" = X"YES" ]; then
  507. if [ ! -f /var/account/acct ]; then
  508. touch /var/account/acct
  509. fi
  510. echo 'turning on accounting'; accton /var/account/acct
  511. fi
  512. if [ -f /sbin/ldconfig ]; then
  513. echo 'creating runtime link editor directory cache.'
  514. if [ -d /usr/local/lib ]; then
  515. shlib_dirs="/usr/local/lib $shlib_dirs"
  516. fi
  517. if [ -d /usr/X11R6/lib ]; then
  518. shlib_dirs="/usr/X11R6/lib $shlib_dirs"
  519. fi
  520. ldconfig $shlib_dirs
  521. fi
  522. if [ -x /usr/libexec/vi.recover ]; then
  523. echo 'preserving editor files.'; /usr/libexec/vi.recover
  524. fi
  525. if [ ! -f /etc/ssh/ssh_host_dsa_key ]; then
  526. echo -n "ssh-keygen: generating new DSA host key... "
  527. if /usr/bin/ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''; then
  528. echo done.
  529. else
  530. echo failed.
  531. fi
  532. fi
  533. if [ ! -f /etc/ssh/ssh_host_ecdsa_key ]; then
  534. echo -n "ssh-keygen: generating new ECDSA host key... "
  535. if /usr/bin/ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''; then
  536. echo done.
  537. else
  538. echo failed.
  539. fi
  540. fi
  541. if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
  542. echo -n "ssh-keygen: generating new RSA host key... "
  543. if /usr/bin/ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''; then
  544. echo done.
  545. else
  546. echo failed.
  547. fi
  548. fi
  549. if [ ! -f /etc/ssh/ssh_host_key ]; then
  550. echo -n "ssh-keygen: generating new RSA1 host key... "
  551. if /usr/bin/ssh-keygen -q -t rsa1 -f /etc/ssh/ssh_host_key -N ''; then
  552. echo done.
  553. else
  554. echo failed.
  555. fi
  556. fi
  557. echo -n starting network daemons:
  558. if [ X"${sshd_flags}" != X"NO" ]; then
  559. echo -n ' sshd'; /usr/sbin/sshd ${sshd_flags}
  560. fi
  561. if [ X"${snmpd_flags}" != X"NO" ]; then
  562. echo -n ' snmpd'; /usr/sbin/snmpd $snmpd_flags
  563. fi
  564. if [ X"${ldpd_flags}" != X"NO" ]; then
  565. echo -n ' ldpd'; /usr/sbin/ldpd $ldpd_flags
  566. fi
  567. if [ X"${ripd_flags}" != X"NO" ]; then
  568. echo -n ' ripd'; /usr/sbin/ripd $ripd_flags
  569. fi
  570. if [ X"${mrouted_flags}" != X"NO" ]; then
  571. echo -n ' mrouted'; mrouted $mrouted_flags
  572. fi
  573. if [ X"${dvmrpd_flags}" != X"NO" ]; then
  574. echo -n ' dvmrpd'; /usr/sbin/dvmrpd $dvmrpd_flags
  575. fi
  576. if [ X"${ospfd_flags}" != X"NO" ]; then
  577. echo -n ' ospfd'; /usr/sbin/ospfd $ospfd_flags
  578. fi
  579. if [ X"${ospf6d_flags}" != X"NO" ]; then
  580. echo -n ' ospf6d'; /usr/sbin/ospf6d $ospf6d_flags
  581. fi
  582. if [ X"${bgpd_flags}" != X"NO" ]; then
  583. echo -n ' bgpd'; /usr/sbin/bgpd $bgpd_flags
  584. fi
  585. if [ X"${ifstated_flags}" != X"NO" ]; then
  586. echo -n ' ifstated'; ifstated $ifstated_flags
  587. fi
  588. if [ X"${relayd_flags}" != X"NO" ]; then
  589. echo -n ' relayd'; /usr/sbin/relayd $relayd_flags
  590. fi
  591. if [ X"${dhcpd_flags}" != X"NO" -a -f /etc/dhcpd.conf ]; then
  592. touch /var/db/dhcpd.leases
  593. echo -n ' dhcpd'; /usr/sbin/dhcpd ${dhcpd_flags}
  594. fi
  595. if [ X"${dhcrelay_flags}" != X"NO" ]; then
  596. echo -n ' dhcrelay'; /usr/sbin/dhcrelay $dhcrelay_flags
  597. fi
  598. if ifconfig lo0 inet6 >/dev/null 2>&1; then
  599. fw=`sysctl -n net.inet6.ip6.forwarding`
  600. if [ X"${fw}" = X"0" ]; then
  601. if [ X"${rtsold_flags}" != X"NO" ]; then
  602. echo -n ' rtsold'
  603. /usr/sbin/rtsold ${rtsold_flags}
  604. fi
  605. else
  606. if [ X"${route6d_flags}" != X"NO" ]; then
  607. echo -n ' route6d'
  608. /usr/sbin/route6d ${route6d_flags}
  609. fi
  610. if [ X"${rtadvd_flags}" != X"NO" ]; then
  611. echo -n ' rtadvd'
  612. /usr/sbin/rtadvd ${rtadvd_flags}
  613. fi
  614. fi
  615. fi
  616. if [ X"${hostapd_flags}" != X"NO" ]; then
  617. echo -n ' hostapd'; /usr/sbin/hostapd ${hostapd_flags}
  618. fi
  619. if [ X"${bt}" != X"NO" ]; then
  620. echo -n ' btd'; /usr/sbin/btd
  621. if [ -f ${bt_rules} ]; then
  622. btctl -f ${bt_rules}
  623. fi
  624. fi
  625. if [ X"${rwhod}" = X"YES" ]; then
  626. echo -n ' rwhod'; rwhod
  627. fi
  628. if [ X"${lpd_flags}" != X"NO" ]; then
  629. echo -n ' lpd'; lpd ${lpd_flags}
  630. fi
  631. if [ X"${ldapd_flags}" != X"NO" ]; then
  632. echo -n ' ldapd'; /usr/sbin/ldapd ${ldapd_flags}
  633. fi
  634. # We call sendmail with a full path so that SIGHUP works.
  635. # Note that /usr/sbin/sendmail may actually call a
  636. # mailer other than sendmail, depending on /etc/mailer.conf.
  637. if [ X"${sendmail_flags}" != X"NO" -a -s /etc/mailer.conf ]; then
  638. echo -n ' sendmail'; ( /usr/sbin/sendmail ${sendmail_flags} >/dev/null 2>&1 & )
  639. fi
  640. if [ X"${smtpd_flags}" != X"NO" ]; then
  641. echo -n ' smtpd'; smtpd $smtpd_flags
  642. fi
  643. if [ X"${httpd_flags}" != X"NO" ]; then
  644. # Clean up left-over httpd locks
  645. rm -f /var/www/logs/{ssl_mutex,httpd.lock,accept.lock}.*
  646. echo -n ' httpd'; /usr/sbin/httpd ${httpd_flags}
  647. fi
  648. if [ X"${ftpd_flags}" != X"NO" ]; then
  649. echo -n ' ftpd'; /usr/libexec/ftpd ${ftpd_flags}
  650. fi
  651. if [ X"${ftpproxy_flags}" != X"NO" ]; then
  652. echo -n ' ftp-proxy'; /usr/sbin/ftp-proxy ${ftpproxy_flags}
  653. fi
  654. if [ X"${identd_flags}" != X"NO" ]; then
  655. echo -n ' identd'; /usr/libexec/identd ${identd_flags}
  656. fi
  657. if [ X"${inetd}" = X"YES" -a -e /etc/inetd.conf ]; then
  658. echo -n ' inetd'; inetd
  659. fi
  660. if [ X"${spamd_flags}" != X"NO" ]; then
  661. if [ X"${spamd_black}" != X"NO" ]; then
  662. spamd_flags="${spamd_flags} -b"
  663. fi
  664. echo -n ' spamd'; eval /usr/libexec/spamd ${spamd_flags}
  665. /usr/libexec/spamd-setup -D
  666. if [ X"${spamd_black}" = X"NO" ]; then
  667. echo -n ' spamlogd'
  668. /usr/libexec/spamlogd ${spamlogd_flags}
  669. fi
  670. fi
  671. if [ X"${rarpd_flags}" != X"NO" -a -s /etc/ethers ]; then
  672. echo -n ' rarpd'; rarpd ${rarpd_flags}
  673. fi
  674. if [ X"${bootparamd_flags}" != X"NO" -a -s /etc/bootparams ]; then
  675. echo -n ' rpc.bootparamd'; rpc.bootparamd ${bootparamd_flags}
  676. fi
  677. if [ X"${rbootd_flags}" != X"NO" -a -s /etc/rbootd.conf ]; then
  678. echo -n ' rbootd'; rbootd ${rbootd_flags}
  679. fi
  680. if [ X"${mopd_flags}" != X"NO" -a -d /tftpboot/mop ]; then
  681. echo -n ' mopd'; mopd ${mopd_flags}
  682. fi
  683. echo '.'
  684. mixerctl_conf
  685. if [ X"${aucat_flags}" != X"NO" ]; then
  686. aucat -l ${aucat_flags}
  687. fi
  688. # KerberosV master KDC
  689. if [ X"${krb5_master_kdc}" = X"YES" ]; then
  690. echo 'KerberosV master KDC'
  691. /usr/libexec/kdc &
  692. /usr/libexec/kadmind &
  693. /usr/libexec/kpasswdd &
  694. fi
  695. # KerberosV slave KDC
  696. if [ X"${krb5_slave_kdc}" = X"YES" ]; then
  697. echo 'KerberosV slave KDC'
  698. /usr/libexec/kdc &
  699. # Remember to enable hpropd in inetd.conf
  700. fi
  701. # If rc.firstime exists, run it just once, and make sure it is deleted
  702. if [ -f /etc/rc.firsttime ]; then
  703. mv /etc/rc.firsttime /etc/rc.firsttime.run
  704. . /etc/rc.firsttime.run 2>&1 | mail -s 'rc.firsttime output' root >/dev/null
  705. fi
  706. rm -f /etc/rc.firsttime.run
  707. [ -f /etc/rc.local ] && . /etc/rc.local
  708. echo -n standard daemons:
  709. if [ X"${apmd_flags}" != X"NO" -a -x /usr/sbin/apmd ]; then
  710. echo -n ' apmd'; /usr/sbin/apmd ${apmd_flags}
  711. fi
  712. if [ X"${sensorsd_flags}" != X"NO" ]; then
  713. echo -n ' sensorsd'; /usr/sbin/sensorsd ${sensorsd_flags}
  714. fi
  715. if [ X"${hotplugd_flags}" != X"NO" -a -x /usr/sbin/hotplugd ]; then
  716. echo -n ' hotplugd'; /usr/sbin/hotplugd ${hotplugd_flags}
  717. fi
  718. if [ X"${watchdogd_flags}" != X"NO" -a -x /usr/sbin/watchdogd ]; then
  719. echo -n ' watchdogd'; /usr/sbin/watchdogd ${watchdogd_flags}
  720. fi
  721. echo -n ' cron'; cron
  722. # disable carp interlock
  723. ifconfig -g carp -carpdemote 128
  724. echo '.'
  725. date
  726. if [ X"${wsmoused_flags}" != X"NO" -a -x /usr/sbin/wsmoused ]; then
  727. echo 'starting wsmoused...'; /usr/sbin/wsmoused ${wsmoused_flags}
  728. fi
  729. # Alternatively, on some architectures, xdm may be started in /etc/ttys.
  730. if [ X"${xdm_flags}" != X"NO" -a -x /usr/X11R6/bin/xdm ]; then
  731. echo 'starting xdm...'; /usr/X11R6/bin/xdm ${xdm_flags}
  732. fi
  733. exit 0