/// </devdoc>
internal static class SecurityUtils {
+#if !DISABLE_CAS_USE
private static volatile ReflectionPermission memberAccessPermission = null;
private static volatile ReflectionPermission restrictedMemberAccessPermission = null;
return restrictedMemberAccessPermission;
}
}
+#endif
private static void DemandReflectionAccess(Type type) {
+#if !DISABLE_CAS_USE
try {
MemberAccessPermission.Demand();
}
catch (SecurityException) {
DemandGrantSet(type.Assembly);
}
+#endif
}
[SecuritySafeCritical]
private static void DemandGrantSet(Assembly assembly) {
+#if !DISABLE_CAS_USE
PermissionSet targetGrantSet = assembly.PermissionSet;
targetGrantSet.AddPermission(RestrictedMemberAccessPermission);
targetGrantSet.Demand();
+#endif
}
private static bool HasReflectionPermission(Type type) {
+#if !DISABLE_CAS_USE
try {
DemandReflectionAccess(type);
return true;
}
return false;
+#else
+ return true;
+#endif
}
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static internal Stream GetFileStream(string filename) {
+#if !DISABLE_CAS_USE
(new FileIOPermission(FileIOPermissionAccess.Read, filename)).Assert();
try {
return new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read);
finally {
FileIOPermission.RevertAssert();
}
+#else
+ return new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read);
+#endif
}
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static internal FileVersionInfo GetVersionInfo(string filename) {
+#if !DISABLE_CAS_USE
(new FileIOPermission(FileIOPermissionAccess.Read, filename)).Assert(); // MDAC 62038
try {
return FileVersionInfo.GetVersionInfo(filename); // MDAC 60411
finally {
FileIOPermission.RevertAssert();
}
+#else
+ return FileVersionInfo.GetVersionInfo(filename); // MDAC 60411
+#endif
}
+
#if MOBILE
static internal object LocalMachineRegistryValue(string subkey, string queryvalue) {
return null;
}
}
+#if !DISABLE_CAS_USE
[Fx.Tag.SecurityNote(Critical = "Holds instance of SecurityPermission that we will Demand for SerializationFormatter."
+ " Should not be modified to something else.")]
[SecurityCritical]
return memberAccessPermission;
}
}
-
+#endif
public const bool DefaultIsRequired = false;
public const bool DefaultEmitDefaultValue = true;
[SecuritySafeCritical]
public void DemandSerializationFormatterPermission()
{
+#if !DISABLE_CAS_USE
if (!demandedSerializationFormatterPermission)
{
Globals.SerializationFormatterPermission.Demand();
demandedSerializationFormatterPermission = true;
}
+#endif
}
[Fx.Tag.SecurityNote(Critical = "Demands MemberAccess permission. demanding the right permission is critical.",
[SecuritySafeCritical]
public void DemandMemberAccessPermission()
{
+#if !DISABLE_CAS_USE
if (!demandedMemberAccessPermission)
{
Globals.MemberAccessPermission.Demand();
demandedMemberAccessPermission = true;
}
+ #endif
}
public StreamingContext GetStreamingContext()
[MethodImpl(MethodImplOptions.NoInlining)]
internal void GetObjectData(ISerializable obj, SerializationInfo serInfo, StreamingContext context)
{
+#if !DISABLE_CAS_USE
// Demand the serialization formatter permission every time
Globals.SerializationFormatterPermission.Demand();
+#endif
obj.GetObjectData(serInfo, context);
}
Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"rawfile: " + rawFile);
string codeBase;
+#if !DISABLE_CAS_USE
// FileIOPermission is required for ApplicationBase in URL-hosted domains
FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted);
perm.Assert();
finally {
CodeAccessPermission.RevertAssert();
}
+#else
+ codeBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
+#endif
if (rawFile != null && codeBase != null) {
licenseFile = new Uri(new Uri(codeBase), rawFile);
}
// file://fullpath/foo.exe
//
string fileName;
+#if !DISABLE_CAS_USE
FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted);
perm.Assert();
try
{
CodeAccessPermission.RevertAssert();
}
+#else
+ fileName = GetLocalPath(asm.EscapedCodeBase);
+ fileName = new FileInfo(fileName).Name;
+#endif
Stream s = asm.GetManifestResourceStream(fileName + ".licenses");
if (s == null) {
static Stream OpenRead(Uri resourceUri) {
Stream result = null;
-
+#if !DISABLE_CAS_USE
PermissionSet perms = new PermissionSet(PermissionState.Unrestricted);
perms.Assert();
+#endif
try {
WebClient webClient = new WebClient();
webClient.Credentials = CredentialCache.DefaultCredentials;
catch (Exception e) {
Debug.Fail(e.ToString());
}
+#if !DISABLE_CAS_USE
finally {
CodeAccessPermission.RevertAssert();
}
-
+#endif
return result;
}
}
public static TraceListenerCollection Listeners {
[HostProtection(SharedState=true)]
get {
+#if !DISABLE_CAS_USE
// Do a full damand
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-
+#endif
return TraceInternal.Listeners;
}
}
/// </devdoc>
[System.Diagnostics.Conditional("TRACE")]
public static void Close() {
+#if !DISABLE_CAS_USE
// Do a full damand
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-
+ #endif
TraceInternal.Close();
}
get {
if (stackTrace == null)
stackTrace = Environment.StackTrace;
+#if !DISABLE_CAS_USE
else
new EnvironmentPermission(PermissionState.Unrestricted).Demand();
-
+#endif
return stackTrace;
}
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
private static void InitProcessInfo() {
+#if !DISABLE_CAS_USE
// Demand unmanaged code permission
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
-
+#endif
if (processName == null) {
Process p = Process.GetCurrentProcess();
try {
internal static string AppName {
get {
if (appName == null) {
+#if !DISABLE_CAS_USE
new EnvironmentPermission(EnvironmentPermissionAccess.Read, "Path").Assert();
+#endif
appName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
}
return appName;