socat: allow more complex command line options 14592/head
authorDobroslaw Kijowski <dobo90@gmail.com>
Wed, 27 Jan 2021 19:50:51 +0000 (20:50 +0100)
committerDobroslaw Kijowski <dobo90@gmail.com>
Wed, 27 Jan 2021 20:24:38 +0000 (21:24 +0100)
commit218b7521aa5ba2a365190d016eac3dadb56cb1f3
tree2c64d78aa06eeadb056d5ccde8faaeaedc971bba
parent37730ae7f41b41e6149d9b4a24f9ab2d314092db
socat: allow more complex command line options

Current implementation of socat's init service doesn't allow to run more
complex configurations. As an example there's no possibility to execute
following command:

  socat TCP-LISTEN:8080,fork,reuseaddr,bind=192.168.1.1 \
    EXEC:"/sbin/ip netns exec somenetns socat STDIO TCP:10.0.0.1:80"

In such command the first line is argv[1] and the second line is
argv[2]. SocatOptions config option is a string. As as a consequence of
this each word will be passed as a separate argv element. Socat won't be
able to parse arguments correctly.

In order to mitigate this issue, we can also accept SocatOptions as a
list of strings. Following config file will work correctly:

config socat 'tunnel_8080_into_somenetns'
option enable '1'
list SocatOptions 'TCP-LISTEN:8080,fork,reuseaddr,bind=192.168.1.1'
list SocatOptions 'EXEC:"/sbin/ip netns exec somenetns socat STDIO TCP:10.0.0.1:80"'

While we're at it, pass stdout and stderr into logread.

Signed-off-by: Dobroslaw Kijowski <dobo90@gmail.com>
net/socat/Makefile
net/socat/files/socat.init