main: downgrade panic log create failure from fatal error to warning

Exiting with a fatal error just pushes users to use "-nosyslog",
which is even worse than not having a paniclog.
This commit is contained in:
Jakob Unterwurzacher 2017-05-23 18:01:21 +02:00
parent 245b84c887
commit 508fd9e1d6
2 changed files with 21 additions and 9 deletions

View File

@ -49,8 +49,9 @@ const (
FuseNewServer = 19
// CtlSock - the control socket file could not be created.
CtlSock = 20
// PanicLogCreate - there was a problem creating the /tmp/gocryptfs_paniclog.XYZ file.
PanicLogCreate = 21
// Downgraded to a warning in gocryptfs v1.4
//PanicLogCreate = 21
// PasswordEmpty - we received an empty password
PasswordEmpty = 22
// OpenConf - the was an error opening the gocryptfs.conf file for reading

View File

@ -117,8 +117,8 @@ func doMount(args *argContainer) int {
if !args.nosyslog {
paniclog, err = ioutil.TempFile("", "gocryptfs_paniclog.")
if err != nil {
tlog.Fatal.Printf("Failed to create gocryptfs_paniclog: %v", err)
os.Exit(exitcodes.PanicLogCreate)
tlog.Warn.Printf("Failed to create paniclog: %v."+
" Carrying on, but fatal errors will not be logged.", err)
}
// Switch all of our logs and the generic logger to syslog
tlog.Info.SwitchToSyslog(syslog.LOG_USER | syslog.LOG_INFO)
@ -132,10 +132,21 @@ func doMount(args *argContainer) int {
// instead of closing them so users have a chance to get the
// backtrace on a panic.
// https://github.com/golang/go/issues/325#issuecomment-66049178
syscall.Dup2(int(paniclog.Fd()), 1)
syscall.Dup2(int(paniclog.Fd()), 2)
// No need for the extra FD anymore, we have it saved in Stderr
paniclog.Close()
if paniclog != nil {
err = syscall.Dup2(int(paniclog.Fd()), 1)
if err != nil {
tlog.Warn.Printf("paniclog stdout dup error: %v\n", err)
}
syscall.Dup2(int(paniclog.Fd()), 2)
if err != nil {
tlog.Warn.Printf("paniclog stderr dup error: %v\n", err)
}
// No need for the extra FD anymore, we have copies in Stdout and Stderr
err = paniclog.Close()
if err != nil {
tlog.Warn.Printf("paniclog close error: %v\n", err)
}
}
}
// Disconnect from the controlling terminal by creating a new session.
// This prevents us from getting SIGINT when the user presses Ctrl-C
@ -158,7 +169,7 @@ func doMount(args *argContainer) int {
srv.Serve()
// Delete empty paniclogs
if paniclog != nil {
// The paniclog FD is saved in Stderr
// The paniclog FD is saved in Stdout and Stderr
fi, err := os.Stderr.Stat()
if err != nil {
tlog.Warn.Printf("paniclog fstat error: %v", err)