Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / Mail / smtppermission.cs / 1 / smtppermission.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net.Mail {
using System.Collections;
using System.Security;
using System.Security.Permissions;
using System.Globalization;
using System.Threading;
///
public enum SmtpAccess { None = 0, Connect = 1, ConnectToUnrestrictedPort = 2};
///
[ AttributeUsage( AttributeTargets.Method | AttributeTargets.Constructor |
AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Assembly,
AllowMultiple = true, Inherited = false )]
[Serializable]
public sealed class SmtpPermissionAttribute: CodeAccessSecurityAttribute
{
private const string strAccess = "Access";
private string access = null;
///
public SmtpPermissionAttribute(SecurityAction action): base( action )
{
}
public string Access {
get{
return access;
}
set{
access = value;
}
}
///
public override IPermission CreatePermission()
{
SmtpPermission perm = null;
if (Unrestricted) {
perm = new SmtpPermission(PermissionState.Unrestricted);
}
else {
perm = new SmtpPermission(PermissionState.None);
if (access != null) {
if (0 == string.Compare(access, "Connect", StringComparison.OrdinalIgnoreCase)) {
perm.AddPermission(SmtpAccess.Connect);
}
else if (0 == string.Compare(access, "ConnectToUnrestrictedPort", StringComparison.OrdinalIgnoreCase)) {
perm.AddPermission(SmtpAccess.ConnectToUnrestrictedPort);
}
else if (0 == string.Compare(access, "None", StringComparison.OrdinalIgnoreCase)) {
perm.AddPermission(SmtpAccess.None);
}
else {
throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strAccess, access));
}
}
}
return perm;
}
}
///
[Serializable]
public sealed class SmtpPermission: CodeAccessPermission, IUnrestrictedPermission {
SmtpAccess access;
private bool unrestricted;
///
public SmtpPermission(PermissionState state) {
if (state == PermissionState.Unrestricted){
access = SmtpAccess.ConnectToUnrestrictedPort;
unrestricted = true;
}
else{
access = SmtpAccess.None;
}
}
public SmtpPermission(bool unrestricted) {
if (unrestricted){
access = SmtpAccess.ConnectToUnrestrictedPort;
this.unrestricted = true;
}
else{
access = SmtpAccess.None;
}
}
///
public SmtpPermission(SmtpAccess access) {
this.access = access;
}
public SmtpAccess Access {
get{
return access;
}
}
///
public void AddPermission(SmtpAccess access) {
if (access > this.access)
this.access = access;
}
///
public bool IsUnrestricted() {
return unrestricted;
}
///
public override IPermission Copy() {
if(unrestricted){
return new SmtpPermission(true);
}
return new SmtpPermission(access);
}
///
public override IPermission Union(IPermission target) {
if (target==null) {
return this.Copy();
}
SmtpPermission other = target as SmtpPermission;
if(other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if(unrestricted || other.IsUnrestricted()){
return new SmtpPermission(true);
}
return new SmtpPermission(this.access > other.access ? this.access : other.access);
}
///
public override IPermission Intersect(IPermission target) {
if (target == null) {
return null;
}
SmtpPermission other = target as SmtpPermission;
if(other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if(IsUnrestricted() && other.IsUnrestricted()){
return new SmtpPermission(true);
}
return new SmtpPermission(this.access < other.access ? this.access : other.access);
}
///
public override bool IsSubsetOf(IPermission target) {
// Pattern suggested by security engine
if (target == null) {
return (access == SmtpAccess.None);
}
SmtpPermission other = target as SmtpPermission;
if (other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if(unrestricted && !other.IsUnrestricted()){
return false;
}
return (other.access >= access);
}
///
public override void FromXml(SecurityElement securityElement) {
if (securityElement == null) {
throw new ArgumentNullException("securityElement");
}
if (!securityElement.Tag.Equals("IPermission")) {
throw new ArgumentException(SR.GetString(SR.net_not_ipermission), "securityElement");
}
string className = securityElement.Attribute("class");
if (className == null) {
throw new ArgumentException(SR.GetString(SR.net_no_classname), "securityElement");
}
if (className.IndexOf(this.GetType().FullName) < 0) {
throw new ArgumentException(SR.GetString(SR.net_no_typename), "securityElement");
}
String str = securityElement.Attribute("Unrestricted");
if (str != null) {
if (0 == string.Compare( str, "true", StringComparison.OrdinalIgnoreCase)){
access = SmtpAccess.ConnectToUnrestrictedPort;
unrestricted = true;
return;
}
}
str = securityElement.Attribute("Access");
if (str != null) {
if(0 == string.Compare(str, "Connect", StringComparison.OrdinalIgnoreCase)){
access = SmtpAccess.Connect;
}
else if(0 == string.Compare(str, "ConnectToUnrestrictedPort", StringComparison.OrdinalIgnoreCase)){
access = SmtpAccess.ConnectToUnrestrictedPort;
}
else if(0 == string.Compare(str, "None", StringComparison.OrdinalIgnoreCase)){
access = SmtpAccess.None;
}
else{
throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val_in_element), "Access");
}
}
}
///
public override SecurityElement ToXml() {
SecurityElement securityElement = new SecurityElement( "IPermission" );
securityElement.AddAttribute("class", this.GetType().FullName + ", " + this.GetType().Module.Assembly.FullName.Replace( '\"', '\'' ));
securityElement.AddAttribute("version", "1");
if(unrestricted){
securityElement.AddAttribute("Unrestricted", "true");
return securityElement;
}
if (access == SmtpAccess.Connect) {
securityElement.AddAttribute("Access", "Connect");
}
else if (access == SmtpAccess.ConnectToUnrestrictedPort) {
securityElement.AddAttribute("Access", "ConnectToUnrestrictedPort");
}
return securityElement;
}
}// class SmtpPermission
} // namespace System.Net
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MonitorWrapper.cs
- DatePicker.cs
- SocketAddress.cs
- FutureFactory.cs
- DataSourceProvider.cs
- LoginStatusDesigner.cs
- CqlGenerator.cs
- HealthMonitoringSectionHelper.cs
- DateTime.cs
- EntityClientCacheKey.cs
- DivideByZeroException.cs
- ObjectDataSourceEventArgs.cs
- Native.cs
- XmlSchemaInfo.cs
- CookielessData.cs
- XmlSchemaCompilationSettings.cs
- FixedBufferAttribute.cs
- MouseButton.cs
- MethodCallTranslator.cs
- CodeMemberMethod.cs
- EventManager.cs
- Mappings.cs
- MemoryRecordBuffer.cs
- XmlUtf8RawTextWriter.cs
- FileDialog_Vista_Interop.cs
- EntityDataSourceView.cs
- FixedPageProcessor.cs
- WebPartUserCapability.cs
- ScrollBarRenderer.cs
- TypedColumnHandler.cs
- OutputCacheProfile.cs
- OracleInternalConnection.cs
- ConstantExpression.cs
- EncryptedXml.cs
- CodeComment.cs
- SyntaxCheck.cs
- FormatterServices.cs
- IndentedWriter.cs
- XmlCharCheckingWriter.cs
- CodeGroup.cs
- ConfigurationException.cs
- UnsafeNativeMethods.cs
- COAUTHIDENTITY.cs
- DataBoundLiteralControl.cs
- BamlVersionHeader.cs
- AnnotationDocumentPaginator.cs
- ObjectDataSourceFilteringEventArgs.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- Win32KeyboardDevice.cs
- SapiGrammar.cs
- diagnosticsswitches.cs
- ExpressionPrefixAttribute.cs
- EdmMember.cs
- MulticastIPAddressInformationCollection.cs
- SecurityTokenAuthenticator.cs
- CheckBoxList.cs
- Typography.cs
- _ProxyChain.cs
- LocalValueEnumerator.cs
- OneOfTypeConst.cs
- COM2IPerPropertyBrowsingHandler.cs
- Panel.cs
- AsnEncodedData.cs
- ColorTransformHelper.cs
- PeerToPeerException.cs
- DPTypeDescriptorContext.cs
- mda.cs
- VectorCollection.cs
- BooleanFunctions.cs
- SocketSettings.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- ExpressionVisitorHelpers.cs
- BamlLocalizer.cs
- ValidatedControlConverter.cs
- VectorKeyFrameCollection.cs
- CodeCommentStatementCollection.cs
- BrowsableAttribute.cs
- Socket.cs
- ObjectListCommand.cs
- Point3DValueSerializer.cs
- HierarchicalDataSourceConverter.cs
- CopyOfAction.cs
- SspiSafeHandles.cs
- HebrewCalendar.cs
- TrackingExtract.cs
- BitmapDecoder.cs
- EventLogLink.cs
- ProvidersHelper.cs
- ZoneIdentityPermission.cs
- InputProcessorProfilesLoader.cs
- VirtualPathData.cs
- XmlILIndex.cs
- TraceHelpers.cs
- AggregatePushdown.cs
- WindowsScrollBar.cs
- LoadedOrUnloadedOperation.cs
- DataFormats.cs
- HtmlHead.cs
- NullableLongAverageAggregationOperator.cs
- OutputCacheSettings.cs