/// <summary> /// Tries to get, set, or restore an option given its PHP name and value. /// </summary> /// <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 object TryGetSetRestore(string name, object value, IniAction action, out bool error) { Debug.Assert(name != null); error = true; IniOptions.OptionDefinition option = GetOption(name); // option not found: if (option == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_option", name)); return(null); } // the option is known but not supported: if ((option.Flags & IniFlags.Supported) == 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_not_supported", name)); return(null); } // the option is global thus cannot be changed: if ((option.Flags & IniFlags.Local) == 0 && action != IniAction.Get) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_readonly", name)); return(null); } error = false; return(option.Gsr(Configuration.Local, name, value, action)); }
static void AssertGet(string option, IniAction action) { if (action != IniAction.Get) { PhpException.ArgumentValueNotSupported(option, action); } }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { PDOSQLServerLocalConfig local = (PDOSQLServerLocalConfig)config.GetLibraryConfig(PDOSQLServerLibraryDescriptor.Singleton); PDOSQLServerLocalConfig @default = DefaultLocal; PDOSQLServerGlobalConfig global = Global; //switch (option) //{ // // local: // // global: //} Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }
/// <summary> /// Tries to get, set, or restore an option given its PHP name and value. /// </summary> /// <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 object TryGetSetRestore(string name, object value, IniAction action, out bool error) { Debug.Assert(name != null); error = true; IniOptions.OptionDefinition option = GetOption(name); // option not found: if (option == null) { // check for options in native extensions: string result = null; switch (action) { case IniAction.Get: error = !Externals.IniGet(name, out result); break; case IniAction.Set: error = !Externals.IniSet(name, Convert.ObjectToString(value), out result); break; case IniAction.Restore: error = !Externals.IniRestore(name); break; } if (error) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_option", name)); } return(result); } // the option is known but not supported: if ((option.Flags & IniFlags.Supported) == 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_not_supported", name)); return(null); } // the option is global thus cannot be changed: if ((option.Flags & IniFlags.Local) == 0 && action != IniAction.Get) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_readonly", name)); return(null); } error = false; return(option.Gsr(Configuration.Local, name, value, action)); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { SQLiteLocalConfig local = (SQLiteLocalConfig)config.GetLibraryConfig(SQLiteLibraryDescriptor.Singleton); SQLiteLocalConfig @default = DefaultLocal; SQLiteGlobalConfig global = Global; switch (option) { // local: // global: case "sqlite.assoc_case": Debug.Assert(action == IniAction.Get); return PhpIni.GSR(ref global.AssocCase, 0, value, action); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }
/// <summary> /// Gets, sets or restores boolean option. /// </summary> public static object GSR(ref bool option, bool defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = OptionValueToBoolean(value); break; case IniAction.Restore: option = defaultValue; break; } return result; }
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)); } }
/// <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); }
/// <summary> /// Gets or sets option. /// </summary> public static IPhpCallable GetSet(ref IPhpCallable option, IPhpCallable defaultValue, PhpValue newValue, IniAction action) { var oldValue = option; if (action == IniAction.Set) { option = newValue.AsCallable(default(RuntimeTypeHandle)); } return(oldValue); }
/// <summary> /// Tries to get, set, or restore an option given its PHP name and value. /// </summary> /// <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 object TryGetSetRestore(string name, object value, IniAction action, out bool error) { Debug.Assert(name != null); error = true; IniOptions.OptionDefinition option = GetOption(name); // option not found: if (option == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_option", name)); return null; } // the option is known but not supported: if ((option.Flags & IniFlags.Supported) == 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_not_supported", name)); return null; } // the option is global thus cannot be changed: if ((option.Flags & IniFlags.Local) == 0 && action != IniAction.Get) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_readonly", name)); return null; } error = false; return option.Gsr(Configuration.Local, name, value, action); }
internal static object GetSetRestoreCoreOption(LocalConfiguration local, string option, object value, IniAction action) { LocalConfiguration @default = Configuration.DefaultLocal; GlobalConfiguration global = Configuration.Global; ApplicationConfiguration app = Configuration.Application; switch (option) { #region <paths> case "extension_dir": Debug.Assert(action == IniAction.Get); return app.Paths.Libraries; #endregion #region <compiler> case "short_open_tag": Debug.Assert(action == IniAction.Get); return app.Compiler.ShortOpenTags; case "asp_tags": Debug.Assert(action == IniAction.Get); return app.Compiler.AspTags; #endregion #region <error-control> case "html_errors": return GSR(ref local.ErrorControl.HtmlMessages, @default.ErrorControl.HtmlMessages, value, action); case "display_errors": return GSR(ref local.ErrorControl.DisplayErrors, @default.ErrorControl.DisplayErrors, value, action); case "error_append_string": return GSR(ref local.ErrorControl.ErrorAppendString, @default.ErrorControl.ErrorAppendString, value, action); case "error_prepend_string": return GSR(ref local.ErrorControl.ErrorPrependString, @default.ErrorControl.ErrorPrependString, value, action); case "log_errors": return GSR(ref local.ErrorControl.EnableLogging, @default.ErrorControl.EnableLogging, value, action); case "error_log": return GsrErrorLog(local, @default, value, action); case "error_reporting": switch (action) { case IniAction.Get: return ErrorReporting(); case IniAction.Set: return ErrorReporting(Convert.ObjectToInteger(value)); case IniAction.Restore: return ErrorReporting((int)@default.ErrorControl.ReportErrors); } break; #endregion #region <output-control> case "implicit_flush": Debug.Assert(action == IniAction.Get); return @default.OutputControl.ImplicitFlush; case "output_handler": Debug.Assert(action == IniAction.Get); IPhpConvertible handler = @default.OutputControl.OutputHandler; return (handler != null) ? handler.ToString() : null; case "output_buffering": Debug.Assert(action == IniAction.Get); return @default.OutputControl.OutputBuffering; #endregion #region <request-control> case "max_execution_time": { object result = GSR(ref local.RequestControl.ExecutionTimeout, @default.RequestControl.ExecutionTimeout, value, action); // applies the timeout: if (action != IniAction.Get) ScriptContext.CurrentContext.ApplyExecutionTimeout(local.RequestControl.ExecutionTimeout); return result; } case "ignore_user_abort": { object result = GSR(ref local.RequestControl.IgnoreUserAbort, @default.RequestControl.IgnoreUserAbort, value, action); // enables/disables disconnection tracking: if (action != IniAction.Get) RequestContext.CurrentContext.TrackClientDisconnection = !local.RequestControl.IgnoreUserAbort; return result; } #endregion #region <file-system> case "allow_url_fopen": return GSR(ref local.FileSystem.AllowUrlFopen, @default.FileSystem.AllowUrlFopen, value, action); case "user_agent": return GSR(ref local.FileSystem.UserAgent, @default.FileSystem.UserAgent, value, action); case "from": return GSR(ref local.FileSystem.AnonymousFtpPassword, @default.FileSystem.AnonymousFtpPassword, value, action); case "default_socket_timeout": return GSR(ref local.FileSystem.DefaultSocketTimeout, @default.FileSystem.DefaultSocketTimeout, value, action); case "include_path": return GSR(ref local.FileSystem.IncludePaths, @default.FileSystem.IncludePaths, value, action); #endregion #region <variables> case "zend.ze1_compatibility_mode": Debug.Assert(action != IniAction.Set || OptionValueToBoolean(value) == false); return false;// GSR(ref local.Variables.ZendEngineV1Compatible, @default.Variables.ZendEngineV1Compatible, value, action); case "magic_quotes_runtime": return GSR(ref local.Variables.QuoteRuntimeVariables, @default.Variables.QuoteRuntimeVariables, value, action); case "magic_quotes_sybase": Debug.Assert(action == IniAction.Get || OptionValueToBoolean(value) == local.Variables.QuoteInDbManner); return local.Variables.QuoteInDbManner; //GSR(ref local.Variables.QuoteInDbManner, @default.Variables.QuoteInDbManner, value, action); case "magic_quotes_gpc": Debug.Assert(action == IniAction.Get || OptionValueToBoolean(value) == global.GlobalVariables.QuoteGpcVariables); return global.GlobalVariables.QuoteGpcVariables; case "register_argc_argv": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterArgcArgv; case "register_globals": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterGlobals; case "register_long_arrays": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterLongArrays; case "variables_order": return GsrVariablesOrder(local, @default, value, action); case "unserialize_callback_func": return GSR(ref local.Variables.DeserializationCallback, @default.Variables.DeserializationCallback, value, action); case "always_populate_raw_post_data": switch (action) { case IniAction.Restore: local.Variables.AlwaysPopulateRawPostData = false; break; case IniAction.Set: local.Variables.AlwaysPopulateRawPostData = Convert.ObjectToBoolean(value); break; } return local.Variables.AlwaysPopulateRawPostData; #endregion #region <posted-files> case "file_uploads": Debug.Assert(action == IniAction.Get); return global.PostedFiles.Accept; case "upload_tmp_dir": Debug.Assert(action == IniAction.Get); return global.PostedFiles.TempPath; case "post_max_size": case "upload_max_filesize": { Debug.Assert(action == IniAction.Get); HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; HttpRuntimeSection http_runtime_section = (HttpRuntimeSection)context.GetSection("system.web/httpRuntime"); return (http_runtime_section != null) ? http_runtime_section.MaxRequestLength * 1024 : 0;// values in config are in kB, PHP's in B } #endregion #region <assert> case "assert.active": return GSR(ref local.Assertion.Active, @default.Assertion.Active, value, action); case "assert.bail": return GSR(ref local.Assertion.Terminate, @default.Assertion.Terminate, value, action); case "assert.quiet_eval": return GSR(ref local.Assertion.Quiet, @default.Assertion.Quiet, value, action); case "assert.warning": return GSR(ref local.Assertion.ReportWarning, @default.Assertion.ReportWarning, value, action); case "assert.callback": return GSR(ref local.Assertion.Callback, @default.Assertion.Callback, value, action); #endregion #region <safe-mode> case "safe_mode": Debug.Assert(action == IniAction.Get); return global.SafeMode.Enabled; case "open_basedir": Debug.Assert(action == IniAction.Get); return global.SafeMode.GetAllowedPathPrefixesJoin(); case "safe_mode_exec_dir": Debug.Assert(action == IniAction.Get); return global.SafeMode.ExecutionDirectory; #endregion #region <session> case "session.save_handler": return PhpSession.GsrHandler(local, @default, value, action); case "session.auto_start": Debug.Assert(action == IniAction.Get); return local.Session.AutoStart; case "session.name": Debug.Assert(action == IniAction.Get); return PhpSession.Name(); #endregion #region others case "default_charset": return GsrDefaultCharset(value, action); case "default_mimetype": return GsrDefaultMimetype(value, action); case "memory_limit": return GsrMemoryLimit(value, action); case "disable_functions": return GsrDisableFunctions(value, action); #endregion } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }
/// <summary> /// Gets, sets or restores "disable_functions" option. /// </summary> private static object GsrDisableFunctions(object value, IniAction action) { object result = ""; switch (action) { case IniAction.Set: case IniAction.Restore: PhpException.ArgumentValueNotSupported("disable_functions", action); break; } return result; }
/// <summary> /// GSR routine for "session.serialize_handler" configuration option. /// </summary> internal static object GsrSerializer(LibraryConfiguration/*!*/ local, LibraryConfiguration/*!*/ @default, object value, IniAction action) { string result = local.Session.Serializer.Name; switch (action) { case IniAction.Set: { string name = Core.Convert.ObjectToString(value); Serializer serializer = Serializers.GetSerializer(name); if (serializer == null) { PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_serializer", name)); } else { local.Session.Serializer = serializer; } break; } case IniAction.Restore: local.Session.Serializer = @default.Session.Serializer; break; } return result; }
/// <summary> /// GSR routine used for configuration. /// </summary> internal static object GsrCookieDomain(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookieDomain; string result = cookie.Domain; switch (action) { case IniAction.Set: cookie.Domain = Core.Convert.ObjectToString(value); break; case IniAction.Restore: cookie.Domain = DefaultCookieDomain; break; } return result; }
/// <summary> /// GSR routine used for configuration. /// </summary> internal static object GsrCookieSecure(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookieSecure; bool result = cookie.Secure; switch (action) { case IniAction.Set: cookie.Secure = PhpIni.OptionValueToBoolean(value); break; case IniAction.Restore: cookie.Secure = DefaultCookieSecure; break; } return result; }
/// <summary> /// GSR routine used for configuration. /// </summary> internal static object GsrCookieLifetime(object value, IniAction action) { RequestContext context; HttpCookie cookie; if (!GetCookie(out cookie, out context)) return DefaultCookieLifetime; int result = context.SessionCookieLifetime; switch (action) { case IniAction.Set: context.SessionCookieLifetime = Core.Convert.ObjectToInteger(value); break; case IniAction.Restore: context.SessionCookieLifetime = DefaultCookieLifetime; break; } return result; }
/// <summary> /// GSR routine used for configuration. /// </summary> internal static object GsrCacheLimiter(object value, IniAction action) { switch (action) { case IniAction.Get: return CacheLimiter(); case IniAction.Set: return CacheLimiter(Core.Convert.ObjectToString(value)); case IniAction.Restore: CacheLimiter(PhpSession.DefaultCacheLimiter); return null; } return null; }
/// <summary> /// GSR routine used for configuration. /// </summary> internal static object GsrCacheExpire(object value, IniAction action) { switch (action) { case IniAction.Get: return CacheExpire(); case IniAction.Set: return CacheExpire(Core.Convert.ObjectToInteger(value)); case IniAction.Restore: CacheExpire(PhpSession.DefaultCacheExpire); return null; } return null; }
/// <summary> /// Gets, sets or restores string option. /// </summary> public static object GSR(ref string option, string defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToString(value); break; case IniAction.Restore: option = defaultValue; break; } return result; }
/// <summary> /// Gets, sets or restores "default_mimetype" option. /// </summary> private static object GsrDefaultMimetype(object value, IniAction action) { HttpContext context; if (!Web.EnsureHttpContext(out context)) return null; object result = context.Response.ContentType; switch (action) { case IniAction.Set: context.Response.ContentType = Convert.ObjectToString(value); break; case IniAction.Restore: context.Response.ContentType = DefaultMimetype; break; } return result; }
/// <summary> /// Gets, sets or restores "session.save_handler" option. /// </summary> internal static object GsrHandler(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action) { string result = local.Session.Handler.Name; switch (action) { case IniAction.Set: { string name = Core.Convert.ObjectToString(value); SessionHandler handler = SessionHandlers.GetHandler(name); if (handler == null) { PhpException.Throw(PhpError.Warning, PhpException.ToErrorMessage(CoreResources.GetString("unknown_session_handler", name))); } else { local.Session.Handler = handler; } break; } case IniAction.Restore: local.Session.Handler = @default.Session.Handler; break; } return result; }
/// <summary> /// Gets, sets or restores "error_log" option. /// </summary> private static object GsrErrorLog(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action) { if (action == IniAction.Restore) { local.ErrorControl.LogFile = @default.ErrorControl.LogFile; local.ErrorControl.SysLog = @default.ErrorControl.SysLog; return null; } string result = (local.ErrorControl.SysLog) ? ErrorLogSysLog : local.ErrorControl.LogFile; if (action == IniAction.Set) { string svalue = Convert.ObjectToString(value); local.ErrorControl.SysLog = (string.Compare(svalue, ErrorLogSysLog, StringComparison.InvariantCultureIgnoreCase) == 0); local.ErrorControl.LogFile = (local.ErrorControl.SysLog) ? svalue : null; } return result; }
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)); } }
/// <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)), });
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)); } }
/// <summary> /// Gets or sets option. /// </summary> public static double GetSet(ref double option, int defaultValue, PhpValue newValue, IniAction action) { var oldValue = option; if (action == IniAction.Set) { option = (int)newValue.ToDouble(); } return(oldValue); }
public void Ini() { var ini = new IniAction(); ini.Ini(); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { ZlibLocalConfig local = (ZlibLocalConfig)config.GetLibraryConfig(ZlibLibraryDescriptor.Singleton); ZlibLocalConfig @default = DefaultLocal; ZlibGlobalConfig global = Global; switch (option) { //// local: //case "mssql.connect_timeout": //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action); //case "mssql.timeout": //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action); //case "mssql.batchsize": //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action); // global: case "zlib.output_compression": Debug.Assert(action == IniAction.Get, "Setting zlib.output_compression is not currently implemented."); return false; case "zlib.output_compression_level": Debug.Assert(action == IniAction.Get, "Setting zlib.output_compression_level is not currently implemented."); return -1; case "zlib.output_handler": Debug.Assert(action == IniAction.Get, "Setting zlib.output_handler is not currently implemented."); return ""; } Debug.Fail("Option '" + option + "' is not currently supported."); return null; }
/// <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); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { SQLiteLocalConfig local = (SQLiteLocalConfig)config.GetLibraryConfig(SQLiteLibraryDescriptor.Singleton); SQLiteLocalConfig @default = DefaultLocal; SQLiteGlobalConfig global = Global; switch (option) { // local: // global: case "sqlite.assoc_case": Debug.Assert(action == IniAction.Get); return(PhpIni.GSR(ref global.AssocCase, 0, value, action)); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return(null); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { ZipLocalConfig local = (ZipLocalConfig)config.GetLibraryConfig(ZipLibraryDescriptor.Singleton); ZipLocalConfig @default = DefaultLocal; ZipGlobalConfig global = Global; //switch (option) //{ // // local: // // global: //} Debug.Fail("Option '" + option + "' is supported but not implemented."); return(null); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { GdLocalConfig local = (GdLocalConfig)config.GetLibraryConfig(GdLibraryDescriptor.Singleton); GdLocalConfig @default = DefaultLocal; GdGlobalConfig global = Global; //switch (option) //{ //// local: //case "mssql.connect_timeout": //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action); //case "mssql.timeout": //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action); //case "mssql.batchsize": //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action); //// global: //case "mssql.max_links": //Debug.Assert(action == IniAction.Get); //return PhpIni.GSR(ref global.MaxConnections, 0, null, action); //case "mssql.secure_connection": //Debug.Assert(action == IniAction.Get); //return PhpIni.GSR(ref global.NTAuthentication, false, null, action); //} Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }
/// <summary> /// Tries to get, set, or restore an option given its PHP name and value. /// </summary> /// <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 object TryGetSetRestore(string name, object value, IniAction action, out bool error) { Debug.Assert(name != null); error = true; IniOptions.OptionDefinition option = GetOption(name); // option not found: if (option == null) { // check for options in native extensions: string result = null; switch (action) { case IniAction.Get: error = !Externals.IniGet(name, out result); break; case IniAction.Set: error = !Externals.IniSet(name, Convert.ObjectToString(value), out result); break; case IniAction.Restore: error = !Externals.IniRestore(name); break; } if (error) PhpException.Throw(PhpError.Warning, LibResources.GetString("unknown_option", name)); return result; } // the option is known but not supported: if ((option.Flags & IniFlags.Supported) == 0) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_not_supported", name)); return null; } // the option is global thus cannot be changed: if ((option.Flags & IniFlags.Local) == 0 && action != IniAction.Get) { PhpException.Throw(PhpError.Warning, LibResources.GetString("option_readonly", name)); return null; } error = false; return option.Gsr(Configuration.Local, name, value, action); }
/// <summary> /// Gets, sets or restores integer option. /// </summary> public static object GSR(ref int option, int defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToInteger(value); break; case IniAction.Restore: option = defaultValue; break; } return result; }
/// <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); }
/// <summary> /// Gets, sets or restores callback option. /// </summary> public static object GSR(ref PhpCallback option, PhpCallback defaultValue, object value, IniAction action) { object result = option; switch (action) { case IniAction.Set: option = Convert.ObjectToCallback(value); break; case IniAction.Restore: option = defaultValue; break; } return result; }
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)); } }
/// <summary> /// Gets, sets or restores "memory_limit" option. /// </summary> private static object GsrMemoryLimit(object value, IniAction action) { object result = -1; switch (action) { case IniAction.Set: case IniAction.Restore: PhpException.ArgumentValueNotSupported("memory_limit", action); break; } return result; }
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(); } }
/// <summary> /// Gets, sets or restores "variables_order" option. /// </summary> private static object GsrVariablesOrder(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action) { object result = local.Variables.RegisteringOrder; switch (action) { case IniAction.Set: string svalue = Convert.ObjectToString(value); if (!LocalConfiguration.VariablesSection.ValidateRegisteringOrder(svalue)) PhpException.Throw(PhpError.Warning, CoreResources.GetString("invalid_registering_order")); else local.Variables.RegisteringOrder = svalue; break; case IniAction.Restore: local.Variables.RegisteringOrder = @default.Variables.RegisteringOrder; break; } return result; }
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)); } }
/// <summary> /// Implementation of <see cref="AssertOptions(AssertOption)"/> and <see cref="AssertOptions(AssertOption,object)"/>. /// </summary> /// <remarks>Only gets/sets. No restore.</remarks> private static object AssertOptions(AssertOption option, object value, IniAction action) { LocalConfiguration config = Configuration.Local; switch (option) { case AssertOption.Active: return GSR(ref config.Assertion.Active, false, value, action); case AssertOption.Callback: return GSR(ref config.Assertion.Callback, null, value, action); case AssertOption.Quiet: return GSR(ref config.Assertion.Quiet, false, value, action); case AssertOption.Terminate: return GSR(ref config.Assertion.Terminate, false, value, action); case AssertOption.ReportWarning: return GSR(ref config.Assertion.ReportWarning, false, value, action); default: PhpException.InvalidArgument("option"); return false; } }
public static bool IsSet(this IniAction action) => action == IniAction.Set;
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { MsSqlLocalConfig local = (MsSqlLocalConfig)config.GetLibraryConfig(MsSqlLibraryDescriptor.Singleton); MsSqlLocalConfig @default = DefaultLocal; MsSqlGlobalConfig global = Global; switch (option) { // local: case "mssql.connect_timeout": return(PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action)); case "mssql.timeout": return(PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action)); case "mssql.batchsize": return(PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action)); // global: case "mssql.max_links": Debug.Assert(action == IniAction.Get); return(PhpIni.GSR(ref global.MaxConnections, 0, null, action)); case "mssql.secure_connection": Debug.Assert(action == IniAction.Get); return(PhpIni.GSR(ref global.NTAuthentication, false, null, action)); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return(null); }
/// <summary> /// Gets or sets option. /// </summary> public static bool GetSet(ref bool option, bool defaultValue, PhpValue newValue, IniAction action) { var oldValue = option; if (action == IniAction.Set) { option = newValue.ToBoolean(); } return(oldValue); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { ZlibLocalConfig local = (ZlibLocalConfig)config.GetLibraryConfig(ZlibLibraryDescriptor.Singleton); ZlibLocalConfig @default = DefaultLocal; ZlibGlobalConfig global = Global; switch (option) { //// local: //case "mssql.connect_timeout": //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action); //case "mssql.timeout": //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action); //case "mssql.batchsize": //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action); // global: case "zlib.output_compression": Debug.Assert(action == IniAction.Get, "Setting zlib.output_compression is not currently implemented."); return(false); case "zlib.output_compression_level": Debug.Assert(action == IniAction.Get, "Setting zlib.output_compression_level is not currently implemented."); return(-1); case "zlib.output_handler": Debug.Assert(action == IniAction.Get, "Setting zlib.output_handler is not currently implemented."); return(""); } Debug.Fail("Option '" + option + "' is not currently supported."); return(null); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { MySqlLocalConfig local = (MySqlLocalConfig)config.GetLibraryConfig(MySqlLibraryDescriptor.Singleton); MySqlLocalConfig @default = DefaultLocal; MySqlGlobalConfig global = Global; switch (option) { // local: case "mysql.connect_timeout": return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action); case "mysql.default_port": return PhpIni.GSR(ref local.Port, @default.Port, value, action); case "mysql.default_host": return PhpIni.GSR(ref local.Server, @default.Server, value, action); case "mysql.default_user": return PhpIni.GSR(ref local.User, @default.User, value, action); case "mysql.default_password": return PhpIni.GSR(ref local.Password, @default.Password, value, action); case "mysql.default_command_timeout": return PhpIni.GSR(ref local.DefaultCommandTimeout, @default.DefaultCommandTimeout, value, action); case "mysql.connection_string": return PhpIni.GSR(ref local.ConnectionString, null, value, action); // global: case "mysql.max_links": Debug.Assert(action == IniAction.Get); return PhpIni.GSR(ref global.MaxConnections, -1, null, action); case "mysql.max_pool_size": return PhpIni.GSR(ref global.MaxPoolSize, 100, value, action); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }
static PhpValue GsrSession(Context ctx, IPhpConfigurationService config, string option, PhpValue value, IniAction action) { return(config.Get <SessionConfiguration>().Gsr(ctx, config, option, value, action)); }
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(); } }
/// <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)); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { LibraryConfiguration local = (LibraryConfiguration)config.GetLibraryConfig(LibraryDescriptor.Singleton); LibraryConfiguration @default = DefaultLocal; switch (option) { case "sendmail_from": return PhpIni.GSR(ref local.Mailer.DefaultFromHeader, @default.Mailer.DefaultFromHeader, value, action); case "SMTP": return PhpIni.GSR(ref local.Mailer.SmtpServer, @default.Mailer.SmtpServer, value, action); case "smtp_port": return PhpIni.GSR(ref local.Mailer.SmtpPort, @default.Mailer.SmtpPort, value, action); case "mail.add_x_header": return PhpIni.GSR(ref local.Mailer.AddXHeader, @default.Mailer.AddXHeader, value, action); case "highlight.bg": return PhpIni.GSR(ref local.Highlighting.Background, @default.Highlighting.Background, value, action); case "highlight.comment": return PhpIni.GSR(ref local.Highlighting.Comment, @default.Highlighting.Comment, value, action); case "highlight.default": return PhpIni.GSR(ref local.Highlighting.Default, @default.Highlighting.Default, value, action); case "highlight.html": return PhpIni.GSR(ref local.Highlighting.Html, @default.Highlighting.Html, value, action); case "highlight.keyword": return PhpIni.GSR(ref local.Highlighting.Keyword, @default.Highlighting.Keyword, value, action); case "highlight.string": return PhpIni.GSR(ref local.Highlighting.String, @default.Highlighting.String, value, action); case "session.serialize_handler": return PhpSession.GsrSerializer(local, @default, value, action); case "session.cache_expire": return PhpSession.GsrCacheExpire(value, action); case "session.cache_limiter": return PhpSession.GsrCacheLimiter(value, action); case "session.save_path": return PhpIni.GSR(ref local.Session.SavePath, @default.Session.SavePath, value, action); case "session.gc_maxlifetime": return PhpIni.GSR(ref local.Session.GcMaxLifetime, @default.Session.GcMaxLifetime, value, action); case "session.gc_probability": return PhpIni.GSR(ref local.Session.GcProbability, @default.Session.GcProbability, value, action); case "session.gc_divisor": return PhpIni.GSR(ref local.Session.GcDivisor, @default.Session.GcDivisor, value, action); case "session.cookie_lifetime": return PhpSession.GsrCookieLifetime(value, action); case "session.cookie_path": return PhpSession.GsrCookiePath(value, action); case "session.cookie_domain": return PhpSession.GsrCookieDomain(value, action); case "session.cookie_secure": return PhpSession.GsrCookieSecure(value, action); case "date.default_latitude": return PhpIni.GSR(ref local.Date.Latitude, @default.Date.Latitude, value, action); case "date.default_longitude": return PhpIni.GSR(ref local.Date.Longitude, @default.Date.Longitude, value, action); case "date.sunrise_zenith": return PhpIni.GSR(ref local.Date.SunriseZenith, @default.Date.SunriseZenith, value, action); case "date.sunset_zenith": return PhpIni.GSR(ref local.Date.SunsetZenith, @default.Date.SunsetZenith, value, action); case "date.timezone": return PhpTimeZone.GsrTimeZone(local, @default, value, action); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }
/// <summary> /// Gets or sets option. /// </summary> public static int GetSet(ref int option, int defaultValue, PhpValue newValue, IniAction action) { var oldValue = option; if (action == IniAction.Set) { option = (int)newValue.ToLong(); } return(oldValue); }
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(); } }
/// <summary> /// Gets or sets option. /// </summary> public static string GetSet(ref string option, string defaultValue, PhpValue newValue, IniAction action) { var oldValue = option; if (action == IniAction.Set) { option = newValue.AsString(); } return(oldValue); }
/// <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); }
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(); } }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { IconvLocalConfig local = (IconvLocalConfig)config.GetLibraryConfig(IconvLibraryDescriptor.Singleton); IconvLocalConfig @default = DefaultLocal; IconvGlobalConfig global = Global; //[iconv] //;iconv.input_encoding = ISO-8859-1 //;iconv.internal_encoding = ISO-8859-1 //;iconv.output_encoding = ISO-8859-1 switch (option) { //// local: case "iconv.input_encoding": return PhpIni.GSR(ref local.InputEncoding, @default.InputEncoding, value, action); case "iconv.internal_encoding": return PhpIni.GSR(ref local.InternalEncoding, @default.InternalEncoding, value, action); case "iconv.output_encoding": return PhpIni.GSR(ref local.OutputEncoding, @default.OutputEncoding, value, action); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return null; }