Refactored the common code in ClientCredential and ServerCredential to a common class, CurrentCredential.
This commit is contained in:
@@ -7,60 +7,11 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace NSspi.Credentials
|
||||
{
|
||||
public class ClientCredential : Credential
|
||||
public class ClientCredential : CurrentCredential
|
||||
{
|
||||
public ClientCredential( string package )
|
||||
: base( package )
|
||||
: base( package, CredentialUse.Outbound )
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
private void Init( )
|
||||
{
|
||||
string packageName;
|
||||
CredentialUse use;
|
||||
TimeStamp rawExpiry = new TimeStamp();
|
||||
|
||||
// -- Package --
|
||||
// Copy off for the call, since this.SecurityPackage is a property.
|
||||
packageName = this.SecurityPackage;
|
||||
|
||||
// -- Credential --
|
||||
// Client uses outbound credentials.
|
||||
use = CredentialUse.Outbound;
|
||||
|
||||
// -- Invoke --
|
||||
SecurityStatus status = SecurityStatus.InternalError;
|
||||
|
||||
this.Handle = new SafeCredentialHandle();
|
||||
|
||||
// The finally clause is the actual constrained region. The VM pre-allocates any stack space,
|
||||
// performs any allocations it needs to prepare methods for execution, and postpones any
|
||||
// instances of the 'uncatchable' exceptions (ThreadAbort, StackOverflow, OutOfMemory).
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
try { }
|
||||
finally
|
||||
{
|
||||
status = CredentialNativeMethods.AcquireCredentialsHandle(
|
||||
null,
|
||||
packageName,
|
||||
use,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
ref this.Handle.rawHandle,
|
||||
ref rawExpiry
|
||||
);
|
||||
}
|
||||
|
||||
if( status != SecurityStatus.OK )
|
||||
{
|
||||
throw new SSPIException( "Failed to call AcquireCredentialHandle", status );
|
||||
}
|
||||
|
||||
this.Expiry = rawExpiry.ToDateTime();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
59
NSspi/Credentials/CurrentCredential.cs
Normal file
59
NSspi/Credentials/CurrentCredential.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NSspi.Credentials
|
||||
{
|
||||
public class CurrentCredential : Credential
|
||||
{
|
||||
public CurrentCredential( string securityPackage, CredentialUse use ) :
|
||||
base( securityPackage )
|
||||
{
|
||||
Init( use );
|
||||
}
|
||||
|
||||
private void Init( CredentialUse use )
|
||||
{
|
||||
string packageName;
|
||||
TimeStamp rawExpiry = new TimeStamp();
|
||||
SecurityStatus status = SecurityStatus.InternalError;
|
||||
|
||||
// -- Package --
|
||||
// Copy off for the call, since this.SecurityPackage is a property.
|
||||
packageName = this.SecurityPackage;
|
||||
|
||||
this.Handle = new SafeCredentialHandle();
|
||||
|
||||
// The finally clause is the actual constrained region. The VM pre-allocates any stack space,
|
||||
// performs any allocations it needs to prepare methods for execution, and postpones any
|
||||
// instances of the 'uncatchable' exceptions (ThreadAbort, StackOverflow, OutOfMemory).
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
try { }
|
||||
finally
|
||||
{
|
||||
status = CredentialNativeMethods.AcquireCredentialsHandle(
|
||||
null,
|
||||
packageName,
|
||||
use,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
ref this.Handle.rawHandle,
|
||||
ref rawExpiry
|
||||
);
|
||||
}
|
||||
|
||||
if ( status != SecurityStatus.OK )
|
||||
{
|
||||
throw new SSPIException( "Failed to call AcquireCredentialHandle", status );
|
||||
}
|
||||
|
||||
this.Expiry = rawExpiry.ToDateTime();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -7,61 +7,11 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace NSspi.Credentials
|
||||
{
|
||||
public class ServerCredential : Credential
|
||||
public class ServerCredential : CurrentCredential
|
||||
{
|
||||
public ServerCredential( string package )
|
||||
: base( package )
|
||||
: base( package, CredentialUse.Inbound )
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
private void Init()
|
||||
{
|
||||
string packageName;
|
||||
CredentialUse use;
|
||||
TimeStamp rawExpiry = new TimeStamp();
|
||||
|
||||
// -- Package --
|
||||
// Copy off for the call, since this.SecurityPackage is a property.
|
||||
packageName = this.SecurityPackage;
|
||||
|
||||
// -- Credential --
|
||||
// Server uses Inbound credentials.
|
||||
use = CredentialUse.Inbound;
|
||||
|
||||
// -- Invoke --
|
||||
|
||||
SecurityStatus status = SecurityStatus.InternalError;
|
||||
|
||||
this.Handle = new SafeCredentialHandle();
|
||||
|
||||
// The finally clause is the actual constrained region. The VM pre-allocates any stack space,
|
||||
// performs any allocations it needs to prepare methods for execution, and postpones any
|
||||
// instances of the 'uncatchable' exceptions (ThreadAbort, StackOverflow, OutOfMemory).
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
try { }
|
||||
finally
|
||||
{
|
||||
status = CredentialNativeMethods.AcquireCredentialsHandle(
|
||||
null,
|
||||
packageName,
|
||||
use,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero,
|
||||
ref this.Handle.rawHandle,
|
||||
ref rawExpiry
|
||||
);
|
||||
}
|
||||
|
||||
if( status != SecurityStatus.OK )
|
||||
{
|
||||
throw new SSPIException( "Failed to call AcquireCredentialHandle", status );
|
||||
}
|
||||
|
||||
this.Expiry = rawExpiry.ToDateTime();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
<Compile Include="Contexts\ContextQueryAttrib.cs" />
|
||||
<Compile Include="Contexts\ImpersonationHandle.cs" />
|
||||
<Compile Include="Contexts\SafeContextHandle.cs" />
|
||||
<Compile Include="Credentials\CurrentCredential.cs" />
|
||||
<Compile Include="SecPkgInfo.cs" />
|
||||
<Compile Include="Contexts\ServerContext.cs" />
|
||||
<Compile Include="Credentials\ClientCredential.cs" />
|
||||
|
||||
Reference in New Issue
Block a user