diff options
| -rw-r--r-- | Documentation/MANPAGE.md | 4 | ||||
| -rw-r--r-- | cryptfs/log.go | 16 | ||||
| -rw-r--r-- | integration_tests/helpers.go | 2 | ||||
| -rw-r--r-- | main.go | 7 | ||||
| -rw-r--r-- | pathfs_frontend/names.go | 2 | 
5 files changed, 25 insertions, 6 deletions
| diff --git a/Documentation/MANPAGE.md b/Documentation/MANPAGE.md index 6210190..c47f4b9 100644 --- a/Documentation/MANPAGE.md +++ b/Documentation/MANPAGE.md @@ -104,6 +104,10 @@ mounting but makes the password susceptible to brute-force attacks (default 16)  **-version**  :	Print version and exit +**-wpanic** +:	When encountering a warning, panic and exit immediately. This is +useful in regression testing. +  **-zerokey**  :	Use all-zero dummy master key. This options is only intended for  automated testing as it does not provide any security. diff --git a/cryptfs/log.go b/cryptfs/log.go index 44cb84f..19d8b51 100644 --- a/cryptfs/log.go +++ b/cryptfs/log.go @@ -2,6 +2,7 @@ package cryptfs  import (  	"encoding/json" +	"fmt"  	"log"  	"os"  ) @@ -17,7 +18,10 @@ func JSONDump(obj interface{}) string {  // toggledLogger - a Logger than can be enabled and disabled  type toggledLogger struct { +	// Enable or disable output  	Enabled bool +	// Panic after logging a message, useful in regression tests +	PanicAfter bool  	*log.Logger  } @@ -26,12 +30,18 @@ func (l *toggledLogger) Printf(format string, v ...interface{}) {  		return  	}  	l.Logger.Printf(format, v...) +	if l.PanicAfter { +		panic("PanicAfter: " + fmt.Sprintf(format, v...)) +	}  }  func (l *toggledLogger) Println(v ...interface{}) {  	if !l.Enabled {  		return  	}  	l.Logger.Println(v...) +	if l.PanicAfter { +		panic("PanicAfter: " + fmt.Sprintln(v...)) +	}  }  // As defined by http://elinux.org/Debugging_by_printing#Log_Levels @@ -45,7 +55,7 @@ var Info *toggledLogger  var Warn *toggledLogger  func init() { -	Debug = &toggledLogger{false, log.New(os.Stdout, "", 0)} -	Info = &toggledLogger{true, log.New(os.Stdout, "", 0)} -	Warn = &toggledLogger{true, log.New(os.Stderr, "", 0)} +	Debug = &toggledLogger{false, false, log.New(os.Stdout, "", 0)} +	Info = &toggledLogger{true, false, log.New(os.Stdout, "", 0)} +	Warn = &toggledLogger{true, false, log.New(os.Stderr, "", 0)}  } diff --git a/integration_tests/helpers.go b/integration_tests/helpers.go index d0e8721..5145b30 100644 --- a/integration_tests/helpers.go +++ b/integration_tests/helpers.go @@ -53,7 +53,7 @@ func resetTmpDir() {  func mount(c string, p string, extraArgs ...string) {  	var args []string  	args = append(args, extraArgs...) -	args = append(args, "-q") +	args = append(args, "-q", "-wpanic")  	//args = append(args, "--fusedebug")  	args = append(args, c)  	args = append(args, p) @@ -37,7 +37,7 @@ const (  type argContainer struct {  	debug, init, zerokey, fusedebug, openssl, passwd, foreground, version, -	plaintextnames, quiet, diriv, emenames, gcmiv128, nosyslog bool +	plaintextnames, quiet, diriv, emenames, gcmiv128, nosyslog, wpanic bool  	masterkey, mountpoint, cipherdir, cpuprofile, config, extpass,  	memprofile string  	notifypid, scryptn int @@ -160,6 +160,7 @@ func main() {  	flagSet.BoolVar(&args.emenames, "emenames", true, "Use EME filename encryption. This option implies diriv.")  	flagSet.BoolVar(&args.gcmiv128, "gcmiv128", true, "Use an 128-bit IV for GCM encryption instead of Go's default of 96 bits")  	flagSet.BoolVar(&args.nosyslog, "nosyslog", false, "Do not redirect output to syslog when running in the background") +	flagSet.BoolVar(&args.wpanic, "wpanic", false, "When encountering a warning, panic and exit immediately")  	flagSet.StringVar(&args.masterkey, "masterkey", "", "Mount with explicit master key")  	flagSet.StringVar(&args.cpuprofile, "cpuprofile", "", "Write cpu profile to specified file")  	flagSet.StringVar(&args.memprofile, "memprofile", "", "Write memory profile to specified file") @@ -184,6 +185,10 @@ func main() {  		cryptfs.Debug.Enabled = true  		cryptfs.Debug.Printf("Debug output enabled")  	} +	if args.wpanic { +		cryptfs.Warn.PanicAfter = true +		cryptfs.Debug.Printf("Panicing on warnings") +	}  	// Every operation below requires CIPHERDIR. Check that we have it.  	if flagSet.NArg() >= 1 {  		args.cipherdir, _ = filepath.Abs(flagSet.Arg(0)) diff --git a/pathfs_frontend/names.go b/pathfs_frontend/names.go index 219942e..bd7a249 100644 --- a/pathfs_frontend/names.go +++ b/pathfs_frontend/names.go @@ -15,7 +15,7 @@ func (fs *FS) isFiltered(path string) bool {  	}  	// gocryptfs.conf in the root directory is forbidden  	if path == cryptfs.ConfDefaultName { -		cryptfs.Warn.Printf("The name /%s is reserved when -plaintextnames is used\n", +		cryptfs.Info.Printf("The name /%s is reserved when -plaintextnames is used\n",  			cryptfs.ConfDefaultName)  		return true  	} | 
