Example #1
0
        /// <summary>
        /// Gets or sets a value of a legacy configuration option.
        /// </summary>
        static PhpValue GetSet(IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            var local = config.Get <MsSqlConfiguration>();

            switch (option)
            {
            // local:

            case "mssql.connect_timeout":
                return((PhpValue)StandardPhpOptions.GetSet(ref local.ConnectTimeout, 5, value, action));

            case "mssql.timeout":
                return((PhpValue)StandardPhpOptions.GetSet(ref local.Timeout, 60, value, action));

            case "mssql.batchsize":
                return((PhpValue)StandardPhpOptions.GetSet(ref local.BatchSize, 0, value, action));

            // global:

            case "mssql.max_links":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)StandardPhpOptions.GetSet(ref local.MaxConnections, 0, PhpValue.Null, action));

            case "mssql.secure_connection":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)StandardPhpOptions.GetSet(ref local.NTAuthentication, false, PhpValue.Null, action));
            }

            Debug.Fail("Option '" + option + "' is supported but not implemented.");
            return(PhpValue.Null);
        }
Example #2
0
        internal PhpValue Gsr(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "session.serialize_handler":
                return((PhpValue)GetSet(ref SerializeHandler, "php", value, action));

            case "session.name":
                return((PhpValue)GetSet(ref SessionName, DefaultSessionName, value, action));

            case "session.cookie_lifetime":
                return((PhpValue)GetSet(ref CookieLifetime, 0, value, action));

            case "session.cookie_path":
                return((PhpValue)GetSet(ref CookiePath, "/", value, action));

            case "session.cookie_domain":
                return((PhpValue)GetSet(ref CookieDomain, "", value, action));

            case "session.cookie_secure":
                return((PhpValue)GetSet(ref CookieSecure, false, value, action));

            case "session.cookie_httponly":
                return((PhpValue)GetSet(ref CookieHttpOnly, false, value, action));

            default:
                throw new ArgumentOutOfRangeException(nameof(option));
            }
        }
Example #3
0
        /// <summary>
        /// Gets, sets, or restores a value of a legacy configuration option.
        /// </summary>
        static PhpValue GetSet(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            var local = config.Get <MySqlConfiguration>();

            switch (option)
            {
            // local:

            case "mysql.connect_timeout": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.ConnectTimeout, 0, value, action));

            case "mysql.default_port": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.Port, 3306, value, action));

            case "mysql.default_host": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.Server, null, value, action));

            case "mysql.default_user": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.User, "root", value, action));

            case "mysql.default_password": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.Password, "", value, action));

            case "mysql.default_command_timeout": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.DefaultCommandTimeout, -1, value, action));

            case "mysql.connection_string": return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.ConnectionString, null, value, action));

            // global:

            case "mysql.max_links":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.MaxConnections, -1, value, action));

            case "mysql.max_pool_size":
                return((PhpValue)Pchp.Library.StandardPhpOptions.GetSet(ref local.MaxPoolSize, 100, value, action));
            }

            Debug.Fail("Option '" + option + "' is supported but not implemented.");
            return(PhpValue.Null);
        }
Example #4
0
        /// <summary>
        /// Tries to get or set an option given its PHP name and value.
        /// </summary>
        /// <param name="ctx">Runtime context.</param>
        /// <param name="config">Configuration to be read or set.</param>
        /// <param name="name">The option name.</param>
        /// <param name="value">The option new value if applicable.</param>
        /// <param name="action">The action to be taken.</param>
        /// <param name="error"><B>true</B>, on failure.</param>
        /// <returns>The option old value.</returns>
        /// <exception cref="PhpException">The option not supported (Warning).</exception>
        /// <exception cref="PhpException">The option is read only but action demands write access (Warning).</exception>
        internal static PhpValue TryGetSet(Context ctx, IPhpConfigurationService config, string name, PhpValue value, IniAction action, out bool error)
        {
            Debug.Assert(name != null);
            error = true;

            var def = GetOption(name);

            // option not found:
            if (def.Gsr == null)
            {
                PhpException.Throw(PhpError.Warning, string.Format(Resources.LibResources.unknown_option, name));
                return(PhpValue.Null);
            }

            // the option is known but not supported:
            if ((def.Flags & IniFlags.Supported) == 0)
            {
                PhpException.Throw(PhpError.Warning, string.Format(Resources.LibResources.option_not_supported, name));
                return(PhpValue.Null);
            }

            // the option is global thus cannot be changed:
            if ((def.Flags & IniFlags.Local) == 0 && action != IniAction.Get)
            {
                PhpException.Throw(PhpError.Warning, string.Format(Resources.LibResources.option_readonly, name));
                return(PhpValue.Null);
            }

            error = false;
            return(def.Gsr(ctx, config, name, value, action));
        }
Example #5
0
            /// <summary>
            /// Gets or sets a value of a legacy configuration option.
            /// </summary>
            private static PhpValue GetSet(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
            {
                var local = config.Get <MbConfig>();

                if (local == null)
                {
                    return(PhpValue.Null);
                }

                switch (option)
                {
                //mbstring.language   "neutral"   PHP_INI_ALL Available since PHP 4.3.0.PHP_INI_PERDIR in PHP <= 5.2.6
                //mbstring.detect_order NULL    PHP_INI_ALL Available since PHP 4.0.6.
                //mbstring.http_input "pass"  PHP_INI_ALL Available since PHP 4.0.6.Deprecated in PHP 5.6.0.
                //mbstring.http_output    "pass"  PHP_INI_ALL Available since PHP 4.0.6.Deprecated in PHP 5.6.0.
                //mbstring.script_encoding    NULL PHP_INI_ALL Available since PHP 4.3.0.Removed in PHP 5.4.0.Use zend.script_encoding instead.
                //mbstring.substitute_character NULL    PHP_INI_ALL Available since PHP 4.0.6.

                case "mbstring.func_overload":
                    // "0" PHP_INI_SYSTEM PHP_INI_PERDIR from PHP 4.3 to 5.2.6, otherwise PHP_INI_SYSTEM. Available since PHP 4.2.0.Deprecated in PHP 7.2.0.
                    return((PhpValue)0);

                //mbstring.encoding_translation   "0" PHP_INI_PERDIR Available since PHP 4.3.0.
                //mbstring.strict_detection   "0" PHP_INI_ALL Available since PHP 5.1.2.
                //mbstring.internal_encoding  NULL PHP_INI_ALL Available since PHP 4.0.6.Deprecated in PHP 5.6.0.

                default:
                    break;
                }

                Debug.Fail("Option '" + option + "' is not currently supported.");
                return(PhpValue.Null);
            }
Example #6
0
        static PhpValue GsrCore(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "precision":
                // TODO: this can be set in .NET <see cref="Core.Convert.ToString(double, Context)"/> by specifying "G{precision}", consider performance
                return((PhpValue)15);       // default Double precision in .NET

            case "allow_url_fopen":
                return((PhpValue)GetSet(ref config.Core.AllowUrlFopen, true, value, action));

            case "include_path":
                return((PhpValue)GetSet(ref config.Core.IncludePaths, ".", value, action));

            case "post_max_size":
            case "upload_max_filesize":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)ctx.HttpPhpContext.MaxRequestSize);

            case "docref_root":
                return((PhpValue)GetSet(ref config.Core.docref_root, "", value, action));

            case "docref_ext":
                return((PhpValue)GetSet(ref config.Core.docref_ext, "", value, action));

            case "open_basedir":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)string.Empty);

            default:
                throw new ArgumentException();
            }
        }
Example #7
0
        static PhpValue GsrCore(IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "include_path":
                return((PhpValue)GetSet(ref config.Core.IncludePaths, ".", value, action));

            default:
                throw new ArgumentException();
            }
        }
Example #8
0
        static PhpValue GsrCore(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "precision":
                // TODO: this can be set in .NET <see cref="Core.Convert.ToString(double, Context)"/> by specifying "G{precision}", consider performance
                AssertGet(option, action);
                return((PhpValue)15);       // default Double precision in .NET

            case "register_globals":
                AssertGet(option, action);
                return(PhpValue.False);     // always Off

            case "allow_url_fopen":
                return((PhpValue)GetSet(ref config.Core.AllowUrlFopen, true, value, action));

            case "include_path":
                return((PhpValue)GetSet(ref config.Core.IncludePaths, ".", value, action));

            case "allow_url_include":
                AssertGet(option, action);
                return(PhpValue.False);

            case "disable_functions":
            case "disable_classes":
                AssertGet(option, action);
                return((PhpValue)string.Empty);

            case "memory_limit":
                AssertGet(option, action);
                return((PhpValue)(-1));    // no memory limit

            case "post_max_size":
            case "upload_max_filesize":
                AssertGet(option, action);
                return(ctx.HttpPhpContext != null ? ctx.HttpPhpContext.MaxRequestSize : (8_000_000 /*cli mode, just return something*/));

            case "docref_root":
                return((PhpValue)GetSet(ref config.Core.docref_root, "", value, action));

            case "docref_ext":
                return((PhpValue)GetSet(ref config.Core.docref_ext, "", value, action));

            case "open_basedir":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)string.Empty);

            default:
                throw new ArgumentException();
            }
        }
Example #9
0
            public static PhpValue Gsr(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
            {
                var sessionconfig = config.GetSessionConfiguration();

                if (sessionconfig == null)
                {
                    return(false);
                }

                switch (option)
                {
                case "session.auto_start":
                    if (action != IniAction.Get)
                    {
                        PhpException.ArgumentValueNotSupported(option, action);
                    }
                    return(sessionconfig.AutoStart);

                case "session.save_handler":
                    if (action != IniAction.Get)
                    {
                        PhpException.ArgumentValueNotSupported(option, action);
                    }
                    var handler = ctx.HttpPhpContext?.SessionHandler;
                    return(handler != null ? handler.HandlerName : PhpValue.False);

                case "session.serialize_handler":
                    return(GetSet(ref sessionconfig.SerializeHandler, "php", value, action));

                case "session.name":
                    return(GetSet(ref sessionconfig.SessionName, DefaultSessionName, value, action));

                case "session.cookie_lifetime":
                    return(GetSet(ref sessionconfig.CookieLifetime, 0, value, action));

                case "session.cookie_path":
                    return(GetSet(ref sessionconfig.CookiePath, "/", value, action));

                case "session.cookie_domain":
                    return(GetSet(ref sessionconfig.CookieDomain, "", value, action));

                case "session.cookie_secure":
                    return(GetSet(ref sessionconfig.CookieSecure, false, value, action));

                case "session.cookie_httponly":
                    return(GetSet(ref sessionconfig.CookieHttpOnly, false, value, action));

                default:
                    throw new ArgumentOutOfRangeException(nameof(option));
                }
            }
Example #10
0
        internal PhpValue Gsr(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "session.serialize_handler":
                return((PhpValue)GetSet(ref SerializeHandler, "php", value, action));

            case "session.name":
                return((PhpValue)GetSet(ref SessionName, DefaultSessionName, value, action));

            default:
                throw new ArgumentOutOfRangeException(nameof(option));
            }
        }
Example #11
0
        static PhpValue GsrSession(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            if (action != IniAction.Get)
            {
                PhpException.Throw(PhpError.Warning, "Modifying session options is not supported.");
            }

            switch (option.ToLowerInvariant())
            {
            case "session.serialize_handler":
                return((PhpValue)"php");

            default:
                throw new ArgumentOutOfRangeException(nameof(option));
            }
        }
Example #12
0
        static PhpValue GsrCore(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "include_path":
                return((PhpValue)GetSet(ref config.Core.IncludePaths, ".", value, action));

            case "post_max_size":
            case "upload_max_filesize":
                Debug.Assert(action == IniAction.Get);
                return((PhpValue)ctx.HttpPhpContext.MaxRequestSize);

            default:
                throw new ArgumentException();
            }
        }
Example #13
0
            /// <summary>
            /// Gets or sets a value of a legacy configuration option.
            /// </summary>
            private static PhpValue GetSet(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
            {
                var local = config.Get <Config>();

                if (local == null)
                {
                    return(PhpValue.False);
                }

                return(option switch
                {
                    "highlight.comment" => StandardPhpOptions.GetSet(ref local.comment, null, value, action),
                    "highlight.default" => StandardPhpOptions.GetSet(ref local.@default, null, value, action),
                    "highlight.keyword" => StandardPhpOptions.GetSet(ref local.keyword, null, value, action),
                    "highlight.string" => StandardPhpOptions.GetSet(ref local.@string, null, value, action),
                    "highlight.html" => StandardPhpOptions.GetSet(ref local.html, null, value, action),

                    _ => throw new ArgumentOutOfRangeException(nameof(option)),
                });
Example #14
0
            /// <summary>
            /// Gets, sets, or restores a value of a legacy configuration option.
            /// </summary>
            private static PhpValue GetSet(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
            {
                switch (option)
                {
                case "zlib.output_compression":
                    Debug.Assert(action == IniAction.Get, "Setting zlib.output_compression is not currently implemented.");
                    return(PhpValue.False);

                case "zlib.output_compression_level":
                    Debug.Assert(action == IniAction.Get, "Setting zlib.output_compression_level is not currently implemented.");
                    return(PhpValue.Create(-1));

                case "zlib.output_handler":
                    Debug.Assert(action == IniAction.Get, "Setting zlib.output_handler is not currently implemented.");
                    return(PhpValue.Create(""));
                }

                Debug.Fail("Option '" + option + "' is not currently supported.");
                return(PhpValue.Null);
            }
Example #15
0
            /// <summary>
            /// Gets or sets a value of a legacy configuration option.
            /// </summary>
            private static PhpValue GetSet(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
            {
                var local = config.Get <IconvConfig>();

                if (local == null)
                {
                    return(PhpValue.False);
                }

                switch (option)
                {
                case "iconv.input_encoding":
                    return(StandardPhpOptions.GetSet(ref local.InputEncoding, "ISO-8859-1", value, action));

                case "iconv.internal_encoding":
                    return(StandardPhpOptions.GetSet(ref local.InternalEncoding, "ISO-8859-1", value, action));

                case "iconv.output_encoding":
                    return(StandardPhpOptions.GetSet(ref local.OutputEncoding, "ISO-8859-1", value, action));
                }

                return(PhpValue.False);
            }
Example #16
0
        static PhpValue GsrMail(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option.ToLowerInvariant())
            {
            case "smtp":
                return((PhpValue)GetSet(ref config.Core.SmtpServer, null, value, action));

            case "smtp_port":
                return((PhpValue)GetSet(ref config.Core.SmtpPort, 25, value, action));

            case "sendmail_from":
                return((PhpValue)GetSet(ref config.Core.DefaultFromHeader, null, value, action));

            case "mail.add_x_header":
                return((PhpValue)GetSet(ref config.Core.AddXHeader, false, value, action));

            case "mail.force_extra_parameters":
                return((PhpValue)GetSet(ref config.Core.ForceExtraMailParameters, null, value, action));

            default:
                throw new ArgumentOutOfRangeException(nameof(option));
            }
        }
Example #17
0
        static PhpValue GetSetOption(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            var local = config.Get <BCMathConfig>();

            if (local == null)
            {
                return(PhpValue.Null);
            }

            if (string.Equals(option, BCMathOptions.Scale))
            {
                var oldvalue = local.Scale;
                if (action == IniAction.Set)
                {
                    local.Scale = Math.Max(0, (int)value);
                }
                return(oldvalue);
            }
            else
            {
                Debug.Fail("Option '" + option + "' is not currently supported.");
                return(PhpValue.Null);
            }
        }
Example #18
0
            /// <summary>
            /// Gets or sets a value of a legacy configuration option.
            /// </summary>
            private static PhpValue GetSet(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
            {
                var local = config.Get <IconvConfig>();

                if (local == null)
                {
                    return(PhpValue.Null);
                }

                switch (option)
                {
                case "iconv.input_encoding":
                    return((PhpValue)StandardPhpOptions.GetSet(ref local.InputEncoding, "ISO-8859-1", value, action));

                case "iconv.internal_encoding":
                    return((PhpValue)StandardPhpOptions.GetSet(ref local.InternalEncoding, "ISO-8859-1", value, action));

                case "iconv.output_encoding":
                    return((PhpValue)StandardPhpOptions.GetSet(ref local.OutputEncoding, "ISO-8859-1", value, action));
                }

                Debug.Fail("Option '" + option + "' is not currently supported.");
                return(PhpValue.Null);
            }
Example #19
0
        static PhpValue GsrCore(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
        {
            switch (option)
            {
            case "precision":
                // CONSIDER: this can be set in our Context.InvariantNumberFormatInfo ?
                AssertGet(option, action);
                return(15);       // default Double precision in .NET

            case "register_globals":
                AssertGet(option, action);
                return(PhpValue.False);     // always Off

            case "allow_url_fopen":
                return(GetSet(ref config.Core.AllowUrlFopen, true, value, action));

            case "include_path":
                return(GetSet(ref config.Core.IncludePaths, ".", value, action));

            case "allow_url_include":
                AssertGet(option, action);
                return(PhpValue.False);

            case "disable_functions":
            case "disable_classes":
                AssertGet(option, action);
                return(string.Empty);

            case "file_uploads":
                AssertGet(option, action);
                return(PhpValue.True);

            //case "max_file_uploads":
            //    return 20;

            case "memory_limit":
                AssertGet(option, action);
                return(-1);    // no memory limit

            case "post_max_size":
            case "upload_max_filesize":
                AssertGet(option, action);
                return(ctx.HttpPhpContext != null ? ctx.HttpPhpContext.MaxRequestSize : (16_000_000 /*cli mode, just return something*/));

            case "docref_root":
                return(GetSet(ref config.Core.docref_root, "", value, action));

            case "docref_ext":
                return(GetSet(ref config.Core.docref_ext, "", value, action));

            case "open_basedir":
                AssertGet(option, action);
                return(string.Empty);

            case "max_execution_time":
                if (action == IniAction.Set)
                {
                    var oldvalue = config.Core.ExecutionTimeout;
                    ctx.ApplyExecutionTimeout(config.Core.ExecutionTimeout = Math.Max(0, value.ToInt()));
                    return(oldvalue);
                }
                else
                {
                    return(config.Core.ExecutionTimeout);
                }

            default:
                throw new ArgumentException();
            }
        }
Example #20
0
 static PhpValue GsrSession(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action)
 {
     return(config.Get <SessionConfiguration>().Gsr(ctx, config, option, value, action));
 }
Example #21
0
 static SessionConfiguration GetSessionConfiguration(this IPhpConfigurationService config)
 {
     return((SessionConfiguration)config.Get <IPhpSessionConfiguration>());
 }
Example #22
0
 public PhpOptions(IPhpConfigurationService globalconfiguration = null)
 {
     _globalconfiguration = globalconfiguration ?? Context.DefaultPhpConfigurationService.Instance;
 }