198184Sgordon#!/bin/sh
298184Sgordon#
398184Sgordon# $FreeBSD$
498184Sgordon#
598184Sgordon
698184Sgordon# PROVIDE: devfs
7153298Sdougb# REQUIRE: mountcritremote
8136803Smtm# BEFORE:  SERVERS securelevel
9136224Smtm# KEYWORD: nojail
1098184Sgordon
1198184Sgordon. /etc/rc.subr
1298184Sgordon
1398184Sgordonname="devfs"
14119166Smtmstart_cmd='devfs_start'
15114769Sdougbstop_cmd=':'
1698184Sgordon
17119166Smtmdevfs_start()
18119166Smtm{
19231194Sdougb	if [ -n "$devfs_system_ruleset" -o -n "$devfs_set_rulesets" ] ||
20231194Sdougb	    checkyesno devfs_load_rulesets; then
21119166Smtm		devfs_init_rulesets
22127222Sgreen		if [ -n "$devfs_system_ruleset" ]; then
23127222Sgreen			devfs_set_ruleset $devfs_system_ruleset /dev
24127222Sgreen			devfs_apply_ruleset $devfs_system_ruleset /dev
25127222Sgreen		fi
26127222Sgreen		if [ -n "$devfs_set_rulesets" ]; then
27127222Sgreen			local _dir_set
28127222Sgreen			local _dir
29127222Sgreen			local _set
30127222Sgreen			for _dir_set in $devfs_set_rulesets; do
31127222Sgreen				_dir=${_dir_set%=*}
32127222Sgreen				_set=${_dir_set#*=}
33127222Sgreen				devfs_set_ruleset $_set $_dir
34127222Sgreen				devfs_apply_ruleset $_set $_dir
35127222Sgreen			done
36127222Sgreen		fi
37119166Smtm	fi
38119166Smtm	read_devfs_conf
39119166Smtm}
40119166Smtm
41114769Sdougbread_devfs_conf()
42114769Sdougb{
43114769Sdougb	if [ -r /etc/devfs.conf ]; then
44114769Sdougb		cd /dev
45154637Smatteo		while read action devicelist parameter; do
46114769Sdougb			case "${action}" in
47154637Smatteo			l*)	for device in ${devicelist}; do
48202880Skib					if [ ! -e ${parameter} ]; then
49154637Smatteo						ln -fs ${device} ${parameter}
50154637Smatteo					fi
51154637Smatteo				done
52114769Sdougb				;;
53154637Smatteo			o*)	for device in ${devicelist}; do
54154637Smatteo					if [ -c ${device} ]; then
55154637Smatteo						chown ${parameter} ${device}
56154637Smatteo					fi
57154637Smatteo				done
58114769Sdougb				;;
59154637Smatteo			p*)	for device in ${devicelist}; do
60154637Smatteo					if [ -c ${device} ]; then
61154637Smatteo						chmod ${parameter} ${device}
62154637Smatteo					fi
63154637Smatteo				done
64114769Sdougb				;;
65114769Sdougb			esac
66114769Sdougb		done < /etc/devfs.conf
67114769Sdougb	fi
68114769Sdougb}
69114769Sdougb
7098184Sgordonload_rc_config $name
71114769Sdougbrun_rc_command "$1"
72