Beispiel #1
0
        public QbservableServiceOptions(QbservableServiceOptions clone)
        {
            Contract.Requires(clone != null);
            Contract.Ensures(!IsFrozen);

            sendServerErrorsToClients = clone.sendServerErrorsToClients;
            enableDuplex = clone.enableDuplex;
            allowExpressionsUnrestricted = clone.allowExpressionsUnrestricted;
            expressionOptions            = clone.expressionOptions;
            evaluationContext            = clone.evaluationContext;
        }
        protected override Expression VisitNew(NewExpression node)
        {
            var type = node.Constructor.DeclaringType;

            if (!Context.IsKnownType(type))
            {
                throw new ExpressionSecurityException("Type \"" + type + "\" is not permitted.");
            }

            if (!Options.HasFlag(ExpressionOptions.AllowConstructors) &&
                !type.GetIsPrimitive() &&
                !ServiceEvaluationContext.IsExtendedPrimitiveType(type))
            {
                throw new ExpressionSecurityException("Constructors are not permitted.");
            }

            return(base.VisitNew(node));
        }
Beispiel #3
0
        public SecurityExpressionVisitor(QbservableServiceOptions serviceOptions)
        {
            this.options = serviceOptions.ExpressionOptions;
            this.context = serviceOptions.EvaluationContext;

            if (options.HasFlag(ExpressionOptions.AllowTypeTests) &&
                options.HasFlag(ExpressionOptions.AllowExplicitConversions))
            {
                context.EnsureHasKnownOperator("Cast");
                context.EnsureHasKnownOperator("OfType");
            }

            if (options.HasFlag(ExpressionOptions.AllowCatchBlocks))
            {
                context.EnsureHasKnownOperator("Catch");
                context.EnsureHasKnownOperator("OnErrorResumeNext");
                context.EnsureHasKnownOperator("Retry");
            }
        }
        public SecurityExpressionVisitor(QbservableServiceOptions serviceOptions)
        {
            Contract.Requires(serviceOptions != null);

            Options = serviceOptions.ExpressionOptions;
            Context = serviceOptions.EvaluationContext;

            if (Options.HasFlag(ExpressionOptions.AllowTypeTests) &&
                Options.HasFlag(ExpressionOptions.AllowExplicitConversions))
            {
                Context.EnsureHasKnownOperator("Cast");
                Context.EnsureHasKnownOperator("OfType");
            }

            if (Options.HasFlag(ExpressionOptions.AllowCatchBlocks))
            {
                Context.EnsureHasKnownOperator("Catch");
                Context.EnsureHasKnownOperator("OnErrorResumeNext");
                Context.EnsureHasKnownOperator("Retry");
            }
        }