]> git.ipfire.org Git - thirdparty/systemd.git/commit
socket-activate: make a copy of the command name and arguments 28060/head
authorFrantisek Sumsal <fsumsal@redhat.com>
Fri, 16 Jun 2023 17:05:57 +0000 (19:05 +0200)
committerFrantisek Sumsal <fsumsal@redhat.com>
Fri, 16 Jun 2023 18:42:43 +0000 (20:42 +0200)
commit9ccd59f751bb639d31155dc6c8d3b76c1a98ef1c
treed5cf04cba32ad40701d71b5e022f22eaca1d1f17
parent1d252ea2ae59250f69187a7a55f90304bbe6f35e
socket-activate: make a copy of the command name and arguments

When we call safe_fork() with the first argument set (process name), we
call rename_process() that zeroes out saved argv (that was saved by
save_argc_argv() in the main func defined by DEFINE_MAIN_FUNC()). In this
case this means that with --accept both the target executable name and
its arguments will be empty strings:

```
$ systemd-socket-activate --accept --listen 1111 cat &
Listening on [::]:1111 as 3.
$ curl localhost:1111
Communication attempt on fd 3.
Connection from 127.0.0.1:52948 to [::ffff:127.0.0.1]:1111
Spawned cat (cat) as PID 10576.
Execing  ()
Failed to execp  (): No such file or directory
Child 10576 died with code 1
curl: (56) Recv failure: Connection reset by peer
```

Let's make a copy of the necessary arguments beforehand and use it
instead to fix this.
src/socket-activate/socket-activate.c