diff --git a/daemonize.go b/daemonize.go index a65bd11..7d00288 100644 --- a/daemonize.go +++ b/daemonize.go @@ -2,10 +2,14 @@ package main import ( "fmt" + "log" + "log/syslog" "os" "os/exec" "os/signal" "syscall" + + "github.com/rfjakob/gocryptfs/cryptfs" ) // The child sends us USR1 if the mount was successful @@ -22,8 +26,7 @@ func exitOnUsr1() { func forkChild() { go exitOnUsr1() name := os.Args[0] - notifyArg := fmt.Sprintf("-notifypid=%d", os.Getpid()) - newArgs := []string{"-f", notifyArg} + newArgs := []string{"-f", fmt.Sprintf("-notifypid=%d", os.Getpid())} newArgs = append(newArgs, os.Args[1:]...) c := exec.Command(name, newArgs...) c.Stdout = os.Stdout @@ -47,3 +50,13 @@ func forkChild() { // The child exited with 0 - let's do the same. os.Exit(0) } + +// Switch one Logger to syslog +func switchToSyslog(l *log.Logger, p syslog.Priority) { + w, err := syslog.New(p, PROGRAM_NAME) + if err != nil { + cryptfs.Warn.Printf("Cannot switch 0x%02x to syslog: %v", p, err) + } else { + l.SetOutput(w) + } +} diff --git a/main.go b/main.go index 8fca701..0e66b1c 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "flag" "fmt" "io/ioutil" + "log/syslog" "os" "os/exec" "os/signal" @@ -276,9 +277,17 @@ func main() { cryptfs.Debug.Printf("cli args: %v", args) srv := pathfsFrontend(masterkey, args, confFile) cryptfs.Info.Println(colorGreen + "Filesystem mounted and ready." + colorReset) - // We are ready - send USR1 signal to our parent + // We are ready - send USR1 signal to our parent and switch to syslog if args.notifypid > 0 { sendUsr1(args.notifypid) + + if !args.quiet { + switchToSyslog(cryptfs.Info, syslog.LOG_USER|syslog.LOG_INFO) + } + if args.debug { + switchToSyslog(cryptfs.Debug, syslog.LOG_USER|syslog.LOG_DEBUG) + } + switchToSyslog(cryptfs.Warn, syslog.LOG_USER|syslog.LOG_WARNING) } // Wait for SIGINT in the background and unmount ourselves if we get it. // This prevents a dangling "Transport endpoint is not connected" mountpoint.