Projects
Eulaceura:Factory
xinetd
_service:obs_scm:xinetd-2.3.14-ident-bind.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm: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> diff -up xinetd-2.3.14/xinetd/ident.c.orig xinetd-2.3.14/xinetd/ident.c --- xinetd-2.3.14/xinetd/ident.c.orig 2008-05-29 16:30:19.000000000 +0200 +++ xinetd-2.3.14/xinetd/ident.c 2008-05-29 16:29:57.000000000 +0200 @@ -97,7 +98,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; @@ -121,7 +128,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
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2