aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2019-02-28Cygwin: initialize FP environment for each applicaiton threadgithub/fp-zeuchfp-zeuchCorinna Vinschen5-20/+22
Also, initialize FP environment in timerfd thread before calling RegisterClassW to avoid a spurious STATUS_FLOAT_INEXACT_RESULT from msvcrt.dll. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-28Cygwin: fenv.h: Add feature test macros, fix valuesCorinna Vinschen3-27/+35
- feenableexcept,fedisableexcept, fegetexcept are GNU-only - fegetprec, fesetprec are Solaris, use __MISC_VISIBLE - _feinitialise is Cygwin-internal only - Replace self-named FP precision values to Solaris values - Document fegetprec, fesetprec as Solaris functions, not as GNU functions Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-26Cygwin: timerfd: add a sleep when being debuggedCorinna Vinschen1-0/+9
A sleep is required on Windows 10 64 bit only before calling RegisterClassW in the timerfd thread, and only when running under strace. One of the child processes inheriting the timerfd descriptor will get a STATUS_FLOAT_INEXACT_RESULT exception inside of msvcrt.dll. It's apparently some timing problem. It occurs in 4 out of 5 runs under strace only. WOW64 and Windows 7 64 bit don't have this problem. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-26Cygwin: timerfd: reduce size of shared mem region to a single pageCorinna Vinschen1-5/+5
The share section was created using the PAGE_SIZE constant, but PAGE_SIZE is 64K. Fix that by using wincap.page_size() instead, which returns the desired actual page size of 4K. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-25Cygwin: use NULL security descriptor in InitializeObjectAttributesCorinna Vinschen3-8/+4
Using sec_none{_nih} is just a roundabout way to specify a NULL SD. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-25Cygwin: timerfd: rework implementationCorinna Vinschen4-240/+216
timerfd_tracker and timerfd_shared classes: - Just because handles are shared, we don't have to store them in shared memory. Move share handles into timerfd_tracker class. - Drop shared instance counter since it's not required anymore. timerfd_shared only stores the actual timer data. - Drop timerfd_shared::create, just set clock id. - Drop timerfd_shared::dtor, it's not required anymore. - Drop timerfd_tracker::close, just call dtor where required. - Rename timerfd_tracker::increment_instances to timerfd_tracker::dup. It's the only reason it exists... - timerfd_tracker::dtor now checks the non-shared pointers for NULL before attempting to close them. - timerfd_tracker::dtor handles decrementing the local instance count by itself. - Add a method timerfd_tracker::init_fixup_after_fork_exec to set non-shared pointers to NULL. Together with the dtor patches it fixes a problem with close_on_exec timerfd descriptors. - Fix a bug in handling the thread synchronization event. It's actually nice to create it before using it... - Drop using sec_none{_nih} in InitializeObjectAttributes. It's an unnecessary roundabout route just to get a NULL pointer. - Slightly rework timechange window handling. - Add more comments to explain what happens. fhandler_timerfd: - Drop cnew macro, it just hides what happens. - fhandler_timerfd::fixup_after_exec now calls timerfd_tracker::init_fixup_after_fork_exec first, so a subsequent call to timerfd_tracker::dtor only works on valid handles. - fhandler_timerfd::close directly calls timerfd_tracker::dtor now. - Drop dtor call in fhandler_timerfd destructor. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-24Cygwin: timerfd: fix shared memory allocation in fork/execCorinna Vinschen2-6/+11
timerfd_tracker::fixup_after_fork_exec always tries to restore the shared timer region at the same address as in the parent. This is entirely unnecessary and wasn't intended, rather some kind of copy/paste thinko. Fix that. Print NtMapViewOfSection status code in api_fatal on failure for debugging. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-24Cygwin: POSIX timers: Fix timer values returned for unarmed timerCorinna Vinschen2-1/+4
The "optimized" condition to recognize an unarmed timer was plain wrong. Replace it by checking the stored it_value against 0. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: Add 3.0.2 release fileCorinna Vinschen1-0/+20
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: timerfd: fix select always returning immediatelyCorinna Vinschen1-2/+23
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cywin: user profile: unload impersonation user profile on exitCorinna Vinschen2-0/+6
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: seteuid: allow inheriting impersonation user profile handleCorinna Vinschen1-1/+5
The child process needs access to the handle to be able to unload it when switching user context. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: user profile: add debug output to unload_user_profileCorinna Vinschen1-1/+4
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: user profile: Make an effort to unload unused user profilesCorinna Vinschen6-3/+25
Does this work? There's not much feedback given. TODO: We might want to try unloading the user profile at process exit as well, FWIW. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: cygheap: drop unnecessary code closing curr_primary_tokenCorinna Vinschen1-4/+0
curr_primary_token is either NO_IMPERSONATION or the external_token or the internal_token, so it's never required to be closed by itself. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: cygheap: better comment impersonation tokensCorinna Vinschen1-6/+5
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: seteuid32: don't use INVALID_HANDLE_VALUECorinna Vinschen1-2/+2
NULL is the natural state of an unused handle Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-23Cygwin: user profile: fetch roaming profile path via LDAPCorinna Vinschen3-21/+48
Commit 649911fb40e45bc9a1ad8a3c28d90eec78c9cb7f avoids the calls to NetUserGetGroups and NetUserGetLocalGroups since these can take a lot of time. The same problem potentially occurs when loading the user profile. The code fetches the roaming profile path calling NetUserGetInfo, which also can be rather slow. To avoid this problem, fetch the profile patch using LDAP. Also, don't bail out early if the user's registry hive already exists. This may result in outdated information. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22Cygwin: get_user_groups: fetch a user's group list from identification tokenCorinna Vinschen3-28/+67
NetUserGetGroups and NetUserGetLocalGroups sometimes take a lot of time (up to more than 2 mins) for no apparent reason. Call s4uauth to generate an identification token for the user and fetch the group list from there. This is *much* faster. Keep the old code only for the sake of WOW64 on Vista and Windows 7, which don't implement MsV1_0S4ULogon. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22Cygwin: s4uauth: allow to be called for identification onlyCorinna Vinschen4-16/+27
s4uath was only callable to create an impersonation token so far. Rework the function to allow creating an identification token for informational purposes even from untrusted processes. Take domainname and username instead of a passwd pointer to be more multi-purpose. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22Cygwin: drop unused parameter from get_user_local_groupsCorinna Vinschen1-3/+2
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22Cygwin: passwd/group: drop fetching case-correct group names from LDAPCorinna Vinschen1-6/+1
Commit 4e34a39b5cdf4c3f889486b7460bea063e579d10 made sure all user and group names are case-correct, but it introduced a hefty performance hit on starting the first Cygwin process. Adding an ldap call for each AD group in a user token takes its toll in bigger AD environments with lots of groups in a user token. Real-life example: 300 groups w/ roundtrip time to the LDAP server of 0.25 secs per call... Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22stdio: drop unused O_TEXT handling on non-CygwinCorinna Vinschen1-4/+0
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22Cygwin: fetch local groups from local machineCorinna Vinschen1-1/+8
...even for domain accounts, otherwise local group membership is ignored. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-22Cygwin: bump version to 3.0.2Corinna Vinschen1-1/+1
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-19Cygwin: document secure_getenvcygwin-3_0_1-releaseYaakov Selkowitz2-3/+5
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2019-02-19Cygwin: add secure_getenvYaakov Selkowitz5-1/+17
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2019-02-19Cygwin: sys/mount.h: fix commentCorinna Vinschen1-1/+1
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-19Define u_register_t if __BSD_VISIBLESebastian Huber1-0/+2
Add u_register_t definition for FreeBSD compatibility. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
2019-02-19Change register_t definitionSebastian Huber1-1/+1
On 64-bit targets, the register_t type must be a 64-bit integer. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
2019-02-19Fix comment in <sys/types.h>Sebastian Huber1-1/+1
Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
2019-02-19Move RTEMS and XMK specific type definitionsSebastian Huber3-16/+12
Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
2019-02-18Cygwin: s4uauth: convert token to primary tokenCorinna Vinschen1-0/+26
Up to Vista CreateProcessAsUser only worked with primary tokens, so convert S4U impersonation token to primary token. MSDN still documents it that way, but actually an impersonation token is sufficient since Windows 7. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: re-enable create_token for older systemsCorinna Vinschen5-29/+36
Under WOW64 on 64 bit Windows 7, MsV1_0S4ULogon appears to be unimplemented, probably under Vista as well. Re-enable create_token method, to allow basic seteuid on W7 WOW64 and Vista as well. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: s4uauth: make sure to fetch correct package idCorinna Vinschen1-9/+16
for domain accounts we try KerbS4ULogon first, MsV1_0S4ULogon second. But we only fetch the package id for the supporting authentication package (Kerberos/MsV1_0) once at the start. Duplicate LsaLookupAuthenticationPackage call and move into the Kerb/MsV1_0 branches so that it fetches the correct package id for the method we call next. Curious enough this worked before. Apparently both methods work with the MICROSOFT_KERBEROS_NAME_A package id. However, requesting and using the right authentication package id is the prudent thing to do. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18CYgwin: bump API minor for MOUNT_BINARY -> MOUNT_TEXT changeCorinna Vinschen1-1/+2
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: utils: MOUNT_BINARY -> MOUNT_TEXTCorinna Vinschen2-9/+8
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Revert "Cygwin: passwd/group: allow specifying "." as local computername"Corinna Vinschen1-9/+1
This reverts commit 7c34811440be0bf1e749d9f075f54320c706cb4b. This potentially allows to circumvent OpenSSHs user/group name matching, unless the Admin knows to add every local user twice or to use patterns, e.g.: Match user MACHINE+user,.+user Match user *+user Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: mount: define binary mount as defaultCorinna Vinschen4-31/+24
Commit c1023ee353705671aa9a8e4e1179022277add2aa changed the way path_conv::binmode() works. Rather than returning three states, O_BINARY, O_TEXT, 0, it only returned 2 states, O_BINARY, O_TEXT. Since mounts are only binary if they are explicitely mounted binary by setting the MOUNT_BINARY flag, textmode is default. This introduced a new bug. When inheriting stdio HANDLEs from native Windows processes, the fhandler and its path_conv are created from a device struct only. None of the path or mount flags get set this way. So the mount flags are 0 and path_conv::binmode() returned 0. After the path_conv::binmode() change it returned O_TEXT since, as explained above, the default mount mode is textmode. Rather than just enforcing binary mode for path_conv's created from device structs, this patch changes the default mount mode to binary: Replace MOUNT_BINARY flag with MOUNT_TEXT flag with opposite meaning. Drop all explicit setting of MOUNT_BINARY. Drop local set_flags function, it doesn't add any value. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: mount: remove unused method mount_info::set_flags_from_win32_pathCorinna Vinschen2-16/+0
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: utils: kill: revert erroneously removed optind correctionCorinna Vinschen2-1/+7
When recognizing a negative pid, optind is off by one. The code correcting this has been erroneously removed by commit 8de660271fe75a6993f1c9888d24b824bb7f999d. Revert that. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-18Cygwin: fork: add PROCESS_VM_OPERATION to child process permissionsCorinna Vinschen2-1/+14
...on parent process. This is required for successful mmap propagation. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-16Cygwin: passwd/group: allow specifying "." as local computernameCorinna Vinschen1-1/+9
Convenience only. The resulting passwd/group antry is still fully qualified. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-16Cygwin: bump version to 3.0.1Corinna Vinschen1-1/+1
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-13Cygwin: passwd/group: store account name case correct, take 2cygwin-3_0_0-releaseCorinna Vinschen1-18/+23
The solution from commit 9a3cc77b2afc52a2faa5e4daeb59dfd4506c0693 didn't work for foreign domain accounts. Rather than calling LookupAccountSid we now use the info when we fetch it anyway via LDAP or Net*GetInfo. Only in case of domain groups we have to add an LDAP call explicitly. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-13Cygwin: ldap.cc: fix formattingCorinna Vinschen1-3/+3
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-13Cygwin: passwd/group: rename get_group_name to get_account_nameCorinna Vinschen2-3/+2
The function is the same for user and grou accounts. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-13Cygwin: passwd/group: raise local name buffer sizeCorinna Vinschen1-1/+1
Make sure a domain+username fits into the local name buffer. The former buffer size didn't take adding a domain name to a really_really_long_user_name into account. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-13Cygwin: passwd/group: store account name case correctCorinna Vinschen2-0/+14
When looking up valid accounts by name, LookupAccountName returns a SID and a case-correct domain name. However, the name was input and LookupAccountName is case-insensitive, so the name is not necessarily written the same way as in SAM or AD. Fix that by doing a reverse lookup on the just fetched SID. This fetches the account name in the correct case. Override the incoming name with the case correct name from LookupAccountSid. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2019-02-13Cygwin: uinfo.cc: fix formattingCorinna Vinschen1-16/+16
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>