diff --git a/CASA.changes b/CASA.changes index ff2eb39e..b060db66 100644 --- a/CASA.changes +++ b/CASA.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Sat Jan 28 20:22:59 MST 2006 - jnorman@novell.com + +- Bug 143878. Handle more than 100 secrets in GUI. + ------------------------------------------------------------------- Sat Jan 28 20:12:59 MST 2006 - jnorman@novell.com diff --git a/c_micasad/lib/communication/MiCasaRequestReply.cs b/c_micasad/lib/communication/MiCasaRequestReply.cs index 3b388122..b152faa0 100644 --- a/c_micasad/lib/communication/MiCasaRequestReply.cs +++ b/c_micasad/lib/communication/MiCasaRequestReply.cs @@ -54,6 +54,7 @@ namespace Novell.CASA.MiCasa.Communication public const int VERB_READ_KEY = 16; public const int VERB_GET_KEY_LIST = 17; public const int VERB_RESET_MASTER_PASSWORD = 18; + public const int VERB_GET_SECRETIDS = 19; public const int VERB_DUMP_LINKED_KEYS = 96; public const int VERB_CREATE_TEST_SECRETS = 97; diff --git a/c_micasad/verbs/ObjectSerialization.cs b/c_micasad/verbs/ObjectSerialization.cs index 411cf2ca..bd01adff 100644 --- a/c_micasad/verbs/ObjectSerialization.cs +++ b/c_micasad/verbs/ObjectSerialization.cs @@ -23,6 +23,7 @@ using System; using System.Collections; +using System.Collections.Specialized; using System.Text; using System.Threading; using sscs.verbs; @@ -210,6 +211,10 @@ namespace sscs.verbs { return DoResetMasterPassword(ssStore, wo); } + case MiCasaRequestReply.VERB_GET_SECRETIDS: + { + return DoGetSecretIDs(ssStore, wo); + } default: { @@ -227,6 +232,41 @@ namespace sscs.verbs return wo; } + private WrappedObject DoGetSecretIDs(SecretStore ssStore, WrappedObject wo) + { + if (!ssStore.IsStoreLocked()) + { + // look up keychain + string sKeyChainID = wo.GetKeychainID(); + if (sKeyChainID != null) + { + KeyChain kc = ssStore.GetKeyChain(sKeyChainID); + if (kc != null) + { + StringCollection sc = (StringCollection)wo.GetObject(); + if (sc != null) + { + IDictionaryEnumerator etor = (IDictionaryEnumerator)kc.GetAllSecrets(); + while(etor.MoveNext()) + { + sc.Add((string)etor.Key); + } + } + } + else + { + wo.SetError(constants.RetCodes.FAILURE, "KeyChain not found"); + } + } + } + else + { + wo.SetError(constants.RetCodes.FAILURE, "Store locked"); + } + + return wo; + + } private WrappedObject DoRemoveAllSecrets(SecretStore ssStore, WrappedObject wo) { diff --git a/c_sharp/NSSCSWrapper/NativeCalls.cs b/c_sharp/NSSCSWrapper/NativeCalls.cs index 5731eca8..141adc69 100644 --- a/c_sharp/NSSCSWrapper/NativeCalls.cs +++ b/c_sharp/NSSCSWrapper/NativeCalls.cs @@ -41,6 +41,7 @@ namespace Novell.CASA private static int SSCS_CRED_TYPE_BASIC_F = 1; private static int USERNAME_LEN = 256; private static int PASSWORD_LEN = 128; + private static bool USE_OBJECT_SERIALIZATION = true; public NativeCalls() { @@ -979,57 +980,66 @@ namespace Novell.CASA SSCS_SH_SECRET_ID_LIST_T idList = new SSCS_SH_SECRET_ID_LIST_T(); SSCS_EXT_T ext = new SSCS_EXT_T(); - int numIDS = 100; - StringCollection sc = null; + int numIDS = 1024; + StringCollection sc = new StringCollection(); //null; - // setup keychainid - keyChainID.len = sKeyChainID.Length + 1; + if (USE_OBJECT_SERIALIZATION) + { + sc = (StringCollection)MiCasaRequestReply.Send(MiCasaRequestReply.VERB_GET_SECRETIDS, null, null, null, sc); + return sc; + } + else + { - searchKey.srchKey = sSearchKey; - searchKey.srchKeyLen = (uint)sSearchKey.Length; + // setup keychainid + keyChainID.len = sKeyChainID.Length + 1; + + searchKey.srchKey = sSearchKey; + searchKey.srchKeyLen = (uint)sSearchKey.Length; - idList.returnedIDs = (uint)numIDS; + idList.returnedIDs = (uint)numIDS; - SSCS_SH_SECRET_ID_T secretId = new SSCS_SH_SECRET_ID_T(); - // secretId.name = new char[512]; + SSCS_SH_SECRET_ID_T secretId = new SSCS_SH_SECRET_ID_T(); + // secretId.name = new char[512]; - StringBuilder buffer3 = new StringBuilder( "content", 512 ); - buffer3.Append( (char)0 ); - buffer3.Append( '*', buffer3.Capacity - 8 ); - String tempStr = buffer3.ToString(); - idList.secretIDList = Marshal.AllocHGlobal(numIDS * Marshal.SizeOf(secretId)); + StringBuilder buffer3 = new StringBuilder( "content", 512 ); + buffer3.Append( (char)0 ); + buffer3.Append( '*', buffer3.Capacity - 8 ); + String tempStr = buffer3.ToString(); + idList.secretIDList = Marshal.AllocHGlobal(numIDS * Marshal.SizeOf(secretId)); - // make the call - int rcode = miCASAEnumerateSecretIDs( - context, - keyChainID, - ssFlags, - searchKey, - idList, - ext); + // make the call + int rcode = miCASAEnumerateSecretIDs( + context, + keyChainID, + ssFlags, + searchKey, + idList, + ext); - if (idList.returnedIDs > 0) - { - sc = new StringCollection(); + if (idList.returnedIDs > 0) + { + sc = new StringCollection(); - if (idList.returnedIDs != 100) - { - // enumerate returned list - for (int i=0; i