diff options
| -rw-r--r-- | gocryptfs-xray/xray_main.go | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/gocryptfs-xray/xray_main.go b/gocryptfs-xray/xray_main.go index dec803b..b99268b 100644 --- a/gocryptfs-xray/xray_main.go +++ b/gocryptfs-xray/xray_main.go @@ -6,6 +6,7 @@ import (  	"fmt"  	"io"  	"os" +	"runtime"  	"github.com/rfjakob/gocryptfs/internal/configfile"  	"github.com/rfjakob/gocryptfs/internal/contentenc" @@ -16,6 +17,15 @@ import (  	"github.com/rfjakob/gocryptfs/internal/tlog"  ) +// GitVersion is the gocryptfs version according to git, set by build.bash +var GitVersion = "[GitVersion not set - please compile using ./build.bash]" + +// GitVersionFuse is the go-fuse library version, set by build.bash +var GitVersionFuse = "[GitVersionFuse not set - please compile using ./build.bash]" + +// BuildDate is a date string like "2017-09-06", set by build.bash +var BuildDate = "0000-00-00" +  const (  	ivLen      = contentenc.DefaultIVBits / 8  	authTagLen = cryptocore.AuthTagLen @@ -39,7 +49,18 @@ func prettyPrintHeader(h *contentenc.FileHeader, aessiv bool) {  	fmt.Printf(msg+"\n", h.Version, id)  } +// printVersion prints a version string like this: +// gocryptfs v1.7-32-gcf99cfd; go-fuse v1.0.0-174-g22a9cb9; 2019-05-12 go1.12 linux/amd64 +func printVersion() { +	built := fmt.Sprintf("%s %s", BuildDate, runtime.Version()) +	fmt.Printf("%s %s; %s %s/%s\n", +		myName, GitVersion, built, +		runtime.GOOS, runtime.GOARCH) +} +  func usage() { +	printVersion() +	fmt.Printf("\n")  	fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS] FILE\n"+  		"\n"+  		"Options:\n", myName) @@ -69,6 +90,7 @@ func main() {  		aessiv        *bool  		sep0          *bool  		fido2         *string +		version       *bool  	}  	args.dumpmasterkey = flag.Bool("dumpmasterkey", false, "Decrypt and dump the master key")  	args.decryptPaths = flag.Bool("decrypt-paths", false, "Decrypt file paths using gocryptfs control socket") @@ -76,8 +98,16 @@ func main() {  	args.sep0 = flag.Bool("0", false, "Use \\0 instead of \\n as separator")  	args.aessiv = flag.Bool("aessiv", false, "Assume AES-SIV mode instead of AES-GCM")  	args.fido2 = flag.String("fido2", "", "Protect the masterkey using a FIDO2 token instead of a password") +	args.version = flag.Bool("version", false, "Print version information") +  	flag.Usage = usage  	flag.Parse() + +	if *args.version { +		printVersion() +		os.Exit(0) +	} +  	s := sum(args.dumpmasterkey, args.decryptPaths, args.encryptPaths)  	if s > 1 {  		fmt.Printf("fatal: %d operations were requested\n", s) | 
