Bug 133386 fixes

This commit is contained in:
Jim Norman 2006-02-14 00:40:33 +00:00
parent 96b2637e43
commit 72c87b8e2e
4 changed files with 975 additions and 939 deletions

View File

@ -20,415 +20,446 @@
* *
***********************************************************************/ ***********************************************************************/
using System; using System;
using System.Collections; using System.Collections;
using System.Xml; using System.Xml;
using System.IO; using System.IO;
using System.Collections.Specialized; using System.Collections.Specialized;
using Novell.CASA.DataEngines.Common; using Novell.CASA.DataEngines.Common;
using Novell.CASA.CASAPolicy; using Novell.CASA.CASAPolicy;
#if LINUX #if LINUX
using Novell.CASA.GUI; using Novell.CASA.GUI;
#endif #endif
namespace Novell.CASA.DataEngines namespace Novell.CASA.DataEngines
{ {
public class AD public class AD
{ {
private miCASAEngine micasaengine; private miCASAEngine micasaengine;
#if LINUX #if LINUX
private GKEngine gkEngine = null; private GKEngine gkEngine = null;
private KWalletEngine kwEngine = null; private KWalletEngine kwEngine = null;
#endif #endif
private AggregationPol aggPol; private AggregationPol aggPol;
public AD() public AD()
{ {
// Always Aggregate miCASA. // Always Aggregate miCASA.
micasaengine = new miCASAEngine(); micasaengine = new miCASAEngine();
#if LINUX #if LINUX
kwEngine = new KWalletEngine(); kwEngine = new KWalletEngine();
gkEngine = new GKEngine(); gkEngine = new GKEngine();
#endif #endif
/* /*
// Reading Policy to see what else needs to be Aggregated. // Reading Policy to see what else needs to be Aggregated.
aggPol = (AggregationPol) ICASAPol.GetPolicy(CASAPolType.AGGREGATION_POL); aggPol = (AggregationPol) ICASAPol.GetPolicy(CASAPolType.AGGREGATION_POL);
if (aggPol != null ) if (aggPol != null )
{ {
ArrayList stores = aggPol.StoreList; ArrayList stores = aggPol.StoreList;
IEnumerator enumerator = stores.GetEnumerator(); IEnumerator enumerator = stores.GetEnumerator();
while(enumerator.MoveNext()) while(enumerator.MoveNext())
{ {
string storeID = (((Store)(enumerator.Current)).StoreName); string storeID = (((Store)(enumerator.Current)).StoreName);
if(storeID.Equals(ConstStrings.KW)) if(storeID.Equals(ConstStrings.KW))
{ {
Logger.DbgLog("A-D Lib: KWallet Set up for Aggregation"); Logger.DbgLog("A-D Lib: KWallet Set up for Aggregation");
kwEngine = new KWalletEngine(); kwEngine = new KWalletEngine();
} }
else if(storeID.Equals(ConstStrings.GK)) else if(storeID.Equals(ConstStrings.GK))
{ {
Logger.DbgLog("A-D Lib:Gnome Keyring Set up for Aggregation"); Logger.DbgLog("A-D Lib:Gnome Keyring Set up for Aggregation");
gkEngine = new GKEngine(); gkEngine = new GKEngine();
} }
// Console.WriteLine("StoreName = " + ((Store)(enumerator.Current)).StoreName + "StoreId = " + ((Store)(enumerator.Current)).StoreId); // Console.WriteLine("StoreName = " + ((Store)(enumerator.Current)).StoreName + "StoreId = " + ((Store)(enumerator.Current)).StoreId);
} }
} }
*/ */
} }
public XmlDocument Aggregate() public XmlDocument Aggregate()
{ {
#if LINUX #if LINUX
gkEngine = null; gkEngine = null;
kwEngine = null; kwEngine = null;
#endif #endif
//Read the Policy Just before you aggregate //Read the Policy Just before you aggregate
// Reading Policy to see what else needs to be Aggregated. // Reading Policy to see what else needs to be Aggregated.
aggPol = (AggregationPol) ICASAPol.GetPolicy(CASAPolType.AGGREGATION_POL); aggPol = (AggregationPol) ICASAPol.GetPolicy(CASAPolType.AGGREGATION_POL);
if (aggPol != null ) if (aggPol != null )
{ {
ArrayList stores = aggPol.StoreList; ArrayList stores = aggPol.StoreList;
IEnumerator enumerator = stores.GetEnumerator(); IEnumerator enumerator = stores.GetEnumerator();
while(enumerator.MoveNext()) while(enumerator.MoveNext())
{ {
string storeID = (((Store)(enumerator.Current)).StoreName); string storeID = (((Store)(enumerator.Current)).StoreName);
#if LINUX #if LINUX
if(storeID.Equals(ConstStrings.KW)) if(storeID.Equals(ConstStrings.KW))
{ {
Logger.DbgLog("A-D Lib: KWallet Set up for Aggregation"); Logger.DbgLog("A-D Lib: KWallet Set up for Aggregation");
kwEngine = new KWalletEngine(); kwEngine = new KWalletEngine();
} }
else if(storeID.Equals(ConstStrings.GK)) else if(storeID.Equals(ConstStrings.GK))
{ {
Logger.DbgLog("A-D Lib:Gnome Keyring Set up for Aggregation"); Logger.DbgLog("A-D Lib:Gnome Keyring Set up for Aggregation");
gkEngine = new GKEngine(); gkEngine = new GKEngine();
} }
#endif #endif
// Console.WriteLine("StoreName = " + ((Store)(enumerator.Current)).StoreName + "StoreId = " + ((Store)(enumerator.Current)).StoreId); // Console.WriteLine("StoreName = " + ((Store)(enumerator.Current)).StoreName + "StoreId = " + ((Store)(enumerator.Current)).StoreId);
} }
} }
XmlDocument ccf = new XmlDocument(); XmlDocument ccf = new XmlDocument();
XmlElement elem = ccf.CreateElement("CCF"); XmlElement elem = ccf.CreateElement("CCF");
ccf.AppendChild(elem); ccf.AppendChild(elem);
// TBD: Lookup Policy here and maybe send it via constructors // TBD: Lookup Policy here and maybe send it via constructors
XmlNode micasaEnum = micasaengine.Aggregate(); XmlNode micasaEnum = micasaengine.Aggregate();
if (micasaEnum != null) //Atleast <miCASA> should come incase of no secrets if (micasaEnum != null) //Atleast <miCASA> should come incase of no secrets
{ {
XmlNode gotit = ccf.ImportNode(micasaEnum,true); XmlNode gotit = ccf.ImportNode(micasaEnum,true);
ccf.DocumentElement.AppendChild(gotit); ccf.DocumentElement.AppendChild(gotit);
} }
else else
{ {
// Null comes only when it failed to talk to miCASA. // Null comes only when it failed to talk to miCASA.
#if LINUX #if LINUX
Logger.DbgLog("A-D Lib:Failed to Connect to miCASA"); Logger.DbgLog("A-D Lib:Failed to Connect to miCASA");
#endif #endif
} }
#if LINUX #if LINUX
if (gkEngine != null) if (gkEngine != null)
{ {
XmlNode gkSecrets = gkEngine.Aggregate(); XmlNode gkSecrets = gkEngine.Aggregate();
if( null != gkSecrets ) if( null != gkSecrets )
{ {
XmlNode gkImportedNode = ccf.ImportNode(gkSecrets,true); XmlNode gkImportedNode = ccf.ImportNode(gkSecrets,true);
ccf.DocumentElement.AppendChild(gkImportedNode); ccf.DocumentElement.AppendChild(gkImportedNode);
} }
else else
{ {
Logger.DbgLog("A-D Lib:Failed to Connect to Gnome Keyring"); Logger.DbgLog("A-D Lib:Failed to Connect to Gnome Keyring");
} }
} }
if(kwEngine != null ) if(kwEngine != null )
{ {
XmlNode KwEnum = kwEngine.Aggregate(); XmlNode KwEnum = kwEngine.Aggregate();
if (KwEnum != null) //Atleast <KWallet> should come incase of no secrets if (KwEnum != null) //Atleast <KWallet> should come incase of no secrets
{ {
XmlNode kwImported = ccf.ImportNode(KwEnum,true); XmlNode kwImported = ccf.ImportNode(KwEnum,true);
ccf.DocumentElement.AppendChild(kwImported); ccf.DocumentElement.AppendChild(kwImported);
} }
else else
{ {
// Null comes only when it failed to talk to Kwallet. // Null comes only when it failed to talk to Kwallet.
Logger.DbgLog("A-D Lib:Failed to Connect to KWallet"); Logger.DbgLog("A-D Lib:Failed to Connect to KWallet");
} }
} }
#endif #endif
return ccf; return ccf;
} }
/******************************************************************************** /********************************************************************************
Modifying a Secret Modifying a Secret
SetSecret will modify the Value(s) of a Key(s) for an existing secret SetSecret will modify the Value(s) of a Key(s) for an existing secret
SetSecret will also add new secrets SetSecret will also add new secrets
public int SetSecret(XmlNode secret, int StoreID) public int SetSecret(XmlNode secret, int StoreID)
Parameters Parameters
secret : Secrets XMLNode secret : Secrets XMLNode
1. If a Key node of a secret is missing then that key will be deleted 1. If a Key node of a secret is missing then that key will be deleted
2. For Gnome keyring, Key having Id "GkPassword" cannot be deleted as 2. For Gnome keyring, Key having Id "GkPassword" cannot be deleted as
Gnome Api's do not allow it. Gnome Api's do not allow it.
3. All Time nodes for a Secret need not be passed as they cannot be set. 3. All Time nodes for a Secret need not be passed as they cannot be set.
4. Keyring attributes have a fixed datatype of Int and String. 4. Keyring attributes have a fixed datatype of Int and String.
Currently we support only String types. To support int types CCF needs to be modified accordingly. Currently we support only String types. To support int types CCF needs to be modified accordingly.
5. SetSecret overloaded method, without the opnType parameter, is not supported for GnomeKeyring 5. SetSecret overloaded method, without the opnType parameter, is not supported for GnomeKeyring
opnType : Operation Type opnType : Operation Type
ConstStrings.OPERATION_ADD_SECRET ConstStrings.OPERATION_ADD_SECRET
ConstStrings.OPERATION_MODIFY_SECRET ConstStrings.OPERATION_MODIFY_SECRET
StoreID : int value StoreID : int value
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3; Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3;
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4 Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4
Returns Returns
An Error code or 0 if operation is successfull. An Error code or 0 if operation is successfull.
*********************************************************************************/ *********************************************************************************/
public int SetSecret(XmlNode secret, int opnType, int StoreID) public int SetSecret(XmlNode secret, int opnType, int StoreID)
{ {
if (StoreID == ConstStrings.CASA_STORE_MICASA) if (StoreID == ConstStrings.CASA_STORE_MICASA)
return micasaengine.SetSecret(secret, opnType); return micasaengine.SetSecret(secret, opnType);
#if LINUX #if LINUX
if (StoreID == ConstStrings.CASA_STORE_KWALLET) if (StoreID == ConstStrings.CASA_STORE_KWALLET)
return kwEngine.SetSecret(secret, opnType); return kwEngine.SetSecret(secret, opnType);
if (StoreID == ConstStrings.CASA_STORE_GK) if (StoreID == ConstStrings.CASA_STORE_GK)
return gkEngine.SetSecret(secret, opnType); return gkEngine.SetSecret(secret, opnType);
#endif #endif
else else
{ {
#if LINUX #if LINUX
Logger.DbgLog("A-D Lib:Failed to Set Secret in to miCASA"); Logger.DbgLog("A-D Lib:Failed to Set Secret in to miCASA");
#endif #endif
return -1; return -1;
} }
} }
/******************************************************************************** /********************************************************************************
Modifying a Secret Modifying a Secret
SetSecret will modify the Value(s) of a Key(s) for an existing secret SetSecret will modify the Value(s) of a Key(s) for an existing secret
SetSecret will also add new secrets SetSecret will also add new secrets
public int SetSecret(XmlNode secret, int StoreID) public int SetSecret(XmlNode secret, int StoreID)
Parameters Parameters
secret : Secrets XMLNode secret : Secrets XMLNode
1. If a Key node of a secret is missing then that key will be deleted 1. If a Key node of a secret is missing then that key will be deleted
2. For Gnome keyring, Key having Id "GkPassword" cannot be deleted as 2. For Gnome keyring, Key having Id "GkPassword" cannot be deleted as
Gnome Api's do not allow it. Gnome Api's do not allow it.
3. All Time nodes for a Secret need not be passed as they cannot be set. 3. All Time nodes for a Secret need not be passed as they cannot be set.
4. Keyring attributes have a fixed datatype of Int and String. 4. Keyring attributes have a fixed datatype of Int and String.
Currently we support only String types. To support int types CCF needs to be modified accordingly. Currently we support only String types. To support int types CCF needs to be modified accordingly.
StoreID : int value StoreID : int value
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3; Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3;
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4 Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4
Returns Returns
An Error code or 0 if operation is successfull. An Error code or 0 if operation is successfull.
*********************************************************************************/ *********************************************************************************/
public int SetSecret(XmlNode secret, int StoreID) public int SetSecret(XmlNode secret, int StoreID)
{ {
if (StoreID == ConstStrings.CASA_STORE_MICASA) if (StoreID == ConstStrings.CASA_STORE_MICASA)
return micasaengine.SetSecret(secret); return micasaengine.SetSecret(secret);
#if LINUX #if LINUX
if (StoreID == ConstStrings.CASA_STORE_KWALLET) if (StoreID == ConstStrings.CASA_STORE_KWALLET)
return kwEngine.SetSecret(secret); return kwEngine.SetSecret(secret);
if (StoreID == ConstStrings.CASA_STORE_GK) if (StoreID == ConstStrings.CASA_STORE_GK)
return gkEngine.SetSecret(secret); return gkEngine.SetSecret(secret);
#endif #endif
else else
{ {
#if LINUX #if LINUX
Logger.DbgLog("A-D Lib:Failed to Set Secret in to miCASA"); Logger.DbgLog("A-D Lib:Failed to Set Secret in to miCASA");
#endif #endif
return -1; return -1;
} }
} }
public int GetSecret(XmlNode secret, int StoreID) public int GetSecret(XmlNode secret, int StoreID)
{ {
//TBD: Check for Store ID and call the right DataEngine. //TBD: Check for Store ID and call the right DataEngine.
if (StoreID == ConstStrings.CASA_STORE_MICASA) if (StoreID == ConstStrings.CASA_STORE_MICASA)
return micasaengine.GetSecret(secret); return micasaengine.GetSecret(secret);
else else
{ {
#if LINUX #if LINUX
Logger.DbgLog("A-D Lib: Failed to Get Secret in to miCASA"); Logger.DbgLog("A-D Lib: Failed to Get Secret in to miCASA");
#endif #endif
return -1; return -1;
} }
} }
/******************************************************************************* /*******************************************************************************
Remove will delete a Secret. Remove will delete a Secret.
public int Remove(XmlNode secret, int StoreID) public int Remove(XmlNode secret, int StoreID)
Parameters Parameters
secret : Secrets XmlNode secret : Secrets XmlNode
1. This node will be deleted from its parent. 1. This node will be deleted from its parent.
StoreID : int value StoreID : int value
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3; Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3;
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4 Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4
Returns Returns
An Error code or 0 if operation is successfull. An Error code or 0 if operation is successfull.
*********************************************************************************/ *********************************************************************************/
public int Remove(XmlNode secret, int StoreID) public int Remove(XmlNode secret, int StoreID)
{ {
if (StoreID == ConstStrings.CASA_STORE_MICASA) if (StoreID == ConstStrings.CASA_STORE_MICASA)
return micasaengine.Remove(secret); return micasaengine.Remove(secret);
#if LINUX #if LINUX
if (StoreID == ConstStrings.CASA_STORE_KWALLET) if (StoreID == ConstStrings.CASA_STORE_KWALLET)
return kwEngine.Remove(secret); return kwEngine.Remove(secret);
if (StoreID == ConstStrings.CASA_STORE_GK) if (StoreID == ConstStrings.CASA_STORE_GK)
return gkEngine.Remove(secret); return gkEngine.Remove(secret);
#endif #endif
return -1; return -1;
} }
public int AggregateStore(XmlDocument outDoc, int StoreID) public int AggregateStore(XmlDocument outDoc, int StoreID)
{ {
// This need not be policy aware. GUI knows what its doing. // This need not be policy aware. GUI knows what its doing.
XmlNode secEnum; XmlNode secEnum;
DataEngine engine; DataEngine engine;
XmlNode toproot = outDoc.DocumentElement; XmlNode toproot = outDoc.DocumentElement;
if (toproot == null) if (toproot == null)
{ {
XmlElement elem = outDoc.CreateElement("CCF"); XmlElement elem = outDoc.CreateElement("CCF");
outDoc.AppendChild(elem); outDoc.AppendChild(elem);
} }
if ( StoreID == ConstStrings.CASA_STORE_MICASA ) // If its miCASA if ( StoreID == ConstStrings.CASA_STORE_MICASA ) // If its miCASA
{ {
engine = micasaengine; engine = micasaengine;
secEnum = engine.Aggregate(); secEnum = engine.Aggregate();
if (secEnum != null ) if (secEnum != null )
{ {
XmlNode root = outDoc.DocumentElement; XmlNode root = outDoc.DocumentElement;
XmlNodeList miCASANodes = root.SelectNodes("descendant::miCASA"); XmlNodeList miCASANodes = root.SelectNodes("descendant::miCASA");
// Console.WriteLine("ADLIB: Count is " + miCASANodes.Count); // Console.WriteLine("ADLIB: Count is " + miCASANodes.Count);
if (miCASANodes.Count != 0) // If there is something remove it if (miCASANodes.Count != 0) // If there is something remove it
{ {
root.RemoveChild(miCASANodes[0]); root.RemoveChild(miCASANodes[0]);
} }
XmlNode gotit = outDoc.ImportNode(secEnum,true); XmlNode gotit = outDoc.ImportNode(secEnum,true);
root.AppendChild(gotit); root.AppendChild(gotit);
return ConstStrings.CASA_SUCCESS; return ConstStrings.CASA_SUCCESS;
} }
else else
return ConstStrings.CASA_STORE_NOT_AVAILABLE; return ConstStrings.CASA_STORE_NOT_AVAILABLE;
} }
#if LINUX #if LINUX
else if( StoreID == ConstStrings.CASA_STORE_GK ) else if( StoreID == ConstStrings.CASA_STORE_GK )
{ {
gkEngine = new GKEngine(); gkEngine = new GKEngine();
secEnum = gkEngine.Aggregate(); secEnum = gkEngine.Aggregate();
if (secEnum != null ) if (secEnum != null )
{ {
XmlNode root = outDoc.DocumentElement; XmlNode root = outDoc.DocumentElement;
XmlNodeList gkNode = root.SelectNodes("descendant::GK"); XmlNodeList gkNode = root.SelectNodes("descendant::GK");
if (gkNode.Count != 0) // If there is something remove it if (gkNode.Count != 0) // If there is something remove it
{ {
root.RemoveChild(gkNode[0]); root.RemoveChild(gkNode[0]);
} }
XmlNode gkImportNode = outDoc.ImportNode(secEnum,true); XmlNode gkImportNode = outDoc.ImportNode(secEnum,true);
root.AppendChild(gkImportNode); root.AppendChild(gkImportNode);
return ConstStrings.CASA_SUCCESS; return ConstStrings.CASA_SUCCESS;
} }
else else
return ConstStrings.CASA_STORE_NOT_AVAILABLE; return ConstStrings.CASA_STORE_NOT_AVAILABLE;
} }
else if(StoreID == ConstStrings.CASA_STORE_KWALLET) else if(StoreID == ConstStrings.CASA_STORE_KWALLET)
{ {
kwEngine = new KWalletEngine(); kwEngine = new KWalletEngine();
secEnum = kwEngine.Aggregate(); secEnum = kwEngine.Aggregate();
if (secEnum != null ) if (secEnum != null )
{ {
XmlNode root = outDoc.DocumentElement; XmlNode root = outDoc.DocumentElement;
XmlNodeList gkNode = root.SelectNodes("descendant::KWallet"); XmlNodeList gkNode = root.SelectNodes("descendant::KWallet");
if (gkNode.Count != 0) // If there is something remove it if (gkNode.Count != 0) // If there is something remove it
{ {
root.RemoveChild(gkNode[0]); root.RemoveChild(gkNode[0]);
} }
XmlNode kwImportNode = outDoc.ImportNode(secEnum,true); XmlNode kwImportNode = outDoc.ImportNode(secEnum,true);
root.AppendChild(kwImportNode); root.AppendChild(kwImportNode);
return ConstStrings.CASA_SUCCESS; return ConstStrings.CASA_SUCCESS;
} }
else else
{ {
//Console.WriteLine("KWallet some issue"); //Console.WriteLine("KWallet some issue");
return ConstStrings.CASA_STORE_NOT_AVAILABLE; return ConstStrings.CASA_STORE_NOT_AVAILABLE;
} }
} }
Logger.DbgLog("A-D Lib: Unknown Operation Requested"); Logger.DbgLog("A-D Lib: Unknown Operation Requested");
#endif #endif
return ConstStrings.CASA_OPERATION_FAILED; return ConstStrings.CASA_OPERATION_FAILED;
} }
public int InitAD() public int InitAD()
{ {
return ConstStrings.CASA_SUCCESS; return ConstStrings.CASA_SUCCESS;
} }
public int CleanUP_AD() public int CleanUP_AD()
{ {
return ConstStrings.CASA_SUCCESS; return ConstStrings.CASA_SUCCESS;
} }
} /***********************************************************************************************
} IsStoreAvailable : Checks If Store Is Available
It loads the required dlls for a particular store and returns true if
all required dll/.so are present.
public static Boolean IsStoreAvailable(int StoreID);
Parameters
StoreID : int value
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_KWALLET = 3;
Novell.CASA.DataEngines.Common.ConstStrings.CASA_STORE_GK = 4
Remarks
1. This API needs to be called before any other API of the particular store is called.
2. This API needs to be called before Aggregate() and AD_Facade constructor is called
as these initializes the Datangines based on the Aggregate Policy set.
3. The Aggregate Policy needs to be reset appropriately based on the return value of this call.
***********************************************************************************************/
public static Boolean IsStoreAvailable(int StoreID)
{
if (StoreID == ConstStrings.CASA_STORE_GK)
return GKEngine.IsStoreAvailable();
if (StoreID == ConstStrings.CASA_STORE_KWALLET)
return KWalletEngine.IsStoreAvailable();
return true;
}
}
}

View File

@ -52,11 +52,11 @@ namespace Novell.CASA.DataEngines
public GKEngine() public GKEngine()
{ {
} }
~GKEngine() ~GKEngine()
{ {
GnomeKeyring.ReleaseGnomeKeyringLib(); //GnomeKeyring.ReleaseGnomeKeyringLib();
} }
public XmlNode Aggregate() public XmlNode Aggregate()
@ -297,11 +297,11 @@ namespace Novell.CASA.DataEngines
{ {
try try
{ {
System.Runtime.InteropServices.Marshal.PrelinkAll(typeof(GnomeKeyring)); System.Runtime.InteropServices.Marshal.PrelinkAll(typeof(GnomeKeyring));
if (GnomeKeyring.IsGnomeKeyringInstalled()) //if (GnomeKeyring.IsGnomeKeyringInstalled())
return true; return true;
else //else
return false; // return false;
} }
catch(DllNotFoundException d) catch(DllNotFoundException d)
{ {

File diff suppressed because it is too large Load Diff

View File

@ -110,23 +110,23 @@ namespace Novell.CASA.DataEngines.GK
[DllImport("libad_gk.so")] [DllImport("libad_gk.so")]
public static extern int CreateItem(string keyringName, int itemType, string displayName, string password, IntPtr[] arrptr, int attrCount); public static extern int CreateItem(string keyringName, int itemType, string displayName, string password, IntPtr[] arrptr, int attrCount);
[DllImport("libad_gk.so")] [DllImport("libad_gk.so")]
public static extern int UnlockRing(string sKeyringName, string sPassword); public static extern int UnlockRing(string sKeyringName, string sPassword);
[DllImport("libad_gk.so")] [DllImport("libad_gk.so")]
public static extern int LoadGnomeKeyringLibrary(); public static extern int LoadGnomeKeyringLibrary();
[DllImport("libad_gk.so")] [DllImport("libad_gk.so")]
public static extern int ReleaseGnomeKeyringLibrary(); public static extern int ReleaseGnomeKeyringLibrary();
public static bool IsGnomeKeyringInstalled() public static bool IsGnomeKeyringInstalled()
{ {
if (0 == LoadGnomeKeyringLibrary()) if (0 == LoadGnomeKeyringLibrary())
return true; return true;
else else
return false; return false;
} }
public static void ReleaseGnomeKeyringLib() public static void ReleaseGnomeKeyringLib()
{ {
ReleaseGnomeKeyringLibrary(); ReleaseGnomeKeyringLibrary();
} }
public static void AttemptGKUnlock(string sPassword) public static void AttemptGKUnlock(string sPassword)