Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
xinetd
xinetd-2.3.14-ident-bind.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xinetd-2.3.14-ident-bind.patch of Package xinetd
448069: xinetd: socket bind: Invalid argument (errno = 22) when using USERID on ipv6 Use right size of addresses in bind() call. Also use getpeername addresses when connecting to ident service to prevent address family mismatch between socket(), bind() and connect() calls. Author: Jan Safranek <jsafrane@redhat.com> Reviewed-By: Adam Tkac <atkac@redhat.com> Index: xinetd-2.3.14/xinetd/ident.c =================================================================== --- xinetd-2.3.14.orig/xinetd/ident.c +++ xinetd-2.3.14/xinetd/ident.c @@ -97,7 +97,13 @@ idresult_e log_remote_user( const struct } CLEAR( sin_contact ); - sin_remote = *CONN_XADDRESS( SERVER_CONNECTION( serp ) ) ; + + sin_len = sizeof( sin_remote ); + if ( getpeername( SERVER_FD( serp ), &sin_remote.sa, &sin_len ) == -1 ) + { + msg( LOG_ERR, func, "(%d) getpeername: %m", getpid() ) ; + return( IDR_ERROR ) ; + } sin_contact = sin_remote; memcpy( &sin_bind, &sin_local, sizeof(sin_bind) ) ; local_port = 0; @@ -127,7 +133,13 @@ idresult_e log_remote_user( const struct msg( LOG_ERR, func, "socket creation: %m" ) ; return( IDR_ERROR ) ; } - if ( bind(sd, &sin_bind.sa, sizeof(sin_bind.sa)) == -1 ) + + if ( sin_bind.sa.sa_family == AF_INET ) + sin_len = sizeof( sin_bind.sa_in ) ; + else + sin_len = sizeof( sin_bind.sa_in6 ) ; + + if ( bind(sd, &sin_bind.sa, sin_len) == -1 ) { msg( LOG_ERR, func, "socket bind: %m" ) ; (void) Sclose( sd ) ;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor