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
12name="sysdb"
13rcvar=$name
14start_cmd="sysdb_start"
15stop_cmd=":"
16extra_commands="devdb utmp services netgroup password"
17devdb_cmd="build_devdb"
18utmp_cmd="build_utmp"
19services_cmd="build_services"
20netgroup_cmd="build_netgroup"
21password_cmd="build_password"
22echo=:
23
24sysdb_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
37check_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
53build_services()
54{
55	check_file /etc/services /var/db/services.cdb services_mkdb -q
56}
57
58build_netgroup()
59{
60	check_file /etc/netgroup /var/db/netgroup.db netgroup_mkdb
61}
62
63build_devdb()
64{
65	check_file /dev /var/run/dev.db dev_mkdb
66	check_file /dev /var/run/dev.cdb dev_mkdb
67}
68
69build_password()
70{
71	local p=/etc/master.passwd
72	check_file $p /etc/spwd.db pwd_mkdb -w $p
73}
74
75build_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
92load_rc_config $name
93run_rc_command "$1"
94