| # PostInstall script for OPENssh |
| INSTALLF="/usr/sbin/installf" |
| |
| instbackup() { |
| _DIRECTORY=$1 |
| _FILEBASE=$2 |
| $INSTALLF $PKGINST ${_DIRECTORY}/${_FILEBASE} |
| _SUFFIX=`/usr/bin/date +%Y-%m-%d-%H%M` |
| if [ -f ${_DIRECTORY}/${_FILEBASE} ]; then |
| echo " Backing up file ${_FILEBASE}..." |
| if [ -f ${_DIRECTORY}/${_FILEBASE}.orig ]; then |
| $INSTALLF $PKGINST ${_DIRECTORY}/${_FILEBASE}.orig.${_SUFFIX} |
| cp -p ${_DIRECTORY}/${_FILEBASE} ${_DIRECTORY}/${_FILEBASE}.orig.${_SUFFIX} |
| echo " Saved as ${_DIRECTORY}/${_FILEBASE}.orig.${_SUFFIX}." |
| else |
| $INSTALLF $PKGINST ${_DIRECTORY}/${_FILEBASE}.orig |
| cp -p ${_DIRECTORY}/${_FILEBASE} ${_DIRECTORY}/${_FILEBASE}.orig |
| echo " Saved as ${_DIRECTORY}/${_FILEBASE}.orig." |
| fi |
| fi |
| cp -p ${_DIRECTORY}/${_FILEBASE}.default ${_DIRECTORY}/${_FILEBASE} |
| echo "Installed new ${_DIRECTORY}/${_FILEBASE} configuration file." |
| } |
| |
| ### Main body of script |
| |
| echo "" |
| echo "Beginning postinstall script--this script should leave you with a" |
| echo "functional and operational configuration of OpenSSH." |
| echo "" |
| |
| if [ ! "${UPDATE}" = "1" ]; then |
| echo "Performing a \"fresh\" installation of OpenSSH." |
| ### Install init script and create symlinks |
| $INSTALLF $PKGINST ${PKG_INSTALL_ROOT}/etc/init.d/sshd f 0500 root sys || exit 2 |
| cp -p ${CONFDIR}/sshd-initscript ${PKG_INSTALL_ROOT}/etc/init.d/sshd |
| $INSTALLF $PKGINST ${PKG_INSTALL_ROOT}/etc/rc2.d/S72local_sshd=/etc/init.d/sshd s || exit 2 |
| $INSTALLF $PKGINST ${PKG_INSTALL_ROOT}/etc/rc1.d/K30local_sshd=/etc/init.d/sshd s || exit 2 |
| $INSTALLF $PKGINST ${PKG_INSTALL_ROOT}/etc/rc0.d/K30local_sshd=/etc/init.d/sshd s || exit 2 |
| |
| ### The initial package installation leaves default versions of |
| ### ssh_prng_cmds, ssh_config, and sshd_config in ${CONFDIR}. Now |
| ### we need to decide whether to install them. Since this is *not* |
| ### an update install, we don't ask, but simply back up the old ones |
| ### and put the new ones in their place. |
| instbackup ${CONFDIR} ssh_prng_cmds |
| instbackup ${CONFDIR} ssh_config |
| instbackup ${CONFDIR} sshd_config |
| instbackup ${CONFDIR} primes |
| |
| ### If no existing sshd_config and host key, then create |
| if [ ! -f "${CONFDIR}/ssh_host_key" ]; then |
| echo "Creating new RSA public/private host key pair for SSH-1." |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_key |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_key.pub |
| ### If there is *anything* there then leave it, otherwise look |
| ### in some reasonable alternate locations before giving up. |
| ### It's worth spending some extra time looking for the old one |
| ### to avoid a bunch of "host identification has changed" warnings. |
| ### Note that some old keys from the commercial SSH might not |
| ### be compatible, but we don't test for that. |
| if [ -f "${PKG_INSTALL_ROOT}/etc/ssh_host_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/etc/ssh_host_key ${CONFDIR} |
| elif [ -f "${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_key ${CONFDIR} |
| else |
| ${DESTBIN}/ssh-keygen -b 1024 -f ${CONFDIR}/ssh_host_key -N '' |
| fi |
| else |
| echo "Using existing RSA public/private host key pair for SSH-1." |
| fi |
| if [ ! -f "${CONFDIR}/ssh_host_dsa_key" ]; then |
| echo "Creating new DSA public/private host key pair for SSH-2." |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_dsa_key |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_dsa_key.pub |
| ### If there is *anything* there then leave it, otherwise look |
| ### in some reasonable alternate locations before giving up. |
| ### It's worth spending some extra time looking for the old one |
| ### to avoid a bunch of "host identification has changed" warnings. |
| ### Note that some old keys from the commercial SSH2 might not |
| ### be compatible, but we don't test for that. |
| if [ -f "${PKG_INSTALL_ROOT}/etc/ssh_host_dsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/etc/ssh_host_dsa_key ${CONFDIR} |
| elif [ -f "${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_dsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_dsa_key ${CONFDIR} |
| else |
| ${DESTBIN}/ssh-keygen -d -f ${CONFDIR}/ssh_host_dsa_key -N '' |
| fi |
| else |
| echo "Using existing DSA public/private host key pair for SSH-2." |
| fi |
| if [ ! -f "${CONFDIR}/ssh_host_rsa_key" ]; then |
| echo "Creating new RSA public/private host key pair for SSH-2." |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_rsa_key |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_rsa_key.pub |
| ### If there is *anything* there then leave it, otherwise look |
| ### in some reasonable alternate locations before giving up. |
| ### It's worth spending some extra time looking for the old one |
| ### to avoid a bunch of "host identification has changed" warnings. |
| ### Note that some old keys from the commercial SSH2 might not |
| ### be compatible, but we don't test for that. |
| if [ -f "${PKG_INSTALL_ROOT}/etc/ssh_host_rsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/etc/ssh_host_rsa_key ${CONFDIR} |
| elif [ -f "${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_rsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_rsa_key ${CONFDIR} |
| else |
| ${DESTBIN}/ssh-keygen -t rsa -f ${CONFDIR}/ssh_host_rsa_key -N '' |
| fi |
| else |
| echo "Using existing RSA public/private host key pair for SSH-2." |
| fi |
| else |
| echo "Performing an \"update\" installation of OpenSSH." |
| ### Okay, this part *is* an update install...so we need to ensure |
| ### we don't overwrite any of the existing files. |
| |
| ### Install init script and create symlinks |
| if [ ! -f ${PKG_INSTALL_ROOT}/etc/init.d/sshd ]; then |
| echo "Installing init script in ${PKG_INSTALL_ROOT}/etc/init.d/sshd" |
| $INSTALLF $PKGINST ${PKG_INSTALL_ROOT}/etc/init.d/sshd || exit 2 |
| cp -p ${CONFDIR}/sshd-initscript ${PKG_INSTALL_ROOT}/etc/init.d/sshd |
| chown root:root ${PKG_INSTALL_ROOT}/etc/init.d/sshd |
| chmod 500 ${PKG_INSTALL_ROOT}/etc/init.d/sshd |
| fi |
| if [ ! -r ${PKG_INSTALL_ROOT}/etc/rc2.d/S72local_sshd ]; then |
| $INSTALLF $PKGINST ${PKG_INSTALL_ROOT}/etc/rc2.d/S72local_sshd=/etc/init.d/sshd s || exit 2 |
| fi |
| if [ ! -r ${PKG_INSTALL_ROOT}/etc/rc2.d/K30local_sshd ]; then |
| $INSTALLF $PKGINST /etc/rc0.d/K30local_sshd=/etc/init.d/sshd s || exit 2 |
| fi |
| |
| ### The initial package installation leaves default versions of |
| ### ssh_prng_cmds, ssh_config, and sshd_config in ${CONFDIR}. Now |
| ### we need to decide whether to install them. Since this is |
| ### an update install, we only install the new files if the old |
| ### files somehow don't exist. |
| NEWCONF=0 |
| if [ ! -r "${CONFDIR}/ssh_prng_cmds" ]; then |
| instbackup ${CONFDIR} ssh_prng_cmds |
| NEWCONF=1 |
| fi |
| if [ ! -r "${CONFDIR}/ssh_config" ]; then |
| instbackup ${CONFDIR} ssh_config |
| NEWCONF=1 |
| fi |
| if [ ! -r "${CONFDIR}/sshd_config" ]; then |
| instbackup ${CONFDIR} sshd_config |
| NEWCONF=1 |
| fi |
| if [ ! -r "${CONFDIR}/primes" ]; then |
| instbackup ${CONFDIR} primes |
| NEWCONF=1 |
| fi |
| if [ $NEWCONF -eq 0 ]; then |
| echo "Your existing SSH configuration files have not been altered." |
| else |
| echo "Your other existing SSH configuration files have not been altered." |
| fi |
| |
| ### If no existing sshd_config and host key, then create |
| if [ ! -f "${CONFDIR}/ssh_host_key" ]; then |
| echo "Creating new RSA public/private host key pair for SSH-1." |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_key |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_key.pub |
| ### If there is *anything* there then leave it, otherwise look |
| ### in some reasonable alternate locations before giving up. |
| ### It's worth spending some extra time looking for the old one |
| ### to avoid a bunch of "host identification has changed" warnings. |
| ### Note that some old keys from the commercial SSH might not |
| ### be compatible, but we don't test for that. |
| if [ -f "${PKG_INSTALL_ROOT}/etc/ssh_host_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/etc/ssh_host_key ${CONFDIR} |
| elif [ -f "${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_key ${CONFDIR} |
| else |
| ${DESTBIN}/ssh-keygen -b 1024 -f ${CONFDIR}/ssh_host_key -N '' |
| fi |
| else |
| echo "Using existing RSA public/private host key pair for SSH-1." |
| fi |
| if [ ! -f "${CONFDIR}/ssh_host_dsa_key" ]; then |
| echo "Creating new DSA public/private host key pair for SSH-2." |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_dsa_key |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_dsa_key.pub |
| ### If there is *anything* there then leave it, otherwise look |
| ### in some reasonable alternate locations before giving up. |
| ### It's worth spending some extra time looking for the old one |
| ### to avoid a bunch of "host identification has changed" warnings. |
| ### Note that some old keys from the commercial SSH2 might not |
| ### be compatible, but we don't test for that. |
| if [ -f "${PKG_INSTALL_ROOT}/etc/ssh_host_dsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/etc/ssh_host_dsa_key ${CONFDIR} |
| elif [ -f "${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_dsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_dsa_key ${CONFDIR} |
| else |
| ${DESTBIN}/ssh-keygen -d -f ${CONFDIR}/ssh_host_dsa_key -N '' |
| fi |
| else |
| echo "Using existing DSA public/private host key pair for SSH-2." |
| fi |
| if [ ! -f "${CONFDIR}/ssh_host_rsa_key" ]; then |
| echo "Creating new RSA public/private host key pair for SSH-2." |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_rsa_key |
| $INSTALLF $PKGINST ${CONFDIR}/ssh_host_rsa_key.pub |
| ### If there is *anything* there then leave it, otherwise look |
| ### in some reasonable alternate locations before giving up. |
| ### It's worth spending some extra time looking for the old one |
| ### to avoid a bunch of "host identification has changed" warnings. |
| ### Note that some old keys from the commercial SSH2 might not |
| ### be compatible, but we don't test for that. |
| if [ -f "${PKG_INSTALL_ROOT}/etc/ssh_host_rsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/etc/ssh_host_rsa_key ${CONFDIR} |
| elif [ -f "${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_rsa_key" ]; then |
| mv ${PKG_INSTALL_ROOT}/usr/local/etc/ssh_host_rsa_key ${CONFDIR} |
| else |
| ${DESTBIN}/ssh-keygen -d -f ${CONFDIR}/ssh_host_rsa_key -N '' |
| fi |
| else |
| echo "Using existing RSA public/private host key pair for SSH-2." |
| fi |
| fi |
| |
| if [ ! -d %%PIDDIR%% ]; then |
| $INSTALLF $PKGINST %%PIDDIR%% |
| mkdir -p %%PIDDIR%% |
| chown root:sys %%PIDDIR%% |
| chmod 755 %%PIDDIR%% |
| fi |
| |
| $INSTALLF -f $PKGINST || exit 2 |
| |
| if [ "X${PKG_INSTALL_ROOT}" = "X" ]; then |
| ### We're doing a local install, rather than an install for |
| ### old-style diskless clients. |
| echo "Stopping any current sshd process, and then starting the new sshd." |
| /etc/init.d/sshd stop |
| /etc/init.d/sshd start |
| else |
| echo "Not restarting sshd, since this appears to be a remote install" |
| echo "for support of diskless clients." |
| fi |
| |
| exit 0 |