newlib/winsup/lsaauth/cyglsa-config
2010-12-10 10:14:35 +00:00

124 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
#
# cyglsa-config, Copyright 2006, 2010 Red Hat Inc.
#
# 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