SmtpNtlmAuthenticationModule.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / Mail / SmtpNtlmAuthenticationModule.cs / 2 / SmtpNtlmAuthenticationModule.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Net.Mail 
{ 
    using System;
    using System.Collections; 
    using System.IO;
    using System.Net;
    using System.Security.Permissions;
    using System.Security.Authentication.ExtendedProtection; 

    // 
 
#if MAKE_MAILCLIENT_PUBLIC
    internal 
#else
    internal
#endif
        class SmtpNtlmAuthenticationModule : ISmtpAuthenticationModule 
    {
        Hashtable sessions = new Hashtable(); 
 
        internal SmtpNtlmAuthenticationModule()
        { 
        }

        #region ISmtpAuthenticationModule Members
 
        // Security this method will access NetworkCredential properties that demand UnmanagedCode and Environment Permission
        [EnvironmentPermission(SecurityAction.Assert, Unrestricted=true)] 
        [SecurityPermission(SecurityAction.Assert, Flags=SecurityPermissionFlag.UnmanagedCode)] 
        public Authorization Authenticate(string challenge, NetworkCredential credential, object sessionCookie, string spn, ChannelBinding channelBindingToken)
        { 
            if(Logging.On)Logging.Enter(Logging.Web, this, "Authenticate", null);
            try {
                lock (this.sessions)
                { 
                    NTAuthentication clientContext = this.sessions[sessionCookie] as NTAuthentication;
                    if (clientContext == null) 
                    { 
                        if(credential == null){
                            return null; 
                        }

                        this.sessions[sessionCookie] =
                            clientContext = 
                            new NTAuthentication(false, "Ntlm", credential, spn, ContextFlags.Connection, channelBindingToken);
 
                    } 

                    string resp = clientContext.GetOutgoingBlob(challenge); 


                    if (!clientContext.IsCompleted)
                    { 
                        return new Authorization(resp, false);
                    } 
                    else 
                    {
                        this.sessions.Remove(sessionCookie); 
                        return new Authorization(resp, true);
                    }
                }
            } finally { 
                if(Logging.On)Logging.Exit(Logging.Web, this, "Authenticate", null);
            } 
        } 

        public string AuthenticationType 
        {
            get
            {
                return "ntlm"; 
            }
        } 
 
        public void CloseContext(object sessionCookie) {
            // This is a no-op since the context is not 
            // kept open by this module beyond auth completion.
        }

        #endregion 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Net.Mail 
{ 
    using System;
    using System.Collections; 
    using System.IO;
    using System.Net;
    using System.Security.Permissions;
    using System.Security.Authentication.ExtendedProtection; 

    // 
 
#if MAKE_MAILCLIENT_PUBLIC
    internal 
#else
    internal
#endif
        class SmtpNtlmAuthenticationModule : ISmtpAuthenticationModule 
    {
        Hashtable sessions = new Hashtable(); 
 
        internal SmtpNtlmAuthenticationModule()
        { 
        }

        #region ISmtpAuthenticationModule Members
 
        // Security this method will access NetworkCredential properties that demand UnmanagedCode and Environment Permission
        [EnvironmentPermission(SecurityAction.Assert, Unrestricted=true)] 
        [SecurityPermission(SecurityAction.Assert, Flags=SecurityPermissionFlag.UnmanagedCode)] 
        public Authorization Authenticate(string challenge, NetworkCredential credential, object sessionCookie, string spn, ChannelBinding channelBindingToken)
        { 
            if(Logging.On)Logging.Enter(Logging.Web, this, "Authenticate", null);
            try {
                lock (this.sessions)
                { 
                    NTAuthentication clientContext = this.sessions[sessionCookie] as NTAuthentication;
                    if (clientContext == null) 
                    { 
                        if(credential == null){
                            return null; 
                        }

                        this.sessions[sessionCookie] =
                            clientContext = 
                            new NTAuthentication(false, "Ntlm", credential, spn, ContextFlags.Connection, channelBindingToken);
 
                    } 

                    string resp = clientContext.GetOutgoingBlob(challenge); 


                    if (!clientContext.IsCompleted)
                    { 
                        return new Authorization(resp, false);
                    } 
                    else 
                    {
                        this.sessions.Remove(sessionCookie); 
                        return new Authorization(resp, true);
                    }
                }
            } finally { 
                if(Logging.On)Logging.Exit(Logging.Web, this, "Authenticate", null);
            } 
        } 

        public string AuthenticationType 
        {
            get
            {
                return "ntlm"; 
            }
        } 
 
        public void CloseContext(object sessionCookie) {
            // This is a no-op since the context is not 
            // kept open by this module beyond auth completion.
        }

        #endregion 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK