You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,146 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="VirtualDirectoryMapping.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.Configuration {
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Web.Util;
|
||||
using System.Security.Permissions;
|
||||
|
||||
//
|
||||
// Maps a virtual directory to a physical directory and its config file.
|
||||
//
|
||||
public sealed class VirtualDirectoryMapping {
|
||||
VirtualPath _virtualDirectory;
|
||||
string _physicalDirectory;
|
||||
string _configFileBaseName;
|
||||
bool _isAppRoot;
|
||||
|
||||
const string DEFAULT_BASE_NAME = "web.config";
|
||||
|
||||
public VirtualDirectoryMapping(string physicalDirectory, bool isAppRoot)
|
||||
: this(null, physicalDirectory, isAppRoot, DEFAULT_BASE_NAME) {
|
||||
|
||||
}
|
||||
|
||||
public VirtualDirectoryMapping(string physicalDirectory, bool isAppRoot, string configFileBaseName)
|
||||
: this(null, physicalDirectory, isAppRoot, configFileBaseName) {
|
||||
}
|
||||
|
||||
private VirtualDirectoryMapping(VirtualPath virtualDirectory, string physicalDirectory, bool isAppRoot, string configFileBaseName) {
|
||||
_virtualDirectory = virtualDirectory;
|
||||
_isAppRoot = isAppRoot;
|
||||
|
||||
PhysicalDirectory = physicalDirectory;
|
||||
ConfigFileBaseName = configFileBaseName;
|
||||
}
|
||||
|
||||
internal VirtualDirectoryMapping Clone() {
|
||||
return new VirtualDirectoryMapping(_virtualDirectory, _physicalDirectory, _isAppRoot, _configFileBaseName);
|
||||
}
|
||||
|
||||
//
|
||||
// Get the virtual directory.
|
||||
// Not settable because it is set when it is added to a collection.
|
||||
//
|
||||
public string VirtualDirectory {
|
||||
get {
|
||||
return (_virtualDirectory != null) ? _virtualDirectory.VirtualPathString : string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
internal VirtualPath VirtualDirectoryObject {
|
||||
get {
|
||||
return _virtualDirectory;
|
||||
}
|
||||
}
|
||||
|
||||
internal void SetVirtualDirectory(VirtualPath virtualDirectory) {
|
||||
_virtualDirectory = virtualDirectory;
|
||||
}
|
||||
|
||||
//
|
||||
// The physical directory.
|
||||
//
|
||||
public string PhysicalDirectory {
|
||||
get {
|
||||
return _physicalDirectory;
|
||||
}
|
||||
|
||||
set {
|
||||
string physicalDirectory = value;
|
||||
if (String.IsNullOrEmpty(physicalDirectory)) {
|
||||
physicalDirectory = null;
|
||||
}
|
||||
else {
|
||||
// remove trailing '\' if any
|
||||
if (UrlPath.PathEndsWithExtraSlash(physicalDirectory)) {
|
||||
physicalDirectory = physicalDirectory.Substring(0, physicalDirectory.Length - 1);
|
||||
}
|
||||
|
||||
// Throw if the resulting physical path is not canonical, to prevent potential
|
||||
// security issues (VSWhidbey 418125)
|
||||
if (FileUtil.IsSuspiciousPhysicalPath(physicalDirectory)) {
|
||||
throw ExceptionUtil.ParameterInvalid("PhysicalDirectory");
|
||||
}
|
||||
}
|
||||
|
||||
_physicalDirectory = physicalDirectory;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Indicates whether the virtual directory is the location of an application.
|
||||
//
|
||||
public bool IsAppRoot {
|
||||
get {
|
||||
return _isAppRoot;
|
||||
}
|
||||
|
||||
set {
|
||||
_isAppRoot = value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// The base name of the config file.
|
||||
// If not specified, "web.config" is used.
|
||||
//
|
||||
public string ConfigFileBaseName {
|
||||
get {
|
||||
return _configFileBaseName;
|
||||
}
|
||||
|
||||
set {
|
||||
if (string.IsNullOrEmpty(value)) {
|
||||
throw ExceptionUtil.PropertyInvalid("ConfigFileBaseName");
|
||||
}
|
||||
|
||||
_configFileBaseName = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal void Validate() {
|
||||
if (_physicalDirectory != null) {
|
||||
//
|
||||
// Ensure that the caller has PathDiscovery to the resulting config file,
|
||||
// and that the web.config file does not have ".." that could lead to a
|
||||
// different directory.
|
||||
//
|
||||
string configFilename = Path.Combine(_physicalDirectory, _configFileBaseName);
|
||||
string fullConfigFilename = Path.GetFullPath(configFilename);
|
||||
if ( Path.GetDirectoryName(fullConfigFilename) != _physicalDirectory ||
|
||||
Path.GetFileName(fullConfigFilename) != _configFileBaseName ||
|
||||
FileUtil.IsSuspiciousPhysicalPath(configFilename)) {
|
||||
|
||||
throw ExceptionUtil.ParameterInvalid("configFileBaseName");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user