xref: /dragonfly/nrelease/root/etc/rc.d/pfi (revision 0db87cb7)
1#!/bin/sh
2
3# $Id: pfi,v 1.12 2005/03/07 06:18:21 cpressey Exp $
4#
5
6# PROVIDE: pfi
7# REQUIRE: mountcritremote
8
9. /etc/rc.subr
10
11name=pfi
12start_cmd="pfi_start"
13stop_cmd=":"
14
15get_pfi_config()
16{
17	[ -r /etc/pfi.conf ] && return 0
18
19	if [ -r $1/pfi.conf ]; then
20		echo " found!"
21		tr -d "\r" < $1/pfi.conf > /etc/pfi.conf
22		echo "pfi_found_on_device='$2'" >> /etc/pfi.conf
23
24		# If the pfi.conf says to run a custom script from the pfi
25		# media, run it now, so that it has access to the pfi media.
26
27		if [ -r /etc/defaults/pfi.conf ]; then
28			. /etc/defaults/pfi.conf
29		fi
30		. /etc/pfi.conf
31		if [ "$pfi_script" != "" -a -x "$1/$pfi_script" ]; then
32			$1/$pfi_script
33		fi
34		return 0
35	else
36		return 1
37	fi
38}
39
40get_authorized_hosts()
41{
42	[ -r /root/.ssh/authorized_hosts ] && return 0
43	if [ -r $1/authorized_hosts ]; then
44		echo "authorized_hosts found!"
45		mkdir -p /root/.ssh/
46		tr -d "\r" < $1/authorized_hosts > /root/.ssh/authorized_hosts
47	fi
48}
49
50get_authorized_keys()
51{
52	[ -r /root/.ssh/authorized_keys ] && return 0
53	if [ -r $1/authorized_keys ]; then
54		echo "authorized_keys found!"
55		mkdir -p /root/.ssh/
56		tr -d "\r" < $1/authorized_keys > /root/.ssh/authorized_keys
57	fi
58}
59
60look_for_pfi_config_msdos()
61{
62	[ -r /etc/pfi.conf ] && return 0
63
64	for try_device in da0s1 da1s1 da8s1 fd0 fd1; do
65		if [ -c /dev/${try_device} ]; then
66			echo -n "Looking for pfi.conf on /dev/${try_device}..."
67			if mount_msdos -o rdonly /dev/$try_device /mnt ; then
68				echo -n " /dev/$try_device ok..."
69				if get_pfi_config /mnt /dev/$try_device; then
70					get_authorized_hosts /mnt
71					get_authorized_keys /mnt
72					umount /mnt
73					return 0
74				fi
75				umount /mnt
76			fi
77			echo " not found"
78		fi
79	done
80	return 1
81}
82
83look_for_pfi_config_cd9660()
84{
85	[ -r /etc/pfi.conf ] && return 0
86
87	for try_device in acd0 cd0 acd1 cd1; do
88		if [ -c /dev/${try_device} ]; then
89			echo -n "Looking for pfi.conf on /dev/${try_device}..."
90			if mount_cd9660 /dev/$try_device /mnt ; then
91				echo -n " /dev/$try_device ok..."
92				if get_pfi_config /mnt /dev/$try_device; then
93					get_authorized_hosts /mnt
94					get_authorized_keys /mnt
95					umount /mnt
96					return 0
97				fi
98				umount /mnt
99			fi
100			echo " not found"
101		fi
102	done
103	return 1
104}
105
106pfi_start()
107{
108	echo "Starting pfi..."
109
110	# Get the pfi.conf file off the pfi media and into /etc/pfi.conf.
111
112	look_for_pfi_config_cd9660
113	look_for_pfi_config_msdos
114
115	# If the search was not successful, stub out a dummy pfi.conf.
116
117	if [ ! -r /etc/pfi.conf ]; then
118		echo '' >/etc/pfi.conf
119	fi
120
121	# Append the contents of pfi.conf onto rc.conf, so that settings
122	# (such as ifconfig_dc0="DHCP") will be picked up by pfi_rc_actions.
123
124	cp /etc/rc.conf /etc/rc.conf.orig
125	cat /etc/pfi.conf >>/etc/rc.conf
126
127	# Read in the pfi.conf we either found or created for ourselves.
128
129	if [ -r /etc/defaults/pfi.conf ]; then
130		. /etc/defaults/pfi.conf
131	fi
132	. /etc/pfi.conf
133
134	# We can perform any pre-install tasks here by
135	# examining the contents of pfi_* variables.
136
137	# Interpret pfi_sshd_* options.  These basically add settings
138	# to /etc/ssh/sshd_config; it is assumed "sshd" will appear
139	# in pfi_rc_actions to restart sshd.
140
141	case ${pfi_sshd_permit_root_login} in
142	YES)
143		echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
144		;;
145	without-password)
146		echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config
147		;;
148	forced-commands-only)
149		echo "PermitRootLogin forced-commands-only" >> /etc/ssh/sshd_config
150		;;
151	*)
152		;;
153	esac
154
155	case ${pfi_sshd_permit_empty_passwords} in
156	YES)
157		echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config
158		;;
159	*)
160		;;
161	esac
162
163	# Interpret pfi_set_root_password.  If it is not empty, use
164	# it to set root's LiveCD password.
165
166	if [ "X$pfi_set_root_password" != "X" ]; then
167		echo "$pfi_set_root_password" | \
168		    /usr/sbin/pw usermod root -h 0
169	fi
170
171	# The most important pre-install task is to restart
172	# any RCNG scripts listed in pfi_rc_actions with any new
173	# settings that might have been set up by pfi.conf.
174
175	if [ "X$pfi_rc_actions" != "X" ]; then
176		rev_actions=`reverse_list $pfi_rc_actions`
177
178		for _rc_elem in ${rev_actions}; do
179			echo "Stopping ${_rc_elem}..."
180			rcstop ${_rc_elem}
181		done
182		for _rc_elem in ${pfi_rc_actions}; do
183			echo "Starting ${_rc_elem}..."
184			rcstart ${_rc_elem}
185		done
186	fi
187
188	# Restore the original rc.conf.
189
190	mv /etc/rc.conf.orig /etc/rc.conf
191
192	# Set up auto-login if requested.
193
194	if [ "X$pfi_autologin" != "XNONE" ]; then
195		echo 'AL.pfi:\' >> /etc/gettytab
196		echo "        :al=${pfi_autologin}:tc=Pc:" >> /etc/gettytab
197		sed -i '' 's|^ttyv0.*|ttyv0 "/usr/libexec/getty AL.pfi" cons25 on secure|' /etc/ttys
198	fi
199
200	# Finally, start thttpd if the user wants to use
201	# the cgi frontend.
202
203	if [ "X$pfi_frontend" = "Xcgi" ]; then
204		echo "Starting thttpd..."
205		/usr/local/sbin/thttpd_wrapper &
206	fi
207}
208
209load_rc_config $name
210run_rc_command "$1"
211