aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2017-05-23 18:01:21 +0200
committerJakob Unterwurzacher2017-05-23 18:01:21 +0200
commit508fd9e1d64131958c86175cb8d848f730e629cf (patch)
tree6d6d9370bf9760af229e93bbea29cb0f9cf4f494
parent245b84c887955d12cd1113e9a6701ee7338c8255 (diff)
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.
-rw-r--r--internal/exitcodes/exitcodes.go5
-rw-r--r--mount.go25
2 files changed, 21 insertions, 9 deletions
diff --git a/internal/exitcodes/exitcodes.go b/internal/exitcodes/exitcodes.go
index ae7824d..88e8e5f 100644
--- a/internal/exitcodes/exitcodes.go
+++ b/internal/exitcodes/exitcodes.go
@@ -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
diff --git a/mount.go b/mount.go
index f8d220d..5a28640 100644
--- a/mount.go
+++ b/mount.go
@@ -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)