Package: esound Version: 0.2.41-3 Severity: normal Tags: patch when IPv6 is configured and esd is started with -tcp, it only listens on IPv6.
$ esd -tcp -nobeeps & [1] 14753 $ netstat -apn | grep esd tcp6 0 0 ::1:16001 :::* LISTEN 14753/esd I don't see any option to specify what protocol to use, so I added an option to force usage of IPv4 when needed. --- esound-0.2.41.orig/esd.c 2008-11-18 21:35:19.000000000 +0100 +++ esound-0.2.41.ipv4fix/esd.c 2009-04-26 03:23:37.000000000 +0200 @@ -112,6 +112,7 @@ int esd_use_ipv6 = 0; /* We need it in accept () to know if we use AF_NET or AF_INET6*/ #endif +int esd_use_ipv4 = 0; /* force usage of IPv4 */ static char *programname = NULL; /*******************************************************************/ @@ -401,7 +402,7 @@ /* create the socket, and set for non-blocking */ if (esd_use_tcpip) { #if defined(ENABLE_IPV6) - if(have_ipv6()) { + if(have_ipv6() && ! esd_use_ipv4 ) { memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; @@ -782,6 +783,8 @@ esd_use_tcpip = 0; } else if ( !strcmp( opts[ arg ], "-tcp" ) ) { esd_use_tcpip = 1; + } else if ( !strcmp( opts[ arg ], "-ipv4" ) ) { + esd_use_ipv4 = 1; } else if ( !strcmp( opts[ arg ], "-public" ) ) { esd_public = 1; } else if ( !strcmp( opts[ arg ], "-promiscuous" ) ) { @@ -812,6 +815,7 @@ fprintf( stderr, " -as SECS free audio device after SECS of inactivity (-1 to disable)\n" ); fprintf( stderr, " -unix use unix domain sockets instead of tcp/ip\n" ); fprintf( stderr, " -tcp use tcp/ip sockets instead of unix domain\n" ); + fprintf( stderr, " -ipv4 force use of IPv4\n" ); fprintf( stderr, " -public make tcp/ip access public (other than localhost)\n" ); fprintf( stderr, " -promiscuous start unlocked and owned (disable authenticaton) NOT RECOMMENDED\n" ); fprintf( stderr, " -terminate terminate esd daemon after last client exits\n" ); -- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Kernel: Linux 2.6.27.10 (SMP w/2 CPU cores; PREEMPT) Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1) Shell: /bin/sh linked to /bin/bash Versions of packages esound depends on: ii esound-common 0.2.41-3 Enlightened Sound Daemon - Common ii libaudiofile0 0.2.6-7 Open-source version of SGI's audio ii libc6 2.9-4 GNU C Library: Shared libraries ii libesd0 0.2.36-3 Enlightened Sound Daemon - Shared ii libwrap0 7.6.q-16 Wietse Venema's TCP wrappers libra esound recommends no packages. esound suggests no packages. -- no debconf information
diff -Nru esound-0.2.41.orig/esd.c esound-0.2.41.ipv4fix/esd.c --- esound-0.2.41.orig/esd.c 2008-11-18 21:35:19.000000000 +0100 +++ esound-0.2.41.ipv4fix/esd.c 2009-04-26 03:23:37.000000000 +0200 @@ -112,6 +112,7 @@ int esd_use_ipv6 = 0; /* We need it in accept () to know if we use AF_NET or AF_INET6*/ #endif +int esd_use_ipv4 = 0; /* force usage of IPv4 */ static char *programname = NULL; /*******************************************************************/ @@ -401,7 +402,7 @@ /* create the socket, and set for non-blocking */ if (esd_use_tcpip) { #if defined(ENABLE_IPV6) - if(have_ipv6()) { + if(have_ipv6() && ! esd_use_ipv4 ) { memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; @@ -782,6 +783,8 @@ esd_use_tcpip = 0; } else if ( !strcmp( opts[ arg ], "-tcp" ) ) { esd_use_tcpip = 1; + } else if ( !strcmp( opts[ arg ], "-ipv4" ) ) { + esd_use_ipv4 = 1; } else if ( !strcmp( opts[ arg ], "-public" ) ) { esd_public = 1; } else if ( !strcmp( opts[ arg ], "-promiscuous" ) ) { @@ -812,6 +815,7 @@ fprintf( stderr, " -as SECS free audio device after SECS of inactivity (-1 to disable)\n" ); fprintf( stderr, " -unix use unix domain sockets instead of tcp/ip\n" ); fprintf( stderr, " -tcp use tcp/ip sockets instead of unix domain\n" ); + fprintf( stderr, " -ipv4 force use of IPv4\n" ); fprintf( stderr, " -public make tcp/ip access public (other than localhost)\n" ); fprintf( stderr, " -promiscuous start unlocked and owned (disable authenticaton) NOT RECOMMENDED\n" ); fprintf( stderr, " -terminate terminate esd daemon after last client exits\n" );