18f51ac0bSSascha Wildner#!/bin/sh 28f51ac0bSSascha Wildner 38f51ac0bSSascha Wildner# $Id: pfi,v 1.12 2005/03/07 06:18:21 cpressey Exp $ 48f51ac0bSSascha Wildner# 58f51ac0bSSascha Wildner 68f51ac0bSSascha Wildner# PROVIDE: pfi 7*e75b5286SSascha Wildner# REQUIRE: mountcritremote 88f51ac0bSSascha Wildner 98f51ac0bSSascha Wildner. /etc/rc.subr 108f51ac0bSSascha Wildner 118f51ac0bSSascha Wildnername=pfi 128f51ac0bSSascha Wildnerstart_cmd="pfi_start" 138f51ac0bSSascha Wildnerstop_cmd=":" 148f51ac0bSSascha Wildner 158f51ac0bSSascha Wildnerget_pfi_config() 168f51ac0bSSascha Wildner{ 178f51ac0bSSascha Wildner [ -r /etc/pfi.conf ] && return 0 188f51ac0bSSascha Wildner 198f51ac0bSSascha Wildner if [ -r $1/pfi.conf ]; then 208f51ac0bSSascha Wildner echo " found!" 218f51ac0bSSascha Wildner tr -d "\r" < $1/pfi.conf > /etc/pfi.conf 228f51ac0bSSascha Wildner echo "pfi_found_on_device='$2'" >> /etc/pfi.conf 238f51ac0bSSascha Wildner 248f51ac0bSSascha Wildner # If the pfi.conf says to run a custom script from the pfi 258f51ac0bSSascha Wildner # media, run it now, so that it has access to the pfi media. 268f51ac0bSSascha Wildner 278f51ac0bSSascha Wildner if [ -r /etc/defaults/pfi.conf ]; then 288f51ac0bSSascha Wildner . /etc/defaults/pfi.conf 298f51ac0bSSascha Wildner fi 308f51ac0bSSascha Wildner . /etc/pfi.conf 318f51ac0bSSascha Wildner if [ "$pfi_script" != "" -a -x "$1/$pfi_script" ]; then 328f51ac0bSSascha Wildner $1/$pfi_script 338f51ac0bSSascha Wildner fi 348f51ac0bSSascha Wildner return 0 358f51ac0bSSascha Wildner else 368f51ac0bSSascha Wildner return 1 378f51ac0bSSascha Wildner fi 388f51ac0bSSascha Wildner} 398f51ac0bSSascha Wildner 408f51ac0bSSascha Wildnerget_authorized_hosts() 418f51ac0bSSascha Wildner{ 428f51ac0bSSascha Wildner [ -r /root/.ssh/authorized_hosts ] && return 0 438f51ac0bSSascha Wildner if [ -r $1/authorized_hosts ]; then 448f51ac0bSSascha Wildner echo "authorized_hosts found!" 458f51ac0bSSascha Wildner mkdir -p /root/.ssh/ 468f51ac0bSSascha Wildner tr -d "\r" < $1/authorized_hosts > /root/.ssh/authorized_hosts 478f51ac0bSSascha Wildner fi 488f51ac0bSSascha Wildner} 498f51ac0bSSascha Wildner 50a056bc17SAlex Hornungget_authorized_keys() 51a056bc17SAlex Hornung{ 52a056bc17SAlex Hornung [ -r /root/.ssh/authorized_keys ] && return 0 53a056bc17SAlex Hornung if [ -r $1/authorized_keys ]; then 54a056bc17SAlex Hornung echo "authorized_keys found!" 55a056bc17SAlex Hornung mkdir -p /root/.ssh/ 56a056bc17SAlex Hornung tr -d "\r" < $1/authorized_keys > /root/.ssh/authorized_keys 57a056bc17SAlex Hornung fi 58a056bc17SAlex Hornung} 59a056bc17SAlex Hornung 608f51ac0bSSascha Wildnerlook_for_pfi_config_msdos() 618f51ac0bSSascha Wildner{ 628f51ac0bSSascha Wildner [ -r /etc/pfi.conf ] && return 0 638f51ac0bSSascha Wildner 648f51ac0bSSascha Wildner for try_device in da0s1 da1s1 da8s1 fd0 fd1; do 658f51ac0bSSascha Wildner if [ -c /dev/${try_device} ]; then 668f51ac0bSSascha Wildner echo -n "Looking for pfi.conf on /dev/${try_device}..." 678f51ac0bSSascha Wildner if mount_msdos -o rdonly /dev/$try_device /mnt ; then 688f51ac0bSSascha Wildner echo -n " /dev/$try_device ok..." 698f51ac0bSSascha Wildner if get_pfi_config /mnt /dev/$try_device; then 708f51ac0bSSascha Wildner get_authorized_hosts /mnt 71a056bc17SAlex Hornung get_authorized_keys /mnt 728f51ac0bSSascha Wildner umount /mnt 738f51ac0bSSascha Wildner return 0 748f51ac0bSSascha Wildner fi 758f51ac0bSSascha Wildner umount /mnt 768f51ac0bSSascha Wildner fi 778f51ac0bSSascha Wildner echo " not found" 788f51ac0bSSascha Wildner fi 798f51ac0bSSascha Wildner done 808f51ac0bSSascha Wildner return 1 818f51ac0bSSascha Wildner} 828f51ac0bSSascha Wildner 838f51ac0bSSascha Wildnerlook_for_pfi_config_cd9660() 848f51ac0bSSascha Wildner{ 858f51ac0bSSascha Wildner [ -r /etc/pfi.conf ] && return 0 868f51ac0bSSascha Wildner 878f51ac0bSSascha Wildner for try_device in acd0 cd0 acd1 cd1; do 888f51ac0bSSascha Wildner if [ -c /dev/${try_device} ]; then 898f51ac0bSSascha Wildner echo -n "Looking for pfi.conf on /dev/${try_device}..." 908f51ac0bSSascha Wildner if mount_cd9660 /dev/$try_device /mnt ; then 918f51ac0bSSascha Wildner echo -n " /dev/$try_device ok..." 928f51ac0bSSascha Wildner if get_pfi_config /mnt /dev/$try_device; then 938f51ac0bSSascha Wildner get_authorized_hosts /mnt 94a056bc17SAlex Hornung get_authorized_keys /mnt 958f51ac0bSSascha Wildner umount /mnt 968f51ac0bSSascha Wildner return 0 978f51ac0bSSascha Wildner fi 988f51ac0bSSascha Wildner umount /mnt 998f51ac0bSSascha Wildner fi 1008f51ac0bSSascha Wildner echo " not found" 1018f51ac0bSSascha Wildner fi 1028f51ac0bSSascha Wildner done 1038f51ac0bSSascha Wildner return 1 1048f51ac0bSSascha Wildner} 1058f51ac0bSSascha Wildner 1068f51ac0bSSascha Wildnerpfi_start() 1078f51ac0bSSascha Wildner{ 1088f51ac0bSSascha Wildner echo "Starting pfi..." 1098f51ac0bSSascha Wildner 1108f51ac0bSSascha Wildner # Get the pfi.conf file off the pfi media and into /etc/pfi.conf. 1118f51ac0bSSascha Wildner 1128f51ac0bSSascha Wildner look_for_pfi_config_cd9660 1138f51ac0bSSascha Wildner look_for_pfi_config_msdos 1148f51ac0bSSascha Wildner 1158f51ac0bSSascha Wildner # If the search was not successful, stub out a dummy pfi.conf. 1168f51ac0bSSascha Wildner 1178f51ac0bSSascha Wildner if [ ! -r /etc/pfi.conf ]; then 1188f51ac0bSSascha Wildner echo '' >/etc/pfi.conf 1198f51ac0bSSascha Wildner fi 1208f51ac0bSSascha Wildner 1218f51ac0bSSascha Wildner # Append the contents of pfi.conf onto rc.conf, so that settings 1228f51ac0bSSascha Wildner # (such as ifconfig_dc0="DHCP") will be picked up by pfi_rc_actions. 1238f51ac0bSSascha Wildner 1248f51ac0bSSascha Wildner cp /etc/rc.conf /etc/rc.conf.orig 1258f51ac0bSSascha Wildner cat /etc/pfi.conf >>/etc/rc.conf 1268f51ac0bSSascha Wildner 1278f51ac0bSSascha Wildner # Read in the pfi.conf we either found or created for ourselves. 1288f51ac0bSSascha Wildner 1298f51ac0bSSascha Wildner if [ -r /etc/defaults/pfi.conf ]; then 1308f51ac0bSSascha Wildner . /etc/defaults/pfi.conf 1318f51ac0bSSascha Wildner fi 1328f51ac0bSSascha Wildner . /etc/pfi.conf 1338f51ac0bSSascha Wildner 1348f51ac0bSSascha Wildner # We can perform any pre-install tasks here by 1358f51ac0bSSascha Wildner # examining the contents of pfi_* variables. 1368f51ac0bSSascha Wildner 1378f51ac0bSSascha Wildner # Interpret pfi_sshd_* options. These basically add settings 1388f51ac0bSSascha Wildner # to /etc/ssh/sshd_config; it is assumed "sshd" will appear 1398f51ac0bSSascha Wildner # in pfi_rc_actions to restart sshd. 1408f51ac0bSSascha Wildner 1418f51ac0bSSascha Wildner case ${pfi_sshd_permit_root_login} in 1428f51ac0bSSascha Wildner YES) 1438f51ac0bSSascha Wildner echo "PermitRootLogin yes" >> /etc/ssh/sshd_config 1448f51ac0bSSascha Wildner ;; 1458f51ac0bSSascha Wildner without-password) 1468f51ac0bSSascha Wildner echo "PermitRootLogin without-password" >> /etc/ssh/sshd_config 1478f51ac0bSSascha Wildner ;; 1488f51ac0bSSascha Wildner forced-commands-only) 1498f51ac0bSSascha Wildner echo "PermitRootLogin forced-commands-only" >> /etc/ssh/sshd_config 1508f51ac0bSSascha Wildner ;; 1518f51ac0bSSascha Wildner *) 1528f51ac0bSSascha Wildner ;; 1538f51ac0bSSascha Wildner esac 1548f51ac0bSSascha Wildner 1558f51ac0bSSascha Wildner case ${pfi_sshd_permit_empty_passwords} in 1568f51ac0bSSascha Wildner YES) 1578f51ac0bSSascha Wildner echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config 1588f51ac0bSSascha Wildner ;; 1598f51ac0bSSascha Wildner *) 1608f51ac0bSSascha Wildner ;; 1618f51ac0bSSascha Wildner esac 1628f51ac0bSSascha Wildner 1638f51ac0bSSascha Wildner # Interpret pfi_set_root_password. If it is not empty, use 1648f51ac0bSSascha Wildner # it to set root's LiveCD password. 1658f51ac0bSSascha Wildner 1668f51ac0bSSascha Wildner if [ "X$pfi_set_root_password" != "X" ]; then 1678f51ac0bSSascha Wildner echo "$pfi_set_root_password" | \ 1688f51ac0bSSascha Wildner /usr/sbin/pw usermod root -h 0 1698f51ac0bSSascha Wildner fi 1708f51ac0bSSascha Wildner 1718f51ac0bSSascha Wildner # The most important pre-install task is to restart 1728f51ac0bSSascha Wildner # any RCNG scripts listed in pfi_rc_actions with any new 1738f51ac0bSSascha Wildner # settings that might have been set up by pfi.conf. 1748f51ac0bSSascha Wildner 1758f51ac0bSSascha Wildner if [ "X$pfi_rc_actions" != "X" ]; then 1768f51ac0bSSascha Wildner rev_actions=`reverse_list $pfi_rc_actions` 1778f51ac0bSSascha Wildner 1788f51ac0bSSascha Wildner for _rc_elem in ${rev_actions}; do 1798f51ac0bSSascha Wildner echo "Stopping ${_rc_elem}..." 1808f51ac0bSSascha Wildner rcstop ${_rc_elem} 1818f51ac0bSSascha Wildner done 1828f51ac0bSSascha Wildner for _rc_elem in ${pfi_rc_actions}; do 1838f51ac0bSSascha Wildner echo "Starting ${_rc_elem}..." 1848f51ac0bSSascha Wildner rcstart ${_rc_elem} 1858f51ac0bSSascha Wildner done 1868f51ac0bSSascha Wildner fi 1878f51ac0bSSascha Wildner 1888f51ac0bSSascha Wildner # Restore the original rc.conf. 1898f51ac0bSSascha Wildner 1908f51ac0bSSascha Wildner mv /etc/rc.conf.orig /etc/rc.conf 1918f51ac0bSSascha Wildner 1928f51ac0bSSascha Wildner # Set up auto-login if requested. 1938f51ac0bSSascha Wildner 1948f51ac0bSSascha Wildner if [ "X$pfi_autologin" != "XNONE" ]; then 1958f51ac0bSSascha Wildner echo 'AL.pfi:\' >> /etc/gettytab 1968f51ac0bSSascha Wildner echo " :al=${pfi_autologin}:tc=Pc:" >> /etc/gettytab 1978f51ac0bSSascha Wildner sed -i '' 's|^ttyv0.*|ttyv0 "/usr/libexec/getty AL.pfi" cons25 on secure|' /etc/ttys 1988f51ac0bSSascha Wildner fi 1998f51ac0bSSascha Wildner 2008f51ac0bSSascha Wildner # Finally, start thttpd if the user wants to use 2018f51ac0bSSascha Wildner # the cgi frontend. 2028f51ac0bSSascha Wildner 2038f51ac0bSSascha Wildner if [ "X$pfi_frontend" = "Xcgi" ]; then 2048f51ac0bSSascha Wildner echo "Starting thttpd..." 2058f51ac0bSSascha Wildner /usr/local/sbin/thttpd_wrapper & 2068f51ac0bSSascha Wildner fi 2078f51ac0bSSascha Wildner} 2088f51ac0bSSascha Wildner 2098f51ac0bSSascha Wildnerload_rc_config $name 2108f51ac0bSSascha Wildnerrun_rc_command "$1" 211