1#!/bin/sh
2#
3# $FreeBSD$
4#
5
6# PROVIDE: devfs
7# REQUIRE: mountcritremote
8# BEFORE:  SERVERS securelevel
9# KEYWORD: nojail
10
11. /etc/rc.subr
12
13name="devfs"
14start_cmd='devfs_start'
15stop_cmd=':'
16
17devfs_start()
18{
19	if [ -n "$devfs_system_ruleset" -o -n "$devfs_set_rulesets" ] ||
20	    checkyesno devfs_load_rulesets; then
21		devfs_init_rulesets
22		if [ -n "$devfs_system_ruleset" ]; then
23			devfs_set_ruleset $devfs_system_ruleset /dev
24			devfs_apply_ruleset $devfs_system_ruleset /dev
25		fi
26		if [ -n "$devfs_set_rulesets" ]; then
27			local _dir_set
28			local _dir
29			local _set
30			for _dir_set in $devfs_set_rulesets; do
31				_dir=${_dir_set%=*}
32				_set=${_dir_set#*=}
33				devfs_set_ruleset $_set $_dir
34				devfs_apply_ruleset $_set $_dir
35			done
36		fi
37	fi
38	read_devfs_conf
39}
40
41read_devfs_conf()
42{
43	if [ -r /etc/devfs.conf ]; then
44		cd /dev
45		while read action devicelist parameter; do
46			case "${action}" in
47			l*)	for device in ${devicelist}; do
48					if [ ! -e ${parameter} ]; then
49						ln -fs ${device} ${parameter}
50					fi
51				done
52				;;
53			o*)	for device in ${devicelist}; do
54					if [ -c ${device} ]; then
55						chown ${parameter} ${device}
56					fi
57				done
58				;;
59			p*)	for device in ${devicelist}; do
60					if [ -c ${device} ]; then
61						chmod ${parameter} ${device}
62					fi
63				done
64				;;
65			esac
66		done < /etc/devfs.conf
67	fi
68}
69
70load_rc_config $name
71run_rc_command "$1"
72