Cygwin: wincap: drop no_msv1_0_s4u_logon_in_wow64 flag and related code
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
8b3081f4ca
commit
23b5466aed
|
@ -368,149 +368,6 @@ get_logon_server (PCWSTR domain, PWCHAR server, ULONG flags)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
|
||||||
get_user_groups (WCHAR *logonserver, cygsidlist &grp_list,
|
|
||||||
PWCHAR user, PWCHAR domain)
|
|
||||||
{
|
|
||||||
WCHAR dgroup[MAX_DOMAIN_NAME_LEN + GNLEN + 2], *grp_p;
|
|
||||||
LPGROUP_USERS_INFO_0 buf;
|
|
||||||
DWORD cnt, tot;
|
|
||||||
NET_API_STATUS ret;
|
|
||||||
|
|
||||||
/* Look only on logonserver */
|
|
||||||
ret = NetUserGetGroups (logonserver, user, 0, (LPBYTE *) &buf,
|
|
||||||
MAX_PREFERRED_LENGTH, &cnt, &tot);
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
__seterrno_from_win_error (ret);
|
|
||||||
/* It's no error when the user name can't be found.
|
|
||||||
It's also no error if access has been denied. Yes, sounds weird, but
|
|
||||||
keep in mind that ERROR_ACCESS_DENIED means the current user has no
|
|
||||||
permission to access the AD user information. However, if we return
|
|
||||||
an error, Cygwin will call DsGetDcName with DS_FORCE_REDISCOVERY set
|
|
||||||
to ask for another server. This is not only time consuming, it's also
|
|
||||||
useless; the next server will return access denied again. */
|
|
||||||
return ret == NERR_UserNotFound || ret == ERROR_ACCESS_DENIED;
|
|
||||||
}
|
|
||||||
|
|
||||||
grp_p = wcpncpy (dgroup, domain, MAX_DOMAIN_NAME_LEN);
|
|
||||||
*grp_p++ = L'\\';
|
|
||||||
|
|
||||||
for (DWORD i = 0; i < cnt; ++i)
|
|
||||||
{
|
|
||||||
cygsid gsid;
|
|
||||||
DWORD glen = SECURITY_MAX_SID_SIZE;
|
|
||||||
WCHAR dom[MAX_DOMAIN_NAME_LEN + 1];
|
|
||||||
DWORD dlen = sizeof (dom);
|
|
||||||
SID_NAME_USE use = SidTypeInvalid;
|
|
||||||
|
|
||||||
*wcpncpy (grp_p, buf[i].grui0_name, sizeof dgroup / sizeof *dgroup
|
|
||||||
- (grp_p - dgroup) - 1) = L'\0';
|
|
||||||
if (!LookupAccountNameW (NULL, dgroup, gsid, &glen, dom, &dlen, &use))
|
|
||||||
debug_printf ("LookupAccountName(%W), %E", dgroup);
|
|
||||||
else if (well_known_sid_type (use))
|
|
||||||
grp_list *= gsid;
|
|
||||||
else if (legal_sid_type (use))
|
|
||||||
grp_list += gsid;
|
|
||||||
else
|
|
||||||
debug_printf ("Global group %W invalid. Use: %u", dgroup, use);
|
|
||||||
}
|
|
||||||
|
|
||||||
NetApiBufferFree (buf);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
get_user_local_groups (PWCHAR domain, cygsidlist &grp_list, PWCHAR user)
|
|
||||||
{
|
|
||||||
LPLOCALGROUP_INFO_0 buf;
|
|
||||||
DWORD cnt, tot;
|
|
||||||
NET_API_STATUS ret;
|
|
||||||
|
|
||||||
/* We want to know the membership in local groups on the current machine.
|
|
||||||
Thus, don't ask the logonserver, ask the local machine. In contrast
|
|
||||||
to most other NetUser functions, NetUserGetLocalGroups accepts the
|
|
||||||
username in DOMAIN\user form. */
|
|
||||||
WCHAR username[MAX_DOMAIN_NAME_LEN + UNLEN + 2];
|
|
||||||
wcpcpy (wcpcpy (wcpcpy (username, domain), L"\\"), user);
|
|
||||||
ret = NetUserGetLocalGroups (NULL, username, 0, LG_INCLUDE_INDIRECT,
|
|
||||||
(LPBYTE *) &buf, MAX_PREFERRED_LENGTH,
|
|
||||||
&cnt, &tot);
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
debug_printf ("username: %W", username);
|
|
||||||
__seterrno_from_win_error (ret);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
WCHAR domlocal_grp[MAX_DOMAIN_NAME_LEN + GNLEN + 2];
|
|
||||||
WCHAR builtin_grp[2 * GNLEN + 2];
|
|
||||||
PWCHAR dg_ptr, bg_ptr = NULL;
|
|
||||||
SID_NAME_USE use;
|
|
||||||
|
|
||||||
dg_ptr = wcpcpy (domlocal_grp, domain);
|
|
||||||
*dg_ptr++ = L'\\';
|
|
||||||
|
|
||||||
for (DWORD i = 0; i < cnt; ++i)
|
|
||||||
{
|
|
||||||
cygsid gsid;
|
|
||||||
DWORD glen = SECURITY_MAX_SID_SIZE;
|
|
||||||
WCHAR dom[MAX_DOMAIN_NAME_LEN + 1];
|
|
||||||
DWORD domlen = MAX_DOMAIN_NAME_LEN + 1;
|
|
||||||
|
|
||||||
use = SidTypeInvalid;
|
|
||||||
wcscpy (dg_ptr, buf[i].lgrpi0_name);
|
|
||||||
if (LookupAccountNameW (NULL, domlocal_grp, gsid, &glen,
|
|
||||||
dom, &domlen, &use))
|
|
||||||
{
|
|
||||||
if (well_known_sid_type (use))
|
|
||||||
grp_list *= gsid;
|
|
||||||
else if (legal_sid_type (use))
|
|
||||||
grp_list += gsid;
|
|
||||||
else
|
|
||||||
debug_printf ("Rejecting local %W. use: %u", dg_ptr, use);
|
|
||||||
}
|
|
||||||
else if (GetLastError () == ERROR_NONE_MAPPED)
|
|
||||||
{
|
|
||||||
/* Check if it's a builtin group. */
|
|
||||||
if (!bg_ptr)
|
|
||||||
{
|
|
||||||
/* Retrieve name of builtin group from system since it's
|
|
||||||
localized. */
|
|
||||||
glen = 2 * GNLEN + 2;
|
|
||||||
if (!LookupAccountSidW (NULL, well_known_builtin_sid,
|
|
||||||
builtin_grp, &glen, domain, &domlen, &use))
|
|
||||||
debug_printf ("LookupAccountSid(BUILTIN), %E");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bg_ptr = builtin_grp + wcslen (builtin_grp);
|
|
||||||
bg_ptr = wcpcpy (builtin_grp, L"\\");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (bg_ptr)
|
|
||||||
{
|
|
||||||
wcscpy (bg_ptr, dg_ptr);
|
|
||||||
glen = SECURITY_MAX_SID_SIZE;
|
|
||||||
domlen = MAX_DOMAIN_NAME_LEN + 1;
|
|
||||||
if (LookupAccountNameW (NULL, builtin_grp, gsid, &glen,
|
|
||||||
dom, &domlen, &use))
|
|
||||||
{
|
|
||||||
if (!legal_sid_type (use))
|
|
||||||
debug_printf ("Rejecting local %W. use: %u", dg_ptr, use);
|
|
||||||
else
|
|
||||||
grp_list *= gsid;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
debug_printf ("LookupAccountName(%W), %E", builtin_grp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
debug_printf ("LookupAccountName(%W), %E", domlocal_grp);
|
|
||||||
}
|
|
||||||
NetApiBufferFree (buf);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
sid_in_token_groups (PTOKEN_GROUPS grps, cygpsid sid)
|
sid_in_token_groups (PTOKEN_GROUPS grps, cygpsid sid)
|
||||||
{
|
{
|
||||||
|
@ -583,37 +440,6 @@ get_server_groups (cygsidlist &grp_list, PSID usersid,
|
||||||
if (sid_id_auth (usersid) == 5 /* SECURITY_NT_AUTHORITY */
|
if (sid_id_auth (usersid) == 5 /* SECURITY_NT_AUTHORITY */
|
||||||
&& sid_sub_auth (usersid, 0) == SECURITY_NT_NON_UNIQUE)
|
&& sid_sub_auth (usersid, 0) == SECURITY_NT_NON_UNIQUE)
|
||||||
{
|
{
|
||||||
if (wincap.no_msv1_0_s4u_logon_in_wow64 ())
|
|
||||||
{
|
|
||||||
WCHAR server[INTERNET_MAX_HOST_NAME_LENGTH + 3];
|
|
||||||
|
|
||||||
if (!get_logon_server (domain, server, DS_IS_FLAT_NAME))
|
|
||||||
return false;
|
|
||||||
if (check_account_disabled == CHK_DISABLED)
|
|
||||||
{
|
|
||||||
NET_API_STATUS napi_stat;
|
|
||||||
USER_INFO_1 *ui1;
|
|
||||||
bool allow_user = false;
|
|
||||||
|
|
||||||
napi_stat = NetUserGetInfo (server, user, 1, (LPBYTE *) &ui1);
|
|
||||||
if (napi_stat == NERR_Success)
|
|
||||||
allow_user = !(ui1->usri1_flags & (UF_ACCOUNTDISABLE | UF_LOCKOUT));
|
|
||||||
if (ui1)
|
|
||||||
NetApiBufferFree (ui1);
|
|
||||||
if (!allow_user)
|
|
||||||
{
|
|
||||||
debug_printf ("User denied: %W\\%W", domain, user);
|
|
||||||
set_errno (EACCES);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
grp_list *= well_known_world_sid;
|
|
||||||
grp_list *= well_known_authenticated_users_sid;
|
|
||||||
get_user_groups (server, grp_list, user, domain);
|
|
||||||
get_user_local_groups (domain, grp_list, user);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp_pathbuf tp;
|
tmp_pathbuf tp;
|
||||||
HANDLE token;
|
HANDLE token;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
|
|
|
@ -36,7 +36,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:true,
|
|
||||||
has_con_24bit_colors:false,
|
has_con_24bit_colors:false,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -68,7 +67,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:false,
|
has_con_24bit_colors:false,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -100,7 +98,6 @@ wincaps wincap_8_1 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:false,
|
has_con_24bit_colors:false,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -132,7 +129,6 @@ wincaps wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared))
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:false,
|
has_con_24bit_colors:false,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -164,7 +160,6 @@ wincaps wincap_10_1607 __attribute__((section (".cygwin_dll_common"), shared))
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:false,
|
has_con_24bit_colors:false,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -196,7 +191,6 @@ wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -228,7 +222,6 @@ wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:false,
|
has_case_sensitive_dirs:false,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -260,7 +253,6 @@ wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:false,
|
has_posix_unlink_semantics_with_ignore_readonly:false,
|
||||||
has_case_sensitive_dirs:true,
|
has_case_sensitive_dirs:true,
|
||||||
has_posix_rename_semantics:false,
|
has_posix_rename_semantics:false,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -292,7 +284,6 @@ wincaps wincap_10_1809 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:true,
|
has_posix_unlink_semantics_with_ignore_readonly:true,
|
||||||
has_case_sensitive_dirs:true,
|
has_case_sensitive_dirs:true,
|
||||||
has_posix_rename_semantics:true,
|
has_posix_rename_semantics:true,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:true,
|
has_con_broken_csi3j:true,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -324,7 +315,6 @@ wincaps wincap_10_1903 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:true,
|
has_posix_unlink_semantics_with_ignore_readonly:true,
|
||||||
has_case_sensitive_dirs:true,
|
has_case_sensitive_dirs:true,
|
||||||
has_posix_rename_semantics:true,
|
has_posix_rename_semantics:true,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:true,
|
has_con_broken_il_dl:true,
|
||||||
|
@ -356,7 +346,6 @@ wincaps wincap_10_2004 __attribute__((section (".cygwin_dll_common"), shared)) =
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:true,
|
has_posix_unlink_semantics_with_ignore_readonly:true,
|
||||||
has_case_sensitive_dirs:true,
|
has_case_sensitive_dirs:true,
|
||||||
has_posix_rename_semantics:true,
|
has_posix_rename_semantics:true,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -388,7 +377,6 @@ wincaps wincap_11 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
has_posix_unlink_semantics_with_ignore_readonly:true,
|
has_posix_unlink_semantics_with_ignore_readonly:true,
|
||||||
has_case_sensitive_dirs:true,
|
has_case_sensitive_dirs:true,
|
||||||
has_posix_rename_semantics:true,
|
has_posix_rename_semantics:true,
|
||||||
no_msv1_0_s4u_logon_in_wow64:false,
|
|
||||||
has_con_24bit_colors:true,
|
has_con_24bit_colors:true,
|
||||||
has_con_broken_csi3j:false,
|
has_con_broken_csi3j:false,
|
||||||
has_con_broken_il_dl:false,
|
has_con_broken_il_dl:false,
|
||||||
|
@ -463,7 +451,6 @@ wincapc::init ()
|
||||||
{
|
{
|
||||||
((wincaps *)caps)->has_gaa_largeaddress_bug = false;
|
((wincaps *)caps)->has_gaa_largeaddress_bug = false;
|
||||||
((wincaps *)caps)->has_broken_prefetchvm = false;
|
((wincaps *)caps)->has_broken_prefetchvm = false;
|
||||||
((wincaps *)caps)->no_msv1_0_s4u_logon_in_wow64 = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__small_sprintf (osnam, "NT-%d.%d", version.dwMajorVersion,
|
__small_sprintf (osnam, "NT-%d.%d", version.dwMajorVersion,
|
||||||
|
|
|
@ -30,7 +30,6 @@ struct wincaps
|
||||||
unsigned has_posix_unlink_semantics_with_ignore_readonly : 1;
|
unsigned has_posix_unlink_semantics_with_ignore_readonly : 1;
|
||||||
unsigned has_case_sensitive_dirs : 1;
|
unsigned has_case_sensitive_dirs : 1;
|
||||||
unsigned has_posix_rename_semantics : 1;
|
unsigned has_posix_rename_semantics : 1;
|
||||||
unsigned no_msv1_0_s4u_logon_in_wow64 : 1;
|
|
||||||
unsigned has_con_24bit_colors : 1;
|
unsigned has_con_24bit_colors : 1;
|
||||||
unsigned has_con_broken_csi3j : 1;
|
unsigned has_con_broken_csi3j : 1;
|
||||||
unsigned has_con_broken_il_dl : 1;
|
unsigned has_con_broken_il_dl : 1;
|
||||||
|
@ -92,7 +91,6 @@ public:
|
||||||
bool IMPLEMENT (has_posix_unlink_semantics_with_ignore_readonly)
|
bool IMPLEMENT (has_posix_unlink_semantics_with_ignore_readonly)
|
||||||
bool IMPLEMENT (has_case_sensitive_dirs)
|
bool IMPLEMENT (has_case_sensitive_dirs)
|
||||||
bool IMPLEMENT (has_posix_rename_semantics)
|
bool IMPLEMENT (has_posix_rename_semantics)
|
||||||
bool IMPLEMENT (no_msv1_0_s4u_logon_in_wow64)
|
|
||||||
bool IMPLEMENT (has_con_24bit_colors)
|
bool IMPLEMENT (has_con_24bit_colors)
|
||||||
bool IMPLEMENT (has_con_broken_csi3j)
|
bool IMPLEMENT (has_con_broken_csi3j)
|
||||||
bool IMPLEMENT (has_con_broken_il_dl)
|
bool IMPLEMENT (has_con_broken_il_dl)
|
||||||
|
|
Loading…
Reference in New Issue