Skip to content

Commit 0eae9d8

Browse files
author
zhouhao
committed
validate: increase OS validation for special cases
Signed-off-by: zhouhao <[email protected]>
1 parent 868323a commit 0eae9d8

File tree

1 file changed

+54
-30
lines changed

1 file changed

+54
-30
lines changed

validate/validate.go

Lines changed: 54 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -273,47 +273,71 @@ func (v *Validator) CheckProcess() (msgs []string) {
273273
}
274274
}
275275

276-
var caps []string
276+
msgs = append(msgs, v.CheckCapablities()...)
277+
msgs = append(msgs, v.CheckRlimits()...)
277278

278-
for _, cap := range process.Capabilities.Bounding {
279-
caps = append(caps, cap)
280-
}
281-
for _, cap := range process.Capabilities.Effective {
282-
caps = append(caps, cap)
283-
}
284-
for _, cap := range process.Capabilities.Inheritable {
285-
caps = append(caps, cap)
286-
}
287-
for _, cap := range process.Capabilities.Permitted {
288-
caps = append(caps, cap)
289-
}
290-
for _, cap := range process.Capabilities.Ambient {
291-
caps = append(caps, cap)
292-
}
279+
if v.spec.Platform.OS == "linux" {
293280

294-
for _, capability := range caps {
295-
if err := CapValid(capability, v.HostSpecific); err != nil {
296-
msgs = append(msgs, fmt.Sprintf("capability %q is not valid, man capabilities(7)", capability))
281+
if len(process.ApparmorProfile) > 0 {
282+
profilePath := filepath.Join(v.bundlePath, v.spec.Root.Path, "/etc/apparmor.d", process.ApparmorProfile)
283+
_, err := os.Stat(profilePath)
284+
if err != nil {
285+
msgs = append(msgs, err.Error())
286+
}
297287
}
298288
}
299289

300-
for index, rlimit := range process.Rlimits {
301-
if err := rlimitValid(rlimit); err != nil {
302-
msgs = append(msgs, err.Error())
290+
return
291+
}
292+
293+
func (v *Validator) CheckCapablities() (msgs []string) {
294+
process := v.spec.Process
295+
if v.spec.Platform.OS == "linux" {
296+
var caps []string
297+
298+
for _, cap := range process.Capabilities.Bounding {
299+
caps = append(caps, cap)
300+
}
301+
for _, cap := range process.Capabilities.Effective {
302+
caps = append(caps, cap)
303+
}
304+
for _, cap := range process.Capabilities.Inheritable {
305+
caps = append(caps, cap)
303306
}
304-
for i := index + 1; i < len(process.Rlimits); i++ {
305-
if process.Rlimits[index].Type == process.Rlimits[i].Type {
306-
msgs = append(msgs, fmt.Sprintf("rlimit can not contain the same type %q.", process.Rlimits[index].Type))
307+
for _, cap := range process.Capabilities.Permitted {
308+
caps = append(caps, cap)
309+
}
310+
for _, cap := range process.Capabilities.Ambient {
311+
caps = append(caps, cap)
312+
}
313+
314+
for _, capability := range caps {
315+
if err := CapValid(capability, v.HostSpecific); err != nil {
316+
msgs = append(msgs, fmt.Sprintf("capability %q is not valid, man capabilities(7)", capability))
307317
}
308318
}
319+
} else {
320+
logrus.Warnf("process.capabilities validation not yet implemented for OS %q", v.spec.Platform.OS)
309321
}
310322

311-
if len(process.ApparmorProfile) > 0 {
312-
profilePath := filepath.Join(v.bundlePath, v.spec.Root.Path, "/etc/apparmor.d", process.ApparmorProfile)
313-
_, err := os.Stat(profilePath)
314-
if err != nil {
315-
msgs = append(msgs, err.Error())
323+
return
324+
}
325+
326+
func (v *Validator) CheckRlimits() (msgs []string) {
327+
process := v.spec.Process
328+
if v.spec.Platform.OS == "linux" {
329+
for index, rlimit := range process.Rlimits {
330+
if err := rlimitValid(rlimit); err != nil {
331+
msgs = append(msgs, err.Error())
332+
}
333+
for i := index + 1; i < len(process.Rlimits); i++ {
334+
if process.Rlimits[index].Type == process.Rlimits[i].Type {
335+
msgs = append(msgs, fmt.Sprintf("rlimit can not contain the same type %q.", process.Rlimits[index].Type))
336+
}
337+
}
316338
}
339+
} else {
340+
logrus.Warnf("process.rlimits validation not yet implemented for OS %q", v.spec.Platform.OS)
317341
}
318342

319343
return

0 commit comments

Comments
 (0)