@@ -17,6 +17,12 @@ import (
1717var (
1818 // Namespaces include the names of supported namespaces.
1919 Namespaces = []string {"network" , "pid" , "mount" , "ipc" , "uts" , "user" , "cgroup" }
20+
21+ // we don't care about order...and this is way faster...
22+ removeFunc = func (s []string , i int ) []string {
23+ s [i ] = s [len (s )- 1 ]
24+ return s [:len (s )- 1 ]
25+ }
2026)
2127
2228// Generator represents a generator for a container spec.
@@ -980,8 +986,32 @@ func (g *Generator) ClearProcessCapabilities() {
980986 g .spec .Process .Capabilities .Ambient = []string {}
981987}
982988
983- // AddProcessCapability adds a process capability into g.spec.Process.Capabilities.
984- func (g * Generator ) AddProcessCapability (c string ) error {
989+ // AddProcessCapabilityAmbient adds a process capability into g.spec.Process.Capabilities.Ambient.
990+ func (g * Generator ) AddProcessCapabilityAmbient (c string ) error {
991+ cp := strings .ToUpper (c )
992+ if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
993+ return err
994+ }
995+
996+ g .initSpecProcessCapabilities ()
997+
998+ var foundAmbient bool
999+ for _ , cap := range g .spec .Process .Capabilities .Ambient {
1000+ if strings .ToUpper (cap ) == cp {
1001+ foundAmbient = true
1002+ break
1003+ }
1004+ }
1005+
1006+ if ! foundAmbient {
1007+ g .spec .Process .Capabilities .Ambient = append (g .spec .Process .Capabilities .Ambient , cp )
1008+ }
1009+
1010+ return nil
1011+ }
1012+
1013+ // AddProcessCapabilityBounding adds a process capability into g.spec.Process.Capabilities.Bounding.
1014+ func (g * Generator ) AddProcessCapabilityBounding (c string ) error {
9851015 cp := strings .ToUpper (c )
9861016 if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
9871017 return err
@@ -1000,6 +1030,18 @@ func (g *Generator) AddProcessCapability(c string) error {
10001030 g .spec .Process .Capabilities .Bounding = append (g .spec .Process .Capabilities .Bounding , cp )
10011031 }
10021032
1033+ return nil
1034+ }
1035+
1036+ // AddProcessCapabilityEffective adds a process capability into g.spec.Process.Capabilities.Effective.
1037+ func (g * Generator ) AddProcessCapabilityEffective (c string ) error {
1038+ cp := strings .ToUpper (c )
1039+ if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
1040+ return err
1041+ }
1042+
1043+ g .initSpecProcessCapabilities ()
1044+
10031045 var foundEffective bool
10041046 for _ , cap := range g .spec .Process .Capabilities .Effective {
10051047 if strings .ToUpper (cap ) == cp {
@@ -1011,6 +1053,18 @@ func (g *Generator) AddProcessCapability(c string) error {
10111053 g .spec .Process .Capabilities .Effective = append (g .spec .Process .Capabilities .Effective , cp )
10121054 }
10131055
1056+ return nil
1057+ }
1058+
1059+ // AddProcessCapabilityInheritable adds a process capability into g.spec.Process.Capabilities.Inheritable.
1060+ func (g * Generator ) AddProcessCapabilityInheritable (c string ) error {
1061+ cp := strings .ToUpper (c )
1062+ if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
1063+ return err
1064+ }
1065+
1066+ g .initSpecProcessCapabilities ()
1067+
10141068 var foundInheritable bool
10151069 for _ , cap := range g .spec .Process .Capabilities .Inheritable {
10161070 if strings .ToUpper (cap ) == cp {
@@ -1022,6 +1076,18 @@ func (g *Generator) AddProcessCapability(c string) error {
10221076 g .spec .Process .Capabilities .Inheritable = append (g .spec .Process .Capabilities .Inheritable , cp )
10231077 }
10241078
1079+ return nil
1080+ }
1081+
1082+ // AddProcessCapabilityPermitted adds a process capability into g.spec.Process.Capabilities.Permitted.
1083+ func (g * Generator ) AddProcessCapabilityPermitted (c string ) error {
1084+ cp := strings .ToUpper (c )
1085+ if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
1086+ return err
1087+ }
1088+
1089+ g .initSpecProcessCapabilities ()
1090+
10251091 var foundPermitted bool
10261092 for _ , cap := range g .spec .Process .Capabilities .Permitted {
10271093 if strings .ToUpper (cap ) == cp {
@@ -1033,57 +1099,79 @@ func (g *Generator) AddProcessCapability(c string) error {
10331099 g .spec .Process .Capabilities .Permitted = append (g .spec .Process .Capabilities .Permitted , cp )
10341100 }
10351101
1036- var foundAmbient bool
1037- for _ , cap := range g .spec .Process .Capabilities .Ambient {
1102+ return nil
1103+ }
1104+
1105+ // DropProcessCapabilityAmbient drops a process capability from g.spec.Process.Capabilities.Ambient.
1106+ func (g * Generator ) DropProcessCapabilityAmbient (c string ) error {
1107+ cp := strings .ToUpper (c )
1108+
1109+ g .initSpecProcessCapabilities ()
1110+
1111+ for i , cap := range g .spec .Process .Capabilities .Ambient {
10381112 if strings .ToUpper (cap ) == cp {
1039- foundAmbient = true
1040- break
1113+ g .spec .Process .Capabilities .Ambient = removeFunc (g .spec .Process .Capabilities .Ambient , i )
10411114 }
10421115 }
1043- if ! foundAmbient {
1044- g .spec .Process .Capabilities .Ambient = append (g .spec .Process .Capabilities .Ambient , cp )
1045- }
10461116
1047- return nil
1117+ return validate . CapValid ( cp , false )
10481118}
10491119
1050- // DropProcessCapability drops a process capability from g.spec.Process.Capabilities.
1051- func (g * Generator ) DropProcessCapability (c string ) error {
1120+ // DropProcessCapabilityBounding drops a process capability from g.spec.Process.Capabilities.Bounding .
1121+ func (g * Generator ) DropProcessCapabilityBounding (c string ) error {
10521122 cp := strings .ToUpper (c )
10531123
10541124 g .initSpecProcessCapabilities ()
10551125
1056- // we don't care about order...and this is way faster...
1057- removeFunc := func (s []string , i int ) []string {
1058- s [i ] = s [len (s )- 1 ]
1059- return s [:len (s )- 1 ]
1060- }
1061-
10621126 for i , cap := range g .spec .Process .Capabilities .Bounding {
10631127 if strings .ToUpper (cap ) == cp {
10641128 g .spec .Process .Capabilities .Bounding = removeFunc (g .spec .Process .Capabilities .Bounding , i )
10651129 }
10661130 }
10671131
1132+ return validate .CapValid (cp , false )
1133+ }
1134+
1135+ // DropProcessCapabilityEffective drops a process capability from g.spec.Process.Capabilities.Effective.
1136+ func (g * Generator ) DropProcessCapabilityEffective (c string ) error {
1137+ cp := strings .ToUpper (c )
1138+
1139+ g .initSpecProcessCapabilities ()
1140+
10681141 for i , cap := range g .spec .Process .Capabilities .Effective {
10691142 if strings .ToUpper (cap ) == cp {
10701143 g .spec .Process .Capabilities .Effective = removeFunc (g .spec .Process .Capabilities .Effective , i )
10711144 }
10721145 }
10731146
1147+ return validate .CapValid (cp , false )
1148+ }
1149+
1150+ // DropProcessCapabilityInheritable drops a process capability from g.spec.Process.Capabilities.Inheritable.
1151+ func (g * Generator ) DropProcessCapabilityInheritable (c string ) error {
1152+ cp := strings .ToUpper (c )
1153+ if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
1154+ return err
1155+ }
1156+
1157+ g .initSpecProcessCapabilities ()
1158+
10741159 for i , cap := range g .spec .Process .Capabilities .Inheritable {
10751160 if strings .ToUpper (cap ) == cp {
10761161 g .spec .Process .Capabilities .Inheritable = removeFunc (g .spec .Process .Capabilities .Inheritable , i )
10771162 }
10781163 }
10791164
1080- for i , cap := range g .spec .Process .Capabilities .Permitted {
1081- if strings .ToUpper (cap ) == cp {
1082- g .spec .Process .Capabilities .Permitted = removeFunc (g .spec .Process .Capabilities .Permitted , i )
1083- }
1084- }
1165+ return validate .CapValid (cp , false )
1166+ }
10851167
1086- for i , cap := range g .spec .Process .Capabilities .Ambient {
1168+ // DropProcessCapabilityPermitted drops a process capability from g.spec.Process.Capabilities.Permitted.
1169+ func (g * Generator ) DropProcessCapabilityPermitted (c string ) error {
1170+ cp := strings .ToUpper (c )
1171+
1172+ g .initSpecProcessCapabilities ()
1173+
1174+ for i , cap := range g .spec .Process .Capabilities .Permitted {
10871175 if strings .ToUpper (cap ) == cp {
10881176 g .spec .Process .Capabilities .Ambient = removeFunc (g .spec .Process .Capabilities .Ambient , i )
10891177 }
0 commit comments