diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 2efb58676..bb4755071 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2001-10-31 Corinna Vinschen + + * dtable.cc (dtable::vfork_child_dup): Revert impersonation + before duplicating fhandler. + 2001-10-30 Christopher Faylor * exceptions.cc (signal_exit): Weight the odds against the main thread diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 4a14712a3..b929b169e 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -559,6 +559,10 @@ dtable::vfork_child_dup () newtable = (fhandler_base **) ccalloc (HEAP_ARGV, size, sizeof (fds[0])); int res = 1; + /* Remove impersonation */ + if (cygheap->user.impersonated && cygheap->user.token != INVALID_HANDLE_VALUE) + RevertToSelf (); + for (size_t i = 0; i < size; i++) if (not_open (i)) continue; @@ -571,6 +575,10 @@ dtable::vfork_child_dup () goto out; } + /* Restore impersonation */ + if (cygheap->user.impersonated && cygheap->user.token != INVALID_HANDLE_VALUE) + ImpersonateLoggedOnUser (cygheap->user.token); + fds_on_hold = fds; fds = newtable;