Home | History | Annotate | Line # | Download | only in rc.d
      1 #!/bin/sh
      2 #
      3 # $NetBSD: sysdb,v 1.26 2023/12/25 08:38:32 kre Exp $
      4 #
      5 
      6 # PROVIDE: sysdb
      7 # REQUIRE: mountcritremote
      8 # BEFORE:  DAEMON
      9 
     10 $_rc_subr_loaded . /etc/rc.subr
     11 
     12 name="sysdb"
     13 rcvar=$name
     14 start_cmd="sysdb_start"
     15 stop_cmd=":"
     16 extra_commands="devdb utmp services netgroup password"
     17 devdb_cmd="build_devdb"
     18 utmp_cmd="build_utmp"
     19 services_cmd="build_services"
     20 netgroup_cmd="build_netgroup"
     21 password_cmd="build_password"
     22 echo=:
     23 
     24 sysdb_start()
     25 {
     26 	echo -n "Building databases:"
     27 	echo=echo
     28 	comma=" "
     29 	$devdb_cmd
     30 	$utmp_cmd
     31 	$services_cmd
     32 	$netgroup_cmd
     33 	$password_cmd
     34 	echo "."
     35 }
     36 
     37 check_file()
     38 {
     39 	local src="$1"
     40 	local db="$2"
     41 
     42 	shift 2
     43 	if ! [ -e "$src" ]; then
     44 		return
     45 	fi
     46 	if ! [ -f "$db" ] || [ "$src" -nt "$db" ]; then
     47 		$echo -n "$comma${src##*/}"
     48 		comma=", "
     49 		"$@"
     50 	fi
     51 }
     52 
     53 build_services()
     54 {
     55 	check_file /etc/services /var/db/services.cdb services_mkdb -q
     56 }
     57 
     58 build_netgroup()
     59 {
     60 	check_file /etc/netgroup /var/db/netgroup.db netgroup_mkdb
     61 }
     62 
     63 build_devdb()
     64 {
     65 	check_file /dev /var/run/dev.db dev_mkdb
     66 	check_file /dev /var/run/dev.cdb dev_mkdb
     67 }
     68 
     69 build_password()
     70 {
     71 	local p=/etc/master.passwd
     72 	check_file $p /etc/spwd.db pwd_mkdb -w $p
     73 }
     74 
     75 build_utmp()
     76 {
     77 	#	Re-create /var/run/utmp and /var/run/utmpx, which are
     78 	#	deleted by mountcritlocal but can't be recreated by it
     79 	#	because install and chown may not be available then
     80 	#	(possibly no /usr).
     81 	#
     82 	local i
     83 	for i in "" x; do
     84 		if ! [ -f /var/run/utmp$i ]; then
     85 			$echo -n "${comma}utmp$i"
     86 			comma=", "
     87 			install -c -m 664 -g utmp /dev/null /var/run/utmp$i
     88 		fi
     89 	done
     90 }
     91 
     92 load_rc_config $name
     93 run_rc_command "$1"
     94