private bool PreMembershipUpdate() { this.recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(false, ConsistencyMode.IgnoreInvalid, this.mailboxSession.GetADSessionSettings(), 106, "PreMembershipUpdate", "f:\\15.00.1497\\sources\\dev\\UnifiedGroups\\src\\UnifiedGroups\\GroupMailboxAccessLayer\\Commands\\GroupMailboxMembershipUpdater.cs"); this.groupObject = this.recipientSession.FindADUserByObjectId(this.mailboxSession.MailboxOwner.ObjectId); if (this.groupObject == null) { GroupMailboxMembershipUpdater.Tracer.TraceError <string>((long)this.GetHashCode(), "PreMembershipUpdate: Unable to locate the AD object for the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()); return(false); } if (this.groupObject.RecipientTypeDetails != RecipientTypeDetails.GroupMailbox) { GroupMailboxMembershipUpdater.Tracer.TraceError <string>((long)this.GetHashCode(), "PreMembershipUpdate: The mailbox {0} is not of type group mailbox", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()); return(false); } GroupMailboxMembershipUpdater.Tracer.TraceDebug <string>((long)this.GetHashCode(), "PreMembershipUpdate: Located the AD object of the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()); this.previousExternalMemberUser = new ExternalUser(this.mailboxSession.DisplayName, this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(), SmtpAddress.Parse(this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()), GroupMailboxMembershipUpdater.EarlierGroupMailboxMemberAccessSecurityIdentifier); this.currentExternalMemberUser = ExternalUser.CreateExternalUserForGroupMailbox(this.mailboxSession.DisplayName, "Member@local", this.mailboxSession.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Member); this.currentExternalOwnerUser = ExternalUser.CreateExternalUserForGroupMailbox(this.mailboxSession.DisplayName, "Owner@local", this.mailboxSession.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Owner); using (ExternalUserCollection externalUsers = this.mailboxSession.GetExternalUsers()) { if (!this.AddToExternalUserCollection(externalUsers, this.previousExternalMemberUser) || !this.AddToExternalUserCollection(externalUsers, this.currentExternalMemberUser) || !this.AddToExternalUserCollection(externalUsers, this.currentExternalOwnerUser)) { GroupMailboxMembershipUpdater.Tracer.TraceError <string>((long)this.GetHashCode(), "PreMembershipUpdate: Unable to update external user collection to the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()); return(false); } GroupMailboxMembershipUpdater.Tracer.TraceDebug <string>((long)this.GetHashCode(), "PreMembershipUpdate: Updated external user collection of the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()); } return(true); }
private void SetFolderPermissions() { ExternalUser externalUser = ExternalUser.CreateExternalUserForGroupMailbox(this.MailboxPrincipal.MailboxInfo.DisplayName, "Member@local", this.MailboxPrincipal.MailboxInfo.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Member); ExternalUser externalUser2 = ExternalUser.CreateExternalUserForGroupMailbox(this.MailboxPrincipal.MailboxInfo.DisplayName, "Owner@local", this.MailboxPrincipal.MailboxInfo.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Owner); using (ExternalUserCollection externalUsers = this.mailboxSession.GetExternalUsers()) { if (!externalUsers.Contains(externalUser)) { externalUsers.Add(externalUser); } if (!externalUsers.Contains(externalUser2)) { externalUsers.Add(externalUser2); } externalUsers.Save(); if (!externalUsers.Contains(externalUser)) { throw new GroupMailboxFailedToAddExternalUserException(Strings.ErrorUnableToAddExternalUser(externalUser.Name)); } if (!externalUsers.Contains(externalUser2)) { throw new GroupMailboxFailedToAddExternalUserException(Strings.ErrorUnableToAddExternalUser(externalUser2.Name)); } this.TraceDebug("Added external member user {0} to external user collection", new object[] { externalUser.Name }); this.TraceDebug("Added external owner user {0} to external user collection", new object[] { externalUser2.Name }); } PermissionSecurityPrincipal userSecurityPrincipal = new PermissionSecurityPrincipal(externalUser); PermissionSecurityPrincipal userSecurityPrincipal2 = new PermissionSecurityPrincipal(externalUser2); int num = 0; List <PermissionEntry> list = new List <PermissionEntry>(3); var array = new < > f__AnonymousType0 <DefaultFolderType, MemberRights, MemberRights>[] { new { Folder = DefaultFolderType.MailboxAssociation, OwnerPermission = GroupMailboxPermissionHandler.MailboxAssociationPermission, MemberPermission = GroupMailboxPermissionHandler.MailboxAssociationPermission }, new { Folder = DefaultFolderType.SearchFolders, OwnerPermission = (GroupMailboxPermissionHandler.SearchFolderPermission | GroupMailboxPermissionHandler.OwnerSpecificPermission), MemberPermission = GroupMailboxPermissionHandler.SearchFolderPermission }, new { Folder = DefaultFolderType.Calendar, OwnerPermission = GroupMailboxPermissionHandler.CalendarFolderPermission, MemberPermission = GroupMailboxPermissionHandler.CalendarFolderPermission } }; list.Add(new PermissionEntry(userSecurityPrincipal2, GroupMailboxPermissionHandler.ConfigurationFolderPermission)); int num2; GroupMailboxPermissionHandler.AssignMemberRight(this.mailboxSession, list, DefaultFolderType.Configuration, out num2); num += num2; var array2 = array; for (int i = 0; i < array2.Length; i++) { var <> f__AnonymousType = array2[i]; list.Clear(); list.Add(new PermissionEntry(userSecurityPrincipal2, <> f__AnonymousType.OwnerPermission)); list.Add(new PermissionEntry(userSecurityPrincipal, <> f__AnonymousType.MemberPermission)); if (!GroupMailboxPermissionHandler.AssignMemberRight(this.mailboxSession, list, <> f__AnonymousType.Folder, out num2)) { throw new GroupMailboxFailedToConfigureMailboxException(Strings.ErrorUnableToConfigureMailbox(< > f__AnonymousType.Folder.ToString(), this.MailboxPrincipal.MailboxInfo.DisplayName)); } num += num2; } this.report.FoldersPrivilegedCount = num; this.mailboxSession.Mailbox[MailboxSchema.GroupMailboxPermissionsVersion] = GroupMailboxPermissionHandler.GroupMailboxPermissionVersion; this.mailboxSession.Mailbox.Save(); this.mailboxSession.Mailbox.Load(); }