* uinfo.cc (cygheap_user::env_domain): Use LookupAccountSidW and

convert user and domain to multibyte strings to make sure to use
	correct codeset.
This commit is contained in:
Corinna Vinschen 2011-03-29 10:46:04 +00:00
parent 5f660ecf24
commit 91d3057085
2 changed files with 15 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2011-03-29 Corinna Vinschen <corinna@vinschen.de>
* uinfo.cc (cygheap_user::env_domain): Use LookupAccountSidW and
convert user and domain to multibyte strings to make sure to use
correct codeset.
2011-03-29 Corinna Vinschen <corinna@vinschen.de> 2011-03-29 Corinna Vinschen <corinna@vinschen.de>
* autoload.cc (UuidCreate): Remove. * autoload.cc (UuidCreate): Remove.

View File

@ -1,7 +1,7 @@
/* uinfo.cc: user info (uid, gid, etc...) /* uinfo.cc: user info (uid, gid, etc...)
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008 Red Hat, Inc. 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -382,21 +382,21 @@ cygheap_user::env_domain (const char *name, size_t namelen)
if (pwinname && test_uid (pdomain, name, namelen)) if (pwinname && test_uid (pdomain, name, namelen))
return pdomain; return pdomain;
char username[UNLEN + 1]; DWORD ulen = UNLEN + 1;
DWORD ulen = sizeof (username); WCHAR username[ulen];
char userdomain[DNLEN + 1]; DWORD dlen = DNLEN + 1;
DWORD dlen = sizeof (userdomain); WCHAR userdomain[dlen];
SID_NAME_USE use; SID_NAME_USE use;
cfree_and_set (pwinname, almost_null); cfree_and_set (pwinname, almost_null);
cfree_and_set (pdomain, almost_null); cfree_and_set (pdomain, almost_null);
if (!LookupAccountSid (NULL, sid (), username, &ulen, if (!LookupAccountSidW (NULL, sid (), username, &ulen,
userdomain, &dlen, &use)) userdomain, &dlen, &use))
__seterrno (); __seterrno ();
else else
{ {
pwinname = cstrdup (username); sys_wcstombs_alloc (&pwinname, HEAP_STR, username);
pdomain = cstrdup (userdomain); sys_wcstombs_alloc (&pdomain, HEAP_STR, userdomain);
} }
return pdomain; return pdomain;
} }