123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package mstypes
- import (
- "bytes"
- "errors"
- "gopkg.in/jcmturner/rpc.v1/ndr"
- )
- // Compression format assigned numbers.
- const (
- CompressionFormatNone uint16 = 0
- CompressionFormatLZNT1 uint16 = 2
- CompressionFormatXPress uint16 = 3
- CompressionFormatXPressHuff uint16 = 4
- )
- // ClaimsSourceTypeAD https://msdn.microsoft.com/en-us/library/hh553809.aspx
- const ClaimsSourceTypeAD uint16 = 1
- // Claim Type assigned numbers
- const (
- ClaimTypeIDInt64 uint16 = 1
- ClaimTypeIDUInt64 uint16 = 2
- ClaimTypeIDString uint16 = 3
- ClaimsTypeIDBoolean uint16 = 6
- )
- // ClaimsBlob implements https://msdn.microsoft.com/en-us/library/hh554119.aspx
- type ClaimsBlob struct {
- Size uint32
- EncodedBlob EncodedBlob
- }
- // EncodedBlob are the bytes of the encoded Claims
- type EncodedBlob []byte
- // Size returns the size of the bytes of the encoded Claims
- func (b EncodedBlob) Size(c interface{}) int {
- cb := c.(ClaimsBlob)
- return int(cb.Size)
- }
- // ClaimsSetMetadata implements https://msdn.microsoft.com/en-us/library/hh554073.aspx
- type ClaimsSetMetadata struct {
- ClaimsSetSize uint32
- ClaimsSetBytes []byte `ndr:"pointer,conformant"`
- CompressionFormat uint16 // Enum see constants for options
- UncompressedClaimsSetSize uint32
- ReservedType uint16
- ReservedFieldSize uint32
- ReservedField []byte `ndr:"pointer,conformant"`
- }
- // ClaimsSet reads the ClaimsSet type from the NDR encoded ClaimsSetBytes in the ClaimsSetMetadata
- func (m *ClaimsSetMetadata) ClaimsSet() (c ClaimsSet, err error) {
- if len(m.ClaimsSetBytes) < 1 {
- err = errors.New("no bytes available for ClaimsSet")
- return
- }
- // TODO switch statement to decompress ClaimsSetBytes
- if m.CompressionFormat != CompressionFormatNone {
- err = errors.New("compressed ClaimsSet not currently supported")
- return
- }
- dec := ndr.NewDecoder(bytes.NewReader(m.ClaimsSetBytes))
- err = dec.Decode(&c)
- return
- }
- // ClaimsSet implements https://msdn.microsoft.com/en-us/library/hh554122.aspx
- type ClaimsSet struct {
- ClaimsArrayCount uint32
- ClaimsArrays []ClaimsArray `ndr:"pointer,conformant"`
- ReservedType uint16
- ReservedFieldSize uint32
- ReservedField []byte `ndr:"pointer,conformant"`
- }
- // ClaimsArray implements https://msdn.microsoft.com/en-us/library/hh536458.aspx
- type ClaimsArray struct {
- ClaimsSourceType uint16
- ClaimsCount uint32
- ClaimEntries []ClaimEntry `ndr:"pointer,conformant"`
- }
- // ClaimEntry is a NDR union that implements https://msdn.microsoft.com/en-us/library/hh536374.aspx
- type ClaimEntry struct {
- ID string `ndr:"pointer,conformant,varying"`
- Type uint16 `ndr:"unionTag"`
- TypeInt64 ClaimTypeInt64 `ndr:"unionField"`
- TypeUInt64 ClaimTypeUInt64 `ndr:"unionField"`
- TypeString ClaimTypeString `ndr:"unionField"`
- TypeBool ClaimTypeBoolean `ndr:"unionField"`
- }
- // SwitchFunc is the ClaimEntry union field selection function
- func (u ClaimEntry) SwitchFunc(_ interface{}) string {
- switch u.Type {
- case ClaimTypeIDInt64:
- return "TypeInt64"
- case ClaimTypeIDUInt64:
- return "TypeUInt64"
- case ClaimTypeIDString:
- return "TypeString"
- case ClaimsTypeIDBoolean:
- return "TypeBool"
- }
- return ""
- }
- // ClaimTypeInt64 is a claim of type int64
- type ClaimTypeInt64 struct {
- ValueCount uint32
- Value []int64 `ndr:"pointer,conformant"`
- }
- // ClaimTypeUInt64 is a claim of type uint64
- type ClaimTypeUInt64 struct {
- ValueCount uint32
- Value []uint64 `ndr:"pointer,conformant"`
- }
- // ClaimTypeString is a claim of type string
- type ClaimTypeString struct {
- ValueCount uint32
- Value []LPWSTR `ndr:"pointer,conformant"`
- }
- // ClaimTypeBoolean is a claim of type bool
- type ClaimTypeBoolean struct {
- ValueCount uint32
- Value []bool `ndr:"pointer,conformant"`
- }
|