Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Configuration / UserMapPath.cs / 1305376 / UserMapPath.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Configuration { using System.Configuration; using System.Collections; using System.Globalization; using System.Xml; using System.Text; using System.Web.Util; using System.Web.UI; using System.IO; using System.Web.Hosting; // // IConfigMapPath that uses information from a ConfigurationFileMap. // public class UserMapPath : IConfigMapPath { string _machineConfigFilename; string _rootWebConfigFilename; string _siteName; string _siteID; WebConfigurationFileMap _webFileMap; bool _pathsAreLocal; public UserMapPath(ConfigurationFileMap fileMap) : this(fileMap, true) { } internal UserMapPath(ConfigurationFileMap fileMap, bool pathsAreLocal) { _pathsAreLocal = pathsAreLocal; if (!String.IsNullOrEmpty(fileMap.MachineConfigFilename)) { if (_pathsAreLocal) { _machineConfigFilename = Path.GetFullPath(fileMap.MachineConfigFilename); } else { _machineConfigFilename = fileMap.MachineConfigFilename; } } if (string.IsNullOrEmpty(_machineConfigFilename)) { // Defaults for machine.config and root web.config if not supplied by user _machineConfigFilename = HttpConfigurationSystem.MachineConfigurationFilePath; _rootWebConfigFilename = HttpConfigurationSystem.RootWebConfigurationFilePath; } else { _rootWebConfigFilename = Path.Combine(Path.GetDirectoryName(_machineConfigFilename), "web.config"); } _webFileMap = fileMap as WebConfigurationFileMap; if (_webFileMap != null) { // Use the site if supplied, otherwise use the default. if (!String.IsNullOrEmpty(_webFileMap.Site)) { _siteName = _webFileMap.Site; _siteID = _webFileMap.Site; } else { _siteName = WebConfigurationHost.DefaultSiteName; _siteID = WebConfigurationHost.DefaultSiteID; } if (_pathsAreLocal) { // validate mappings foreach (string virtualDirectory in _webFileMap.VirtualDirectories) { VirtualDirectoryMapping mapping = _webFileMap.VirtualDirectories[virtualDirectory]; mapping.Validate(); } } // Get the root web.config path VirtualDirectoryMapping rootWebMapping = _webFileMap.VirtualDirectories[null]; if (rootWebMapping != null) { _rootWebConfigFilename = Path.Combine(rootWebMapping.PhysicalDirectory, rootWebMapping.ConfigFileBaseName); _webFileMap.VirtualDirectories.Remove(null); } } } bool IsSiteMatch(string site) { return String.IsNullOrEmpty(site) || StringUtil.EqualsIgnoreCase(site, _siteName) || StringUtil.EqualsIgnoreCase(site, _siteID); } // Get the VirtualDirectoryMapping for a path by walking the parent hierarchy // until found. If onlyApps == true, then only return mappings for appliation roots. VirtualDirectoryMapping GetPathMapping(VirtualPath path, bool onlyApps) { if (_webFileMap == null) { return null; } string matchPath = path.VirtualPathStringNoTrailingSlash; for (;;) { VirtualDirectoryMapping mapping = _webFileMap.VirtualDirectories[matchPath]; if (mapping != null && (!onlyApps || mapping.IsAppRoot)) { return mapping; } // "/" is the root of the path hierarchy, so it is not found if (matchPath == "/") { return null; } int index = matchPath.LastIndexOf('/'); if (index == 0) { matchPath = "/"; } else { matchPath = matchPath.Substring(0, index); } } } // Given a path and a VirtualDirectoryMapping, return the corresponding // physical path. string GetPhysicalPathForPath(string path, VirtualDirectoryMapping mapping) { string physicalPath; int l = mapping.VirtualDirectory.Length; if (path.Length == l) { physicalPath = mapping.PhysicalDirectory; } else { string childPart; if (path[l] == '/') { childPart = path.Substring(l+1); } else { childPart = path.Substring(l); } childPart = childPart.Replace('/', '\\'); physicalPath = Path.Combine(mapping.PhysicalDirectory, childPart); } // Throw if the resulting physical path is not canonical, to prevent potential // security issues (VSWhidbey 418125) if (_pathsAreLocal && FileUtil.IsSuspiciousPhysicalPath(physicalPath)) { throw new HttpException(SR.GetString(SR.Cannot_map_path, path)); } return physicalPath; } public string GetMachineConfigFilename() { return _machineConfigFilename; } public string GetRootWebConfigFilename() { return _rootWebConfigFilename; } public void GetPathConfigFilename( string siteID, string path, out string directory, out string baseName) { GetPathConfigFilename(siteID, VirtualPath.Create(path), out directory, out baseName); } private void GetPathConfigFilename( string siteID, VirtualPath path, out string directory, out string baseName) { directory = null; baseName = null; if (!IsSiteMatch(siteID)) return; VirtualDirectoryMapping mapping = GetPathMapping(path, false); if (mapping == null) return; directory = GetPhysicalPathForPath(path.VirtualPathString, mapping); if (directory == null) return; baseName = mapping.ConfigFileBaseName; } public void GetDefaultSiteNameAndID(out string siteName, out string siteID) { siteName = _siteName; siteID = _siteID; } public void ResolveSiteArgument(string siteArgument, out string siteName, out string siteID) { if (IsSiteMatch(siteArgument)) { siteName = _siteName; siteID = _siteID; } else { siteName = siteArgument; siteID = null; } } public string MapPath(string siteID, string path) { return MapPath(siteID, VirtualPath.Create(path)); } private string MapPath(string siteID, VirtualPath path) { string directory, baseName; GetPathConfigFilename(siteID, path, out directory, out baseName); return directory; } public string GetAppPathForPath(string siteID, string path) { VirtualPath resolved = GetAppPathForPath(siteID, VirtualPath.Create(path)); if (resolved == null) { return null; } return resolved.VirtualPathString; } private VirtualPath GetAppPathForPath(string siteID, VirtualPath path) { if (!IsSiteMatch(siteID)) { return null; } VirtualDirectoryMapping mapping = GetPathMapping(path, true); if (mapping == null) { return null; } return mapping.VirtualDirectoryObject; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Configuration { using System.Configuration; using System.Collections; using System.Globalization; using System.Xml; using System.Text; using System.Web.Util; using System.Web.UI; using System.IO; using System.Web.Hosting; // // IConfigMapPath that uses information from a ConfigurationFileMap. // public class UserMapPath : IConfigMapPath { string _machineConfigFilename; string _rootWebConfigFilename; string _siteName; string _siteID; WebConfigurationFileMap _webFileMap; bool _pathsAreLocal; public UserMapPath(ConfigurationFileMap fileMap) : this(fileMap, true) { } internal UserMapPath(ConfigurationFileMap fileMap, bool pathsAreLocal) { _pathsAreLocal = pathsAreLocal; if (!String.IsNullOrEmpty(fileMap.MachineConfigFilename)) { if (_pathsAreLocal) { _machineConfigFilename = Path.GetFullPath(fileMap.MachineConfigFilename); } else { _machineConfigFilename = fileMap.MachineConfigFilename; } } if (string.IsNullOrEmpty(_machineConfigFilename)) { // Defaults for machine.config and root web.config if not supplied by user _machineConfigFilename = HttpConfigurationSystem.MachineConfigurationFilePath; _rootWebConfigFilename = HttpConfigurationSystem.RootWebConfigurationFilePath; } else { _rootWebConfigFilename = Path.Combine(Path.GetDirectoryName(_machineConfigFilename), "web.config"); } _webFileMap = fileMap as WebConfigurationFileMap; if (_webFileMap != null) { // Use the site if supplied, otherwise use the default. if (!String.IsNullOrEmpty(_webFileMap.Site)) { _siteName = _webFileMap.Site; _siteID = _webFileMap.Site; } else { _siteName = WebConfigurationHost.DefaultSiteName; _siteID = WebConfigurationHost.DefaultSiteID; } if (_pathsAreLocal) { // validate mappings foreach (string virtualDirectory in _webFileMap.VirtualDirectories) { VirtualDirectoryMapping mapping = _webFileMap.VirtualDirectories[virtualDirectory]; mapping.Validate(); } } // Get the root web.config path VirtualDirectoryMapping rootWebMapping = _webFileMap.VirtualDirectories[null]; if (rootWebMapping != null) { _rootWebConfigFilename = Path.Combine(rootWebMapping.PhysicalDirectory, rootWebMapping.ConfigFileBaseName); _webFileMap.VirtualDirectories.Remove(null); } } } bool IsSiteMatch(string site) { return String.IsNullOrEmpty(site) || StringUtil.EqualsIgnoreCase(site, _siteName) || StringUtil.EqualsIgnoreCase(site, _siteID); } // Get the VirtualDirectoryMapping for a path by walking the parent hierarchy // until found. If onlyApps == true, then only return mappings for appliation roots. VirtualDirectoryMapping GetPathMapping(VirtualPath path, bool onlyApps) { if (_webFileMap == null) { return null; } string matchPath = path.VirtualPathStringNoTrailingSlash; for (;;) { VirtualDirectoryMapping mapping = _webFileMap.VirtualDirectories[matchPath]; if (mapping != null && (!onlyApps || mapping.IsAppRoot)) { return mapping; } // "/" is the root of the path hierarchy, so it is not found if (matchPath == "/") { return null; } int index = matchPath.LastIndexOf('/'); if (index == 0) { matchPath = "/"; } else { matchPath = matchPath.Substring(0, index); } } } // Given a path and a VirtualDirectoryMapping, return the corresponding // physical path. string GetPhysicalPathForPath(string path, VirtualDirectoryMapping mapping) { string physicalPath; int l = mapping.VirtualDirectory.Length; if (path.Length == l) { physicalPath = mapping.PhysicalDirectory; } else { string childPart; if (path[l] == '/') { childPart = path.Substring(l+1); } else { childPart = path.Substring(l); } childPart = childPart.Replace('/', '\\'); physicalPath = Path.Combine(mapping.PhysicalDirectory, childPart); } // Throw if the resulting physical path is not canonical, to prevent potential // security issues (VSWhidbey 418125) if (_pathsAreLocal && FileUtil.IsSuspiciousPhysicalPath(physicalPath)) { throw new HttpException(SR.GetString(SR.Cannot_map_path, path)); } return physicalPath; } public string GetMachineConfigFilename() { return _machineConfigFilename; } public string GetRootWebConfigFilename() { return _rootWebConfigFilename; } public void GetPathConfigFilename( string siteID, string path, out string directory, out string baseName) { GetPathConfigFilename(siteID, VirtualPath.Create(path), out directory, out baseName); } private void GetPathConfigFilename( string siteID, VirtualPath path, out string directory, out string baseName) { directory = null; baseName = null; if (!IsSiteMatch(siteID)) return; VirtualDirectoryMapping mapping = GetPathMapping(path, false); if (mapping == null) return; directory = GetPhysicalPathForPath(path.VirtualPathString, mapping); if (directory == null) return; baseName = mapping.ConfigFileBaseName; } public void GetDefaultSiteNameAndID(out string siteName, out string siteID) { siteName = _siteName; siteID = _siteID; } public void ResolveSiteArgument(string siteArgument, out string siteName, out string siteID) { if (IsSiteMatch(siteArgument)) { siteName = _siteName; siteID = _siteID; } else { siteName = siteArgument; siteID = null; } } public string MapPath(string siteID, string path) { return MapPath(siteID, VirtualPath.Create(path)); } private string MapPath(string siteID, VirtualPath path) { string directory, baseName; GetPathConfigFilename(siteID, path, out directory, out baseName); return directory; } public string GetAppPathForPath(string siteID, string path) { VirtualPath resolved = GetAppPathForPath(siteID, VirtualPath.Create(path)); if (resolved == null) { return null; } return resolved.VirtualPathString; } private VirtualPath GetAppPathForPath(string siteID, VirtualPath path) { if (!IsSiteMatch(siteID)) { return null; } VirtualDirectoryMapping mapping = GetPathMapping(path, true); if (mapping == null) { return null; } return mapping.VirtualDirectoryObject; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CellTreeNode.cs
- DesignerSerializerAttribute.cs
- Polyline.cs
- DefaultPrintController.cs
- GridViewRow.cs
- CompModSwitches.cs
- ScriptReference.cs
- GeometryDrawing.cs
- OrthographicCamera.cs
- Model3DCollection.cs
- HGlobalSafeHandle.cs
- EntityConnectionStringBuilder.cs
- StringToken.cs
- RsaElement.cs
- RectConverter.cs
- XPathNodePointer.cs
- XmlSchemaSimpleContentExtension.cs
- UInt64.cs
- UpdatePanelControlTrigger.cs
- InvalidOleVariantTypeException.cs
- LinqDataView.cs
- Transform.cs
- DispatcherEventArgs.cs
- StatusBar.cs
- GiveFeedbackEvent.cs
- CustomBindingElement.cs
- XmlSchemaObject.cs
- DispatcherFrame.cs
- DataGridColumnCollectionEditor.cs
- Model3DGroup.cs
- ObjectQueryExecutionPlan.cs
- TemplateBamlRecordReader.cs
- Bits.cs
- SmtpLoginAuthenticationModule.cs
- ToolStripDesigner.cs
- TaskFormBase.cs
- FormattedText.cs
- ModelFunction.cs
- AuthenticationService.cs
- DocumentViewerHelper.cs
- XmlWrappingReader.cs
- MetadataException.cs
- OperandQuery.cs
- SelectorItemAutomationPeer.cs
- InputProcessorProfiles.cs
- DesignerCategoryAttribute.cs
- ByteStream.cs
- XmlCharCheckingReader.cs
- EventMappingSettings.cs
- LinqDataSourceSelectEventArgs.cs
- HttpListener.cs
- ComponentDispatcher.cs
- ConstructorArgumentAttribute.cs
- ThicknessAnimationBase.cs
- SqlPersonalizationProvider.cs
- precedingquery.cs
- WmpBitmapDecoder.cs
- SqlMethods.cs
- SqlErrorCollection.cs
- XPathScanner.cs
- PageSetupDialog.cs
- HotSpotCollection.cs
- RadioButton.cs
- NodeLabelEditEvent.cs
- X509PeerCertificateAuthentication.cs
- ValidationUtility.cs
- AnnotationService.cs
- WebServiceData.cs
- LinkArea.cs
- DesignerSerializationVisibilityAttribute.cs
- __Error.cs
- SiteMap.cs
- DataProtection.cs
- TableLayoutStyle.cs
- _Win32.cs
- TextEditorParagraphs.cs
- DocumentApplicationState.cs
- KnownTypeAttribute.cs
- MouseButton.cs
- CommandPlan.cs
- UIElement3D.cs
- MatrixAnimationUsingPath.cs
- Camera.cs
- EventPrivateKey.cs
- MemberRelationshipService.cs
- HealthMonitoringSection.cs
- IssuanceLicense.cs
- DataMemberAttribute.cs
- listitem.cs
- Int32.cs
- DependencyPropertyKey.cs
- SQLInt16.cs
- SigningCredentials.cs
- UIElementParagraph.cs
- TrackingConditionCollection.cs
- KeyGestureValueSerializer.cs
- X509ScopedServiceCertificateElementCollection.cs
- SoapElementAttribute.cs
- Types.cs
- GeometryDrawing.cs