124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			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
 |