Browse Source

Merge pull request #5911 from LK4D4/chmod_on_add_#3979

Make chmod on ADDed files
Guillaume J. Charmes 11 years ago
parent
commit
5fee3774d4

+ 1 - 0
integration-cli/build_tests/TestAdd/SingleFileToRoot/Dockerfile

@@ -5,4 +5,5 @@ RUN touch /exists
 RUN chown dockerio.dockerio /exists
 ADD test_file /
 RUN [ $(ls -l /test_file | awk '{print $3":"$4}') = 'root:root' ]
+RUN [ $(ls -l /test_file | awk '{print $1}') = '-rwxr-xr-x' ]
 RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]

+ 2 - 0
integration-cli/build_tests/TestAdd/WholeDirToRoot/Dockerfile

@@ -5,5 +5,7 @@ RUN touch /exists
 RUN chown dockerio.dockerio exists
 ADD test_dir /test_dir
 RUN [ $(ls -l / | grep test_dir | awk '{print $3":"$4}') = 'root:root' ]
+RUN [ $(ls -l / | grep test_dir | awk '{print $1}') = 'drwxr-xr-x' ]
 RUN [ $(ls -l /test_dir/test_file | awk '{print $3":"$4}') = 'root:root' ]
+RUN [ $(ls -l /test_dir/test_file | awk '{print $1}') = '-rwxr-xr-x' ]
 RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]

+ 8 - 5
server/buildfile.go

@@ -431,9 +431,12 @@ func (b *buildFile) addContext(container *daemon.Container, orig, dest string, r
 		return err
 	}
 
-	chownR := func(destPath string, uid, gid int) error {
+	fixPermsR := func(destPath string, uid, gid int) error {
 		return filepath.Walk(destPath, func(path string, info os.FileInfo, err error) error {
-			if err := os.Lchown(path, uid, gid); err != nil {
+			if err := os.Lchown(path, uid, gid); err != nil && !os.IsNotExist(err) {
+				return err
+			}
+			if err := os.Chmod(path, 0755); err != nil && !os.IsNotExist(err) {
 				return err
 			}
 			return nil
@@ -450,12 +453,12 @@ func (b *buildFile) addContext(container *daemon.Container, orig, dest string, r
 				return err
 			}
 			for _, file := range files {
-				if err := chownR(filepath.Join(destPath, file.Name()), 0, 0); err != nil {
+				if err := fixPermsR(filepath.Join(destPath, file.Name()), 0, 0); err != nil {
 					return err
 				}
 			}
 		} else {
-			if err := chownR(destPath, 0, 0); err != nil {
+			if err := fixPermsR(destPath, 0, 0); err != nil {
 				return err
 			}
 		}
@@ -494,7 +497,7 @@ func (b *buildFile) addContext(container *daemon.Container, orig, dest string, r
 		resPath = path.Join(destPath, path.Base(origPath))
 	}
 
-	if err := chownR(resPath, 0, 0); err != nil {
+	if err := fixPermsR(resPath, 0, 0); err != nil {
 		return err
 	}
 	return nil