summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs')
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs274
1 files changed, 274 insertions, 0 deletions
diff --git a/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs b/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs
new file mode 100644
index 0000000000..308adbdab3
--- /dev/null
+++ b/src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs
@@ -0,0 +1,274 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+
+namespace System.Security.Permissions {
+
+ using System;
+ using System.IO;
+ using System.Security;
+ using System.Security.Util;
+ using System.Globalization;
+
+ [Serializable]
+[System.Runtime.InteropServices.ComVisible(true)]
+ public enum IsolatedStorageContainment {
+ None = 0x00,
+ DomainIsolationByUser = 0x10,
+ ApplicationIsolationByUser = 0x15,
+ AssemblyIsolationByUser = 0x20,
+ DomainIsolationByMachine = 0x30,
+ AssemblyIsolationByMachine = 0x40,
+ ApplicationIsolationByMachine = 0x45,
+ DomainIsolationByRoamingUser = 0x50,
+ AssemblyIsolationByRoamingUser = 0x60,
+ ApplicationIsolationByRoamingUser = 0x65,
+ AdministerIsolatedStorageByUser = 0x70,
+ //AdministerIsolatedStorageByMachine = 0x80,
+ UnrestrictedIsolatedStorage = 0xF0
+ };
+
+
+ [Serializable]
+#if !FEATURE_CORECLR
+ [SecurityPermissionAttribute( SecurityAction.InheritanceDemand, ControlEvidence = true, ControlPolicy = true )]
+#endif
+ [System.Runtime.InteropServices.ComVisible(true)]
+ abstract public class IsolatedStoragePermission
+ : CodeAccessPermission, IUnrestrictedPermission
+ {
+
+ //------------------------------------------------------
+ //
+ // PRIVATE STATE DATA
+ //
+ //------------------------------------------------------
+
+ /// <internalonly/>
+ internal long m_userQuota;
+ /// <internalonly/>
+ internal long m_machineQuota;
+ /// <internalonly/>
+ internal long m_expirationDays;
+ /// <internalonly/>
+ internal bool m_permanentData;
+ /// <internalonly/>
+ internal IsolatedStorageContainment m_allowed;
+
+ //------------------------------------------------------
+ //
+ // CONSTRUCTORS
+ //
+ //------------------------------------------------------
+
+ protected IsolatedStoragePermission(PermissionState state)
+ {
+ if (state == PermissionState.Unrestricted)
+ {
+ m_userQuota = Int64.MaxValue;
+ m_machineQuota = Int64.MaxValue;
+ m_expirationDays = Int64.MaxValue ;
+ m_permanentData = true;
+ m_allowed = IsolatedStorageContainment.UnrestrictedIsolatedStorage;
+ }
+ else if (state == PermissionState.None)
+ {
+ m_userQuota = 0;
+ m_machineQuota = 0;
+ m_expirationDays = 0;
+ m_permanentData = false;
+ m_allowed = IsolatedStorageContainment.None;
+ }
+ else
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
+ }
+ }
+
+ internal IsolatedStoragePermission(IsolatedStorageContainment UsageAllowed,
+ long ExpirationDays, bool PermanentData)
+
+ {
+ m_userQuota = 0; // typical demand won't include quota
+ m_machineQuota = 0; // typical demand won't include quota
+ m_expirationDays = ExpirationDays;
+ m_permanentData = PermanentData;
+ m_allowed = UsageAllowed;
+ }
+
+ internal IsolatedStoragePermission(IsolatedStorageContainment UsageAllowed,
+ long ExpirationDays, bool PermanentData, long UserQuota)
+
+ {
+ m_machineQuota = 0;
+ m_userQuota = UserQuota;
+ m_expirationDays = ExpirationDays;
+ m_permanentData = PermanentData;
+ m_allowed = UsageAllowed;
+ }
+
+
+ //------------------------------------------------------
+ //
+ // PUBLIC ACCESSOR METHODS
+ //
+ //------------------------------------------------------
+
+ // properties
+ public long UserQuota {
+ set{
+ m_userQuota = value;
+ }
+ get{
+ return m_userQuota;
+ }
+ }
+
+#if false
+ internal long MachineQuota {
+ set{
+ m_machineQuota = value;
+ }
+ get{
+ return m_machineQuota;
+ }
+ }
+ internal long ExpirationDays {
+ set{
+ m_expirationDays = value;
+ }
+ get{
+ return m_expirationDays;
+ }
+ }
+ internal bool PermanentData {
+ set{
+ m_permanentData = value;
+ }
+ get{
+ return m_permanentData;
+ }
+ }
+#endif
+
+ public IsolatedStorageContainment UsageAllowed {
+ set{
+ m_allowed = value;
+ }
+ get{
+ return m_allowed;
+ }
+ }
+
+
+ //------------------------------------------------------
+ //
+ // CODEACCESSPERMISSION IMPLEMENTATION
+ //
+ //------------------------------------------------------
+
+ public bool IsUnrestricted()
+ {
+ return m_allowed == IsolatedStorageContainment.UnrestrictedIsolatedStorage;
+ }
+
+
+ //------------------------------------------------------
+ //
+ // INTERNAL METHODS
+ //
+ //------------------------------------------------------
+ internal static long min(long x,long y) {return x>y?y:x;}
+ internal static long max(long x,long y) {return x<y?y:x;}
+
+#if FEATURE_CAS_POLICY
+ //------------------------------------------------------
+ //
+ // PUBLIC ENCODING METHODS
+ //
+ //------------------------------------------------------
+
+ private const String _strUserQuota = "UserQuota";
+ private const String _strMachineQuota = "MachineQuota";
+ private const String _strExpiry = "Expiry";
+ private const String _strPermDat = "Permanent";
+
+ public override SecurityElement ToXml()
+ {
+ return ToXml ( this.GetType().FullName );
+ }
+
+ internal SecurityElement ToXml(String permName)
+ {
+ SecurityElement esd = CodeAccessPermission.CreatePermissionElement( this, permName );
+ if (!IsUnrestricted())
+ {
+ esd.AddAttribute( "Allowed", Enum.GetName( typeof( IsolatedStorageContainment ), m_allowed ) );
+ if (m_userQuota>0)
+ {
+ esd.AddAttribute(_strUserQuota, (m_userQuota).ToString(CultureInfo.InvariantCulture)) ;
+ }
+ if (m_machineQuota>0)
+ {
+ esd.AddAttribute(_strMachineQuota, (m_machineQuota).ToString(CultureInfo.InvariantCulture)) ;
+ }
+ if (m_expirationDays>0)
+ {
+ esd.AddAttribute( _strExpiry, (m_expirationDays).ToString(CultureInfo.InvariantCulture)) ;
+ }
+ if (m_permanentData)
+ {
+ esd.AddAttribute(_strPermDat, (m_permanentData).ToString()) ;
+ }
+ }
+ else
+ {
+ esd.AddAttribute( "Unrestricted", "true" );
+ }
+ return esd;
+ }
+
+
+ public override void FromXml(SecurityElement esd)
+ {
+ CodeAccessPermission.ValidateElement( esd, this );
+
+ m_allowed = IsolatedStorageContainment.None; // default if no match
+
+ if (XMLUtil.IsUnrestricted(esd))
+ {
+ m_allowed = IsolatedStorageContainment.UnrestrictedIsolatedStorage;
+ }
+ else
+ {
+ String allowed = esd.Attribute( "Allowed" );
+
+ if (allowed != null)
+ m_allowed = (IsolatedStorageContainment)Enum.Parse( typeof( IsolatedStorageContainment ), allowed );
+ }
+
+ if (m_allowed == IsolatedStorageContainment.UnrestrictedIsolatedStorage)
+ {
+ m_userQuota = Int64.MaxValue;
+ m_machineQuota = Int64.MaxValue;
+ m_expirationDays = Int64.MaxValue ;
+ m_permanentData = true;
+ }
+ else
+ {
+ String param;
+ param = esd.Attribute (_strUserQuota) ;
+ m_userQuota = param != null ? Int64.Parse(param, CultureInfo.InvariantCulture) : 0 ;
+ param = esd.Attribute (_strMachineQuota) ;
+ m_machineQuota = param != null ? Int64.Parse(param, CultureInfo.InvariantCulture) : 0 ;
+ param = esd.Attribute (_strExpiry) ;
+ m_expirationDays = param != null ? Int64.Parse(param, CultureInfo.InvariantCulture) : 0 ;
+ param = esd.Attribute (_strPermDat) ;
+ m_permanentData = param != null ? (Boolean.Parse(param)) : false ;
+ }
+ }
+#endif // FEATURE_CAS_POLICY
+ }
+}