Don't fail service on failure to write utmp entry.
authorDavin McCall <davmac@davmac.org>
Fri, 10 May 2019 10:53:27 +0000 (20:53 +1000)
committerDavin McCall <davmac@davmac.org>
Fri, 10 May 2019 10:53:27 +0000 (20:53 +1000)
This can simply be the result of the utmp database not existing on the
system.

src/baseproc-service.cc
src/includes/proc-service.h

index 43b3b75fbbf9b0eb1c69dc3ca8969187dce3adb0..b6809c45a6ab79b2308c02ade495f5f96a0cda11 100644 (file)
@@ -154,15 +154,9 @@ bool base_process_service::start_ps_process(const std::vector<const char *> &cmd
     if (forkpid == 0) {
         const char * working_dir_c = nullptr;
         if (! working_dir.empty()) working_dir_c = working_dir.c_str();
-        if (after_fork(getpid())) {
-            run_child_proc(cmd.data(), working_dir_c, logfile, on_console, pipefd[1], control_socket[1],
+        after_fork(getpid());
+        run_child_proc(cmd.data(), working_dir_c, logfile, on_console, pipefd[1], control_socket[1],
                 socket_fd, notify_pipe[1], force_notification_fd, nullptr, run_as_uid, run_as_gid);
-        }
-        else {
-            int exec_status = errno;
-            write(pipefd[1], &exec_status, sizeof(int));
-            _exit(0);
-        }
     }
     else {
         // Parent process
index 4b6f5ab04529ac425b8fa8f9766db10a5420630b..fcb5f8c26f89b2e7c86c8aae9c1bb7222b0a82b8 100644 (file)
@@ -145,9 +145,8 @@ class base_process_service : public service_record
     // Start the process, return true on success
     virtual bool bring_up() noexcept override;
 
-    // Called after forking (before executing remote process). Returns true to continue
-    // execution, otherwise sets errno and returns false.
-    virtual bool after_fork(pid_t child_pid) noexcept { return true; }
+    // Called after forking (before executing remote process).
+    virtual void after_fork(pid_t child_pid) noexcept { }
 
     // Called when the process exits. The exit_status is the status value yielded by
     // the "wait" system call.
@@ -304,12 +303,11 @@ class process_service : public base_process_service
     char inittab_line[sizeof(utmpx().ut_line)];
 
     protected:
-    bool after_fork(pid_t child_pid) noexcept override
+    void after_fork(pid_t child_pid) noexcept override
     {
         if (*inittab_id || *inittab_line) {
-            return create_utmp_entry(inittab_id, inittab_line, child_pid);
+            create_utmp_entry(inittab_id, inittab_line, child_pid);
         }
-        return true;
     }
 
 #endif