зеркало из https://github.com/golang/sys.git
windows: make SID.String() conform to the String interface
This function shouldn't return an error. Like other String() functions everywhere in Golang, this should instead return empty or a token value during an error, so that it can be passed to %v and similar. Also, allow for SID strings of maximum size. Change-Id: Ib6d8407f8ad0bdabcb22c31b8f387594f2ea7672 Reviewed-on: https://go-review.googlesource.com/c/sys/+/196799 Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
Родитель
2dccfee4fd
Коммит
0a153f010e
|
@ -227,16 +227,15 @@ func LookupSID(system, account string) (sid *SID, domain string, accType uint32,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// String converts SID to a string format
|
// String converts SID to a string format suitable for display, storage, or transmission.
|
||||||
// suitable for display, storage, or transmission.
|
func (sid *SID) String() string {
|
||||||
func (sid *SID) String() (string, error) {
|
|
||||||
var s *uint16
|
var s *uint16
|
||||||
e := ConvertSidToStringSid(sid, &s)
|
e := ConvertSidToStringSid(sid, &s)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return "", e
|
return ""
|
||||||
}
|
}
|
||||||
defer LocalFree((Handle)(unsafe.Pointer(s)))
|
defer LocalFree((Handle)(unsafe.Pointer(s)))
|
||||||
return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]), nil
|
return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(s))[:])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Len returns the length, in bytes, of a valid security identifier SID.
|
// Len returns the length, in bytes, of a valid security identifier SID.
|
||||||
|
|
|
@ -99,12 +99,8 @@ func TestCreateWellKnownSid(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Unable to create well known sid for administrators: %v", err)
|
t.Fatalf("Unable to create well known sid for administrators: %v", err)
|
||||||
}
|
}
|
||||||
sidStr, err := sid.String()
|
if got, want := sid.String(), "S-1-5-32-544"; got != want {
|
||||||
if err != nil {
|
t.Fatalf("Builtin Administrators SID = %s, want %s", got, want)
|
||||||
t.Fatalf("Unable to convert sid into string: %v", err)
|
|
||||||
}
|
|
||||||
if sidStr != "S-1-5-32-544" {
|
|
||||||
t.Fatalf("Expecting administrators to be S-1-5-32-544, but found %s instead", sidStr)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,8 +275,7 @@ func TestSddlConversion(t *testing.T) {
|
||||||
t.Fatal("Invalid security descriptor owner")
|
t.Fatal("Invalid security descriptor owner")
|
||||||
}
|
}
|
||||||
if !sdOwner.IsWellKnown(windows.WinBuiltinAdministratorsSid) {
|
if !sdOwner.IsWellKnown(windows.WinBuiltinAdministratorsSid) {
|
||||||
got, _ := sdOwner.String()
|
t.Fatalf("Owner = %q; want S-1-5-32-544", sdOwner)
|
||||||
t.Fatalf("Owner = %q; want S-1-5-32-544", got)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче