diff --git a/CASA/sharp/Novell.Casa.MiCasa/MiCasa.cs b/CASA/sharp/Novell.Casa.MiCasa/MiCasa.cs index 7fd9e433..e60ec0da 100644 --- a/CASA/sharp/Novell.Casa.MiCasa/MiCasa.cs +++ b/CASA/sharp/Novell.Casa.MiCasa/MiCasa.cs @@ -37,6 +37,10 @@ namespace Novell.Casa public static uint USERNAME_TYPE_LDAP_DN_F = 0x00000004; public static uint USERNAME_TYPE_EMAIL_F = 0x00000008; public static uint USERNAME_TYPE_OTHER_F = 0x00000010; + + private static uint SSCS_CRED_TYPE_BASIC_F = 0x00000001; + private static uint SSCS_CRED_TYPE_BINARY_F = 0x00000002; + private static uint SSCS_CRED_TYPE_SERVER_F = 0x00000004; public MiCasa() { @@ -149,7 +153,26 @@ namespace Novell.Casa string sSharedSecretID) { NativeCalls.RemoveCredential(ssFlags, sAppSecretID, sSharedSecretID); - } + } + + + public static void DeleteCredential( + uint ssFlags, + string sAppSecretID, + string sSharedSecretID) + { + DeleteCredential(ssFlags, sAppSecretID, sSharedSecretID, null); + } + + + public static void DeleteCredential( + uint ssFlags, + string sAppSecretID, + string sSharedSecretID, + WinLuid luid) + { + NativeCalls.DeleteCredential(ssFlags, sAppSecretID, sSharedSecretID, SSCS_CRED_TYPE_BASIC_F, luid); + } public static bool IsSecretPersistent( diff --git a/CASA/sharp/Novell.Casa.MiCasa/NativeCalls.cs b/CASA/sharp/Novell.Casa.MiCasa/NativeCalls.cs index 7106615e..ffea71ca 100644 --- a/CASA/sharp/Novell.Casa.MiCasa/NativeCalls.cs +++ b/CASA/sharp/Novell.Casa.MiCasa/NativeCalls.cs @@ -169,6 +169,16 @@ namespace Novell.Casa [In, Out] SSCS_EXT_T ext ); + [DllImport(NDK_LIBRARY)] + internal static extern int miCASADeleteCredential + ( + [In] uint ssFlags, + [In] SSCS_SECRET_ID_T appSecretID, + [In] SSCS_SECRET_ID_T sharedSecretID, + [In] uint iCredentialType, + [In, Out] SSCS_EXT_T ext + ); + [DllImport(NDK_LIBRARY)] internal static extern int miCASAIsSecretPersistent ( @@ -456,7 +466,8 @@ namespace Novell.Casa } } - + // deprecated because of multiple credential types. + // use miCASADeleteCredential internal static void RemoveCredential( uint ssFlags, string sAppSecretID, @@ -486,6 +497,54 @@ namespace Novell.Casa } + internal static void DeleteCredential( + uint ssFlags, + string sAppSecretID, + string sSharedSecretID, + uint iCredType, + WinLuid luid) + { + if (sAppSecretID == null || sAppSecretID.Length == 0) + throw new MiCasaException(MiCasaException.NSSCS_E_INVALID_PARAM); + + int rcode; + SSCS_SECRET_ID_T appSecretID = new SSCS_SECRET_ID_T(); + appSecretID.id = sAppSecretID; + appSecretID.len = sAppSecretID.Length + 1; + + SSCS_SECRET_ID_T sharedID = new SSCS_SECRET_ID_T(); + if (sSharedSecretID != null) + { + sharedID.len = sSharedSecretID.Length + 1; + sharedID.id = sSharedSecretID; + } + + SSCS_EXT_T ext = new SSCS_EXT_T(); + LUID sluid; + if ((luid != null) && + ((luid.GetHighPart() != 0) || (luid.GetLowPart() != 0))) + { + // allocate a structure to marshal + sluid = new LUID(); + sluid.luidHigh = luid.GetHighPart(); + sluid.luidLow = luid.GetLowPart(); + + ext.extID = 1; + ext.version = 1; + ext.ext = Marshal.AllocHGlobal(Marshal.SizeOf(sluid)); + + Marshal.StructureToPtr(sluid, ext.ext, false); + } + + rcode = miCASADeleteCredential(ssFlags, appSecretID, sharedID, iCredType, ext); + + if (rcode != 0) + { + throw new MiCasaException(rcode); + } + + } + internal static bool IsSecretPersistent(uint ssFlags, string id) {