access_windows_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //go:build windows
  2. package localapi
  3. import (
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. "golang.org/x/sys/windows"
  8. )
  9. // TestLookupGroupIDOnWindows: an account name resolves to its SID, a SID written out
  10. // is accepted as it is, and an account the host does not know is reported.
  11. func TestLookupGroupIDOnWindows(t *testing.T) {
  12. users, err := windows.CreateWellKnownSid(windows.WinBuiltinUsersSid)
  13. require.NoError(t, err)
  14. got, err := lookupGroupID("Users")
  15. require.NoError(t, err)
  16. assert.Equal(t, users.String(), got)
  17. got, err = lookupGroupID(users.String())
  18. require.NoError(t, err)
  19. assert.Equal(t, users.String(), got)
  20. _, err = lookupGroupID("no-such-account-nebula-test")
  21. require.ErrorContains(t, err, "does not exist")
  22. }
  23. // TestSDDLAdmitsTheGroup: the descriptor is the owner, SYSTEM and Administrators with
  24. // full access, plus the group with what a client needs and nothing generic, so a
  25. // member cannot create an instance of the pipe; see pipeClientAccess.
  26. func TestSDDLAdmitsTheGroup(t *testing.T) {
  27. sddl, err := sddlFor(ownerOnly())
  28. require.NoError(t, err)
  29. assert.NotContains(t, sddl, "S-1-5-32-545")
  30. sddl, err = sddlFor(Access{Mode: groupSocketMode, Group: &Group{Name: "Users", ID: "S-1-5-32-545"}})
  31. require.NoError(t, err)
  32. assert.Contains(t, sddl, "(A;;GA;;;SY)(A;;GA;;;BA)(A;;0x120083;;;S-1-5-32-545)")
  33. assert.Zero(t, pipeClientAccess&windows.FILE_APPEND_DATA, "FILE_APPEND_DATA is FILE_CREATE_PIPE_INSTANCE on a pipe")
  34. assert.Zero(t, pipeClientAccess&(windows.GENERIC_READ|windows.GENERIC_WRITE|windows.GENERIC_ALL))
  35. }