@@ -17,6 +17,12 @@ import (
17
17
var (
18
18
// Namespaces include the names of supported namespaces.
19
19
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
+ }
20
26
)
21
27
22
28
// Generator represents a generator for a container spec.
@@ -980,8 +986,32 @@ func (g *Generator) ClearProcessCapabilities() {
980
986
g .spec .Process .Capabilities .Ambient = []string {}
981
987
}
982
988
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 {
985
1015
cp := strings .ToUpper (c )
986
1016
if err := validate .CapValid (cp , g .HostSpecific ); err != nil {
987
1017
return err
@@ -1000,6 +1030,18 @@ func (g *Generator) AddProcessCapability(c string) error {
1000
1030
g .spec .Process .Capabilities .Bounding = append (g .spec .Process .Capabilities .Bounding , cp )
1001
1031
}
1002
1032
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
+
1003
1045
var foundEffective bool
1004
1046
for _ , cap := range g .spec .Process .Capabilities .Effective {
1005
1047
if strings .ToUpper (cap ) == cp {
@@ -1011,6 +1053,18 @@ func (g *Generator) AddProcessCapability(c string) error {
1011
1053
g .spec .Process .Capabilities .Effective = append (g .spec .Process .Capabilities .Effective , cp )
1012
1054
}
1013
1055
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
+
1014
1068
var foundInheritable bool
1015
1069
for _ , cap := range g .spec .Process .Capabilities .Inheritable {
1016
1070
if strings .ToUpper (cap ) == cp {
@@ -1022,6 +1076,18 @@ func (g *Generator) AddProcessCapability(c string) error {
1022
1076
g .spec .Process .Capabilities .Inheritable = append (g .spec .Process .Capabilities .Inheritable , cp )
1023
1077
}
1024
1078
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
+
1025
1091
var foundPermitted bool
1026
1092
for _ , cap := range g .spec .Process .Capabilities .Permitted {
1027
1093
if strings .ToUpper (cap ) == cp {
@@ -1033,57 +1099,79 @@ func (g *Generator) AddProcessCapability(c string) error {
1033
1099
g .spec .Process .Capabilities .Permitted = append (g .spec .Process .Capabilities .Permitted , cp )
1034
1100
}
1035
1101
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 {
1038
1112
if strings .ToUpper (cap ) == cp {
1039
- foundAmbient = true
1040
- break
1113
+ g .spec .Process .Capabilities .Ambient = removeFunc (g .spec .Process .Capabilities .Ambient , i )
1041
1114
}
1042
1115
}
1043
- if ! foundAmbient {
1044
- g .spec .Process .Capabilities .Ambient = append (g .spec .Process .Capabilities .Ambient , cp )
1045
- }
1046
1116
1047
- return nil
1117
+ return validate . CapValid ( cp , false )
1048
1118
}
1049
1119
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 {
1052
1122
cp := strings .ToUpper (c )
1053
1123
1054
1124
g .initSpecProcessCapabilities ()
1055
1125
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
-
1062
1126
for i , cap := range g .spec .Process .Capabilities .Bounding {
1063
1127
if strings .ToUpper (cap ) == cp {
1064
1128
g .spec .Process .Capabilities .Bounding = removeFunc (g .spec .Process .Capabilities .Bounding , i )
1065
1129
}
1066
1130
}
1067
1131
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
+
1068
1141
for i , cap := range g .spec .Process .Capabilities .Effective {
1069
1142
if strings .ToUpper (cap ) == cp {
1070
1143
g .spec .Process .Capabilities .Effective = removeFunc (g .spec .Process .Capabilities .Effective , i )
1071
1144
}
1072
1145
}
1073
1146
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
+
1074
1159
for i , cap := range g .spec .Process .Capabilities .Inheritable {
1075
1160
if strings .ToUpper (cap ) == cp {
1076
1161
g .spec .Process .Capabilities .Inheritable = removeFunc (g .spec .Process .Capabilities .Inheritable , i )
1077
1162
}
1078
1163
}
1079
1164
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
+ }
1085
1167
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 {
1087
1175
if strings .ToUpper (cap ) == cp {
1088
1176
g .spec .Process .Capabilities .Ambient = removeFunc (g .spec .Process .Capabilities .Ambient , i )
1089
1177
}
0 commit comments