From: Jaroslav Kysela Date: Fri, 27 Nov 2015 16:52:10 +0000 (+0100) Subject: SAT>IP server: bind only to IPv4 (IPv6 support is not defined in SAT>IP spec), fixes... X-Git-Tag: v4.2.1~1454 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e2d813febddbf0ceccb295bbedab7ece20877327;p=thirdparty%2Ftvheadend.git SAT>IP server: bind only to IPv4 (IPv6 support is not defined in SAT>IP spec), fixes #3350 --- diff --git a/src/satip/server.c b/src/satip/server.c index 3f7e63d7d..5537b1bda 100644 --- a/src/satip/server.c +++ b/src/satip/server.c @@ -719,7 +719,7 @@ void satip_server_init(int rtsp_port) satip_server_bootid = time(NULL); satip_server_conf.satip_deviceid = 1; - if (tcp_server_bound(http_server, &http) < 0) { + if (tcp_server_bound(http_server, &http, PF_INET) < 0) { tvherror("satips", "Unable to determine the HTTP/RTSP address"); return; } diff --git a/src/tcp.c b/src/tcp.c index 03a1a5efa..f7a348e4b 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -929,7 +929,7 @@ tcp_server_delete(void *server) * */ int -tcp_default_ip_addr ( struct sockaddr_storage *deflt ) +tcp_default_ip_addr ( struct sockaddr_storage *deflt, int family ) { struct sockaddr_storage ss; @@ -937,7 +937,7 @@ tcp_default_ip_addr ( struct sockaddr_storage *deflt ) int sock; memset(&ss, 0, sizeof(ss)); - ss.ss_family = tcp_preferred_address_family; + ss.ss_family = family == PF_UNSPEC ? tcp_preferred_address_family : family; if (inet_pton(ss.ss_family, ss.ss_family == AF_INET ? /* Google name servers */ @@ -978,7 +978,7 @@ tcp_default_ip_addr ( struct sockaddr_storage *deflt ) * */ int -tcp_server_bound ( void *server, struct sockaddr_storage *bound ) +tcp_server_bound ( void *server, struct sockaddr_storage *bound, int family ) { tcp_server_t *ts = server; int i, len, port; @@ -1001,7 +1001,7 @@ tcp_server_bound ( void *server, struct sockaddr_storage *bound ) port = IP_PORT(ts->bound); /* no bind address was set, try to find one */ - if (tcp_default_ip_addr(bound) < 0) + if (tcp_default_ip_addr(bound, family) < 0) return -1; if (bound->ss_family == AF_INET) IP_AS_V4(*bound, port) = port; diff --git a/src/tcp.h b/src/tcp.h index d966aee88..08b8cce5f 100644 --- a/src/tcp.h +++ b/src/tcp.h @@ -72,9 +72,9 @@ void tcp_server_register(void *server); void tcp_server_delete(void *server); -int tcp_default_ip_addr(struct sockaddr_storage *deflt); +int tcp_default_ip_addr(struct sockaddr_storage *deflt, int family); -int tcp_server_bound(void *server, struct sockaddr_storage *bound); +int tcp_server_bound(void *server, struct sockaddr_storage *bound, int family); int tcp_read(int fd, void *buf, size_t len);