Skip to content

Commit ea55f9d

Browse files
author
zhouhao
committed
Specific cap-add command
Signed-off-by: zhouhao <[email protected]>
1 parent b00ed51 commit ea55f9d

File tree

3 files changed

+150
-2
lines changed

3 files changed

+150
-2
lines changed

cmd/oci-runtime-tool/generate.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ var generateFlags = []cli.Flag{
8383
cli.StringFlag{Name: "output", Usage: "output file (defaults to stdout)"},
8484
cli.BoolFlag{Name: "privileged", Usage: "enable privileged container settings"},
8585
cli.StringSliceFlag{Name: "process-cap-add", Usage: "add Linux capabilities"},
86+
cli.StringSliceFlag{Name: "process-cap-add-ambient", Usage: "add Linux ambient capabilities"},
87+
cli.StringSliceFlag{Name: "process-cap-add-bounding", Usage: "add Linux bounding capabilities"},
88+
cli.StringSliceFlag{Name: "process-cap-add-effective", Usage: "add Linux effective capabilities"},
89+
cli.StringSliceFlag{Name: "process-cap-add-inheritable", Usage: "add Linux inheritable capabilities"},
90+
cli.StringSliceFlag{Name: "process-cap-add-permitted", Usage: "add Linux permitted capabilities"},
8691
cli.StringSliceFlag{Name: "process-cap-drop", Usage: "drop Linux capabilities"},
8792
cli.BoolFlag{Name: "process-cap-drop-all", Usage: "drop all Linux capabilities"},
8893
cli.StringFlag{Name: "process-consolesize", Usage: "specifies the console size in characters (width:height)"},
@@ -274,6 +279,51 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
274279
}
275280
}
276281

282+
if context.IsSet("process-cap-add-ambient") {
283+
addCaps := context.StringSlice("process-cap-add-ambient")
284+
for _, cap := range addCaps {
285+
if err := g.AddProcessAmbientCapability(cap); err != nil {
286+
return err
287+
}
288+
}
289+
}
290+
291+
if context.IsSet("process-cap-add-bounding") {
292+
addCaps := context.StringSlice("process-cap-add-bounding")
293+
for _, cap := range addCaps {
294+
if err := g.AddProcessBoundingCapability(cap); err != nil {
295+
return err
296+
}
297+
}
298+
}
299+
300+
if context.IsSet("process-cap-add-effective") {
301+
addCaps := context.StringSlice("process-cap-add-effective")
302+
for _, cap := range addCaps {
303+
if err := g.AddProcessEffectiveCapability(cap); err != nil {
304+
return err
305+
}
306+
}
307+
}
308+
309+
if context.IsSet("process-cap-add-inheritable") {
310+
addCaps := context.StringSlice("process-cap-add-inheritable")
311+
for _, cap := range addCaps {
312+
if err := g.AddProcessInheritableCapability(cap); err != nil {
313+
return err
314+
}
315+
}
316+
}
317+
318+
if context.IsSet("process-cap-add-permitted") {
319+
addCaps := context.StringSlice("process-cap-add-permitted")
320+
for _, cap := range addCaps {
321+
if err := g.AddProcessPermittedCapability(cap); err != nil {
322+
return err
323+
}
324+
}
325+
}
326+
277327
if context.IsSet("process-cap-drop") {
278328
dropCaps := context.StringSlice("process-cap-drop")
279329
for _, cap := range dropCaps {

completions/bash/oci-runtime-tool

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,11 @@ _oci-runtime-tool_generate() {
363363
--mount-bind
364364
--mount-cgroups
365365
--output
366-
--process-cap-add
367-
--process-cap-drop
366+
--process-cap-add-ambient
367+
--process-cap-add-bounding
368+
--process-cap-add-effective
369+
--process-cap-add-inheritable
370+
--process-cap-add-permitted
368371
--process-consolesize
369372
--process-cwd
370373
--process-gid

generate/generate.go

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,101 @@ func (g *Generator) AddProcessCapability(c string) error {
10471047
return nil
10481048
}
10491049

1050+
// AddProcessAmbientCapability adds a process capability into g.spec.Process.Capabilities.Ambient.
1051+
func (g *Generator) AddProcessAmbientCapability(c string) error {
1052+
cp := strings.ToUpper(c)
1053+
if err := validate.CapValid(cp, g.HostSpecific); err != nil {
1054+
return err
1055+
}
1056+
1057+
g.initSpec()
1058+
1059+
for _, cap := range g.spec.Process.Capabilities.Ambient {
1060+
if strings.ToUpper(cap) == cp {
1061+
return nil
1062+
}
1063+
}
1064+
g.spec.Process.Capabilities.Ambient = append(g.spec.Process.Capabilities.Ambient, cp)
1065+
1066+
return nil
1067+
}
1068+
1069+
// AddProcessBoundingCapability adds a process capability into g.spec.Process.Capabilities.Bounding.
1070+
func (g *Generator) AddProcessBoundingCapability(c string) error {
1071+
cp := strings.ToUpper(c)
1072+
if err := validate.CapValid(cp, g.HostSpecific); err != nil {
1073+
return err
1074+
}
1075+
1076+
g.initSpec()
1077+
1078+
for _, cap := range g.spec.Process.Capabilities.Bounding {
1079+
if strings.ToUpper(cap) == cp {
1080+
return nil
1081+
}
1082+
}
1083+
g.spec.Process.Capabilities.Bounding = append(g.spec.Process.Capabilities.Bounding, cp)
1084+
1085+
return nil
1086+
}
1087+
1088+
// AddProcessEffectiveCapability adds a process capability into g.spec.Process.Capabilities.Effective.
1089+
func (g *Generator) AddProcessEffectiveCapability(c string) error {
1090+
cp := strings.ToUpper(c)
1091+
if err := validate.CapValid(cp, g.HostSpecific); err != nil {
1092+
return err
1093+
}
1094+
1095+
g.initSpec()
1096+
1097+
for _, cap := range g.spec.Process.Capabilities.Effective {
1098+
if strings.ToUpper(cap) == cp {
1099+
return nil
1100+
}
1101+
}
1102+
g.spec.Process.Capabilities.Effective = append(g.spec.Process.Capabilities.Effective, cp)
1103+
1104+
return nil
1105+
}
1106+
1107+
// AddProcessInheritableCapability adds a process capability into g.spec.Process.Capabilities.Inheritable.
1108+
func (g *Generator) AddProcessInheritableCapability(c string) error {
1109+
cp := strings.ToUpper(c)
1110+
if err := validate.CapValid(cp, g.HostSpecific); err != nil {
1111+
return err
1112+
}
1113+
1114+
g.initSpec()
1115+
1116+
for _, cap := range g.spec.Process.Capabilities.Inheritable {
1117+
if strings.ToUpper(cap) == cp {
1118+
return nil
1119+
}
1120+
}
1121+
g.spec.Process.Capabilities.Inheritable = append(g.spec.Process.Capabilities.Inheritable, cp)
1122+
1123+
return nil
1124+
}
1125+
1126+
// AddProcessPermittedCapability adds a process capability into g.spec.Process.Capabilities.Permitted.
1127+
func (g *Generator) AddProcessPermittedCapability(c string) error {
1128+
cp := strings.ToUpper(c)
1129+
if err := validate.CapValid(cp, g.HostSpecific); err != nil {
1130+
return err
1131+
}
1132+
1133+
g.initSpec()
1134+
1135+
for _, cap := range g.spec.Process.Capabilities.Permitted {
1136+
if strings.ToUpper(cap) == cp {
1137+
return nil
1138+
}
1139+
}
1140+
g.spec.Process.Capabilities.Permitted = append(g.spec.Process.Capabilities.Permitted, cp)
1141+
1142+
return nil
1143+
}
1144+
10501145
// DropProcessCapability drops a process capability from g.spec.Process.Capabilities.
10511146
func (g *Generator) DropProcessCapability(c string) error {
10521147
cp := strings.ToUpper(c)

0 commit comments

Comments
 (0)