Skip to content

Commit 2f0b832

Browse files
authored
Merge pull request #350 from q384566678/linux-check
validate: increase OS validation for special cases
2 parents f2ae88b + 0d2d2ce commit 2f0b832

File tree

1 file changed

+52
-27
lines changed

1 file changed

+52
-27
lines changed

validate/validate.go

Lines changed: 52 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -273,46 +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)
279+
if v.spec.Platform.OS == "linux" {
280+
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+
}
287+
}
292288
}
293289

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))
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)
306+
}
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))
317+
}
297318
}
319+
} else {
320+
logrus.Warnf("process.capabilities validation not yet implemented for OS %q", v.spec.Platform.OS)
298321
}
299322

323+
return
324+
}
325+
326+
func (v *Validator) CheckRlimits() (msgs []string) {
327+
process := v.spec.Process
300328
for index, rlimit := range process.Rlimits {
301-
if err := rlimitValid(rlimit); err != nil {
302-
msgs = append(msgs, err.Error())
303-
}
304329
for i := index + 1; i < len(process.Rlimits); i++ {
305330
if process.Rlimits[index].Type == process.Rlimits[i].Type {
306331
msgs = append(msgs, fmt.Sprintf("rlimit can not contain the same type %q.", process.Rlimits[index].Type))
307332
}
308333
}
309-
}
310334

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())
335+
if v.spec.Platform.OS == "linux" {
336+
if err := rlimitValid(rlimit); err != nil {
337+
msgs = append(msgs, err.Error())
338+
}
339+
} else {
340+
logrus.Warnf("process.rlimits validation not yet implemented for OS %q", v.spec.Platform.OS)
316341
}
317342
}
318343

0 commit comments

Comments
 (0)