mirror of
https://github.com/rclone/rclone.git
synced 2024-11-25 09:41:44 +08:00
mount: add --devname to set the device name sent to FUSE for mount display
Before this change, the device name was always the remote:path rclone was configured with. However this can contain sensitive information and it appears in the `mount` output, so `--devname` allows the user to configure it. See: https://forum.rclone.org/t/rclone-mount-blomp-problem/29151/11
This commit is contained in:
parent
9cc50a614b
commit
f4c40bf79d
|
@ -168,7 +168,7 @@ func mount(VFS *vfs.VFS, mountPath string, opt *mountlib.Options) (<-chan error,
|
||||||
host.SetCapCaseInsensitive(f.Features().CaseInsensitive)
|
host.SetCapCaseInsensitive(f.Features().CaseInsensitive)
|
||||||
|
|
||||||
// Create options
|
// Create options
|
||||||
options := mountOptions(VFS, f.Name()+":"+f.Root(), mountpoint, opt)
|
options := mountOptions(VFS, opt.DeviceName, mountpoint, opt)
|
||||||
fs.Debugf(f, "Mounting with options: %q", options)
|
fs.Debugf(f, "Mounting with options: %q", options)
|
||||||
|
|
||||||
// Serve the mount point in the background returning error to errChan
|
// Serve the mount point in the background returning error to errChan
|
||||||
|
|
|
@ -86,7 +86,7 @@ func mount(VFS *vfs.VFS, mountpoint string, opt *mountlib.Options) (<-chan error
|
||||||
|
|
||||||
f := VFS.Fs()
|
f := VFS.Fs()
|
||||||
fs.Debugf(f, "Mounting on %q", mountpoint)
|
fs.Debugf(f, "Mounting on %q", mountpoint)
|
||||||
c, err := fuse.Mount(mountpoint, mountOptions(VFS, f.Name()+":"+f.Root(), opt)...)
|
c, err := fuse.Mount(mountpoint, mountOptions(VFS, opt.DeviceName, opt)...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,10 @@ func init() {
|
||||||
// mountOptions configures the options from the command line flags
|
// mountOptions configures the options from the command line flags
|
||||||
//
|
//
|
||||||
// man mount.fuse for more info and note the -o flag for other options
|
// man mount.fuse for more info and note the -o flag for other options
|
||||||
func mountOptions(fsys *FS, f fs.Fs) (mountOpts *fuse.MountOptions) {
|
func mountOptions(fsys *FS, f fs.Fs, opt *mountlib.Options) (mountOpts *fuse.MountOptions) {
|
||||||
device := f.Name() + ":" + f.Root()
|
|
||||||
mountOpts = &fuse.MountOptions{
|
mountOpts = &fuse.MountOptions{
|
||||||
AllowOther: fsys.opt.AllowOther,
|
AllowOther: fsys.opt.AllowOther,
|
||||||
FsName: device,
|
FsName: opt.DeviceName,
|
||||||
Name: "rclone",
|
Name: "rclone",
|
||||||
DisableXAttrs: true,
|
DisableXAttrs: true,
|
||||||
Debug: fsys.opt.DebugFUSE,
|
Debug: fsys.opt.DebugFUSE,
|
||||||
|
@ -120,7 +119,7 @@ func mountOptions(fsys *FS, f fs.Fs) (mountOpts *fuse.MountOptions) {
|
||||||
if runtime.GOOS == "darwin" {
|
if runtime.GOOS == "darwin" {
|
||||||
opts = append(opts,
|
opts = append(opts,
|
||||||
// VolumeName sets the volume name shown in Finder.
|
// VolumeName sets the volume name shown in Finder.
|
||||||
fmt.Sprintf("volname=%s", device),
|
fmt.Sprintf("volname=%s", opt.VolumeName),
|
||||||
|
|
||||||
// NoAppleXattr makes OSXFUSE disallow extended attributes with the
|
// NoAppleXattr makes OSXFUSE disallow extended attributes with the
|
||||||
// prefix "com.apple.". This disables persistent Finder state and
|
// prefix "com.apple.". This disables persistent Finder state and
|
||||||
|
@ -167,7 +166,7 @@ func mount(VFS *vfs.VFS, mountpoint string, opt *mountlib.Options) (<-chan error
|
||||||
//mOpts.Debug = mountlib.DebugFUSE
|
//mOpts.Debug = mountlib.DebugFUSE
|
||||||
|
|
||||||
//conn := fusefs.NewFileSystemConnector(nodeFs.Root(), mOpts)
|
//conn := fusefs.NewFileSystemConnector(nodeFs.Root(), mOpts)
|
||||||
mountOpts := mountOptions(fsys, f)
|
mountOpts := mountOptions(fsys, f, opt)
|
||||||
|
|
||||||
// FIXME fill out
|
// FIXME fill out
|
||||||
opts := fusefs.Options{
|
opts := fusefs.Options{
|
||||||
|
|
|
@ -40,6 +40,7 @@ type Options struct {
|
||||||
ExtraOptions []string
|
ExtraOptions []string
|
||||||
ExtraFlags []string
|
ExtraFlags []string
|
||||||
AttrTimeout time.Duration // how long the kernel caches attribute for
|
AttrTimeout time.Duration // how long the kernel caches attribute for
|
||||||
|
DeviceName string
|
||||||
VolumeName string
|
VolumeName string
|
||||||
NoAppleDouble bool
|
NoAppleDouble bool
|
||||||
NoAppleXattr bool
|
NoAppleXattr bool
|
||||||
|
@ -125,6 +126,7 @@ func AddFlags(flagSet *pflag.FlagSet) {
|
||||||
flags.BoolVarP(flagSet, &Opt.AsyncRead, "async-read", "", Opt.AsyncRead, "Use asynchronous reads (not supported on Windows)")
|
flags.BoolVarP(flagSet, &Opt.AsyncRead, "async-read", "", Opt.AsyncRead, "Use asynchronous reads (not supported on Windows)")
|
||||||
flags.FVarP(flagSet, &Opt.MaxReadAhead, "max-read-ahead", "", "The number of bytes that can be prefetched for sequential reads (not supported on Windows)")
|
flags.FVarP(flagSet, &Opt.MaxReadAhead, "max-read-ahead", "", "The number of bytes that can be prefetched for sequential reads (not supported on Windows)")
|
||||||
flags.BoolVarP(flagSet, &Opt.WritebackCache, "write-back-cache", "", Opt.WritebackCache, "Makes kernel buffer writes before sending them to rclone (without this, writethrough caching is used) (not supported on Windows)")
|
flags.BoolVarP(flagSet, &Opt.WritebackCache, "write-back-cache", "", Opt.WritebackCache, "Makes kernel buffer writes before sending them to rclone (without this, writethrough caching is used) (not supported on Windows)")
|
||||||
|
flags.StringVarP(flagSet, &Opt.DeviceName, "devname", "", Opt.DeviceName, "Set the device name - default is remote:path")
|
||||||
// Windows and OSX
|
// Windows and OSX
|
||||||
flags.StringVarP(flagSet, &Opt.VolumeName, "volname", "", Opt.VolumeName, "Set the volume name (supported on Windows and OSX only)")
|
flags.StringVarP(flagSet, &Opt.VolumeName, "volname", "", Opt.VolumeName, "Set the volume name (supported on Windows and OSX only)")
|
||||||
// OSX only
|
// OSX only
|
||||||
|
@ -235,6 +237,7 @@ func (m *MountPoint) Mount() (daemon *os.Process, err error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
m.SetVolumeName(m.MountOpt.VolumeName)
|
m.SetVolumeName(m.MountOpt.VolumeName)
|
||||||
|
m.SetDeviceName(m.MountOpt.DeviceName)
|
||||||
|
|
||||||
// Start background task if --daemon is specified
|
// Start background task if --daemon is specified
|
||||||
if m.MountOpt.Daemon {
|
if m.MountOpt.Daemon {
|
||||||
|
|
|
@ -87,7 +87,7 @@ func (m *MountPoint) CheckAllowings() error {
|
||||||
// SetVolumeName with sensible default
|
// SetVolumeName with sensible default
|
||||||
func (m *MountPoint) SetVolumeName(vol string) {
|
func (m *MountPoint) SetVolumeName(vol string) {
|
||||||
if vol == "" {
|
if vol == "" {
|
||||||
vol = m.Fs.Name() + ":" + m.Fs.Root()
|
vol = fs.ConfigString(m.Fs)
|
||||||
}
|
}
|
||||||
m.MountOpt.SetVolumeName(vol)
|
m.MountOpt.SetVolumeName(vol)
|
||||||
}
|
}
|
||||||
|
@ -102,3 +102,11 @@ func (o *Options) SetVolumeName(vol string) {
|
||||||
}
|
}
|
||||||
o.VolumeName = vol
|
o.VolumeName = vol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetDeviceName with sensible default
|
||||||
|
func (m *MountPoint) SetDeviceName(dev string) {
|
||||||
|
if dev == "" {
|
||||||
|
dev = fs.ConfigString(m.Fs)
|
||||||
|
}
|
||||||
|
m.MountOpt.DeviceName = dev
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user