Skip to content

Commit 636dd7c

Browse files
authored
Merge pull request #235 from runcom/secrets-rewrite
Secrets rewrite
2 parents df85c0b + 14cc629 commit 636dd7c

9 files changed

Lines changed: 276 additions & 168 deletions

File tree

container/container_notlinux.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ func (container *Container) SecretMount() *Mount {
1717
return nil
1818
}
1919

20-
// SecretMountRHEL returns the mount for the secret path
21-
func (container *Container) SecretMountRHEL(rootUID, rootGID int) (*Mount, error) {
22-
return nil
23-
}
24-
2520
// UnmountSecrets unmounts the fs for secrets
2621
func (container *Container) UnmountSecrets() error {
2722
return nil

container/container_unix.go

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -446,42 +446,3 @@ func cleanResourcePath(path string) string {
446446
func (container *Container) EnableServiceDiscoveryOnDefaultNetwork() bool {
447447
return false
448448
}
449-
450-
// SecretMountRHEL returns the Secret Mount point
451-
func (container *Container) SecretMountRHEL(rootUID, rootGID int) (*Mount, error) {
452-
secretsPath, err := container.GetRootResourcePath("secrets")
453-
if err != nil {
454-
return nil, fmt.Errorf("GetSecretsPath failed: %v", err)
455-
}
456-
457-
if err := os.RemoveAll(secretsPath); err != nil {
458-
return nil, fmt.Errorf("RemoveSecretsPath failed: %v", err)
459-
}
460-
461-
if err := os.MkdirAll(secretsPath, 0755); err != nil {
462-
return nil, fmt.Errorf("MakeDirSecretsPath failed: %v", err)
463-
}
464-
465-
data, err := getHostSecretData()
466-
if err != nil {
467-
return nil, fmt.Errorf("GetHostSecretData failed: %v", err)
468-
}
469-
for _, s := range data {
470-
s.SaveTo(secretsPath)
471-
}
472-
473-
if rootUID != 0 {
474-
callback := func(p string, info os.FileInfo, err error) error {
475-
return os.Chown(p, rootUID, rootGID)
476-
}
477-
478-
filepath.Walk(secretsPath, callback)
479-
}
480-
label.Relabel(secretsPath, container.MountLabel, false)
481-
482-
m := &Mount{}
483-
m.Source = secretsPath
484-
m.Destination = "/run/secrets"
485-
m.Writable = true
486-
return m, nil
487-
}

container/container_windows.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,6 @@ func (container *Container) UpdateContainer(hostConfig *containertypes.HostConfi
8888
return nil
8989
}
9090

91-
// SecretMountRHEL returns the Secret Mount point
92-
func (container *Container) SecretMountRHEL(rootUID, rootGID int) (*Mount, error) {
93-
return nil, nil
94-
}
95-
9691
// cleanResourcePath cleans a resource path by removing C:\ syntax, and prepares
9792
// to combine with a volume path
9893
func cleanResourcePath(path string) string {

container/secrets.go

Lines changed: 0 additions & 99 deletions
This file was deleted.

daemon/container_operations_unix.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,6 @@ func (daemon *Daemon) setupSecretDir(c *container.Container) (setupErr error) {
177177
}
178178

179179
targetPath := filepath.Clean(s.File.Name)
180-
// ensure that the target is a filename only; no paths allowed
181-
if targetPath != filepath.Base(targetPath) {
182-
return fmt.Errorf("error creating secret: secret must not be a path")
183-
}
184180

185181
fPath := filepath.Join(localMountPath, targetPath)
186182
if err := idtools.MkdirAllAs(filepath.Dir(fPath), 0700, rootUID, rootGID); err != nil {
@@ -195,8 +191,14 @@ func (daemon *Daemon) setupSecretDir(c *container.Container) (setupErr error) {
195191
if secret == nil {
196192
return fmt.Errorf("unable to get secret from secret store")
197193
}
198-
if err := ioutil.WriteFile(fPath, secret.Spec.Data, s.File.Mode); err != nil {
199-
return errors.Wrap(err, "error injecting secret")
194+
if s.File.Mode.IsDir() {
195+
if err := os.Mkdir(fPath, s.File.Mode); err != nil {
196+
return errors.Wrap(err, "error injecting secret dir")
197+
}
198+
} else {
199+
if err := ioutil.WriteFile(fPath, secret.Spec.Data, s.File.Mode); err != nil {
200+
return errors.Wrap(err, "error injecting secret")
201+
}
200202
}
201203

202204
uid, err := strconv.Atoi(s.File.UID)
@@ -213,6 +215,8 @@ func (daemon *Daemon) setupSecretDir(c *container.Container) (setupErr error) {
213215
}
214216
}
215217

218+
label.Relabel(localMountPath, c.MountLabel, false)
219+
216220
// remount secrets ro
217221
if err := mount.Mount("tmpfs", localMountPath, "tmpfs", "remount,ro,"+tmpfsOwnership); err != nil {
218222
return errors.Wrap(err, "unable to remount secret dir as readonly")

daemon/oci_linux.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -712,18 +712,6 @@ func (daemon *Daemon) createSpec(c *container.Container) (*specs.Spec, error) {
712712
ms = append(ms, *m)
713713
}
714714

715-
rootUID, rootGID := daemon.GetRemappedUIDGID()
716-
if daemon.configStore.EnableSecrets {
717-
m, err := c.SecretMountRHEL(rootUID, rootGID)
718-
if err != nil {
719-
return nil, err
720-
}
721-
// SecretMountRHEL() returns m == nil && err == nil
722-
// we check m before appending and dereferencing it
723-
if m != nil {
724-
ms = append(ms, *m)
725-
}
726-
}
727715
sort.Sort(mounts(ms))
728716
if err := setMounts(daemon, &s, c, ms); err != nil {
729717
return nil, fmt.Errorf("linux mounts: %v", err)

daemon/start.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ func (daemon *Daemon) containerStart(container *container.Container, checkpoint
146146
return err
147147
}
148148

149+
if daemon.configStore.EnableSecrets {
150+
// SUSE:secrets -- inject the SUSE secret store
151+
if err := daemon.injectSuseSecretStore(container); err != nil {
152+
return err
153+
}
154+
}
155+
149156
spec, err := daemon.createSpec(container)
150157
if err != nil {
151158
return err

0 commit comments

Comments
 (0)