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