Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / xsp / System / Web / Configuration / UserMapPath.cs / 1 / 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.
//
class UserMapPath : IConfigMapPath {
string _machineConfigFilename;
string _rootWebConfigFilename;
string _siteName;
string _siteID;
WebConfigurationFileMap _webFileMap;
bool _pathsAreLocal;
internal UserMapPath(ConfigurationFileMap fileMap)
: this(fileMap, true) {
}
internal UserMapPath(ConfigurationFileMap fileMap, bool pathsAreLocal) {
_pathsAreLocal = pathsAreLocal;
// Defaults for machine.config and root web.config if not supplied by user
_machineConfigFilename = HttpConfigurationSystem.MachineConfigurationFilePath;
_rootWebConfigFilename = HttpConfigurationSystem.RootWebConfigurationFilePath;
if (!String.IsNullOrEmpty(fileMap.MachineConfigFilename)) {
if (_pathsAreLocal) {
_machineConfigFilename = Path.GetFullPath(fileMap.MachineConfigFilename);
}
else {
_machineConfigFilename = fileMap.MachineConfigFilename;
}
}
_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.
//
class UserMapPath : IConfigMapPath {
string _machineConfigFilename;
string _rootWebConfigFilename;
string _siteName;
string _siteID;
WebConfigurationFileMap _webFileMap;
bool _pathsAreLocal;
internal UserMapPath(ConfigurationFileMap fileMap)
: this(fileMap, true) {
}
internal UserMapPath(ConfigurationFileMap fileMap, bool pathsAreLocal) {
_pathsAreLocal = pathsAreLocal;
// Defaults for machine.config and root web.config if not supplied by user
_machineConfigFilename = HttpConfigurationSystem.MachineConfigurationFilePath;
_rootWebConfigFilename = HttpConfigurationSystem.RootWebConfigurationFilePath;
if (!String.IsNullOrEmpty(fileMap.MachineConfigFilename)) {
if (_pathsAreLocal) {
_machineConfigFilename = Path.GetFullPath(fileMap.MachineConfigFilename);
}
else {
_machineConfigFilename = fileMap.MachineConfigFilename;
}
}
_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
- Rotation3DAnimation.cs
- BatchWriter.cs
- EnumerableRowCollection.cs
- PopupEventArgs.cs
- ClipboardProcessor.cs
- JulianCalendar.cs
- PrintDocument.cs
- TextServicesCompartmentContext.cs
- DrawingAttributeSerializer.cs
- Slider.cs
- TreeViewHitTestInfo.cs
- SemaphoreFullException.cs
- _Events.cs
- MimeAnyImporter.cs
- StylusPointPropertyUnit.cs
- HMACSHA512.cs
- ProfileInfo.cs
- DBConnectionString.cs
- DataServiceQueryProvider.cs
- ChangePassword.cs
- TerminatorSinks.cs
- QueueNameHelper.cs
- EtwTrace.cs
- Baml2006KeyRecord.cs
- IdentityHolder.cs
- SystemMulticastIPAddressInformation.cs
- MdImport.cs
- OrderedDictionary.cs
- SqlMethods.cs
- InternalUserCancelledException.cs
- DrawingBrush.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- PerfCounters.cs
- EventMappingSettings.cs
- AssemblyAssociatedContentFileAttribute.cs
- SimpleModelProvider.cs
- ToolboxCategoryItems.cs
- StaticSiteMapProvider.cs
- ProgressBarAutomationPeer.cs
- CodePropertyReferenceExpression.cs
- RootBrowserWindow.cs
- NgenServicingAttributes.cs
- CheckBox.cs
- MexNamedPipeBindingElement.cs
- DataGridLinkButton.cs
- MLangCodePageEncoding.cs
- ProjectionAnalyzer.cs
- ThrowHelper.cs
- ViewBox.cs
- ByteFacetDescriptionElement.cs
- CodeDelegateCreateExpression.cs
- FormViewInsertEventArgs.cs
- EventPrivateKey.cs
- DbConnectionPoolGroup.cs
- DbUpdateCommandTree.cs
- GridViewSortEventArgs.cs
- RegexInterpreter.cs
- VectorAnimationBase.cs
- CookieParameter.cs
- LinkTarget.cs
- RelationshipDetailsCollection.cs
- BitmapInitialize.cs
- ReferenceEqualityComparer.cs
- Mutex.cs
- IdleTimeoutMonitor.cs
- BaseCAMarshaler.cs
- EntityDataSourceState.cs
- ScriptResourceHandler.cs
- MemberDescriptor.cs
- DSASignatureFormatter.cs
- InplaceBitmapMetadataWriter.cs
- DataDocumentXPathNavigator.cs
- TypefaceMetricsCache.cs
- TimeSpanSecondsConverter.cs
- XsltLoader.cs
- HTMLTextWriter.cs
- WebServiceClientProxyGenerator.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- SafeMILHandleMemoryPressure.cs
- HScrollProperties.cs
- QueryableDataSourceView.cs
- Column.cs
- TypeDependencyAttribute.cs
- MembershipValidatePasswordEventArgs.cs
- LocalValueEnumerator.cs
- AxisAngleRotation3D.cs
- PrivilegeNotHeldException.cs
- DataGridViewCellLinkedList.cs
- LassoSelectionBehavior.cs
- RecordsAffectedEventArgs.cs
- MessageHeaderT.cs
- XmlUnspecifiedAttribute.cs
- ExpressionReplacer.cs
- PerformanceCounter.cs
- MaskedTextBoxTextEditor.cs
- SafeUserTokenHandle.cs
- SqlBulkCopyColumnMappingCollection.cs
- EntityParameterCollection.cs
- CustomLineCap.cs
- RegexReplacement.cs