1129470Spjd#!/bin/sh
2129470Spjd#
3265420Simp#
4156813Sru
5163048Sru# PROVIDE: devfs
6163048Sru# REQUIRE: mountcritremote
7156813Sru# BEFORE:  SERVERS securelevel
8148464Spjd# KEYWORD: nojail
9148649Sru
10163851Spjd. /etc/rc.subr
11131476Spjd
12132905Spjdname="devfs"
13202437Straszdesc="Device filesystem"
14167050Smjacobstart_cmd='devfs_start'
15129470Spjdstop_cmd=':'
16169586Smarcel
17219974Smavdevfs_start()
18133812Spjd{
19206497Sluigi	if [ -n "$devfs_system_ruleset" -o -n "$devfs_set_rulesets" ] ||
20140075Spjd	    checkyesno devfs_load_rulesets; then
21129470Spjd		devfs_init_rulesets
22172302Spjd		if [ -n "$devfs_system_ruleset" ]; then
23129470Spjd			devfs_set_ruleset $devfs_system_ruleset /dev
24129470Spjd			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
71
72# doesn't make sense to run in a svcj: may need more permissions
73devfs_svcj="NO"
74
75run_rc_command "$1"
76