mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-17 23:15:26 +00:00
39 lines
829 B
Go
39 lines
829 B
Go
package ldap
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func DecodeSID(s string) string {
|
|
b := []byte(s)
|
|
revisionLvl := int(b[0])
|
|
subAuthorityCount := int(b[1]) & 0xFF
|
|
|
|
var authority int
|
|
for i := 2; i <= 7; i++ {
|
|
authority = authority | int(b[i])<<(8*(5-(i-2)))
|
|
}
|
|
|
|
var size = 4
|
|
var offset = 8
|
|
var subAuthorities []int
|
|
for i := 0; i < subAuthorityCount; i++ {
|
|
var subAuthority int
|
|
for k := 0; k < size; k++ {
|
|
subAuthority = subAuthority | (int(b[offset+k])&0xFF)<<(8*k)
|
|
}
|
|
subAuthorities = append(subAuthorities, subAuthority)
|
|
offset += size
|
|
}
|
|
|
|
var builder strings.Builder
|
|
builder.WriteString("S-")
|
|
builder.WriteString(fmt.Sprintf("%d-", revisionLvl))
|
|
builder.WriteString(fmt.Sprintf("%d", authority))
|
|
for _, v := range subAuthorities {
|
|
builder.WriteString(fmt.Sprintf("-%d", v))
|
|
}
|
|
return builder.String()
|
|
}
|