Refactored Credential et al so that the security package is provided by name (string), and not an enum. Security packages are runtime enumerable, and new ones may be created that we don't have any idea of.

This commit is contained in:
antiduh
2014-06-30 15:36:20 +00:00
parent 5da12ad4c4
commit dec1509835
6 changed files with 13 additions and 42 deletions

View File

@@ -9,7 +9,7 @@ namespace NSspi.Credentials
{ {
public class ClientCredential : Credential public class ClientCredential : Credential
{ {
public ClientCredential( SecurityPackage package ) public ClientCredential( string package )
: base( package ) : base( package )
{ {
Init(); Init();
@@ -22,29 +22,14 @@ namespace NSspi.Credentials
TimeStamp rawExpiry = new TimeStamp(); TimeStamp rawExpiry = new TimeStamp();
// -- Package -- // -- Package --
if( this.SecurityPackage == SecurityPackage.Kerberos ) // Copy off for the call, since this.SecurityPackage is a property.
{ packageName = this.SecurityPackage;
packageName = PackageNames.Kerberos;
}
else if( this.SecurityPackage == SecurityPackage.Negotiate )
{
packageName = PackageNames.Negotiate;
}
else if( this.SecurityPackage == SecurityPackage.NTLM )
{
packageName = PackageNames.Ntlm;
}
else
{
throw new ArgumentException( "Invalid value provided for the 'package' parameter." );
}
// -- Credential -- // -- Credential --
// Client uses outbound credentials. // Client uses outbound credentials.
use = CredentialUse.Outbound; use = CredentialUse.Outbound;
// -- Invoke -- // -- Invoke --
SecurityStatus status = SecurityStatus.InternalError; SecurityStatus status = SecurityStatus.InternalError;
this.Handle = new SafeCredentialHandle(); this.Handle = new SafeCredentialHandle();

View File

@@ -16,13 +16,13 @@ namespace NSspi.Credentials
{ {
private bool disposed; private bool disposed;
private SecurityPackage securityPackage; private string securityPackage;
private SafeCredentialHandle safeCredHandle; private SafeCredentialHandle safeCredHandle;
private DateTime expiry; private DateTime expiry;
public Credential( SecurityPackage package ) public Credential( string package )
{ {
this.disposed = false; this.disposed = false;
this.securityPackage = package; this.securityPackage = package;
@@ -35,7 +35,7 @@ namespace NSspi.Credentials
Dispose( false ); Dispose( false );
} }
public SecurityPackage SecurityPackage public string SecurityPackage
{ {
get get
{ {

View File

@@ -9,7 +9,7 @@ namespace NSspi.Credentials
{ {
public class ServerCredential : Credential public class ServerCredential : Credential
{ {
public ServerCredential( SecurityPackage package ) public ServerCredential( string package )
: base( package ) : base( package )
{ {
Init(); Init();
@@ -22,22 +22,8 @@ namespace NSspi.Credentials
TimeStamp rawExpiry = new TimeStamp(); TimeStamp rawExpiry = new TimeStamp();
// -- Package -- // -- Package --
if( this.SecurityPackage == SecurityPackage.Kerberos ) // Copy off for the call, since this.SecurityPackage is a property.
{ packageName = this.SecurityPackage;
packageName = PackageNames.Kerberos;
}
else if( this.SecurityPackage == SecurityPackage.Negotiate )
{
packageName = PackageNames.Negotiate;
}
else if( this.SecurityPackage == SecurityPackage.NTLM )
{
packageName = PackageNames.Ntlm;
}
else
{
throw new ArgumentException( "Invalid value provided for the 'package' parameter." );
}
// -- Credential -- // -- Credential --
// Server uses Inbound credentials. // Server uses Inbound credentials.

View File

@@ -35,7 +35,7 @@ namespace NSspi
try try
{ {
clientCred = new ClientCredential( SecurityPackage.Negotiate ); clientCred = new ClientCredential( PackageNames.Negotiate );
Console.Out.WriteLine( clientCred.Name ); Console.Out.WriteLine( clientCred.Name );
client = new ClientContext( client = new ClientContext(
@@ -50,7 +50,7 @@ namespace NSspi
ContextAttrib.Delegate ContextAttrib.Delegate
); );
serverCred = new ServerCredential( SecurityPackage.Negotiate ); serverCred = new ServerCredential( PackageNames.Negotiate );
server = new ServerContext( server = new ServerContext(
serverCred, serverCred,

View File

@@ -48,7 +48,7 @@ namespace TestClient
this.FormClosing += Form1_FormClosing; this.FormClosing += Form1_FormClosing;
// --- SSPI --- // --- SSPI ---
this.cred = new ClientCredential( SecurityPackage.Negotiate ); this.cred = new ClientCredential( PackageNames.Negotiate );
this.context = new ClientContext( this.context = new ClientContext(
cred, cred,

View File

@@ -34,7 +34,7 @@ namespace TestServer
{ {
InitializeComponent(); InitializeComponent();
this.serverCred = new ServerCredential( SecurityPackage.Negotiate ); this.serverCred = new ServerCredential( PackageNames.Negotiate );
this.serverContext = new ServerContext( this.serverContext = new ServerContext(
serverCred, serverCred,