package pac
import (
"bytes"
"fmt"
"github.com/jcmturner/rpc/v2/mstypes"
"github.com/jcmturner/rpc/v2/ndr"
)
const (
USERFLAG_GUEST = 31
USERFLAG_NO_ENCRYPTION_AVAILABLE = 30
USERFLAG_LAN_MANAGER_KEY = 28
USERFLAG_SUB_AUTH = 25
USERFLAG_EXTRA_SIDS = 26
USERFLAG_MACHINE_ACCOUNT = 24
USERFLAG_DC_NTLM2 = 23
USERFLAG_RESOURCE_GROUPIDS = 22
USERFLAG_PROFILEPATH = 21
USERFLAG_NTLM2_NTCHALLENGERESP = 20
USERFLAG_LM2_LMCHALLENGERESP = 19
USERFLAG_AUTH_LMCHALLENGERESP_KEY_NTCHALLENGERESP = 18
)
type KerbValidationInfo struct {
LogOnTime mstypes .FileTime
LogOffTime mstypes .FileTime
KickOffTime mstypes .FileTime
PasswordLastSet mstypes .FileTime
PasswordCanChange mstypes .FileTime
PasswordMustChange mstypes .FileTime
EffectiveName mstypes .RPCUnicodeString
FullName mstypes .RPCUnicodeString
LogonScript mstypes .RPCUnicodeString
ProfilePath mstypes .RPCUnicodeString
HomeDirectory mstypes .RPCUnicodeString
HomeDirectoryDrive mstypes .RPCUnicodeString
LogonCount uint16
BadPasswordCount uint16
UserID uint32
PrimaryGroupID uint32
GroupCount uint32
GroupIDs []mstypes .GroupMembership `ndr:"pointer,conformant"`
UserFlags uint32
UserSessionKey mstypes .UserSessionKey
LogonServer mstypes .RPCUnicodeString
LogonDomainName mstypes .RPCUnicodeString
LogonDomainID mstypes .RPCSID `ndr:"pointer"`
Reserved1 [2 ]uint32
UserAccountControl uint32
SubAuthStatus uint32
LastSuccessfulILogon mstypes .FileTime
LastFailedILogon mstypes .FileTime
FailedILogonCount uint32
Reserved3 uint32
SIDCount uint32
ExtraSIDs []mstypes .KerbSidAndAttributes `ndr:"pointer,conformant"`
ResourceGroupDomainSID mstypes .RPCSID `ndr:"pointer"`
ResourceGroupCount uint32
ResourceGroupIDs []mstypes .GroupMembership `ndr:"pointer,conformant"`
}
func (k *KerbValidationInfo ) Unmarshal (b []byte ) (err error ) {
dec := ndr .NewDecoder (bytes .NewReader (b ))
err = dec .Decode (k )
if err != nil {
err = fmt .Errorf ("error unmarshaling KerbValidationInfo: %v" , err )
}
return
}
func (k *KerbValidationInfo ) GetGroupMembershipSIDs () []string {
var g []string
lSID := k .LogonDomainID .String ()
for i := range k .GroupIDs {
g = append (g , fmt .Sprintf ("%s-%d" , lSID , k .GroupIDs [i ].RelativeID ))
}
for _ , s := range k .ExtraSIDs {
var exists = false
for _ , es := range g {
if es == s .SID .String () {
exists = true
break
}
}
if !exists {
g = append (g , s .SID .String ())
}
}
for _ , r := range k .ResourceGroupIDs {
var exists = false
s := fmt .Sprintf ("%s-%d" , k .ResourceGroupDomainSID .String (), r .RelativeID )
for _ , es := range g {
if es == s {
exists = true
break
}
}
if !exists {
g = append (g , s )
}
}
return g
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .