public override void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, IInternalConfigRoot configRoot, params object[] hostInitConfigurationParams) { WebLevel webLevel = (WebLevel)hostInitConfigurationParams[0]; ConfigurationFileMap fileMap = (ConfigurationFileMap)hostInitConfigurationParams[1]; VirtualPath virtualPath = VirtualPath.CreateAbsoluteAllowNull((string)hostInitConfigurationParams[2]); string site = (string)hostInitConfigurationParams[3]; if (locationSubPath == null) { locationSubPath = (string)hostInitConfigurationParams[4]; } base.Host.Init(configRoot, hostInitConfigurationParams); this.ChooseAndInitConfigMapPath(false, null, fileMap); GetConfigPaths(this._configMapPath, webLevel, virtualPath, site, locationSubPath, out this._appPath, out this._appSiteName, out this._appSiteID, out configPath, out locationConfigPath); this._appConfigPath = GetConfigPathFromSiteIDAndVPath(this._appSiteID, this._appPath); if (IsVirtualPathConfigPath(configPath)) { string str2; VirtualPath path2; string str3; GetSiteIDAndVPathFromConfigPath(configPath, out str2, out path2); if (this._configMapPath2 != null) { str3 = this._configMapPath2.MapPath(str2, path2); } else { str3 = this._configMapPath.MapPath(str2, path2.VirtualPathString); } if (string.IsNullOrEmpty(str3)) { throw new ArgumentOutOfRangeException("site"); } } }
private static string ValidateVirtualDirectoryParameter(string virtualDirectory) { // Create a VirtualPath object to validate the path VirtualPath v = VirtualPath.CreateAbsoluteAllowNull(virtualDirectory); return(VirtualPath.GetVirtualPathString(v)); }
public override void Init(IInternalConfigRoot configRoot, params object[] hostInitParams) { bool useConfigMapPath = (bool)hostInitParams[0]; IConfigMapPath configMapPath = (IConfigMapPath)hostInitParams[1]; ConfigurationFileMap fileMap = (ConfigurationFileMap)hostInitParams[2]; string path = (string)hostInitParams[3]; string str2 = (string)hostInitParams[4]; string str3 = (string)hostInitParams[5]; if (hostInitParams.Length > 6) { string moniker = hostInitParams[6] as string; this._machineConfigFile = GetMachineConfigPathFromTargetFrameworkMoniker(moniker); if (!string.IsNullOrEmpty(this._machineConfigFile)) { this._rootWebConfigFile = Path.Combine(Path.GetDirectoryName(this._machineConfigFile), "web.config"); } } base.Host.Init(configRoot, hostInitParams); this.ChooseAndInitConfigMapPath(useConfigMapPath, configMapPath, fileMap); path = System.Web.Util.UrlPath.RemoveSlashFromPathIfNeeded(path); this._appPath = VirtualPath.CreateAbsoluteAllowNull(path); this._appSiteName = str2; this._appSiteID = str3; if (!string.IsNullOrEmpty(this._appSiteID) && (this._appPath != null)) { this._appConfigPath = GetConfigPathFromSiteIDAndVPath(this._appSiteID, this._appPath); } }
public override void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, IInternalConfigRoot configRoot, params object[] hostInitConfigurationParams) { WebLevel webLevel = (WebLevel)hostInitConfigurationParams[0]; ConfigurationFileMap fileMap = (ConfigurationFileMap)hostInitConfigurationParams[1]; VirtualPath path = VirtualPath.CreateAbsoluteAllowNull((string)hostInitConfigurationParams[2]); string site = (string)hostInitConfigurationParams[3]; if (locationSubPath == null) { locationSubPath = (string)hostInitConfigurationParams[4]; } Host.Init(configRoot, hostInitConfigurationParams); // Choose the implementation of IConfigMapPath. ChooseAndInitConfigMapPath(false, null, fileMap); // Get the configuration paths and application information GetConfigPaths(_configMapPath, webLevel, path, site, locationSubPath, out _appPath, out _appSiteName, out _appSiteID, out configPath, out locationConfigPath); _appConfigPath = GetConfigPathFromSiteIDAndVPath(_appSiteID, _appPath); // Verify that the site and path arguments represent a valid name // For example, in Cassini app, which is running on \myApp, a page can // ask for the config for "\", which can't map to anything. We want // to catch this kind of error. Another example is if we're given // an invalid site id. if (IsVirtualPathConfigPath(configPath)) { string finalSiteID; VirtualPath finalPath; GetSiteIDAndVPathFromConfigPath(configPath, out finalSiteID, out finalPath); string physicalPath; // attempt to use IConfigMapPath2 if provider supports it if (null != _configMapPath2) { physicalPath = _configMapPath2.MapPath(finalSiteID, finalPath); } else { physicalPath = _configMapPath.MapPath(finalSiteID, finalPath.VirtualPathString); } if (String.IsNullOrEmpty(physicalPath)) { throw new ArgumentOutOfRangeException("site"); } } #if DBG _inited = true; #endif }
public void Add(string virtualDirectory, VirtualDirectoryMapping mapping) { virtualDirectory = ValidateVirtualDirectoryParameter(virtualDirectory); if (mapping == null) { throw new ArgumentNullException("mapping"); } if (this.Get(virtualDirectory) != null) { throw ExceptionUtil.ParameterInvalid("virtualDirectory"); } mapping.SetVirtualDirectory(VirtualPath.CreateAbsoluteAllowNull(virtualDirectory)); base.BaseAdd(virtualDirectory, mapping); }
private static System.Configuration.Configuration OpenWebConfigurationImpl(WebLevel webLevel, ConfigurationFileMap fileMap, string path, string site, string locationSubPath, string server, string userName, string password, IntPtr userToken) { VirtualPath path2; if (HostingEnvironment.IsHosted) { path2 = VirtualPath.CreateNonRelativeAllowNull(path); } else { path2 = VirtualPath.CreateAbsoluteAllowNull(path); } return(WebConfigurationHost.OpenConfiguration(webLevel, fileMap, path2, site, locationSubPath, server, userName, password, userToken)); }
// // ************************************************* // ** Static Management Functions to edit config ** // ************************************************* // private static Configuration OpenWebConfigurationImpl( WebLevel webLevel, ConfigurationFileMap fileMap, string path, string site, string locationSubPath, string server, string userName, string password, IntPtr userToken) { // In the hosted case, we allow app relative (~/....). Otherwise, it must be absolute VirtualPath virtualPath; if (HostingEnvironment.IsHosted) { virtualPath = VirtualPath.CreateNonRelativeAllowNull(path); } else { virtualPath = VirtualPath.CreateAbsoluteAllowNull(path); } return(WebConfigurationHost.OpenConfiguration(webLevel, fileMap, virtualPath, site, locationSubPath, server, userName, password, userToken)); }
public override void Init(IInternalConfigRoot configRoot, params object[] hostInitParams) { bool useConfigMapPath = (bool)hostInitParams[0]; IConfigMapPath configMapPath = (IConfigMapPath)hostInitParams[1]; ConfigurationFileMap fileMap = (ConfigurationFileMap)hostInitParams[2]; string appPath = (string)hostInitParams[3]; string appSiteName = (string)hostInitParams[4]; string appSiteID = (string)hostInitParams[5]; if (hostInitParams.Length > 6) { // If VS sent a 7th param, it is the .Net Framwework Target version moniker string fxMoniker = hostInitParams[6] as string; _machineConfigFile = GetMachineConfigPathFromTargetFrameworkMoniker(fxMoniker); if (!string.IsNullOrEmpty(_machineConfigFile)) { _rootWebConfigFile = Path.Combine(Path.GetDirectoryName(_machineConfigFile), "web.config"); } } Debug.Assert(configMapPath == null || useConfigMapPath, "non-null configMapPath without useConfigMapPath == true"); Host.Init(configRoot, hostInitParams); ChooseAndInitConfigMapPath(useConfigMapPath, configMapPath, fileMap); appPath = UrlPath.RemoveSlashFromPathIfNeeded(appPath); _appPath = VirtualPath.CreateAbsoluteAllowNull(appPath); _appSiteName = appSiteName; _appSiteID = appSiteID; if (!String.IsNullOrEmpty(_appSiteID) && _appPath != null) { _appConfigPath = GetConfigPathFromSiteIDAndVPath(_appSiteID, _appPath); } #if DBG _inited = true; #endif }
private static string ValidateVirtualDirectoryParameter(string virtualDirectory) { return(VirtualPath.GetVirtualPathString(VirtualPath.CreateAbsoluteAllowNull(virtualDirectory))); }
string IInternalConfigWebHost.GetConfigPathFromSiteIDAndVPath(string siteID, string vpath) { return(WebConfigurationHost.GetConfigPathFromSiteIDAndVPath( siteID, VirtualPath.CreateAbsoluteAllowNull(vpath))); }
public override void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, IInternalConfigRoot root, params object[] hostInitConfigurationParams) { WebLevel webLevel = (WebLevel)hostInitConfigurationParams[0]; // ConfigurationFileMap fileMap = (ConfigurationFileMap) hostInitConfigurationParams[1]; string path = (string)hostInitConfigurationParams[2]; string site = (string)hostInitConfigurationParams[3]; if (locationSubPath == null) { locationSubPath = (string)hostInitConfigurationParams[4]; } string server = (string)hostInitConfigurationParams[5]; string userName = (string)hostInitConfigurationParams[6]; string password = (string)hostInitConfigurationParams[7]; IntPtr tokenHandle = (IntPtr)hostInitConfigurationParams[8]; configPath = null; locationConfigPath = null; _Server = server; _Username = GetUserNameFromFullName(userName); _Domain = GetDomainFromFullName(userName); _Password = password; _Identity = (tokenHandle == IntPtr.Zero) ? null : new WindowsIdentity(tokenHandle); //CreateWindowsIdentity(username, domain, password, tokenHandle); _PathMap = new Hashtable(StringComparer.OrdinalIgnoreCase); #if !FEATURE_PAL // FEATURE_PAL does not have WindowsImpersonationContext, COM objects // // Send the path arguments to the server for parsing, // and retreive the normalized paths and path mapping // from config paths to file paths. // string filePaths; try { WindowsImpersonationContext wiContext = (_Identity != null) ? _Identity.Impersonate() : null; try { IRemoteWebConfigurationHostServer remoteSrv = RemoteWebConfigurationHost.CreateRemoteObject(server, _Username, _Domain, password); //(IRemoteWebConfigurationHostServer) Activator.CreateInstance(type); try { filePaths = remoteSrv.GetFilePaths((int)webLevel, path, site, locationSubPath); } finally { // Release COM objects while (Marshal.ReleaseComObject(remoteSrv) > 0) { } } } finally { if (wiContext != null) { wiContext.Undo(); } } } catch { // Wrap finally clause with a try to avoid exception clauses being run // while the thread is impersonated. throw; } if (filePaths == null) { throw ExceptionUtil.UnexpectedError("RemoteWebConfigurationHost::InitForConfiguration"); } // // Format of filePaths: // appPath < appSiteName < appSiteID < configPath < locationConfigPath [< configPath < fileName]+ // string[] parts = filePaths.Split(RemoteWebConfigurationHostServer.FilePathsSeparatorParams); if (parts.Length < 7 || (parts.Length - 5) % 2 != 0) { throw ExceptionUtil.UnexpectedError("RemoteWebConfigurationHost::InitForConfiguration"); } // convert empty strings to nulls for (int i = 0; i < parts.Length; i++) { if (parts[i].Length == 0) { parts[i] = null; } } // get config paths string appPath = parts[0]; string appSiteName = parts[1]; string appSiteID = parts[2]; configPath = parts[3]; locationConfigPath = parts[4]; _ConfigPath = configPath; // Create a WebConfigurationFileMap to be used when we later initialize our delegating WebConfigurationHost WebConfigurationFileMap configFileMap = new WebConfigurationFileMap(); VirtualPath appPathVirtualPath = VirtualPath.CreateAbsoluteAllowNull(appPath); configFileMap.Site = appSiteID; // populate the configpath->physical path mapping for (int i = 5; i < parts.Length; i += 2) { string configPathTemp = parts[i]; string physicalFilePath = parts[i + 1]; _PathMap.Add(configPathTemp, physicalFilePath); // Update the WebConfigurationFileMap if (WebConfigurationHost.IsMachineConfigPath(configPathTemp)) { configFileMap.MachineConfigFilename = physicalFilePath; } else { string vPathString; bool isRootApp; if (WebConfigurationHost.IsRootWebConfigPath(configPathTemp)) { vPathString = null; isRootApp = false; } else { VirtualPath vPath; string dummy; WebConfigurationHost.GetSiteIDAndVPathFromConfigPath(configPathTemp, out dummy, out vPath); vPathString = VirtualPath.GetVirtualPathString(vPath); isRootApp = (vPath == appPathVirtualPath); } configFileMap.VirtualDirectories.Add(vPathString, new VirtualDirectoryMapping(Path.GetDirectoryName(physicalFilePath), isRootApp)); } } #else // !FEATURE_PAL: set dummy config path string appPath = null; _ConfigPath = configPath; #endif // !FEATURE_PAL // Delegate to a WebConfigurationHost for unhandled methods. WebConfigurationHost webConfigurationHost = new WebConfigurationHost(); webConfigurationHost.Init(root, true, new UserMapPath(configFileMap, /*pathsAreLocal*/ false), null, appPath, appSiteName, appSiteID); Host = webConfigurationHost; }
public override void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, IInternalConfigRoot root, params object[] hostInitConfigurationParams) { string str6; WebLevel level = (WebLevel)hostInitConfigurationParams[0]; string str = (string)hostInitConfigurationParams[2]; string site = (string)hostInitConfigurationParams[3]; if (locationSubPath == null) { locationSubPath = (string)hostInitConfigurationParams[4]; } string str3 = (string)hostInitConfigurationParams[5]; string fullUserName = (string)hostInitConfigurationParams[6]; string password = (string)hostInitConfigurationParams[7]; IntPtr userToken = (IntPtr)hostInitConfigurationParams[8]; configPath = null; locationConfigPath = null; this._Server = str3; this._Username = GetUserNameFromFullName(fullUserName); this._Domain = GetDomainFromFullName(fullUserName); this._Password = password; this._Identity = (userToken == IntPtr.Zero) ? null : new WindowsIdentity(userToken); this._PathMap = new Hashtable(StringComparer.OrdinalIgnoreCase); try { WindowsImpersonationContext context = (this._Identity != null) ? this._Identity.Impersonate() : null; try { IRemoteWebConfigurationHostServer o = CreateRemoteObject(str3, this._Username, this._Domain, password); try { str6 = o.GetFilePaths((int)level, str, site, locationSubPath); } finally { while (Marshal.ReleaseComObject(o) > 0) { } } } finally { if (context != null) { context.Undo(); } } } catch { throw; } if (str6 == null) { throw System.Web.Util.ExceptionUtil.UnexpectedError("RemoteWebConfigurationHost::InitForConfiguration"); } string[] strArray = str6.Split(RemoteWebConfigurationHostServer.FilePathsSeparatorParams); if ((strArray.Length < 7) || (((strArray.Length - 5) % 2) != 0)) { throw System.Web.Util.ExceptionUtil.UnexpectedError("RemoteWebConfigurationHost::InitForConfiguration"); } for (int i = 0; i < strArray.Length; i++) { if (strArray[i].Length == 0) { strArray[i] = null; } } string virtualPath = strArray[0]; string str8 = strArray[1]; string str9 = strArray[2]; configPath = strArray[3]; locationConfigPath = strArray[4]; this._ConfigPath = configPath; WebConfigurationFileMap fileMap = new WebConfigurationFileMap(); VirtualPath path = VirtualPath.CreateAbsoluteAllowNull(virtualPath); fileMap.Site = str9; for (int j = 5; j < strArray.Length; j += 2) { string key = strArray[j]; string str11 = strArray[j + 1]; this._PathMap.Add(key, str11); if (WebConfigurationHost.IsMachineConfigPath(key)) { fileMap.MachineConfigFilename = str11; } else { string virtualPathString; bool flag; if (WebConfigurationHost.IsRootWebConfigPath(key)) { virtualPathString = null; flag = false; } else { VirtualPath path2; string str13; WebConfigurationHost.GetSiteIDAndVPathFromConfigPath(key, out str13, out path2); virtualPathString = VirtualPath.GetVirtualPathString(path2); flag = path2 == path; } fileMap.VirtualDirectories.Add(virtualPathString, new VirtualDirectoryMapping(Path.GetDirectoryName(str11), flag)); } } WebConfigurationHost host = new WebConfigurationHost(); object[] hostInitParams = new object[6]; hostInitParams[0] = true; hostInitParams[1] = new UserMapPath(fileMap, false); hostInitParams[3] = virtualPath; hostInitParams[4] = str8; hostInitParams[5] = str9; host.Init(root, hostInitParams); base.Host = host; }