On Dec 7 16:30, Corinna Vinschen via Cygwin-patches wrote: > On Dec 7 02:29, Mark Geisert wrote: > > The existing code errors as EINVAL any attempt to set a value for > > SO_PEERCRED via setsockopt() on an AF_UNIX/AF_LOCAL socket. But to > > enable the workaround set_no_getpeereid behavior for Python one has > > to be able to set SO_PEERCRED to zero. Ergo, this patch. Python has > > no way to specify a NULL pointer for 'optval'. > > > > This v2 of patch allows the original working (i.e., allow NULL,0 for > > optval,optlen to mean turn off SO_PEERCRED) in addition to the new > > working described above. The sense of the 'if' stmt is reversed for > > readability. > > > > --- > > winsup/cygwin/fhandler_socket_local.cc | 10 +++++++--- > > 1 file changed, 7 insertions(+), 3 deletions(-) > > > > diff --git a/winsup/cygwin/fhandler_socket_local.cc > > b/winsup/cygwin/fhandler_socket_local.cc > > index c94bf828f..964f3e819 100644 > > --- a/winsup/cygwin/fhandler_socket_local.cc > > +++ b/winsup/cygwin/fhandler_socket_local.cc > > @@ -1430,10 +1430,14 @@ fhandler_socket_local::setsockopt (int level, int > > optname, const void *optval, > > FIXME: In the long run we should find a more generic solution > > which doesn't require a blocking handshake in accept/connect > > to exchange SO_PEERCRED credentials. */ > > - if (optval || optlen) > > - set_errno (EINVAL); > > - else > > + /* Temporary: Allow SO_PEERCRED to only be zeroed. Two ways to > > + accomplish this: pass NULL,0 for optval,optlen; or pass the > > + address,length of an '(int) 0' set up by the caller. */ > > + if ((!optval && !optlen) || > > + (optlen == (socklen_t) sizeof (int) && !*(int *) optval)) > > ret = af_local_set_no_getpeereid (); > > + else > > + set_errno (EINVAL); > > return ret; > > > > case SO_REUSEADDR: > > -- > > 2.29.2 > > Pushed
I created new developer snapshots for testing. Corinna