mirror of
https://github.com/clearlinux/docker.git
synced 2026-09-28 00:50:11 +00:00
Allow caps to be toggled in native driver with plugin flag
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"github.com/dotcloud/docker/pkg/libcontainer"
|
||||
"github.com/dotcloud/docker/runtime/execdriver"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// createContainer populates and configures the container type with the
|
||||
@@ -63,9 +64,39 @@ func createContainer(c *execdriver.Command) *libcontainer.Container {
|
||||
container.Mounts = append(container.Mounts, libcontainer.Mount{m.Source, m.Destination, m.Writable, m.Private})
|
||||
}
|
||||
|
||||
configureCustomOptions(container, c.Config["native"])
|
||||
|
||||
return container
|
||||
}
|
||||
|
||||
// configureCustomOptions takes string commands from the user and allows modification of the
|
||||
// container's default configuration.
|
||||
//
|
||||
// format: <key> <value>
|
||||
// i.e: cap +MKNOD cap -NET_ADMIN
|
||||
// i.e: cgroup devices.allow *:*
|
||||
func configureCustomOptions(container *libcontainer.Container, opts []string) {
|
||||
for _, opt := range opts {
|
||||
parts := strings.Split(strings.TrimSpace(opt), " ")
|
||||
switch parts[0] {
|
||||
case "cap":
|
||||
value := strings.TrimSpace(parts[1])
|
||||
c := container.CapabilitiesMask.Get(value[1:])
|
||||
if c == nil {
|
||||
continue
|
||||
}
|
||||
switch value[0] {
|
||||
case '-':
|
||||
c.Enabled = false
|
||||
case '+':
|
||||
c.Enabled = true
|
||||
default:
|
||||
// do error here
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// getDefaultTemplate returns the docker default for
|
||||
// the libcontainer configuration file
|
||||
func getDefaultTemplate() *libcontainer.Container {
|
||||
|
||||
@@ -75,9 +75,6 @@ func NewDriver(root, initPath string) (*driver, error) {
|
||||
}
|
||||
|
||||
func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (int, error) {
|
||||
if err := d.validateCommand(c); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
var (
|
||||
term nsinit.Terminal
|
||||
container = createContainer(c)
|
||||
@@ -181,15 +178,6 @@ func (d *driver) removeContainerRoot(id string) error {
|
||||
return os.RemoveAll(filepath.Join(d.root, id))
|
||||
}
|
||||
|
||||
func (d *driver) validateCommand(c *execdriver.Command) error {
|
||||
// we need to check the Config of the command to make sure that we
|
||||
// do not have any of the lxc-conf variables
|
||||
for _, conf := range c.Config["native"] {
|
||||
log.Println(conf)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getEnv(key string, env []string) string {
|
||||
for _, pair := range env {
|
||||
parts := strings.Split(pair, "=")
|
||||
|
||||
Reference in New Issue
Block a user