private void LoadFrom(MapiAclTableAdapter mapiAclTableAdapter) { IRecipientSession recipientSession = null; ExternalUserCollection disposable = null; AclTableEntry[] all = mapiAclTableAdapter.GetAll(); try { foreach (AclTableEntry aclTableEntry in all) { long memberId = aclTableEntry.MemberId; byte[] memberEntryId = aclTableEntry.MemberEntryId; string memberName = aclTableEntry.MemberName; MemberRights memberRights = aclTableEntry.MemberRights; if (memberId == 0L) { this.defaultMemberPermission = this.permissionSet.CreatePermission(new PermissionSecurityPrincipal(PermissionSecurityPrincipal.SpecialPrincipalType.Default), memberRights, memberId); } else if (memberId == -1L) { this.anonymousMemberPermission = this.permissionSet.CreatePermission(new PermissionSecurityPrincipal(PermissionSecurityPrincipal.SpecialPrincipalType.Anonymous), memberRights, memberId); } else if (memberEntryId != null) { ADParticipantEntryId adparticipantEntryId = mapiAclTableAdapter.TryGetParticipantEntryId(memberEntryId); if (adparticipantEntryId != null) { if (recipientSession == null) { recipientSession = mapiAclTableAdapter.Session.GetADRecipientSession(true, ConsistencyMode.IgnoreInvalid); } ADRecipient adrecipient = null; try { adrecipient = recipientSession.FindByLegacyExchangeDN(adparticipantEntryId.LegacyDN); } catch (DataValidationException) { ExTraceGlobals.StorageTracer.TraceDebug <string, string>(0L, "PermissionTable::PermissionTable. Caught exception from ADSesssion.FindByLegacyExchangeDN when trying to find a recipient from the ACL Table. Recipient name = {0}, LegDN = {1}.", memberName, adparticipantEntryId.LegacyDN); this.AddUnknownEntry(memberName, memberId, memberEntryId, memberRights); goto IL_17E; } if (adrecipient != null) { Permission permission = this.permissionSet.CreatePermission(new PermissionSecurityPrincipal(adrecipient), memberRights, memberId); this.AddPermissionEntry(permission.Principal, permission); } else { ExTraceGlobals.StorageTracer.TraceDebug <string, string>(0L, "PermissionTable::PermissionTable. Did not find the recipient from the ACL table in the AD. Recipient name = {0}, LegDN = {1}.", memberName, adparticipantEntryId.LegacyDN); this.AddUnknownEntry(memberName, memberId, memberEntryId, memberRights); } } else { this.AddNonADEntry(mapiAclTableAdapter, ref disposable, memberName, memberId, memberEntryId, memberRights); } } else { ExTraceGlobals.StorageTracer.TraceDebug <string>(0L, "PermissionTable::PermissionTable. Found a member in the ACL table (other than anonymous and default) without a member entry id. Recipient Name = {0}.", memberName); this.AddUnknownEntry(memberName, memberId, memberEntryId, memberRights); } IL_17E :; } } finally { Util.DisposeIfPresent(disposable); } }