mirror of
https://github.com/restic/restic.git
synced 2024-12-21 23:33:03 +00:00
fs: fix error in fillGenericAttributes for vss volumes
Extended attributes and security descriptors apparently cannot be retrieved from a vss volume. Fix the volume check to correctly detect vss volumes and just completely disable extended attributes for volumes.
This commit is contained in:
parent
03aad742d3
commit
1d0d5d87bc
1 changed files with 18 additions and 3 deletions
|
@ -325,8 +325,11 @@ func nodeFillGenericAttributes(node *restic.Node, path string, stat *ExtendedFil
|
|||
return false, nil
|
||||
}
|
||||
|
||||
if strings.HasSuffix(filepath.Clean(path), `\`) {
|
||||
// filepath.Clean(path) ends with '\' for Windows root volume paths only
|
||||
isVolume, err := isVolumePath(path)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if isVolume {
|
||||
// Do not process file attributes, created time and sd for windows root volume paths
|
||||
// Security descriptors are not supported for root volume paths.
|
||||
// Though file attributes and created time are supported for root volume paths,
|
||||
|
@ -335,7 +338,7 @@ func nodeFillGenericAttributes(node *restic.Node, path string, stat *ExtendedFil
|
|||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return allowExtended, nil
|
||||
return allowExtended, err
|
||||
}
|
||||
|
||||
var sd *[]byte
|
||||
|
@ -420,6 +423,18 @@ func checkAndStoreEASupport(path string) (isEASupportedVolume bool, err error) {
|
|||
return isEASupportedVolume, err
|
||||
}
|
||||
|
||||
// isVolumePath returns whether a path refers to a volume
|
||||
func isVolumePath(path string) (bool, error) {
|
||||
volName, err := prepareVolumeName(path)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
cleanPath := filepath.Clean(path)
|
||||
cleanVolume := filepath.Clean(volName + `\`)
|
||||
return cleanPath == cleanVolume, nil
|
||||
}
|
||||
|
||||
// prepareVolumeName prepares the volume name for different cases in Windows
|
||||
func prepareVolumeName(path string) (volumeName string, err error) {
|
||||
// Check if it's an extended length path
|
||||
|
|
Loading…
Reference in a new issue