|
|
|
@@ -87,11 +87,11 @@ func (mounter *Mounter) MountSensitive(source string, target string, fstype stri
|
|
|
|
|
mounterPath := ""
|
|
|
|
|
bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := MakeBindOptsSensitive(options, sensitiveOptions)
|
|
|
|
|
if bind {
|
|
|
|
|
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, true)
|
|
|
|
|
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, nil /* mountFlags */, true)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, true)
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, nil /* mountFlags */, true)
|
|
|
|
|
}
|
|
|
|
|
// The list of filesystems that require containerized mounter on GCI image cluster
|
|
|
|
|
fsTypesNeedMounter := map[string]struct{}{
|
|
|
|
@@ -103,19 +103,24 @@ func (mounter *Mounter) MountSensitive(source string, target string, fstype stri
|
|
|
|
|
if _, ok := fsTypesNeedMounter[fstype]; ok {
|
|
|
|
|
mounterPath = mounter.mounterPath
|
|
|
|
|
}
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, true)
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, nil /* mountFlags */, true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MountSensitiveWithoutSystemd is the same as MountSensitive() but disable using systemd mount.
|
|
|
|
|
func (mounter *Mounter) MountSensitiveWithoutSystemd(source string, target string, fstype string, options []string, sensitiveOptions []string) error {
|
|
|
|
|
return mounter.MountSensitiveWithoutSystemdWithMountFlags(source, target, fstype, options, sensitiveOptions, nil /* mountFlags */)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MountSensitiveWithoutSystemdWithMountFlags is the same as MountSensitiveWithoutSystemd with additional mount flags.
|
|
|
|
|
func (mounter *Mounter) MountSensitiveWithoutSystemdWithMountFlags(source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string) error {
|
|
|
|
|
mounterPath := ""
|
|
|
|
|
bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := MakeBindOptsSensitive(options, sensitiveOptions)
|
|
|
|
|
if bind {
|
|
|
|
|
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, false)
|
|
|
|
|
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, mountFlags, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, false)
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, mountFlags, false)
|
|
|
|
|
}
|
|
|
|
|
// The list of filesystems that require containerized mounter on GCI image cluster
|
|
|
|
|
fsTypesNeedMounter := map[string]struct{}{
|
|
|
|
@@ -127,14 +132,14 @@ func (mounter *Mounter) MountSensitiveWithoutSystemd(source string, target strin
|
|
|
|
|
if _, ok := fsTypesNeedMounter[fstype]; ok {
|
|
|
|
|
mounterPath = mounter.mounterPath
|
|
|
|
|
}
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, false)
|
|
|
|
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, mountFlags, false)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// doMount runs the mount command. mounterPath is the path to mounter binary if containerized mounter is used.
|
|
|
|
|
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
|
|
|
|
|
// systemdMountRequired is an extension of option to decide whether uses systemd mount.
|
|
|
|
|
func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source string, target string, fstype string, options []string, sensitiveOptions []string, systemdMountRequired bool) error {
|
|
|
|
|
mountArgs, mountArgsLogStr := MakeMountArgsSensitive(source, target, fstype, options, sensitiveOptions)
|
|
|
|
|
func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source string, target string, fstype string, options []string, sensitiveOptions []string, mountFlags []string, systemdMountRequired bool) error {
|
|
|
|
|
mountArgs, mountArgsLogStr := MakeMountArgsSensitive(source, target, fstype, options, sensitiveOptions, mountFlags)
|
|
|
|
|
if len(mounterPath) > 0 {
|
|
|
|
|
mountArgs = append([]string{mountCmd}, mountArgs...)
|
|
|
|
|
mountArgsLogStr = mountCmd + " " + mountArgsLogStr
|
|
|
|
@@ -210,17 +215,21 @@ func detectSystemd() bool {
|
|
|
|
|
// MakeMountArgs makes the arguments to the mount(8) command.
|
|
|
|
|
// options MUST not contain sensitive material (like passwords).
|
|
|
|
|
func MakeMountArgs(source, target, fstype string, options []string) (mountArgs []string) {
|
|
|
|
|
mountArgs, _ = MakeMountArgsSensitive(source, target, fstype, options, nil /* sensitiveOptions */)
|
|
|
|
|
mountArgs, _ = MakeMountArgsSensitive(source, target, fstype, options, nil /* sensitiveOptions */, nil /* mountFlags */)
|
|
|
|
|
return mountArgs
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MakeMountArgsSensitive makes the arguments to the mount(8) command.
|
|
|
|
|
// sensitiveOptions is an extension of options except they will not be logged (because they may contain sensitive material)
|
|
|
|
|
func MakeMountArgsSensitive(source, target, fstype string, options []string, sensitiveOptions []string) (mountArgs []string, mountArgsLogStr string) {
|
|
|
|
|
func MakeMountArgsSensitive(source, target, fstype string, options []string, sensitiveOptions []string, mountFlags []string) (mountArgs []string, mountArgsLogStr string) {
|
|
|
|
|
// Build mount command as follows:
|
|
|
|
|
// mount [-t $fstype] [-o $options] [$source] $target
|
|
|
|
|
// mount [--$mountFlags] [-t $fstype] [-o $options] [$source] $target
|
|
|
|
|
mountArgs = []string{}
|
|
|
|
|
mountArgsLogStr = ""
|
|
|
|
|
|
|
|
|
|
mountArgs = append(mountArgs, mountFlags...)
|
|
|
|
|
mountArgsLogStr += strings.Join(mountFlags, " ")
|
|
|
|
|
|
|
|
|
|
if len(fstype) > 0 {
|
|
|
|
|
mountArgs = append(mountArgs, "-t", fstype)
|
|
|
|
|
mountArgsLogStr += strings.Join(mountArgs, " ")
|
|
|
|
|