| // +build linux,selinux |
| |
| package selinux_test |
| |
| import ( |
| "os" |
| "testing" |
| |
| "github.com/opencontainers/runc/libcontainer/selinux" |
| ) |
| |
| func TestSetfilecon(t *testing.T) { |
| if selinux.SelinuxEnabled() { |
| tmp := "selinux_test" |
| con := "system_u:object_r:bin_t:s0" |
| out, _ := os.OpenFile(tmp, os.O_WRONLY|os.O_CREATE, 0) |
| out.Close() |
| err := selinux.Setfilecon(tmp, con) |
| if err != nil { |
| t.Log("Setfilecon failed") |
| t.Fatal(err) |
| } |
| filecon, err := selinux.Getfilecon(tmp) |
| if err != nil { |
| t.Log("Getfilecon failed") |
| t.Fatal(err) |
| } |
| if con != filecon { |
| t.Fatal("Getfilecon failed, returned %s expected %s", filecon, con) |
| } |
| |
| os.Remove(tmp) |
| } |
| } |
| |
| func TestSELinux(t *testing.T) { |
| var ( |
| err error |
| plabel, flabel string |
| ) |
| |
| if selinux.SelinuxEnabled() { |
| t.Log("Enabled") |
| plabel, flabel = selinux.GetLxcContexts() |
| t.Log(plabel) |
| t.Log(flabel) |
| selinux.FreeLxcContexts(plabel) |
| plabel, flabel = selinux.GetLxcContexts() |
| t.Log(plabel) |
| t.Log(flabel) |
| selinux.FreeLxcContexts(plabel) |
| t.Log("getenforce ", selinux.SelinuxGetEnforce()) |
| mode := selinux.SelinuxGetEnforceMode() |
| t.Log("getenforcemode ", mode) |
| |
| defer selinux.SelinuxSetEnforce(mode) |
| if err := selinux.SelinuxSetEnforce(selinux.Enforcing); err != nil { |
| t.Fatalf("enforcing selinux failed: %v", err) |
| } |
| if err := selinux.SelinuxSetEnforce(selinux.Permissive); err != nil { |
| t.Fatalf("setting selinux mode to permissive failed: %v", err) |
| } |
| selinux.SelinuxSetEnforce(mode) |
| |
| pid := os.Getpid() |
| t.Logf("PID:%d MCS:%s\n", pid, selinux.IntToMcs(pid, 1023)) |
| err = selinux.Setfscreatecon("unconfined_u:unconfined_r:unconfined_t:s0") |
| if err == nil { |
| t.Log(selinux.Getfscreatecon()) |
| } else { |
| t.Log("setfscreatecon failed", err) |
| t.Fatal(err) |
| } |
| err = selinux.Setfscreatecon("") |
| if err == nil { |
| t.Log(selinux.Getfscreatecon()) |
| } else { |
| t.Log("setfscreatecon failed", err) |
| t.Fatal(err) |
| } |
| t.Log(selinux.Getpidcon(1)) |
| } else { |
| t.Log("Disabled") |
| } |
| } |