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