소스 검색

docker/daemon: set umask to the default on startup

This sets up the umask so that it's the same on all systems.

Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
unclejack 10 년 전
부모
커밋
6578ad90c3
3개의 변경된 파일23개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      docker/daemon.go
  2. 14 0
      docker/daemon_unix.go
  3. 5 0
      docker/daemon_windows.go

+ 4 - 0
docker/daemon.go

@@ -91,6 +91,10 @@ func mainDaemon() {
 
 	logrus.SetFormatter(&logrus.TextFormatter{TimestampFormat: timeutils.RFC3339NanoFixed})
 
+	if err := setDefaultUmask(); err != nil {
+		logrus.Fatalf("Failed to set umask: %v", err)
+	}
+
 	var pfile *pidfile.PidFile
 	if daemonCfg.Pidfile != "" {
 		pf, err := pidfile.New(daemonCfg.Pidfile)

+ 14 - 0
docker/daemon_unix.go

@@ -3,7 +3,9 @@
 package main
 
 import (
+	"fmt"
 	"os"
+	"syscall"
 
 	apiserver "github.com/docker/docker/api/server"
 	"github.com/docker/docker/daemon"
@@ -28,3 +30,15 @@ func currentUserIsOwner(f string) bool {
 	}
 	return false
 }
+
+// setDefaultUmask sets the umask to 0022 to avoid problems
+// caused by custom umask
+func setDefaultUmask() error {
+	desiredUmask := 0022
+	syscall.Umask(desiredUmask)
+	if umask := syscall.Umask(desiredUmask); umask != desiredUmask {
+		return fmt.Errorf("failed to set umask: expected %#o, got %#o", desiredUmask, umask)
+	}
+
+	return nil
+}

+ 5 - 0
docker/daemon_windows.go

@@ -16,3 +16,8 @@ func setPlatformServerConfig(serverConfig *apiserver.ServerConfig, daemonCfg *da
 func currentUserIsOwner(f string) bool {
 	return false
 }
+
+// setDefaultUmask doesn't do anything on windows
+func setDefaultUmask() error {
+	return nil
+}