internal static bool Parse(KerberosAuthorizationDataPACEntryType type, byte[] data, out KerberosAuthorizationDataPACEntry entry) { entry = null; try { var set = ClaimSetMetadataParser.Decode(new NdrPickledType(data)); if (!set.HasValue || set.Value.ClaimsSet == null || set.Value.usCompressionFormat != 0) { return(false); } var claims = ClaimSetParser.Decode(new NdrPickledType(set.Value.ClaimsSet)); if (!claims.HasValue || claims.Value.ClaimsArrays == null) { return(false); } List <KerberosClaimsArray> claims_array = new List <KerberosClaimsArray>(); foreach (var claim in claims.Value.ClaimsArrays.GetValue()) { KerberosClaimsSource source = (KerberosClaimsSource)claim.usClaimsSourceType.Value; claims_array.Add(new KerberosClaimsArray(source, claim.ClaimEntries.GetValue().Select(ConvertToClaim))); } entry = new KerberosAuthorizationDataPACClaimSet(type, data, claims_array.AsReadOnly()); return(true); } catch { return(false); } }
internal KerberosClaimsArray(KerberosClaimsSource source, IEnumerable <ClaimSecurityAttribute> claims) { Source = source; Claims = claims.ToList().AsReadOnly(); }