Bug 135387, 135393
This commit is contained in:
11
c_micasad/cache/KeyChain.cs
vendored
11
c_micasad/cache/KeyChain.cs
vendored
@@ -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;
|
||||
}
|
||||
|
||||
50
c_micasad/cache/Secret.cs
vendored
50
c_micasad/cache/Secret.cs
vendored
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
10
c_micasad/cache/SecretStore.cs
vendored
10
c_micasad/cache/SecretStore.cs
vendored
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user