From 6ed1ab5f764a3a4120e82aad469ded92069b67e5 Mon Sep 17 00:00:00 2001 From: antiduh Date: Mon, 30 Jun 2014 14:49:26 +0000 Subject: [PATCH] Added more disposed checks. --- NSspi/Contexts/ClientContext.cs | 11 ++++++++--- NSspi/Contexts/ServerContext.cs | 11 ++++++++++- NSspi/Credentials/Credential.cs | 23 ++++++++++++++++++++--- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/NSspi/Contexts/ClientContext.cs b/NSspi/Contexts/ClientContext.cs index 7ebbcb5..a244634 100644 --- a/NSspi/Contexts/ClientContext.cs +++ b/NSspi/Contexts/ClientContext.cs @@ -33,15 +33,20 @@ namespace NSspi.Contexts SecureBuffer serverBuffer; SecureBufferAdapter serverAdapter; - - if ( (serverToken != null) && ( this.ContextHandle.IsInvalid ) ) + + if( this.Disposed ) + { + throw new ObjectDisposedException( "ClientContext" ); + } + else if( ( serverToken != null ) && ( this.ContextHandle.IsInvalid ) ) { throw new InvalidOperationException( "Out-of-order usage detected - have a server token, but no previous client token had been created." ); } - else if ( (serverToken == null) && ( this.ContextHandle.IsInvalid == false ) ) + else if( ( serverToken == null ) && ( this.ContextHandle.IsInvalid == false ) ) { throw new InvalidOperationException( "Must provide the server's response when continuing the init process." ); } + outTokenBuffer = new SecureBuffer( new byte[12288], BufferType.Token ); diff --git a/NSspi/Contexts/ServerContext.cs b/NSspi/Contexts/ServerContext.cs index 9de26ea..1b3b3b9 100644 --- a/NSspi/Contexts/ServerContext.cs +++ b/NSspi/Contexts/ServerContext.cs @@ -35,6 +35,11 @@ namespace NSspi.Contexts SecureBufferAdapter clientAdapter; SecureBufferAdapter outAdapter; + if( this.Disposed ) + { + throw new ObjectDisposedException( "ServerContext" ); + } + using ( clientAdapter = new SecureBufferAdapter( clientBuffer ) ) { using ( outAdapter = new SecureBufferAdapter( outBuffer ) ) @@ -112,7 +117,11 @@ namespace NSspi.Contexts SecurityStatus status = SecurityStatus.InternalError; bool gotRef = false; - if( impersonating ) + if( this.Disposed ) + { + throw new ObjectDisposedException( "ServerContext" ); + } + else if( impersonating ) { throw new InvalidOperationException( "Cannot impersonate again while already impersonating." ); } diff --git a/NSspi/Credentials/Credential.cs b/NSspi/Credentials/Credential.cs index ff3db8f..70b6ce5 100644 --- a/NSspi/Credentials/Credential.cs +++ b/NSspi/Credentials/Credential.cs @@ -126,12 +126,19 @@ namespace NSspi.Credentials { get { - QueryNameAttribCarrier carrier = new QueryNameAttribCarrier(); - - SecurityStatus status = SecurityStatus.InternalError; + QueryNameAttribCarrier carrier; + SecurityStatus status; string name = null; bool gotRef = false; + if( this.disposed ) + { + throw new ObjectDisposedException( "Credential" ); + } + + status = SecurityStatus.InternalError; + carrier = new QueryNameAttribCarrier(); + RuntimeHelpers.PrepareConstrainedRegions(); try { @@ -185,6 +192,11 @@ namespace NSspi.Credentials { get { + if( this.disposed ) + { + throw new ObjectDisposedException( "Credential" ); + } + return this.expiry; } } @@ -193,6 +205,11 @@ namespace NSspi.Credentials { get { + if( this.disposed ) + { + throw new ObjectDisposedException( "Credential" ); + } + return this.safeCredHandle; } }