execute: Properly log errors considering socket fds (#5910)
authorAggelos Avgerinos <evaggelos.avgerinos@gmail.com>
Mon, 8 May 2017 23:09:22 +0000 (02:09 +0300)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 8 May 2017 23:09:22 +0000 (19:09 -0400)
Till now if the params->n_fds was 0, systemd was logging that there were
more than one sockets.

Thanks @gregoryp and @VFXcode who did the most work debugging this.

src/core/execute.c

index 9c1aa4c..f6c4b46 100644 (file)
@@ -2927,11 +2927,16 @@ int exec_spawn(Unit *unit,
             context->std_output == EXEC_OUTPUT_SOCKET ||
             context->std_error == EXEC_OUTPUT_SOCKET) {
 
-                if (params->n_fds != 1) {
+                if (params->n_fds > 1) {
                         log_unit_error(unit, "Got more than one socket.");
                         return -EINVAL;
                 }
 
+                if (params->n_fds == 0) {
+                        log_unit_error(unit, "Got no socket.");
+                        return -EINVAL;
+                }
+
                 socket_fd = params->fds[0];
         } else {
                 socket_fd = -1;