]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/devfs
Merge branch 'releng/11.3' into releng-CDN/11.3
[FreeBSD/FreeBSD.git] / etc / rc.d / devfs
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
13 name="devfs"
14 desc="Device filesystem"
15 start_cmd='devfs_start'
16 stop_cmd=':'
17
18 devfs_start()
19 {
20         if [ -n "$devfs_system_ruleset" -o -n "$devfs_set_rulesets" ] ||
21             checkyesno devfs_load_rulesets; then
22                 devfs_init_rulesets
23                 if [ -n "$devfs_system_ruleset" ]; then
24                         devfs_set_ruleset $devfs_system_ruleset /dev
25                         devfs_apply_ruleset $devfs_system_ruleset /dev
26                 fi
27                 if [ -n "$devfs_set_rulesets" ]; then
28                         local _dir_set
29                         local _dir
30                         local _set
31                         for _dir_set in $devfs_set_rulesets; do
32                                 _dir=${_dir_set%=*}
33                                 _set=${_dir_set#*=}
34                                 devfs_set_ruleset $_set $_dir
35                                 devfs_apply_ruleset $_set $_dir
36                         done
37                 fi
38         fi
39         read_devfs_conf
40 }
41
42 read_devfs_conf()
43 {
44         if [ -r /etc/devfs.conf ]; then
45                 cd /dev
46                 while read action devicelist parameter; do
47                         case "${action}" in
48                         l*)     for device in ${devicelist}; do
49                                         if [ ! -e ${parameter} ]; then
50                                                 ln -fs ${device} ${parameter}
51                                         fi
52                                 done
53                                 ;;
54                         o*)     for device in ${devicelist}; do
55                                         if [ -c ${device} ]; then
56                                                 chown ${parameter} ${device}
57                                         fi
58                                 done
59                                 ;;
60                         p*)     for device in ${devicelist}; do
61                                         if [ -c ${device} ]; then
62                                                 chmod ${parameter} ${device}
63                                         fi
64                                 done
65                                 ;;
66                         esac
67                 done < /etc/devfs.conf
68         fi
69 }
70
71 load_rc_config $name
72 run_rc_command "$1"