#!/bin/bash # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # A copy of the GNU General Public License can be found at # http://www.gnu.org/ # # This file is part of the Cygwin LSA authentication package. request() { if [ "${auto_answer}" = "yes" ] then echo "$1 (yes/no) yes" return 0 elif [ "${auto_answer}" = "no" ] then echo "$1 (yes/no) no" return 1 fi answer="" while [ "X${answer}" != "Xyes" -a "X${answer}" != "Xno" ] do echo -n "$1 (yes/no) " read -e answer done if [ "X${answer}" = "Xyes" ] then return 0 else return 1 fi } # Check if running under at least Windows 2000 _nt_too_old=`uname | awk -F- '{print ( $2 < 5.0 ) ? 1 : 0;}'` if [ ${_nt_too_old} -eq 1 ] then echo "Cygwin LSA authentication not supported on Windows NT4 or older. Exiting." exit 1 fi # Directory in which cyglsa DLL is installed as DOS path. bindir=`cygpath -w /`\\bin # Check if we're running on 64 bit Windows. If so, we need the 64 bit # cyglsa DLL. dll=cyglsa.dll test -d `cygpath -p ${SYSTEMROOT}`/SysWOW64 && dll=cyglsa64.dll # Check if the DLL is actually installed. If not, bail out. if [ ! -f /bin/${dll} ] then echo "Required Cygwin authentication DLL /bin/${dll} doesn't exist. Exiting." exit 1 fi echo echo "Warning: Registering the Cygwin LSA authentication package requires" echo "administrator privileges! You also have to reboot the machine to" echo "activate the change." echo request "Are you sure you want to continue?" || exit 0 # The registry value which keeps the authentication packages. value='/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/Authentication Packages' [ -f /bin/cyglsa -a ! -d /bin/cyglsa ] && rm -rf /bin/cyglsa if [ ! -d /bin/cyglsa ] then if ! mkdir -m 755 /bin/cyglsa then echo "Creating the /bin/cyglsa directory failed. Exiting." exit 1 fi fi if ! cp -b "/bin/${dll}" "/bin/cyglsa/${dll}" then echo "Copying the new LSA authentication package /bin/${dll} to" echo "/bin/cyglsa/${dll} failed. Exiting." exit 1 fi # Get old content, remove every trace of "cyglsa" from it and write the # content back to the registry with the new, correct path to the cyglsa DLL. old=`regtool get "${value}"` new=`for i in ${old} do echo $i | GREP_OPTIONS="" grep -v cyglsa done` if ! regtool set "${value}" ${new} "${bindir}\\cyglsa\\${dll}" then echo "Setting the new registry value failed. Exiting." exit 1 fi echo echo "Cygwin LSA authentication package registered." echo echo "Activating Cygwin's LSA authentication package requires to reboot." if [ -x /bin/shutdown ] then if request "Do you want to do this immediately?" then echo echo "Other users might still be working on this machine." echo if request "Are you sure?" then echo echo "Ok, will reboot in 30 seconds." echo echo "If you change your mind, call 'shutdown -a' within 30 seconds" shutdown -r 30 fi fi fi