1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #38758 from thaJeztah/add_missing_char_device_mode

Graphdriver: fix "device" mode not being detected if "character-device" bit is set
This commit is contained in:
Sebastiaan van Stijn 2019-02-20 23:25:26 +01:00 committed by GitHub
commit 9688f120a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -152,8 +152,8 @@ func DirCopy(srcDir, dstDir string, copyMode Mode, copyXattrs bool) error {
isHardlink := false isHardlink := false
switch f.Mode() & os.ModeType { switch mode := f.Mode(); {
case 0: // Regular file case mode.IsRegular():
id := fileID{dev: stat.Dev, ino: stat.Ino} id := fileID{dev: stat.Dev, ino: stat.Ino}
if copyMode == Hardlink { if copyMode == Hardlink {
isHardlink = true isHardlink = true
@ -171,12 +171,12 @@ func DirCopy(srcDir, dstDir string, copyMode Mode, copyXattrs bool) error {
copiedFiles[id] = dstPath copiedFiles[id] = dstPath
} }
case os.ModeDir: case mode.IsDir():
if err := os.Mkdir(dstPath, f.Mode()); err != nil && !os.IsExist(err) { if err := os.Mkdir(dstPath, f.Mode()); err != nil && !os.IsExist(err) {
return err return err
} }
case os.ModeSymlink: case mode&os.ModeSymlink != 0:
link, err := os.Readlink(srcPath) link, err := os.Readlink(srcPath)
if err != nil { if err != nil {
return err return err
@ -186,14 +186,14 @@ func DirCopy(srcDir, dstDir string, copyMode Mode, copyXattrs bool) error {
return err return err
} }
case os.ModeNamedPipe: case mode&os.ModeNamedPipe != 0:
fallthrough fallthrough
case os.ModeSocket: case mode&os.ModeSocket != 0:
if err := unix.Mkfifo(dstPath, stat.Mode); err != nil { if err := unix.Mkfifo(dstPath, stat.Mode); err != nil {
return err return err
} }
case os.ModeDevice: case mode&os.ModeDevice != 0:
if rsystem.RunningInUserNS() { if rsystem.RunningInUserNS() {
// cannot create a device if running in user namespace // cannot create a device if running in user namespace
return nil return nil
@ -203,7 +203,7 @@ func DirCopy(srcDir, dstDir string, copyMode Mode, copyXattrs bool) error {
} }
default: default:
return fmt.Errorf("unknown file type for %s", srcPath) return fmt.Errorf("unknown file type (%d / %s) for %s", f.Mode(), f.Mode().String(), srcPath)
} }
// Everything below is copying metadata from src to dst. All this metadata // Everything below is copying metadata from src to dst. All this metadata