Esempio n. 1
0
        private void ValidateReply(Message reply, string replyAction)
        {
            if (base.interoperating)
            {
                if (!base.coordinationService.Security.CheckIdentity(this, reply))
                {
                    throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatReceiveFailureException(Microsoft.Transactions.SR.GetString("ReplyServerCredentialMismatch")));
                }
                if (!base.coordinationService.GlobalAcl.AccessCheckReply(reply, BindingStrings.InteropBindingQName(base.protocolVersion)))
                {
                    throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatReceiveFailureException(Microsoft.Transactions.SR.GetString("ReplyServerIdentityAccessDenied", new object[] { base.to.Uri })));
                }
            }
            string action = reply.Headers.Action;

            if ((reply.IsFault || (action == base.atomicTransactionStrings.FaultAction)) || (action == base.coordinationStrings.FaultAction))
            {
                MessageFault fault = MessageFault.CreateFault(reply, 0x10000);
                throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatFaultException(fault, action));
            }
            if (action != replyAction)
            {
                throw Microsoft.Transactions.Bridge.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WsatReceiveFailureException(Microsoft.Transactions.SR.GetString("InvalidMessageAction", new object[] { action })));
            }
        }
        private bool AccessCheck(AuthorizationContext authzContext, MessageProperties messageProperties, string binding)
        {
            bool result = false;

            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "AccessCheck for binding {0}", binding);
            }
            if (string.Compare(binding, BindingStrings.InteropBindingQName(this.protocolVersion), StringComparison.Ordinal) == 0)
            {
                result = this.AccessCheck(authzContext, messageProperties, ClaimTypes.Thumbprint, this.thumbprints);
            }
            else if ((string.Compare(binding, BindingStrings.NamedPipeBindingQName, StringComparison.Ordinal) == 0) || (string.Compare(binding, BindingStrings.WindowsBindingQName, StringComparison.Ordinal) == 0))
            {
                result = this.AccessCheck(authzContext, messageProperties, ClaimTypes.Sid, this.sids);
            }
            else
            {
                Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Unknown binding " + binding);
            }
            this.TraceAccessCheckResult(result, messageProperties);
            return(result);
        }