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 ClientCredential( SecurityPackage package )
public ClientCredential( string package )
: base( package )
{
Init();
@@ -22,29 +22,14 @@ namespace NSspi.Credentials
TimeStamp rawExpiry = new TimeStamp();
// -- Package --
if( this.SecurityPackage == SecurityPackage.Kerberos )
{
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." );
}
// 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();

View File

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

View File

@@ -9,7 +9,7 @@ namespace NSspi.Credentials
{
public class ServerCredential : Credential
{
public ServerCredential( SecurityPackage package )
public ServerCredential( string package )
: base( package )
{
Init();
@@ -22,22 +22,8 @@ namespace NSspi.Credentials
TimeStamp rawExpiry = new TimeStamp();
// -- Package --
if( this.SecurityPackage == SecurityPackage.Kerberos )
{
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." );
}
// Copy off for the call, since this.SecurityPackage is a property.
packageName = this.SecurityPackage;
// -- Credential --
// Server uses Inbound credentials.

View File

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

View File

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

View File

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