From 533bbabd8784b7482625af624e32f78375013f3a Mon Sep 17 00:00:00 2001 From: Jim Norman Date: Wed, 23 Nov 2005 23:27:29 +0000 Subject: [PATCH] Bug 135387, 135393 --- CASA.changes | 10 ++ c_micasad/cache/KeyChain.cs | 11 +++ c_micasad/cache/Secret.cs | 50 +++++++++- c_micasad/cache/SecretStore.cs | 10 +- c_micasad/lib/AssemblyInfo.cs | 2 +- c_micasad/micasad.csproj | 4 +- c_micasad/verbs/ObjectSerialization.cs | 116 ++++++++++++----------- c_micasad/verbs/WriteSecret.cs | 2 +- vs_solutions/CASAInstall/CASA.ncb | Bin 207872 -> 207872 bytes vs_solutions/CASAInstall/CASA.suo | Bin 25600 -> 27136 bytes vs_solutions/CASAInstall/CASA.vdproj | 18 ++-- vs_solutions/CASAManager/CASAManager.suo | Bin 25600 -> 27648 bytes vs_solutions/micasad/micasad.suo | Bin 13312 -> 18944 bytes 13 files changed, 150 insertions(+), 73 deletions(-) diff --git a/CASA.changes b/CASA.changes index 69a9cf8a..9a0e2df8 100644 --- a/CASA.changes +++ b/CASA.changes @@ -1,6 +1,16 @@ ------------------------------------------------------------------- Wed Nov 18 14:09:19 MST 2005 - jnorman@novell.com +- Bug fixes: 135387, 135393 + +------------------------------------------------------------------- +Wed Nov 23 16:09:19 MST 2005 - jnorman@novell.com + +- changed PAM Capture to find libmicasa in path + +------------------------------------------------------------------- +Wed Nov 18 14:09:19 MST 2005 - jnorman@novell.com + - Change GUI dependency from gtk2-devel to gtk2. ------------------------------------------------------------------- diff --git a/c_micasad/cache/KeyChain.cs b/c_micasad/cache/KeyChain.cs index a1ff7cc6..aa007d25 100644 --- a/c_micasad/cache/KeyChain.cs +++ b/c_micasad/cache/KeyChain.cs @@ -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; } diff --git a/c_micasad/cache/Secret.cs b/c_micasad/cache/Secret.cs index e0ecb0a0..7256914b 100644 --- a/c_micasad/cache/Secret.cs +++ b/c_micasad/cache/Secret.cs @@ -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); } } diff --git a/c_micasad/cache/SecretStore.cs b/c_micasad/cache/SecretStore.cs index 1879e6da..bba728f3 100644 --- a/c_micasad/cache/SecretStore.cs +++ b/c_micasad/cache/SecretStore.cs @@ -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; diff --git a/c_micasad/lib/AssemblyInfo.cs b/c_micasad/lib/AssemblyInfo.cs index 177a4f0e..1005ed75 100644 --- a/c_micasad/lib/AssemblyInfo.cs +++ b/c_micasad/lib/AssemblyInfo.cs @@ -26,7 +26,7 @@ using System.Runtime.CompilerServices; // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.5.146.0")] // // In order to sign your assembly you must specify a key to use. Refer to the diff --git a/c_micasad/micasad.csproj b/c_micasad/micasad.csproj index e9ddd470..a77dd058 100644 --- a/c_micasad/micasad.csproj +++ b/c_micasad/micasad.csproj @@ -300,7 +300,7 @@ /> P>QgbRjRGW9i8g}Q|cG_m< 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 delta 7411 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 diff --git a/vs_solutions/CASAInstall/CASA.suo b/vs_solutions/CASAInstall/CASA.suo index a0eaad86e26f8bf84b6df51902bb54f74fd37ed0..4753f90f5d2f637f31a5dd9f1c6edf91c057bab2 100644 GIT binary patch delta 1680 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 diff --git a/vs_solutions/micasad/micasad.suo b/vs_solutions/micasad/micasad.suo index ada36d45d25f4547d2851f4c11723c310acb0e73..ea52cbb4641530c50f1e884a7ae68564eaca9cb6 100644 GIT binary patch delta 2436 zcmeHIO-NKx6h3!+GmbjrPo|D3HKR6-6RD#{Kbx!!N+pUiin21D&>XdNDl#YwqeVgJ zi8ig;1rZgGT15#WwWzRFK@hcxR%XzmT4dk3<4iLJFI)zlnZrBh-t*4=&fmMkUBg$^ z-H44Nj#5?5$I`Ei9{f0FM6$@@{aYfX$eI^aNb1 zwP{G-!A`9~pzGkE*5tiiU|V7@3)&K`eZ^VXD1uvS5|InsB$~Gk(h;!)3q8M8zu?oO z+i$6#dht8XUY|!2AEz#AM*;dMOc9<5?5RTjsnV#nWlH*%*hqH*jPEwL8c$nV4GHt% zYmx`;R6ONr;Yt5BeiewGO?lO8{pwnEnl@1#t?8s@oPCN0;SXn`A$rgfqItl*)DmwH zO18w-FA7nJ8qp1o<*WFd{{af*DjI;(Uc`I?&p~hp$x0LV(F4oWhdJ>fds?)Y@SuzYBRey<`QikIe|5 z@p-Z~&h=(L_3_cbMwuNB`m$BTRJF6Jcs8j6Vi4q$ahUoAfbQ2slKj@kCz7P&DM%_M z@*f2X^oTf>BvmGyF0*zzub7IZFzs{{zc3m)sRRBDCSY~0jZmD=t{q%sxVXXZ@h!Hp zCfce?X-@hbDwrt$yv95A%kbCnp8GQBPX9lR|Nb-xIE Y(?N2rcJp+g%~n@0b2{d3O#N^83CnLong9R* delta 1991 zcmcgtOHUI~6h1T4mI@sx4{1fzf;@^^>CP3s z{s7&X7?YBTai%nbTYrWRkHc12!<&XHAV+#G(!0BLU?mm_g^( z@CEbeo+pK0I$!NIZ0iNC12=%1z%8H;=m!RX#A5g3m_Ay-kJbS*G{gqw<64O1SKjJh z>2%!?3nVsI^su0nt1+}BGRau0^+P_)ijAf0yfGnkDd&o#0=rn^U~45^2F|4j*bJWq zOQXVJWxcdhG;p0U<5~G9Lm?E!X-Xw%@=8LVvRbhuu=SP-7PUB)<;rF0fFE)CX#^|+ zG)_Y*8v&NBEMj%BWlMe@7JRU0mZNOZS`D3EIaXD!jkTC9^&;`u_=tD*Xx?Ax(QxCy zYk~ifmpyf_z+bGPR~iuWIRR@n3z2$K7S-&FH5m4ggKX4-d5Y|i?5WwIYMP)uO&)U6 z0(V9x`XG%;s+XE{FXM=7T#akwE2(ki3-fdVb{%vHXSngp{j{sH3z7rVLw1pD>_}x5 z`_WJq4$y66s*OUZ`x#_u7+K?)8&vhPGzHxZjRDhm#n@y1hO&;wtPBlbwc%Z%<#K23 zEc^B7TD-3ldsJsqFN&nZdu|=S3{LWkYxDBr8$Z5qm;8M5^4oUdyJ&%h&Gl^U;0Y#I z9V+*tx$t*2fZ526v%898#}2Nhamox3L<{3>FPQEsUT<>ocGJ|H@m=oFaB6&_+JZyO N;IJryb3+g|egi`;e}e!3