Esempio n. 1
0
 public MessageContext(Folder folder, MessageItem message, StoreSession session, ProxyAddress recipientAddress, ADRecipientCache <TransportMiniRecipient> recipientCache, long mimeSize, MailItemDeliver mailItemDeliver) : base(folder, message, session, recipientAddress, recipientCache, mimeSize, mailItemDeliver)
 {
 }
Esempio n. 2
0
 public static RuleEvaluationContext Create(StoreDriverServer server, Folder folder, MessageItem message, StoreSession session, string recipientAddress, ADRecipientCache <TransportMiniRecipient> recipientCache, long mimeSize, bool processingTestMessage, bool shouldExecuteDisabledAndInErrorRules, MailItemDeliver mailItemDeliver)
 {
     return(new MessageContext(folder, message, session, new SmtpProxyAddress(recipientAddress, true), recipientCache, mimeSize, mailItemDeliver)
     {
         server = server,
         traceFormatter = new TraceFormatter(processingTestMessage),
         ShouldExecuteDisabledAndInErrorRules = shouldExecuteDisabledAndInErrorRules
     });
 }
Esempio n. 3
0
        protected RuleEvaluationContext(Folder folder, MessageItem message, StoreSession session, ProxyAddress recipient, ADRecipientCache <TransportMiniRecipient> recipientCache, long mimeSize, MailItemDeliver mailItemDeliver) : base(folder, message, session, recipient, recipientCache, mimeSize, Microsoft.Exchange.Transport.MailboxRules.RuleConfig.Instance, ExTraceGlobals.MailboxRuleTracer)
        {
            MailboxSession mailboxSession = session as MailboxSession;

            this.initialFolder   = folder;
            this.mailItemDeliver = mailItemDeliver;
            if (mailboxSession != null)
            {
                object obj = mailboxSession.Mailbox.TryGetProperty(MailboxSchema.MailboxOofState);
                if (obj is PropertyError)
                {
                    this.IsOof = mailboxSession.IsMailboxOof();
                }
                else
                {
                    this.IsOof = (bool)obj;
                }
            }
            base.LimitChecker = new StoreDriverLimitChecker(this);
        }
        internal static AccessCheckResult CheckAccessForEmailDelivery(MailItemDeliver mailItemDeliver, Folder mailPublicFolder)
        {
            if (mailItemDeliver == null)
            {
                throw new ArgumentNullException("MailItemDeliver");
            }
            if (mailPublicFolder == null)
            {
                throw new ArgumentNullException("MailPublicFolder");
            }
            if (mailItemDeliver.ReplayItem == null)
            {
                MailPublicFolderPermissionHandler.Diag.TraceError(0L, "ReplayItem for the message appears to be null.");
                return(AccessCheckResult.NotAllowedInternalSystemError);
            }
            if (mailItemDeliver.ReplayItem.From == null)
            {
                MailPublicFolderPermissionHandler.Diag.TraceError(0L, "From attribute of the ReplayItem for the given message appears to be null.");
                return(AccessCheckResult.NotAllowedInternalSystemError);
            }
            AccessCheckResult     accessCheckResult = AccessCheckResult.NotAllowedAuthenticated;
            ClientSecurityContext context           = null;
            bool isAnonymous = false;
            ADRecipientCache <TransportMiniRecipient> recipientCache = mailItemDeliver.MbxTransportMailItem.ADRecipientCache;
            IRecipientSession recipientSession = (recipientCache != null) ? recipientCache.ADSession : null;

            if (recipientSession != null)
            {
                recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(recipientSession.SessionSettings.CurrentOrganizationId), 146, "CheckAccessForEmailDelivery", "f:\\15.00.1497\\sources\\dev\\MailboxTransport\\src\\MailboxTransportDelivery\\StoreDriver\\MailPublicFolderPermissionHandler.cs");
                try
                {
                    GrayException.MapAndReportGrayExceptions(delegate()
                    {
                        Participant from = mailItemDeliver.ReplayItem.From;
                        if (from.RoutingType != "EX")
                        {
                            MailPublicFolderPermissionHandler.Diag.TraceDebug(0L, "Determined the sent user as an anonymous entity");
                            isAnonymous = true;
                            context     = MailPublicFolderPermissionHandler.GetAnonymousClientSecurityContext();
                            MailPublicFolderPermissionHandler.Diag.TraceDebug(0L, "Constructed clientSecurityContext for anonymous user");
                        }
                        else
                        {
                            MailPublicFolderPermissionHandler.Diag.TraceDebug(0L, "Determined the sent user as an authorized entity");
                            byte[] valueOrDefault = from.GetValueOrDefault <byte[]>(ParticipantSchema.ParticipantSID);
                            SecurityIdentifier securityIdentifier = (valueOrDefault == null) ? null : new SecurityIdentifier(valueOrDefault, 0);
                            TransportMiniRecipient data           = recipientCache.FindAndCacheRecipient(ProxyAddress.Parse(mailItemDeliver.MbxTransportMailItem.From.ToString())).Data;
                            if (securityIdentifier == null)
                            {
                                context = MailPublicFolderPermissionHandler.GetUserClientSecurityContext(MailPublicFolderPermissionHandler.EveryoneSID, null);
                            }
                            else if (data == null)
                            {
                                context = MailPublicFolderPermissionHandler.GetUserClientSecurityContext(securityIdentifier, null);
                            }
                            else
                            {
                                context = MailPublicFolderPermissionHandler.GetUserClientSecurityContext(securityIdentifier, recipientSession.GetTokenSids((ADObjectId)data[ADObjectSchema.Id], AssignmentMethod.S4U));
                            }
                            MailPublicFolderPermissionHandler.Diag.TraceDebug(0L, "Constructed clientSecurityContext for user {0}.", new object[]
                            {
                                (data != null) ? data[ADRecipientSchema.PrimarySmtpAddress] : context.UserSid
                            });
                        }
                        if (MailPublicFolderPermissionHandler.CanPostItemsToPublicFolder(mailPublicFolder, context))
                        {
                            accessCheckResult = AccessCheckResult.Allowed;
                            return;
                        }
                        if (isAnonymous)
                        {
                            accessCheckResult = AccessCheckResult.NotAllowedAnonymous;
                        }
                    });
                }
                catch (GrayException ex)
                {
                    string arg = string.Empty;
                    if (ex.InnerException != null)
                    {
                        arg = ex.InnerException.Message;
                    }
                    accessCheckResult = AccessCheckResult.NotAllowedInternalSystemError;
                    MailPublicFolderPermissionHandler.Diag.TraceError <ClientSecurityContext, string>(0L, "Access check failed on ClientSecurityContext {0} with {1}.", context, arg);
                }
                finally
                {
                    if (context != null)
                    {
                        context.Dispose();
                        context = null;
                    }
                }
            }
            return(accessCheckResult);
        }