diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2011-02-26 20:47:56 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2011-02-26 20:47:56 +0000 |
commit | e80f6dc8f004a687271c5172ea14d3497ec6c39b (patch) | |
tree | 04192b345ce37f8248e70f2b5ca644648029ddd7 /winsup | |
parent | 830f7b740b1c84904439cf14a28da5a60126dff4 (diff) | |
download | newlib-e80f6dc8f004a687271c5172ea14d3497ec6c39b.zip newlib-e80f6dc8f004a687271c5172ea14d3497ec6c39b.tar.gz newlib-e80f6dc8f004a687271c5172ea14d3497ec6c39b.tar.bz2 |
* autoload.cc: Make autoloaded ntdll function non-optional. Ditto for
secur32 functions, except for LsaRegisterLogonProcess. Change return
value to ERROR_PROC_NOT_FOUND. Explain why.
* sec_auth.cc (lsaauth): Handle ERROR_PROC_NOT_FOUND from call to
LsaRegisterLogonProcess when generating the errno value.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 8 | ||||
-rw-r--r-- | winsup/cygwin/autoload.cc | 29 | ||||
-rw-r--r-- | winsup/cygwin/sec_auth.cc | 5 |
3 files changed, 26 insertions, 16 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 6b2de40..c2ea0ae 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +2011-02-26 Corinna Vinschen <corinna@vinschen.de> + + * autoload.cc: Make autoloaded ntdll function non-optional. Ditto for + secur32 functions, except for LsaRegisterLogonProcess. Change return + value to ERROR_PROC_NOT_FOUND. Explain why. + * sec_auth.cc (lsaauth): Handle ERROR_PROC_NOT_FOUND from call to + LsaRegisterLogonProcess when generating the errno value. + 2011-02-22 Corinna Vinschen <corinna@vinschen.de> * dcrt0.cc: Fix copyright dates. diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 4587468..2bf2f5e 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -369,14 +369,11 @@ LoadDLLfunc (NetUserGetGroups, 28, netapi32) LoadDLLfunc (NetUserGetInfo, 16, netapi32) LoadDLLfunc (NetUserGetLocalGroups, 32, netapi32) -/* 0xc000007a == STATUS_PROCEDURE_NOT_FOUND */ -#define LoadDLLfuncNt(name, n, dllname) \ - LoadDLLfuncEx2(name, n, dllname, 1, 0xc000007a) -LoadDLLfuncNt (NtCommitTransaction, 8, ntdll) -LoadDLLfuncNt (NtCreateTransaction, 40, ntdll) -LoadDLLfuncNt (NtRollbackTransaction, 8, ntdll) -LoadDLLfuncNt (RtlGetCurrentTransaction, 0, ntdll) -LoadDLLfuncNt (RtlSetCurrentTransaction, 4, ntdll) +LoadDLLfunc (NtCommitTransaction, 8, ntdll) +LoadDLLfunc (NtCreateTransaction, 40, ntdll) +LoadDLLfunc (NtRollbackTransaction, 8, ntdll) +LoadDLLfunc (RtlGetCurrentTransaction, 0, ntdll) +LoadDLLfunc (RtlSetCurrentTransaction, 4, ntdll) LoadDLLfunc (CoTaskMemFree, 4, ole32) @@ -389,12 +386,16 @@ LoadDLLfuncEx (QueryWorkingSet, 12, psapi, 1) LoadDLLfunc (UuidCreate, 4, rpcrt4) LoadDLLfuncEx (UuidCreateSequential, 4, rpcrt4, 1) -/* secur32 functions return NTSTATUS values. */ -LoadDLLfuncNt (LsaDeregisterLogonProcess, 4, secur32) -LoadDLLfuncNt (LsaFreeReturnBuffer, 4, secur32) -LoadDLLfuncNt (LsaLogonUser, 56, secur32) -LoadDLLfuncNt (LsaLookupAuthenticationPackage, 12, secur32) -LoadDLLfuncNt (LsaRegisterLogonProcess, 12, secur32) +LoadDLLfunc (LsaDeregisterLogonProcess, 4, secur32) +LoadDLLfunc (LsaFreeReturnBuffer, 4, secur32) +LoadDLLfunc (LsaLogonUser, 56, secur32) +LoadDLLfunc (LsaLookupAuthenticationPackage, 12, secur32) +/* secur32 functions return NTSTATUS values. However, the error code must + fit in a single byte, see LoadDLLprime. + The calling function, lsaauth(), checks for STATUS_SUCCESS (0), so we + simply return some arbitrary non-0 value (127 == ERROR_PROC_NOT_FOUND) + from here, if the function can't be loaded. */ +LoadDLLfuncEx2 (LsaRegisterLogonProcess, 12, secur32, 1, 127) LoadDLLfunc (SHGetDesktopFolder, 4, shell32) diff --git a/winsup/cygwin/sec_auth.cc b/winsup/cygwin/sec_auth.cc index 8af0b98..9f27f9d 100644 --- a/winsup/cygwin/sec_auth.cc +++ b/winsup/cygwin/sec_auth.cc @@ -1,7 +1,7 @@ /* sec_auth.cc: NT authentication functions Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010 Red Hat, Inc. + 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. This file is part of Cygwin. @@ -967,7 +967,8 @@ lsaauth (cygsid &usersid, user_groups &new_groups, struct passwd *pw) if (ret != STATUS_SUCCESS) { debug_printf ("LsaRegisterLogonProcess: %p", ret); - __seterrno_from_win_error (LsaNtStatusToWinError (ret)); + __seterrno_from_win_error (ret == ERROR_PROC_NOT_FOUND + ? ret : LsaNtStatusToWinError (ret)); goto out; } else if (GetLastError () == ERROR_PROC_NOT_FOUND) |