diff options
author | Jakob Unterwurzacher | 2017-07-23 19:18:58 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2017-07-23 19:21:23 +0200 |
commit | 0b6e3ce635ed7a9ec592f0cb72bc1afe7b9ed23e (patch) | |
tree | 147153a474635859ce50ec35553b6e37663e1475 /daemonize.go | |
parent | 74e58ae8e6647a3a61e1fba302918b3eb61b576b (diff) |
main: move redirectStdFds() to daemonize.go
This really is a part of daemonization.
No code changes.
Diffstat (limited to 'daemonize.go')
-rw-r--r-- | daemonize.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/daemonize.go b/daemonize.go index de09743..886a229 100644 --- a/daemonize.go +++ b/daemonize.go @@ -8,6 +8,7 @@ import ( "syscall" "github.com/rfjakob/gocryptfs/internal/exitcodes" + "github.com/rfjakob/gocryptfs/internal/syscallcompat" "github.com/rfjakob/gocryptfs/internal/tlog" ) @@ -52,3 +53,44 @@ func forkChild() int { // The child exited with 0 - let's do the same. return 0 } + +// redirectStdFds redirects stderr and stdout to syslog; stdin to /dev/null +func redirectStdFds() { + // stderr and stdout + pr, pw, err := os.Pipe() + if err != nil { + tlog.Warn.Printf("redirectStdFds: could not create pipe: %v\n", err) + return + } + tag := fmt.Sprintf("gocryptfs-%d-logger", os.Getpid()) + cmd := exec.Command("logger", "-t", tag) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Stdin = pr + err = cmd.Start() + if err != nil { + tlog.Warn.Printf("redirectStdFds: could not start logger: %v\n", err) + } + pr.Close() + err = syscallcompat.Dup3(int(pw.Fd()), 1, 0) + if err != nil { + tlog.Warn.Printf("redirectStdFds: stdout dup error: %v\n", err) + } + syscallcompat.Dup3(int(pw.Fd()), 2, 0) + if err != nil { + tlog.Warn.Printf("redirectStdFds: stderr dup error: %v\n", err) + } + pw.Close() + + // stdin + nullFd, err := os.Open("/dev/null") + if err != nil { + tlog.Warn.Printf("redirectStdFds: could not open /dev/null: %v\n", err) + return + } + err = syscallcompat.Dup3(int(nullFd.Fd()), 0, 0) + if err != nil { + tlog.Warn.Printf("redirectStdFds: stdin dup error: %v\n", err) + } + nullFd.Close() +} |