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
|
namespace NSspi.Credentials
|
||||||
{
|
{
|
||||||
public class ClientCredential : Credential
|
public class ClientCredential : CurrentCredential
|
||||||
{
|
{
|
||||||
public ClientCredential( string package )
|
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
|
namespace NSspi.Credentials
|
||||||
{
|
{
|
||||||
public class ServerCredential : Credential
|
public class ServerCredential : CurrentCredential
|
||||||
{
|
{
|
||||||
public ServerCredential( string package )
|
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\ContextQueryAttrib.cs" />
|
||||||
<Compile Include="Contexts\ImpersonationHandle.cs" />
|
<Compile Include="Contexts\ImpersonationHandle.cs" />
|
||||||
<Compile Include="Contexts\SafeContextHandle.cs" />
|
<Compile Include="Contexts\SafeContextHandle.cs" />
|
||||||
|
<Compile Include="Credentials\CurrentCredential.cs" />
|
||||||
<Compile Include="SecPkgInfo.cs" />
|
<Compile Include="SecPkgInfo.cs" />
|
||||||
<Compile Include="Contexts\ServerContext.cs" />
|
<Compile Include="Contexts\ServerContext.cs" />
|
||||||
<Compile Include="Credentials\ClientCredential.cs" />
|
<Compile Include="Credentials\ClientCredential.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user