Package: ser2net
Version: 2.9.1-1.1
Severity: important
Tags: patch
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1
Dear Maintainer,
ser2net stopped listening after upgrading from wheezy to jessie.
Running it with debugging showed that it failed to parse the
old configuration file:
ser2net[16570]: Error on line 67, port number was invalid
ser2net[16570]: Error on line 68, port number was invalid
ser2net[16570]: Error on line 69, port number was invalid
ser2net[16570]: Error on line 70, port number was invalid
ser2net[16570]: Error on line 71, port number was invalid
Looking more into this is proved to be caused by the host,port
syntax used for these entries. Digging into the code I found
that strtok_r() is used to parse these strings multiple times.
Which will not work - strtok_r() modifies its argument...
I guess this bug might have been added while attempting to
support IPv6?
I'm attaching a sort of quick fix, which works for me.
Bjørn
- -- System Information:
Debian Release: 8.0
APT prefers testing
APT policy: (990, 'testing'), (500, 'testing-updates')
Architecture: amd64 (x86_64)
Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: sysvinit (via /sbin/init)
Versions of packages ser2net depends on:
ii initscripts 2.88dsf-59
ii libc62.19-18
ser2net recommends no packages.
Versions of packages ser2net suggests:
ii telnet 0.17-36
- -- Configuration Files:
/etc/default/ser2net changed:
CONFFILE=/etc/ser2net.conf
CONTROLPORT=127.0.0.1,62000
/etc/ser2net.conf changed:
10.255.1.6,23:telnet:0:/dev/edgeport0:9600 LOCAL
10.255.1.7,23:telnet:0:/dev/edgeport1:9600 LOCAL
10.255.1.8,23:telnet:0:/dev/edgeport2:38400 LOCAL -RTSCTS
10.255.1.9,23:telnet:0:/dev/edgeport3:9600 LOCAL
10.255.1.10,23:telnet:0:/dev/wrt1900ac:115200 LOCAL
- -- no debconf information
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
iEYEARECAAYFAlU3kn4ACgkQ10rqkowbIskg/wCffzKtUtthzDFfJv7Q4R/64wDY
GScAn0tN6bftvBT6Ih53fRAzzwaQNalI
=/+7J
-END PGP SIGNATURE-
diff -urN ser2net-2.9.1/controller.c ser2net-2.9.1.new/controller.c
--- ser2net-2.9.1/controller.c 2013-01-29 23:44:17.0 +0100
+++ ser2net-2.9.1.new/controller.c 2015-04-22 13:46:07.485931943 +0200
@@ -719,13 +719,13 @@
socklen_t sock_len;
intoptval = 1;
-if (scan_tcp_port(controller_port, AF_UNSPEC, sock, sock_len) == -1)
+if (scan_tcp_port(controller_port, AF_UNSPEC, sock, sock_len) 0)
return CONTROLLER_INVALID_TCP_SPEC;
acceptfd = socket(sock.ss_family, SOCK_STREAM, 0);
if ((acceptfd == -1) (errno == EAFNOSUPPORT)) {
/* Retry IPV4-only */
- if (scan_tcp_port(controller_port, AF_INET, sock, sock_len) == -1)
+ if (scan_tcp_port(controller_port, AF_INET, sock, sock_len) 0)
return CONTROLLER_INVALID_TCP_SPEC;
acceptfd = socket(sock.ss_family, SOCK_STREAM, 0);
}
diff -urN ser2net-2.9.1/dataxfer.c ser2net-2.9.1.new/dataxfer.c
--- ser2net-2.9.1/dataxfer.c 2013-07-27 01:47:14.0 +0200
+++ ser2net-2.9.1.new/dataxfer.c 2015-04-22 13:55:08.639469438 +0200
@@ -1753,7 +1753,7 @@
if (scan_tcp_port(port-portname, AF_UNSPEC,
port-tcpport, port-tcpport_len)
- == -1)
+ 0)
{
return port number was invalid;
}
@@ -1762,7 +1762,7 @@
/* Retry IPV4-only */
if (scan_tcp_port(port-portname, AF_INET,
port-tcpport, port-tcpport_len)
- == -1)
+ 0)
{
return port number was invalid;
}
@@ -2096,7 +2096,7 @@
if (scan_tcp_port(new_port-portname, AF_UNSPEC,
new_port-tcpport, new_port-tcpport_len)
-== -1)
+ 0)
{
rv = port number was invalid;
goto errout;
diff -urN ser2net-2.9.1/debian/changelog ser2net-2.9.1.new/debian/changelog
--- ser2net-2.9.1/debian/changelog 2013-08-07 19:53:40.0 +0200
+++ ser2net-2.9.1.new/debian/changelog 2015-04-22 13:52:32.088720255 +0200
@@ -1,3 +1,9 @@
+ser2net (2.9.1-1.1) UNRELEASED; urgency=medium
+
+ * fixed host,port parsing
+
+ -- Bjørn Mork bj...@mork.no Wed, 22 Apr 2015 13:51:10 +0200
+
ser2net (2.9.1-1) unstable; urgency=low
* New Upstream Version
diff -urN ser2net-2.9.1/utils.c ser2net-2.9.1.new/utils.c
--- ser2net-2.9.1/utils.c 2013-01-29 23:41:41.0 +0100
+++ ser2net-2.9.1.new/utils.c 2015-04-22 13:46:59.078845515 +0200
@@ -25,6 +25,7 @@
#include arpa/inet.h
#include errno.h
#include unistd.h
+#include stdlib.h
#include utils.h
@@ -70,11 +71,13 @@
char *strtok_data;
char *ip;
char *port;
+char *tmp;
+int ret;
struct addrinfo hints, *ai;
memset(addr, 0, sizeof(*addr));
-
-ip = strtok_r(str, ,, strtok_data);
+tmp = strdup(str);
+ip = strtok_r(tmp, ,, strtok_data);
port = strtok_r(NULL, , strtok_data);
if (port == NULL) {
port = ip;
@@ -84,13 +87,16 @@
memset(hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = domain;
-if (getaddrinfo(ip, port,