* cyglsa.c: Don't include ntddk.h.

(RtlInitEmptyUnicodeString): Use Visual-C compatible "__inline" instead
	of "inline".
	(uni_alloc): Change second argument to USHORT.
	(printf): Move definition of ap to make Visual-C++ happy.
	(LsaApLogonUserEx): Compute size of datastructure returned to
	LSA on 64 bit systems correctly to avoid heap corruption.
	* cyglsa64.dll: Regenerate.
	* make-64bit-version-with-visual-c.bat: Accommodate newer Microsoft
	toolchains.  Add more comment.
	* mslsa.def: Export LsaApLogonUserEx instead of LsaApLogonUser.
This commit is contained in:
Corinna Vinschen
2008-07-13 13:14:41 +00:00
parent 25dab6dc60
commit 5a0c7f1df9
5 changed files with 40 additions and 12 deletions

View File

@@ -19,7 +19,6 @@ Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */
#include <lm.h>
#include <iptypes.h>
#include <ntsecapi.h>
#include <ntddk.h>
#include "../cygwin/cyglsa.h"
#include "../cygwin/include/cygwin/version.h"
@@ -41,9 +40,8 @@ DllMain (HINSTANCE inst, DWORD reason, LPVOID res)
}
#ifndef RtlInitEmptyUnicodeString
inline
VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
USHORT len)
__inline VOID NTAPI
RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf, USHORT len)
{
dest->Length = 0;
dest->MaximumLength = len;
@@ -52,7 +50,7 @@ VOID NTAPI RtlInitEmptyUnicodeString(PUNICODE_STRING dest, PCWSTR buf,
#endif
static PUNICODE_STRING
uni_alloc (PWCHAR src, DWORD len)
uni_alloc (PWCHAR src, USHORT len)
{
PUNICODE_STRING tgt;
@@ -80,10 +78,10 @@ printf (const char *format, ...)
char buf[256];
DWORD wr;
int ret;
va_list ap;
if (fh == INVALID_HANDLE_VALUE)
return 0;
va_list ap;
va_start (ap, format);
ret = _vsnprintf (buf, 256, format, ap);
@@ -471,14 +469,17 @@ LsaApLogonUserEx (PLSA_CLIENT_REQUEST request, SECURITY_LOGON_TYPE logon_type,
base = (LONG_PTR) &authinf->inf;
newsize = authinf->inf_size;
newsize += sizeof (PSID) - sizeof (OFFSET); /* User SID */
newsize += sizeof (TOKEN_USER) - sizeof (CYG_TOKEN_USER); /* User SID */
newsize += sizeof (PTOKEN_GROUPS) - sizeof (OFFSET); /* Groups */
src_grps = (PCYG_TOKEN_GROUPS) (base + authinf->inf.Groups);
newsize += src_grps->GroupCount /* Group SIDs */
* (sizeof (PSID) - sizeof (OFFSET));
* (sizeof (SID_AND_ATTRIBUTES)
- sizeof (CYG_SID_AND_ATTRIBUTES));
newsize += sizeof (PSID) - sizeof (OFFSET); /* Primary Group SID */
newsize += sizeof (PSID) - sizeof (OFFSET); /* Owner SID */
newsize += sizeof (PTOKEN_PRIVILEGES) - sizeof (OFFSET); /* Privileges */
newsize += 0; /* Owner SID */
newsize += sizeof (PACL) - sizeof (OFFSET); /* Default DACL */
if (!(tokinf = funcs->AllocateLsaHeap (newsize)))
return STATUS_NO_MEMORY;
tptr = (PBYTE)(tokinf + 1);