Bug 135387, 135393

This commit is contained in:
Jim Norman
2005-11-23 23:27:29 +00:00
parent d1663432ee
commit 533bbabd87
13 changed files with 150 additions and 73 deletions

View File

@@ -89,6 +89,17 @@ class KeyChain : IKeychain
public void RemoveSecret(String secretID)
{
// remove all keyvalues first, as to unlink reverse links
try
{
Secret secret = GetSecret(secretID);
secret.RemoveAllKeyValuePairs(this);
}
catch
{
}
SecretList.Remove(secretID);
this.ModifiedTime = DateTime.Now;
}

View File

@@ -2,6 +2,8 @@ using System;
using System.Text;
using System.Collections;
using Novell.CASA.MiCasa.Common;
namespace sscs.cache
{
class Secret : ISecret
@@ -195,14 +197,51 @@ namespace sscs.cache
return null;
}
public void RemoveKeyValue(string key)
{
internal void RemoveAllKeyValuePairs(KeyChain kc)
{
if (htKeyValues != null)
{
IDictionaryEnumerator enumer = htKeyValues.GetEnumerator();
while (enumer.MoveNext())
{
String key = (String)enumer.Key;
RemoveKeyValue(kc, key);
}
}
}
public void RemoveKeyValue(KeyChain kc, string key)
{
if (htKeyValues.Contains(key))
{
// remove all reverse links first
RemoveReverseLinkedKeys(kc, key);
htKeyValues.Remove(key);
}
}
private void RemoveReverseLinkedKeys(KeyChain kc, string keyId)
{
Hashtable linkedKeys = GetLinkedKeys(keyId);
if (kc != null && linkedKeys != null)
{
IDictionaryEnumerator lkis = linkedKeys.GetEnumerator();
while (lkis.MoveNext())
{
LinkedKeyInfo lki = (LinkedKeyInfo)lkis.Value;
// look up reverse linked key
Secret secret = kc.GetSecret(lki.GetLinkedSecretID());
if (secret != null)
{
// look up linked key
KeyValue kv = secret.GetKeyValue(lki.GetLinkedKeyID());
kv.RemoveLink(secretID + ":" + keyId);
}
}
}
}
public DateTime GetKeyValueCreatedTime(string key)
{
if (htKeyValues.Contains(key))
@@ -238,8 +277,9 @@ namespace sscs.cache
}
public void MergeSecret(Secret newSecret)
{
public void MergeSecret(SecretStore store, Secret newSecret)
{
IDictionaryEnumerator etor = (IDictionaryEnumerator)newSecret.htKeyValues.GetEnumerator();
while(etor.MoveNext())
{
@@ -254,7 +294,7 @@ namespace sscs.cache
{
string sKey = (string)etor.Key;
if(!htKeyValues.Contains(sKey))
this.RemoveKeyValue(sKey);
this.RemoveKeyValue(store.GetKeyChainDefault(), sKey);
}
}

View File

@@ -505,6 +505,12 @@ namespace sscs.cache
keyChainList.Remove(id);
return true;
}
internal KeyChain GetKeyChainDefault()
{
return GetKeyChain("SSCS_SESSION_KEY_CHAIN_ID\0");
}
internal KeyChain GetKeyChain(string id)
{
if(keyChainList.ContainsKey(id))
@@ -519,9 +525,9 @@ namespace sscs.cache
CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Keychain doesnot exist.Returning null.");
throw new KeyChainDoesNotExistException(id);
}
}
internal bool CheckIfKeyChainExists(string id)
internal bool CheckIfKeyChainExists(string id)
{
if(keyChainList.ContainsKey(id))
return true;