Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37044533
en ru br
Репозитории ALT
S:2.3.15-alt6
5.1: 2.3.14-alt3
4.1: 2.3.14-alt3
4.0: 2.3.14-alt2
3.0: 2.3.13-alt4
www.altlinux.org/Changes

Группа :: Система/Основа
Пакет: xinetd

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: xinetd-2.3.14-rh-ident-bind.patch
Скачать


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>
--- 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 ) ;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin