main: detect fusermount3 and don't add nonempty
fusermount3 (i.e. fusermount from libfuse 3.x) has dropped the `nonempty` option. Detect fusermount3 and don't add `nonempty` in this case. Fixes https://github.com/rfjakob/gocryptfs/pull/440
This commit is contained in:
parent
1364b44ae3
commit
db43bfc4c0
24
mount.go
24
mount.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
@ -362,7 +363,9 @@ func initGoFuse(fs pathfs.FileSystem, args *argContainer) *fuse.Server {
|
|||||||
tlog.Info.Printf(tlog.ColorYellow + "THE OPTION \"-forcedecode\" IS ACTIVE. GOCRYPTFS WILL RETURN CORRUPT DATA!" +
|
tlog.Info.Printf(tlog.ColorYellow + "THE OPTION \"-forcedecode\" IS ACTIVE. GOCRYPTFS WILL RETURN CORRUPT DATA!" +
|
||||||
tlog.ColorReset)
|
tlog.ColorReset)
|
||||||
}
|
}
|
||||||
if args.nonempty {
|
// fusermount from libfuse 3.x removed the "nonempty" option and exits
|
||||||
|
// with an error if it sees it. Only add it to the options on libfuse 2.x.
|
||||||
|
if args.nonempty && haveFusermount2() {
|
||||||
mOpts.Options = append(mOpts.Options, "nonempty")
|
mOpts.Options = append(mOpts.Options, "nonempty")
|
||||||
}
|
}
|
||||||
// Set values shown in "df -T" and friends
|
// Set values shown in "df -T" and friends
|
||||||
@ -436,6 +439,25 @@ func initGoFuse(fs pathfs.FileSystem, args *argContainer) *fuse.Server {
|
|||||||
return srv
|
return srv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// haveFusermount2 finds out if the "fusermount" binary is from libfuse 2.x.
|
||||||
|
func haveFusermount2() bool {
|
||||||
|
cmd := exec.Command("/bin/fusermount", "-V")
|
||||||
|
var out bytes.Buffer
|
||||||
|
cmd.Stdout = &out
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
tlog.Warn.Printf("warning: haveFusermount2: %v", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// libfuse 2: fusermount version: 2.9.9
|
||||||
|
// libfuse 3: fusermount3 version: 3.9.0
|
||||||
|
v := out.String()
|
||||||
|
if strings.HasPrefix(v, "fusermount version") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func handleSigint(srv *fuse.Server, mountpoint string) {
|
func handleSigint(srv *fuse.Server, mountpoint string) {
|
||||||
ch := make(chan os.Signal, 1)
|
ch := make(chan os.Signal, 1)
|
||||||
signal.Notify(ch, os.Interrupt)
|
signal.Notify(ch, os.Interrupt)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user