diff --git a/CASA/micasad/common/CSSSUtils.cs b/CASA/micasad/common/CSSSUtils.cs index 15db2707..8ac0e8d8 100644 --- a/CASA/micasad/common/CSSSUtils.cs +++ b/CASA/micasad/common/CSSSUtils.cs @@ -35,38 +35,38 @@ using sscs.constants; namespace sscs.common { class CSSSUtils - { - -#if W32 - private static bool IsRegKeySet(string sPath, string sValue) - { - Microsoft.Win32.RegistryKey key; - - try - { - key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sPath); - int iValue = (int)key.GetValue(sValue); - key.Close(); - if (iValue > 0) - { - return true; - } - } - catch (Exception e) - { - - } - return false; - } -#endif - - public static bool StoreDesktopPasswordInCache() - { + { + +#if W32 + private static bool IsRegKeySet(string sPath, string sValue) + { + Microsoft.Win32.RegistryKey key; + + try + { + key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sPath); + int iValue = (int)key.GetValue(sValue); + key.Close(); + if (iValue > 0) + { + return true; + } + } + catch (Exception e) + { + + } + return false; + } +#endif + + public static bool StoreDesktopPasswordInCache() + { #if LINUX return true; -#else - return IsRegKeySet("SOFTWARE\\Novell\\CASA", "CacheDesktopPassword"); -#endif +#else + return IsRegKeySet("SOFTWARE\\Novell\\CASA", "CacheDesktopPassword"); +#endif } public static bool IsFileOwnedByRoot(string filePath) diff --git a/CASA/micasad/verbs/AddKeyChain.cs b/CASA/micasad/verbs/AddKeyChain.cs index de616433..14743f6d 100644 --- a/CASA/micasad/verbs/AddKeyChain.cs +++ b/CASA/micasad/verbs/AddKeyChain.cs @@ -20,132 +20,132 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.cache; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of AddKeyChain call. - * There will be one instance existing for every call made by the client. - */ - - internal class AddKeyChain : SSVerb - { - - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint keyChainFlags = 0; - private uint keyChainIdLen = 0; - private string keyChainId; - private uint outMsgLen = 0; - private byte[] inBuf; - private byte[] outBuf; - private int retCode = 0; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of AddKeyChain - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - CSSSLogger.ExecutionTrace(this); - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - keyChainFlags = BitConverter.ToUInt32(inBuf,6); - keyChainIdLen = BitConverter.ToUInt32(inBuf,10); - byte[] tempArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,14,tempArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(tempArr); - // Message Format decipher - End - - try - { - SecretStore ssStore = null; - KeyChain keyChain = null; - keyChain = new KeyChain(keyChainId); - - ssStore = SessionManager.GetUserSecretStore(userId); - if( ssStore.CheckIfKeyChainExists(keyChainId) == false ) - { - ssStore.AddKeyChain(keyChain); - } - else - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Keychain already present for keychain id " +keyChainId ); - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_ALREADY_EXISTS; - } - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - try - { - msgId = 5; - outMsgLen = 10; - outBuf = new byte[10]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,6,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return (this.ToString()); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.cache; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of AddKeyChain call. + * There will be one instance existing for every call made by the client. + */ + + internal class AddKeyChain : SSVerb + { + + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint keyChainFlags = 0; + private uint keyChainIdLen = 0; + private string keyChainId; + private uint outMsgLen = 0; + private byte[] inBuf; + private byte[] outBuf; + private int retCode = 0; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of AddKeyChain + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + CSSSLogger.ExecutionTrace(this); + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + keyChainFlags = BitConverter.ToUInt32(inBuf,6); + keyChainIdLen = BitConverter.ToUInt32(inBuf,10); + byte[] tempArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,14,tempArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(tempArr); + // Message Format decipher - End + + try + { + SecretStore ssStore = null; + KeyChain keyChain = null; + keyChain = new KeyChain(keyChainId); + + ssStore = SessionManager.GetUserSecretStore(userId); + if( ssStore.CheckIfKeyChainExists(keyChainId) == false ) + { + ssStore.AddKeyChain(keyChain); + } + else + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Keychain already present for keychain id " +keyChainId ); + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_ALREADY_EXISTS; + } + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + try + { + msgId = 5; + outMsgLen = 10; + outBuf = new byte[10]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,6,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return (this.ToString()); + } + } +} diff --git a/CASA/micasad/verbs/CloseSecretStore.cs b/CASA/micasad/verbs/CloseSecretStore.cs index 71f104ac..9b48840d 100644 --- a/CASA/micasad/verbs/CloseSecretStore.cs +++ b/CASA/micasad/verbs/CloseSecretStore.cs @@ -20,120 +20,120 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.cache; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of CloseSecretStore call. - * There will be one instance existing for every call made by the client. - */ - - internal class CloseSecretStore : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private byte[] inBuf; - - private byte[] outBuf; - private int retCode = 0; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of CloseSecretStore - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - CSSSLogger.ExecutionTrace(this); - // Message Format decipher - Start - - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - uint ssFlags = BitConverter.ToUInt32(inBuf,6); - // Message Format decipher - End - - try - { - if ((ssFlags & ConstFlags.SSFLAGS_DESTROY_SESSION_F) == ConstFlags.SSFLAGS_DESTROY_SESSION_F) - { -#if W32 - SessionManager.RemoveUserSession(userId, true); -#else - SessionManager.CheckAndDestroySession(userId, true); -#endif - } - else - SessionManager.RemoveUserSession(userId, false); - } - catch(Exception) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Exception encountered in removing user session."); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - - // Construct a Reply. - - try - { - msgId = 2; - outMsgLen = 10; - outBuf = new byte[10]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,6,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.cache; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of CloseSecretStore call. + * There will be one instance existing for every call made by the client. + */ + + internal class CloseSecretStore : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private byte[] inBuf; + + private byte[] outBuf; + private int retCode = 0; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of CloseSecretStore + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + CSSSLogger.ExecutionTrace(this); + // Message Format decipher - Start + + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + uint ssFlags = BitConverter.ToUInt32(inBuf,6); + // Message Format decipher - End + + try + { + if ((ssFlags & ConstFlags.SSFLAGS_DESTROY_SESSION_F) == ConstFlags.SSFLAGS_DESTROY_SESSION_F) + { +#if W32 + SessionManager.RemoveUserSession(userId, true); +#else + SessionManager.CheckAndDestroySession(userId, true); +#endif + } + else + SessionManager.RemoveUserSession(userId, false); + } + catch(Exception) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Exception encountered in removing user session."); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + + // Construct a Reply. + + try + { + msgId = 2; + outMsgLen = 10; + outBuf = new byte[10]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,6,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + } + + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/EnumerateKeyChainIds.cs b/CASA/micasad/verbs/EnumerateKeyChainIds.cs index a6889fff..efee31af 100644 --- a/CASA/micasad/verbs/EnumerateKeyChainIds.cs +++ b/CASA/micasad/verbs/EnumerateKeyChainIds.cs @@ -20,134 +20,134 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -namespace sscs.verbs -{ - - /* - * This class is implementation of EnumerateKeyChainIds call. - * There will be one instance existing for every call made by the client. - */ - - internal class EnumerateKeyChainIds : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private int retCode = 0; - - private byte[] inBuf; - private byte[] outBuf; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of EnumerateKeyChainIds - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - CSSSLogger.ExecutionTrace(this); - int keyChainIdsLen = 0; - StringBuilder keyChainIds = new StringBuilder(); - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - // Message Format decipher - End - try - { - int index = 0; - SecretStore ssStore = SessionManager.GetUserSecretStore(userId); - int numKeyChains = ssStore.GetNumKeyChains(); - IDictionaryEnumerator etor = (IDictionaryEnumerator)ssStore.GetKeyChainEnumerator(); - while(etor.MoveNext()) - { - index++; - keyChainIds.Append((string)etor.Key,0,(((string)(etor.Key)).Length)-1); - keyChainIdsLen += ((string)(etor.Key)).Length-1; - if( index != numKeyChains ) - { - keyChainIds.Append("*"); - keyChainIdsLen += 1; - } - } - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - // Construct a Reply. - - try - { - msgId = 4; - outMsgLen = 14 + (uint)keyChainIds.Length; - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(keyChainIdsLen); - Array.Copy(t,0,outBuf,6,4); - - Encoding.UTF8.GetBytes(keyChainIds.ToString(),0,keyChainIds.Length,outBuf,10); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,(10+keyChainIds.Length),4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +namespace sscs.verbs +{ + + /* + * This class is implementation of EnumerateKeyChainIds call. + * There will be one instance existing for every call made by the client. + */ + + internal class EnumerateKeyChainIds : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private int retCode = 0; + + private byte[] inBuf; + private byte[] outBuf; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of EnumerateKeyChainIds + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + CSSSLogger.ExecutionTrace(this); + int keyChainIdsLen = 0; + StringBuilder keyChainIds = new StringBuilder(); + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + // Message Format decipher - End + try + { + int index = 0; + SecretStore ssStore = SessionManager.GetUserSecretStore(userId); + int numKeyChains = ssStore.GetNumKeyChains(); + IDictionaryEnumerator etor = (IDictionaryEnumerator)ssStore.GetKeyChainEnumerator(); + while(etor.MoveNext()) + { + index++; + keyChainIds.Append((string)etor.Key,0,(((string)(etor.Key)).Length)-1); + keyChainIdsLen += ((string)(etor.Key)).Length-1; + if( index != numKeyChains ) + { + keyChainIds.Append("*"); + keyChainIdsLen += 1; + } + } + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + // Construct a Reply. + + try + { + msgId = 4; + outMsgLen = 14 + (uint)keyChainIds.Length; + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(keyChainIdsLen); + Array.Copy(t,0,outBuf,6,4); + + Encoding.UTF8.GetBytes(keyChainIds.ToString(),0,keyChainIds.Length,outBuf,10); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,(10+keyChainIds.Length),4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + + } + + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/EnumerateSecretIds.cs b/CASA/micasad/verbs/EnumerateSecretIds.cs index 523172fc..ff2aa2a8 100644 --- a/CASA/micasad/verbs/EnumerateSecretIds.cs +++ b/CASA/micasad/verbs/EnumerateSecretIds.cs @@ -20,157 +20,157 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -namespace sscs.verbs -{ - - /* - * This class is implementation of EnumerateSecretIds call. - * There will be one instance existing for every call made by the client. - */ - - internal class EnumerateSecretIds : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private string keyChainId; - - private int retCode = 0; - - private byte[] inBuf; - private byte[] outBuf; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of EnumerateSecretIds - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - int secretIdsLen = 0; - StringBuilder secretIds = new StringBuilder(); - // Message Format decipher - Start - - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - - // Message Format decipher - End - try - { - SecretStore ssStore = SessionManager.GetUserSecretStore(userId); - if (!ssStore.IsStoreLocked()) - { - if( ssStore.CheckIfKeyChainExists(keyChainId) ) - { - KeyChain keyChain = ssStore.GetKeyChain(keyChainId); - int numSecrets = keyChain.GetNumSecrets(); - int index = 0; - IDictionaryEnumerator etor = (IDictionaryEnumerator)keyChain.GetAllSecrets(); - while(etor.MoveNext()) - { - index++; - secretIds.Append((string)etor.Key,0,(((string)(etor.Key)).Length)-1); - secretIdsLen += ((string)(etor.Key)).Length-1; - if( index != numSecrets ) - { - secretIds.Append("*"); - secretIdsLen += 1; - } - } - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - else - { - retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; - } - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception) - { - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - //Construct a reply. - try - { - msgId = 7; - - outMsgLen = 14 + (uint)secretIds.Length; - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(secretIdsLen); - Array.Copy(t,0,outBuf,6,4); - - Encoding.UTF8.GetBytes(secretIds.ToString(),0,secretIds.Length,outBuf,10); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,(10+secretIds.Length),4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +namespace sscs.verbs +{ + + /* + * This class is implementation of EnumerateSecretIds call. + * There will be one instance existing for every call made by the client. + */ + + internal class EnumerateSecretIds : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private string keyChainId; + + private int retCode = 0; + + private byte[] inBuf; + private byte[] outBuf; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of EnumerateSecretIds + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + int secretIdsLen = 0; + StringBuilder secretIds = new StringBuilder(); + // Message Format decipher - Start + + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + + // Message Format decipher - End + try + { + SecretStore ssStore = SessionManager.GetUserSecretStore(userId); + if (!ssStore.IsStoreLocked()) + { + if( ssStore.CheckIfKeyChainExists(keyChainId) ) + { + KeyChain keyChain = ssStore.GetKeyChain(keyChainId); + int numSecrets = keyChain.GetNumSecrets(); + int index = 0; + IDictionaryEnumerator etor = (IDictionaryEnumerator)keyChain.GetAllSecrets(); + while(etor.MoveNext()) + { + index++; + secretIds.Append((string)etor.Key,0,(((string)(etor.Key)).Length)-1); + secretIdsLen += ((string)(etor.Key)).Length-1; + if( index != numSecrets ) + { + secretIds.Append("*"); + secretIdsLen += 1; + } + } + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + else + { + retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; + } + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception) + { + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + //Construct a reply. + try + { + msgId = 7; + + outMsgLen = 14 + (uint)secretIds.Length; + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(secretIdsLen); + Array.Copy(t,0,outBuf,6,4); + + Encoding.UTF8.GetBytes(secretIds.ToString(),0,secretIds.Length,outBuf,10); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,(10+secretIds.Length),4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + + } + + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/GetSecretStoreInfo.cs b/CASA/micasad/verbs/GetSecretStoreInfo.cs index a92a8bcd..df4c17a1 100644 --- a/CASA/micasad/verbs/GetSecretStoreInfo.cs +++ b/CASA/micasad/verbs/GetSecretStoreInfo.cs @@ -20,123 +20,123 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.cache; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of GetSecretStoreInfo call. - * There will be one instance existing for every call made by the client. - */ - - internal class GetSecretStoreInfo : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint numKeyChains = 0; - private byte[] inBuf; - private byte[] outBuf; - private int retCode = 0; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of GetSecretStoreInfo - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - CSSSLogger.ExecutionTrace(this); - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - // Message Format decipher - End - - try - { - SecretStore ssStore = SessionManager.GetUserSecretStore(userId); - numKeyChains = (uint) ssStore.GetNumKeyChains(); - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - - // Construct Response - - try - { - msgId = 11; - outMsgLen = 14; - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(numKeyChains); - Array.Copy(t,0,outBuf,6,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,10,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.cache; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of GetSecretStoreInfo call. + * There will be one instance existing for every call made by the client. + */ + + internal class GetSecretStoreInfo : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint numKeyChains = 0; + private byte[] inBuf; + private byte[] outBuf; + private int retCode = 0; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of GetSecretStoreInfo + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + CSSSLogger.ExecutionTrace(this); + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + // Message Format decipher - End + + try + { + SecretStore ssStore = SessionManager.GetUserSecretStore(userId); + numKeyChains = (uint) ssStore.GetNumKeyChains(); + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + + // Construct Response + + try + { + msgId = 11; + outMsgLen = 14; + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(numKeyChains); + Array.Copy(t,0,outBuf,6,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,10,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/ISSVerb.cs b/CASA/micasad/verbs/ISSVerb.cs index 2f19bcca..0e6072f2 100644 --- a/CASA/micasad/verbs/ISSVerb.cs +++ b/CASA/micasad/verbs/ISSVerb.cs @@ -20,37 +20,37 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; - - - namespace sscs.verbs - { - - /* - * Defines the interfaces to be implemenetd by all Secret Store Verbs. - */ - interface SSVerb - { - /* Takes in the raw bytes and sets them for a Verb, - * so that the verb will execute in the bytes given. - * TBD: In case we are able to send the byte[] through constructor, - * we can avoid this interface. - */ - - void SetMessageContent(byte[] rawbytes); - - /* Takes in the SecretStore Reeference and returns the correct SSVerb - */ - byte[] ProcessRequest(UserIdentifier userId); - - //Gives the name of operation performed.Can be used in case of error. - string GetVerbName(); - } - - } - +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; + + + namespace sscs.verbs + { + + /* + * Defines the interfaces to be implemenetd by all Secret Store Verbs. + */ + interface SSVerb + { + /* Takes in the raw bytes and sets them for a Verb, + * so that the verb will execute in the bytes given. + * TBD: In case we are able to send the byte[] through constructor, + * we can avoid this interface. + */ + + void SetMessageContent(byte[] rawbytes); + + /* Takes in the SecretStore Reeference and returns the correct SSVerb + */ + byte[] ProcessRequest(UserIdentifier userId); + + //Gives the name of operation performed.Can be used in case of error. + string GetVerbName(); + } + + } + diff --git a/CASA/micasad/verbs/MergeCache.cs b/CASA/micasad/verbs/MergeCache.cs index d60f7c82..2016fe37 100644 --- a/CASA/micasad/verbs/MergeCache.cs +++ b/CASA/micasad/verbs/MergeCache.cs @@ -1,165 +1,165 @@ -using System; -using System.Collections; - -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -using sscs.lss; - -namespace sscs.verbs -{ - /// - /// Summary description for MergeCache. - /// - internal class MergeCache : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - - private int retCode = 0; - - private byte[] inBuf; - private byte[] outBuf; - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of MergeSecret - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - CSSSLogger.ExecutionTrace(this); - UserIdentifier tempUserId = userId; - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf, 0); - inMsgLen = BitConverter.ToUInt32(inBuf, 2); - - if (inMsgLen != inBuf.Length) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - - // get the src LUID - int luidLow = BitConverter.ToInt32(inBuf, 14); - int luidHigh = BitConverter.ToInt32(inBuf, 18); - - // get the target LUID - int targetLuidLow = BitConverter.ToInt32(inBuf, 30); - int targetLuidHigh = BitConverter.ToInt32(inBuf, 34); - - // get destroy flag - int iDestroySrcCache = BitConverter.ToInt32(inBuf, 38); - - CSSSLogger.DbgLog(" SRC LUID found: " + luidHigh.ToString() + ":"+ luidLow.ToString()); - CSSSLogger.DbgLog("Target LUID found: " + targetLuidHigh.ToString() +":" + targetLuidLow.ToString()); - - -#if W32 - // only allow the merge if the calling process is "System" - WinUserIdentifier callingUser = (WinUserIdentifier)userId; - if ((callingUser.GetUIDLow() == 999) && (callingUser.GetUIDHigh() == 0)) - { - CSSSLogger.DbgLog("MergeSecrets: Caller is system process"); - - // get the store for the src - try - { - //WinUserIdentifier srcUser = new WinUserIdentifier(luidLow, luidHigh); - SecretStore srcStore = SessionManager.GetUserSecretStore(userId); - KeyChain kcSrc = null; - KeyChain kcDest = null; - - - // rename keychainID from SRC LUID to Target LUID. - if (srcStore.CheckIfKeyChainExists(luidHigh.ToString() + luidLow.ToString())) - { - kcSrc = srcStore.GetKeyChain(luidHigh.ToString() + luidLow.ToString()); - kcDest = new KeyChain(targetLuidHigh.ToString() + targetLuidLow.ToString()); - - if (!srcStore.CheckIfKeyChainExists(targetLuidHigh.ToString() + targetLuidLow.ToString())) - { - srcStore.AddKeyChain(kcDest); - } - - // merge secrets from src to dest keychain - IDictionaryEnumerator secIter = (IDictionaryEnumerator)(kcSrc.GetAllSecrets()); - while (secIter.MoveNext()) - { - Secret secret = (Secret)secIter.Value; - kcDest.AddSecret(secret); - } - - if (iDestroySrcCache > 0) - { - srcStore.RemoveKeyChain(luidHigh.ToString() + luidLow.ToString()); - } - } - else - { - retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; - } - } - catch (Exception e) - { - CSSSLogger.DbgLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; - } - } - else - { - CSSSLogger.DbgLog("Caller is NOT system process, Merge not allowed!"); - retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; - } -#else - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; -#endif - - try - { - msgId = 19; - outMsgLen = 10; - outBuf = new byte[10]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t, 0, outBuf, 0, 2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t, 0, outBuf, 2, 4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t, 0, outBuf, 6, 4); - } - catch (Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; + +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +using sscs.lss; + +namespace sscs.verbs +{ + /// + /// Summary description for MergeCache. + /// + internal class MergeCache : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + + private int retCode = 0; + + private byte[] inBuf; + private byte[] outBuf; + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of MergeSecret + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + CSSSLogger.ExecutionTrace(this); + UserIdentifier tempUserId = userId; + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf, 0); + inMsgLen = BitConverter.ToUInt32(inBuf, 2); + + if (inMsgLen != inBuf.Length) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + + // get the src LUID + int luidLow = BitConverter.ToInt32(inBuf, 14); + int luidHigh = BitConverter.ToInt32(inBuf, 18); + + // get the target LUID + int targetLuidLow = BitConverter.ToInt32(inBuf, 30); + int targetLuidHigh = BitConverter.ToInt32(inBuf, 34); + + // get destroy flag + int iDestroySrcCache = BitConverter.ToInt32(inBuf, 38); + + CSSSLogger.DbgLog(" SRC LUID found: " + luidHigh.ToString() + ":"+ luidLow.ToString()); + CSSSLogger.DbgLog("Target LUID found: " + targetLuidHigh.ToString() +":" + targetLuidLow.ToString()); + + +#if W32 + // only allow the merge if the calling process is "System" + WinUserIdentifier callingUser = (WinUserIdentifier)userId; + if ((callingUser.GetUIDLow() == 999) && (callingUser.GetUIDHigh() == 0)) + { + CSSSLogger.DbgLog("MergeSecrets: Caller is system process"); + + // get the store for the src + try + { + //WinUserIdentifier srcUser = new WinUserIdentifier(luidLow, luidHigh); + SecretStore srcStore = SessionManager.GetUserSecretStore(userId); + KeyChain kcSrc = null; + KeyChain kcDest = null; + + + // rename keychainID from SRC LUID to Target LUID. + if (srcStore.CheckIfKeyChainExists(luidHigh.ToString() + luidLow.ToString())) + { + kcSrc = srcStore.GetKeyChain(luidHigh.ToString() + luidLow.ToString()); + kcDest = new KeyChain(targetLuidHigh.ToString() + targetLuidLow.ToString()); + + if (!srcStore.CheckIfKeyChainExists(targetLuidHigh.ToString() + targetLuidLow.ToString())) + { + srcStore.AddKeyChain(kcDest); + } + + // merge secrets from src to dest keychain + IDictionaryEnumerator secIter = (IDictionaryEnumerator)(kcSrc.GetAllSecrets()); + while (secIter.MoveNext()) + { + Secret secret = (Secret)secIter.Value; + kcDest.AddSecret(secret); + } + + if (iDestroySrcCache > 0) + { + srcStore.RemoveKeyChain(luidHigh.ToString() + luidLow.ToString()); + } + } + else + { + retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; + } + } + catch (Exception e) + { + CSSSLogger.DbgLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; + } + } + else + { + CSSSLogger.DbgLog("Caller is NOT system process, Merge not allowed!"); + retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; + } +#else + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; +#endif + + try + { + msgId = 19; + outMsgLen = 10; + outBuf = new byte[10]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t, 0, outBuf, 0, 2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t, 0, outBuf, 2, 4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t, 0, outBuf, 6, 4); + } + catch (Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/OpenSecretStore.cs b/CASA/micasad/verbs/OpenSecretStore.cs index 01c81565..a9ca2b23 100644 --- a/CASA/micasad/verbs/OpenSecretStore.cs +++ b/CASA/micasad/verbs/OpenSecretStore.cs @@ -20,134 +20,134 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of OpenSecretStore call. - * There will be one instance existing for every call made by the client. - */ - - internal class OpenSecretStore : SSVerb - { - ushort msgId = 0; - uint inMsgLen = 0; - uint outMsgLen = 0; - uint ssVersion = 0; - uint ssNameLen = 0; - private string ssName; //Name of SecretStore to open - private byte[] inBuf; - - private byte[] outBuf; - int retCode = 0; - - private static int MAX_SS_NAME_LEN = 256; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of OpenSecretStore - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - CSSSLogger.ExecutionTrace(this); - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - ssVersion = BitConverter.ToUInt32(inBuf,6); - ssNameLen = BitConverter.ToUInt32(inBuf,10); - - if (ssNameLen > MAX_SS_NAME_LEN) - throw new FormatException(" SecretStore Name length exceeds length allowed"); - - byte[] tempArr = new byte[ssNameLen]; - Array.Copy(inBuf,14,tempArr,0,ssNameLen); - ssName = Encoding.UTF8.GetString(tempArr); - - try - { - SecretStore ss = SessionManager.CreateUserSession(userId); - - if( null == ss ) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " SecretStore instance is null"); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - else - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " + - Created a new Session entry"); - } - - } - - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - try - { - msgId = 1; - outMsgLen = 14; - outBuf = new byte[14]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes((uint)ssVersion); - Array.Copy(t,0,outBuf,6,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,10,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of OpenSecretStore call. + * There will be one instance existing for every call made by the client. + */ + + internal class OpenSecretStore : SSVerb + { + ushort msgId = 0; + uint inMsgLen = 0; + uint outMsgLen = 0; + uint ssVersion = 0; + uint ssNameLen = 0; + private string ssName; //Name of SecretStore to open + private byte[] inBuf; + + private byte[] outBuf; + int retCode = 0; + + private static int MAX_SS_NAME_LEN = 256; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of OpenSecretStore + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + CSSSLogger.ExecutionTrace(this); + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + ssVersion = BitConverter.ToUInt32(inBuf,6); + ssNameLen = BitConverter.ToUInt32(inBuf,10); + + if (ssNameLen > MAX_SS_NAME_LEN) + throw new FormatException(" SecretStore Name length exceeds length allowed"); + + byte[] tempArr = new byte[ssNameLen]; + Array.Copy(inBuf,14,tempArr,0,ssNameLen); + ssName = Encoding.UTF8.GetString(tempArr); + + try + { + SecretStore ss = SessionManager.CreateUserSession(userId); + + if( null == ss ) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " SecretStore instance is null"); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + else + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " + - Created a new Session entry"); + } + + } + + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + try + { + msgId = 1; + outMsgLen = 14; + outBuf = new byte[14]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes((uint)ssVersion); + Array.Copy(t,0,outBuf,6,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,10,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + } + + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/ReadBinaryKey.cs b/CASA/micasad/verbs/ReadBinaryKey.cs index 85ff17da..df5122ab 100644 --- a/CASA/micasad/verbs/ReadBinaryKey.cs +++ b/CASA/micasad/verbs/ReadBinaryKey.cs @@ -20,42 +20,42 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -namespace sscs.verbs -{ - - /* - * This class is implementation of ReadKey call. - * There will be one instance existing for every call made by the client. - */ - - internal class ReadBinaryKey : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private uint secretIdLen = 0; - private int retCode = 0; - private string keyChainId; - private string secretId; - private uint keyLen; - private string key; - private uint valLen; - private byte[] val; - - //private byte[] secretVal; - - private byte[] inBuf; - private byte[] outBuf; - +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +namespace sscs.verbs +{ + + /* + * This class is implementation of ReadKey call. + * There will be one instance existing for every call made by the client. + */ + + internal class ReadBinaryKey : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private uint secretIdLen = 0; + private int retCode = 0; + private string keyChainId; + private string secretId; + private uint keyLen; + private string key; + private uint valLen; + private byte[] val; + + //private byte[] secretVal; + + private byte[] inBuf; + private byte[] outBuf; + // extension operations private uint extId = 0; #if W32 @@ -63,59 +63,59 @@ namespace sscs.verbs private int luidHigh = 0; #endif - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of ReadKey - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - Secret secret = null; - - CSSSLogger.ExecutionTrace(this); + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of ReadKey + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + Secret secret = null; + + CSSSLogger.ExecutionTrace(this); UserIdentifier tempUserId = userId; - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - - secretIdLen = BitConverter.ToUInt32(inBuf, - (10 + (int)keyChainIdLen)); - - byte[] secretIdArr = new byte[secretIdLen]; - Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); - secretId = Encoding.UTF8.GetString(secretIdArr); - // Message Format decipher - End - - keyLen = BitConverter.ToUInt32(inBuf,(14+(int)keyChainIdLen+(int)secretIdLen)); - - byte[] keyArr = new byte[keyLen]; - Array.Copy(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen),keyArr,0,keyLen); - key = Encoding.UTF8.GetString(keyArr); + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + + secretIdLen = BitConverter.ToUInt32(inBuf, + (10 + (int)keyChainIdLen)); + + byte[] secretIdArr = new byte[secretIdLen]; + Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); + secretId = Encoding.UTF8.GetString(secretIdArr); + // Message Format decipher - End + + keyLen = BitConverter.ToUInt32(inBuf,(14+(int)keyChainIdLen+(int)secretIdLen)); + + byte[] keyArr = new byte[keyLen]; + Array.Copy(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen),keyArr,0,keyLen); + key = Encoding.UTF8.GetString(keyArr); try { // get extension ID @@ -128,125 +128,125 @@ namespace sscs.verbs } SecretStore ssStore; - + if (extId == 1) { -#if W32 - CSSSLogger.DbgLog("LUID ExtID found"); - WinUserIdentifier test = (WinUserIdentifier)userId; - // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" - if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) - { - - // WINDOWS LUID - // System Services, like DLU create fake UIDs, store credentials and then want to read that data. - luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); - luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); - - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - keyChainId = luidHigh.ToString() + luidLow.ToString(); - CSSSLogger.DbgLog("ReadBinaryKey: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); +#if W32 + CSSSLogger.DbgLog("LUID ExtID found"); + WinUserIdentifier test = (WinUserIdentifier)userId; + // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" + if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) + { + + // WINDOWS LUID + // System Services, like DLU create fake UIDs, store credentials and then want to read that data. + luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); + luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); + + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + keyChainId = luidHigh.ToString() + luidLow.ToString(); + CSSSLogger.DbgLog("ReadBinaryKey: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); } #endif } - try - { - KeyChain keyChain = null; - // Secret secret = null; - ssStore = SessionManager.GetUserSecretStore(tempUserId); - if (!ssStore.IsStoreLocked()) - { - if( ssStore.CheckIfKeyChainExists(keyChainId) ) - { - keyChain = ssStore.GetKeyChain(keyChainId); - if( keyChain.CheckIfSecretExists(secretId) == false) - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - else - { - secret = keyChain.GetSecret(secretId); - KeyValue kv = secret.GetKeyValue(key); - if (kv != null) - { - val = kv.GetValueAsBytes(); - } - else - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - } - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - else - retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; - - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - try - { - msgId = 16; - if( 0 == retCode ) - { - valLen = (uint)val.Length; - outMsgLen = 14 + valLen; - } - else - { - outMsgLen = 14; //2+4+4+4 - } - - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(valLen); - Array.Copy(t,0,outBuf,6,4); - - if( 0 == retCode ) - Array.Copy(val,0,outBuf,10,valLen); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,10+valLen,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} + try + { + KeyChain keyChain = null; + // Secret secret = null; + ssStore = SessionManager.GetUserSecretStore(tempUserId); + if (!ssStore.IsStoreLocked()) + { + if( ssStore.CheckIfKeyChainExists(keyChainId) ) + { + keyChain = ssStore.GetKeyChain(keyChainId); + if( keyChain.CheckIfSecretExists(secretId) == false) + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + else + { + secret = keyChain.GetSecret(secretId); + KeyValue kv = secret.GetKeyValue(key); + if (kv != null) + { + val = kv.GetValueAsBytes(); + } + else + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + } + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + else + retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; + + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + try + { + msgId = 16; + if( 0 == retCode ) + { + valLen = (uint)val.Length; + outMsgLen = 14 + valLen; + } + else + { + outMsgLen = 14; //2+4+4+4 + } + + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(valLen); + Array.Copy(t,0,outBuf,6,4); + + if( 0 == retCode ) + Array.Copy(val,0,outBuf,10,valLen); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,10+valLen,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/ReadKey.cs b/CASA/micasad/verbs/ReadKey.cs index e61bb91a..6234dca0 100644 --- a/CASA/micasad/verbs/ReadKey.cs +++ b/CASA/micasad/verbs/ReadKey.cs @@ -20,102 +20,102 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -namespace sscs.verbs -{ - - /* - * This class is implementation of ReadKey call. - * There will be one instance existing for every call made by the client. - */ - - internal class ReadKey : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private uint secretIdLen = 0; - private int retCode = 0; - private string keyChainId; - private string secretId; - private uint keyLen; - private string key; - private uint valLen; - private byte[] val; - - //private byte[] secretVal; - - private byte[] inBuf; - private byte[] outBuf; - +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +namespace sscs.verbs +{ + + /* + * This class is implementation of ReadKey call. + * There will be one instance existing for every call made by the client. + */ + + internal class ReadKey : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private uint secretIdLen = 0; + private int retCode = 0; + private string keyChainId; + private string secretId; + private uint keyLen; + private string key; + private uint valLen; + private byte[] val; + + //private byte[] secretVal; + + private byte[] inBuf; + private byte[] outBuf; + // extension operations private uint extId = 0; #if W32 private int luidLow = 0; private int luidHigh = 0; -#endif - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of ReadKey - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - Secret secret = null; - - CSSSLogger.ExecutionTrace(this); - UserIdentifier tempUserId = userId; - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - - secretIdLen = BitConverter.ToUInt32(inBuf, - (10 + (int)keyChainIdLen)); - - byte[] secretIdArr = new byte[secretIdLen]; - Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); - secretId = Encoding.UTF8.GetString(secretIdArr); - // Message Format decipher - End - - keyLen = BitConverter.ToUInt32(inBuf,(14+(int)keyChainIdLen+(int)secretIdLen)); - - byte[] keyArr = new byte[keyLen]; - Array.Copy(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen),keyArr,0,keyLen); - key = Encoding.UTF8.GetString(keyArr); +#endif + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of ReadKey + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + Secret secret = null; + + CSSSLogger.ExecutionTrace(this); + UserIdentifier tempUserId = userId; + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + + secretIdLen = BitConverter.ToUInt32(inBuf, + (10 + (int)keyChainIdLen)); + + byte[] secretIdArr = new byte[secretIdLen]; + Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); + secretId = Encoding.UTF8.GetString(secretIdArr); + // Message Format decipher - End + + keyLen = BitConverter.ToUInt32(inBuf,(14+(int)keyChainIdLen+(int)secretIdLen)); + + byte[] keyArr = new byte[keyLen]; + Array.Copy(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen),keyArr,0,keyLen); + key = Encoding.UTF8.GetString(keyArr); try { // get extension ID @@ -130,124 +130,124 @@ namespace sscs.verbs SecretStore ssStore; if (extId == 1) - { -#if W32 - CSSSLogger.DbgLog("LUID ExtID found"); - WinUserIdentifier test = (WinUserIdentifier)userId; - // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" - if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) - { - - // WINDOWS LUID - // System Services, like DLU create fake UIDs, store credentials and then want to read that data. - luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); - luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); - - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - keyChainId = luidHigh.ToString() + luidLow.ToString(); - CSSSLogger.DbgLog("ReadKey: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); - } + { +#if W32 + CSSSLogger.DbgLog("LUID ExtID found"); + WinUserIdentifier test = (WinUserIdentifier)userId; + // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" + if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) + { + + // WINDOWS LUID + // System Services, like DLU create fake UIDs, store credentials and then want to read that data. + luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); + luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); + + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + keyChainId = luidHigh.ToString() + luidLow.ToString(); + CSSSLogger.DbgLog("ReadKey: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); + } #endif - } - - - try - { - - KeyChain keyChain = null; - ssStore = SessionManager.GetUserSecretStore(tempUserId); - - if (!ssStore.IsStoreLocked()) - { - if( ssStore.CheckIfKeyChainExists(keyChainId) ) - { - keyChain = ssStore.GetKeyChain(keyChainId); - if( keyChain.CheckIfSecretExists(secretId) == false) - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - else - { - secret = keyChain.GetSecret(secretId); - KeyValue kv = secret.GetKeyValue(key); - if ((kv != null) && (kv.GetValue().Length > 0)) - { - string valStr = secret.GetKeyValue(key).GetValue(); - val = Encoding.UTF8.GetBytes(valStr); - } - else - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - else - retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; - - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - try - { - msgId = 16; - if( 0 == retCode ) - { - valLen = (uint)val.Length; - outMsgLen = 14 + valLen; - } - else - { - outMsgLen = 14; //2+4+4+4 - } - - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(valLen); - Array.Copy(t,0,outBuf,6,4); - - if( 0 == retCode ) - Array.Copy(val,0,outBuf,10,valLen); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,10+valLen,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} + } + + + try + { + + KeyChain keyChain = null; + ssStore = SessionManager.GetUserSecretStore(tempUserId); + + if (!ssStore.IsStoreLocked()) + { + if( ssStore.CheckIfKeyChainExists(keyChainId) ) + { + keyChain = ssStore.GetKeyChain(keyChainId); + if( keyChain.CheckIfSecretExists(secretId) == false) + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + else + { + secret = keyChain.GetSecret(secretId); + KeyValue kv = secret.GetKeyValue(key); + if ((kv != null) && (kv.GetValue().Length > 0)) + { + string valStr = secret.GetKeyValue(key).GetValue(); + val = Encoding.UTF8.GetBytes(valStr); + } + else + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + else + retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; + + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + try + { + msgId = 16; + if( 0 == retCode ) + { + valLen = (uint)val.Length; + outMsgLen = 14 + valLen; + } + else + { + outMsgLen = 14; //2+4+4+4 + } + + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(valLen); + Array.Copy(t,0,outBuf,6,4); + + if( 0 == retCode ) + Array.Copy(val,0,outBuf,10,valLen); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,10+valLen,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/ReadSecret.cs b/CASA/micasad/verbs/ReadSecret.cs index 077d54dc..98d6868c 100644 --- a/CASA/micasad/verbs/ReadSecret.cs +++ b/CASA/micasad/verbs/ReadSecret.cs @@ -20,37 +20,37 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -namespace sscs.verbs -{ - - /* - * This class is implementation of ReadSecret call. - * There will be one instance existing for every call made by the client. - */ - - internal class ReadSecret : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private uint secretIdLen = 0; - private uint secretValLen = 0; - private int retCode = 0; - private string keyChainId; - private string secretId; - //private byte[] secretVal; - - private byte[] inBuf; - private byte[] outBuf; +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +namespace sscs.verbs +{ + + /* + * This class is implementation of ReadSecret call. + * There will be one instance existing for every call made by the client. + */ + + internal class ReadSecret : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private uint secretIdLen = 0; + private uint secretValLen = 0; + private int retCode = 0; + private string keyChainId; + private string secretId; + //private byte[] secretVal; + + private byte[] inBuf; + private byte[] outBuf; // extension operations private uint extId = 0; @@ -58,56 +58,56 @@ namespace sscs.verbs private int luidLow = 0; private int luidHigh = 0; #endif - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of ReadSecret - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - Secret secret = null; - - CSSSLogger.ExecutionTrace(this); + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of ReadSecret + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + Secret secret = null; + + CSSSLogger.ExecutionTrace(this); UserIdentifier tempUserId = userId; - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - - secretIdLen = BitConverter.ToUInt32(inBuf, - (10 + (int)keyChainIdLen)); - - byte[] secretIdArr = new byte[secretIdLen]; - Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); - secretId = Encoding.UTF8.GetString(secretIdArr); - - // Message Format decipher - End - + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + + secretIdLen = BitConverter.ToUInt32(inBuf, + (10 + (int)keyChainIdLen)); + + byte[] secretIdArr = new byte[secretIdLen]; + Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); + secretId = Encoding.UTF8.GetString(secretIdArr); + + // Message Format decipher - End + try { // get extension ID @@ -119,12 +119,12 @@ namespace sscs.verbs //CSSSLogger.ExpLog(e.ToString()); } - SecretStore ssStore; + SecretStore ssStore; CSSSLogger.DbgLog("Reading Secret ID: " + secretId); if (extId == 1) { -#if W32 +#if W32 CSSSLogger.DbgLog("LUID ExtID found"); WinUserIdentifier test = (WinUserIdentifier)userId; // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" @@ -134,108 +134,108 @@ namespace sscs.verbs // WINDOWS LUID // System Services, like DLU create fake UIDs, store credentials and then want to read that data. luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen)+((int)secretIdLen) + 8); - luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen)+((int)secretIdLen) + 12); - - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - keyChainId = luidHigh.ToString() + luidLow.ToString(); + luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen)+((int)secretIdLen) + 12); + + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + keyChainId = luidHigh.ToString() + luidLow.ToString(); CSSSLogger.DbgLog("ReadSecret: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); } #endif } - try - { - KeyChain keyChain = null; - // Secret secret = null; - ssStore = SessionManager.GetUserSecretStore(tempUserId); - - if (!ssStore.IsStoreLocked()) - { - if( ssStore.CheckIfKeyChainExists(keyChainId) ) - { - keyChain = ssStore.GetKeyChain(keyChainId); - if( keyChain.CheckIfSecretExists(secretId) == false) - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - else - { - secret = keyChain.GetSecret(secretId); - } - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - else - retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; - - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - try - { - msgId = 8; - uint secretValLen = 0; - byte[] baSecretValue = new byte[0]; - - if( 0 == retCode ) - { - baSecretValue = secret.GetValue(secretId); - secretValLen = (uint)baSecretValue.Length; - outMsgLen = 14 + secretValLen; - } - else - { - outMsgLen = 14; //2+4+4+4 - } - - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(secretValLen); - Array.Copy(t,0,outBuf,6,4); - - if( 0 == retCode ) - Array.Copy(baSecretValue,0,outBuf,10,secretValLen); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,10+secretValLen,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} + try + { + KeyChain keyChain = null; + // Secret secret = null; + ssStore = SessionManager.GetUserSecretStore(tempUserId); + + if (!ssStore.IsStoreLocked()) + { + if( ssStore.CheckIfKeyChainExists(keyChainId) ) + { + keyChain = ssStore.GetKeyChain(keyChainId); + if( keyChain.CheckIfSecretExists(secretId) == false) + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + else + { + secret = keyChain.GetSecret(secretId); + } + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + else + retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; + + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + try + { + msgId = 8; + uint secretValLen = 0; + byte[] baSecretValue = new byte[0]; + + if( 0 == retCode ) + { + baSecretValue = secret.GetValue(secretId); + secretValLen = (uint)baSecretValue.Length; + outMsgLen = 14 + secretValLen; + } + else + { + outMsgLen = 14; //2+4+4+4 + } + + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(secretValLen); + Array.Copy(t,0,outBuf,6,4); + + if( 0 == retCode ) + Array.Copy(baSecretValue,0,outBuf,10,secretValLen); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,10+secretValLen,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/RemoveKey.cs b/CASA/micasad/verbs/RemoveKey.cs index 09bd91e5..a32591d0 100644 --- a/CASA/micasad/verbs/RemoveKey.cs +++ b/CASA/micasad/verbs/RemoveKey.cs @@ -20,100 +20,100 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.cache; -using sscs.common; -using sscs.constants; -namespace sscs.verbs -{ - - /* - * This class is implementation of ReadKey call. - * There will be one instance existing for every call made by the client. - */ - - internal class RemoveKey : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private uint secretIdLen = 0; - private int retCode = 0; - private string keyChainId; - private string secretId; - private uint keyLen; - private string key; - - private byte[] inBuf; - private byte[] outBuf; - +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.cache; +using sscs.common; +using sscs.constants; +namespace sscs.verbs +{ + + /* + * This class is implementation of ReadKey call. + * There will be one instance existing for every call made by the client. + */ + + internal class RemoveKey : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private uint secretIdLen = 0; + private int retCode = 0; + private string keyChainId; + private string secretId; + private uint keyLen; + private string key; + + private byte[] inBuf; + private byte[] outBuf; + // extension operations private uint extId = 0; #if W32 private int luidLow = 0; private int luidHigh = 0; -#endif - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of ReadKey - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - Secret secret = null; - - CSSSLogger.ExecutionTrace(this); - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - UserIdentifier tempUserId = userId; - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - - secretIdLen = BitConverter.ToUInt32(inBuf, - (10 + (int)keyChainIdLen)); - - byte[] secretIdArr = new byte[secretIdLen]; - Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); - secretId = Encoding.UTF8.GetString(secretIdArr); - // Message Format decipher - End - - keyLen = BitConverter.ToUInt32(inBuf,(14+(int)keyChainIdLen+(int)secretIdLen)); - - byte[] keyArr = new byte[keyLen]; - Array.Copy(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen),keyArr,0,keyLen); - key = Encoding.UTF8.GetString(keyArr); - +#endif + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of ReadKey + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + Secret secret = null; + + CSSSLogger.ExecutionTrace(this); + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + UserIdentifier tempUserId = userId; + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + + secretIdLen = BitConverter.ToUInt32(inBuf, + (10 + (int)keyChainIdLen)); + + byte[] secretIdArr = new byte[secretIdLen]; + Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); + secretId = Encoding.UTF8.GetString(secretIdArr); + // Message Format decipher - End + + keyLen = BitConverter.ToUInt32(inBuf,(14+(int)keyChainIdLen+(int)secretIdLen)); + + byte[] keyArr = new byte[keyLen]; + Array.Copy(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen),keyArr,0,keyLen); + key = Encoding.UTF8.GetString(keyArr); + try { // get extension ID @@ -126,116 +126,116 @@ namespace sscs.verbs } if (extId == 1) - { -#if W32 - CSSSLogger.DbgLog("LUID ExtID found"); - WinUserIdentifier test = (WinUserIdentifier)userId; - // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" - if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) - { - - // WINDOWS LUID - // System Services, like DLU create fake UIDs, store credentials and then want to read that data. - luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); - luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); - - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - keyChainId = luidHigh.ToString() + luidLow.ToString(); - CSSSLogger.DbgLog("ReadSecret: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); - } + { +#if W32 + CSSSLogger.DbgLog("LUID ExtID found"); + WinUserIdentifier test = (WinUserIdentifier)userId; + // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" + if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) + { + + // WINDOWS LUID + // System Services, like DLU create fake UIDs, store credentials and then want to read that data. + luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); + luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); + + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + keyChainId = luidHigh.ToString() + luidLow.ToString(); + CSSSLogger.DbgLog("ReadSecret: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); + } #endif } - - - try - { - KeyChain keyChain = null; - // Secret secret = null; - SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); - if (!ssStore.IsStoreLocked()) - { - if( ssStore.CheckIfKeyChainExists(keyChainId) ) - { - keyChain = ssStore.GetKeyChain(keyChainId); - if( keyChain.CheckIfSecretExists(secretId) == false) - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - else - { - secret = keyChain.GetSecret(secretId); - if (secret != null) - { - try - { - secret.RemoveKeyValue(keyChain, key); - } - catch (Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - } - } - else - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - } - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - else - retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; - - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - // Construct a Reply - try - { - msgId = 17; - outMsgLen = 10; - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t, 0, outBuf, 0, 2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t, 0, outBuf, 2, 4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t, 0, outBuf, 6, 4); - } - catch (Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} + + + try + { + KeyChain keyChain = null; + // Secret secret = null; + SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); + if (!ssStore.IsStoreLocked()) + { + if( ssStore.CheckIfKeyChainExists(keyChainId) ) + { + keyChain = ssStore.GetKeyChain(keyChainId); + if( keyChain.CheckIfSecretExists(secretId) == false) + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + else + { + secret = keyChain.GetSecret(secretId); + if (secret != null) + { + try + { + secret.RemoveKeyValue(keyChain, key); + } + catch (Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + } + } + else + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + } + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + else + retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; + + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + // Construct a Reply + try + { + msgId = 17; + outMsgLen = 10; + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t, 0, outBuf, 0, 2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t, 0, outBuf, 2, 4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t, 0, outBuf, 6, 4); + } + catch (Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/RemoveKeyChain.cs b/CASA/micasad/verbs/RemoveKeyChain.cs index c3a6ec4f..6d58d425 100644 --- a/CASA/micasad/verbs/RemoveKeyChain.cs +++ b/CASA/micasad/verbs/RemoveKeyChain.cs @@ -20,131 +20,131 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.constants; -using sscs.cache; -namespace sscs.verbs -{ - - /* - * This class is implementation of RemoveKeyChain call. - * There will be one instance existing for every call made by the client. - */ - - internal class RemoveKeyChain : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private string keyChainId; - private int retCode = 0; - private byte[] inBuf; - - private byte[] outBuf; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of RemoveKeyChain - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - CSSSLogger.ExecutionTrace(this); - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - // Message Format decipher - End - - try - { - SecretStore ssStore = null; - ssStore = SessionManager.GetUserSecretStore(userId); - - if( ssStore.CheckIfKeyChainExists(keyChainId) ) - { - ssStore.RemoveKeyChain(keyChainId); - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - try - { - msgId = 6; - outMsgLen = 10; - outBuf = new byte[10]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,6,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.constants; +using sscs.cache; +namespace sscs.verbs +{ + + /* + * This class is implementation of RemoveKeyChain call. + * There will be one instance existing for every call made by the client. + */ + + internal class RemoveKeyChain : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private string keyChainId; + private int retCode = 0; + private byte[] inBuf; + + private byte[] outBuf; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of RemoveKeyChain + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + CSSSLogger.ExecutionTrace(this); + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + // Message Format decipher - End + + try + { + SecretStore ssStore = null; + ssStore = SessionManager.GetUserSecretStore(userId); + + if( ssStore.CheckIfKeyChainExists(keyChainId) ) + { + ssStore.RemoveKeyChain(keyChainId); + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + try + { + msgId = 6; + outMsgLen = 10; + outBuf = new byte[10]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,6,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/RemoveSecret.cs b/CASA/micasad/verbs/RemoveSecret.cs index 5dbd55c7..29882729 100644 --- a/CASA/micasad/verbs/RemoveSecret.cs +++ b/CASA/micasad/verbs/RemoveSecret.cs @@ -20,94 +20,94 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.cache; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of RemoveSecret call. - * There will be one instance existing for every call made by the client. - */ - - internal class RemoveSecret : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private uint keyChainIdLen = 0; - private uint secretIdLen = 0; - private int retCode = 0; - private string keyChainId; - private string secretId; - - private byte[] inBuf; - private byte[] outBuf; - +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.cache; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of RemoveSecret call. + * There will be one instance existing for every call made by the client. + */ + + internal class RemoveSecret : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private uint keyChainIdLen = 0; + private uint secretIdLen = 0; + private int retCode = 0; + private string keyChainId; + private string secretId; + + private byte[] inBuf; + private byte[] outBuf; + // extension operations private uint extId = 0; #if W32 private int luidLow = 0; private int luidHigh = 0; -#endif - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of RemoveSecret - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - - CSSSLogger.ExecutionTrace(this); - - UserIdentifier tempUserId = userId; - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - - keyChainIdLen = BitConverter.ToUInt32(inBuf,6); - - byte[] keyChainIdArr = new byte[keyChainIdLen]; - Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); - keyChainId = Encoding.UTF8.GetString(keyChainIdArr); - - secretIdLen = BitConverter.ToUInt32(inBuf, - (10 + (int)keyChainIdLen)); - - byte[] secretIdArr = new byte[secretIdLen]; - Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); - secretId = Encoding.UTF8.GetString(secretIdArr); - - CSSSLogger.DbgLog("Deleting secret id: " + secretId); - +#endif + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of RemoveSecret + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + + CSSSLogger.ExecutionTrace(this); + + UserIdentifier tempUserId = userId; + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + + keyChainIdLen = BitConverter.ToUInt32(inBuf,6); + + byte[] keyChainIdArr = new byte[keyChainIdLen]; + Array.Copy(inBuf,10,keyChainIdArr,0,keyChainIdLen); + keyChainId = Encoding.UTF8.GetString(keyChainIdArr); + + secretIdLen = BitConverter.ToUInt32(inBuf, + (10 + (int)keyChainIdLen)); + + byte[] secretIdArr = new byte[secretIdLen]; + Array.Copy(inBuf,(10+keyChainIdLen+4),secretIdArr,0,secretIdLen); + secretId = Encoding.UTF8.GetString(secretIdArr); + + CSSSLogger.DbgLog("Deleting secret id: " + secretId); + try - { + { CSSSLogger.DbgLog("Looking for extention"); // get extension ID int extLocation = 18 + ((int)keyChainIdLen) + ((int)secretIdLen); @@ -116,107 +116,107 @@ namespace sscs.verbs catch (Exception) { //CSSSLogger.ExpLog(e.ToString()); - } - + } + if (extId == 1) - { -#if W32 - CSSSLogger.DbgLog("LUID ExtID found"); - WinUserIdentifier test = (WinUserIdentifier)userId; - // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" - if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) - { - - // WINDOWS LUID - // System Services, like DLU create fake UIDs, store credentials and then want to read that data. - luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); - luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); - - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - keyChainId = luidHigh.ToString() + luidLow.ToString(); - CSSSLogger.DbgLog("ReadSecret: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); - } + { +#if W32 + CSSSLogger.DbgLog("LUID ExtID found"); + WinUserIdentifier test = (WinUserIdentifier)userId; + // NOTE: ONLY ALLOW THE SWITCH IF THE CALLER IS "SYSTEM" + if ((test.GetUIDLow() == 999) && (test.GetUIDHigh() == 0)) + { + + // WINDOWS LUID + // System Services, like DLU create fake UIDs, store credentials and then want to read that data. + luidLow = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 8); + luidHigh = BitConverter.ToInt32(inBuf, 18 + ((int)keyChainIdLen) + ((int)secretIdLen) + 12); + + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + keyChainId = luidHigh.ToString() + luidLow.ToString(); + CSSSLogger.DbgLog("ReadSecret: Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); + } #endif - } - // Message Format decipher - End - - try - { - SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); - if (!ssStore.IsStoreLocked()) - { - - if (ssStore.CheckIfKeyChainExists(keyChainId)) - { - KeyChain keyChain = ssStore.GetKeyChain(keyChainId); - if (keyChain.CheckIfSecretExists(secretId) == false) - { - retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; - } - else - { - // TODO: get the secret and remove linked keys - keyChain.RemoveSecret(secretId); - ssStore.UpdatePersistentStore(); - } - } - else - { - retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; - } - } - else - retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception) - { - CSSSLogger.DbgLog( "In " + CSSSLogger.GetExecutionPath(this) + " - Secret ID not present" + secretId); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - // Construct a Reply - - try - { - msgId = 10; - outMsgLen = 10; - outBuf = new byte[outMsgLen]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,6,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - - return outBuf; - - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} + } + // Message Format decipher - End + + try + { + SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); + if (!ssStore.IsStoreLocked()) + { + + if (ssStore.CheckIfKeyChainExists(keyChainId)) + { + KeyChain keyChain = ssStore.GetKeyChain(keyChainId); + if (keyChain.CheckIfSecretExists(secretId) == false) + { + retCode = IPCRetCodes.SSCS_E_SECRETID_DOES_NOT_EXIST; + } + else + { + // TODO: get the secret and remove linked keys + keyChain.RemoveSecret(secretId); + ssStore.UpdatePersistentStore(); + } + } + else + { + retCode = IPCRetCodes.SSCS_E_KEYCHAIN_DOES_NOT_EXIST; + } + } + else + retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception) + { + CSSSLogger.DbgLog( "In " + CSSSLogger.GetExecutionPath(this) + " - Secret ID not present" + secretId); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + // Construct a Reply + + try + { + msgId = 10; + outMsgLen = 10; + outBuf = new byte[outMsgLen]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,6,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + + return outBuf; + + } + + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/RemoveSecretStore.cs b/CASA/micasad/verbs/RemoveSecretStore.cs index a3169467..c2ff4421 100644 --- a/CASA/micasad/verbs/RemoveSecretStore.cs +++ b/CASA/micasad/verbs/RemoveSecretStore.cs @@ -21,112 +21,112 @@ ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.cache; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of RemoveSecretStore call. - * There will be one instance existing for every call made by the client. - */ - - internal class RemoveSecretStore : SSVerb - { - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint outMsgLen = 0; - private byte[] inBuf; - - private byte[] outBuf; - private int retCode = 0; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of RemoveSecretStore - * - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - CSSSLogger.ExecutionTrace(this); - - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2) ; - - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - try - { - SessionManager.RemoveUserSession(userId, true); - } - catch(UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - - - - try - { - msgId = 3; - outMsgLen = 10; - outBuf = new byte[10]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,6,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - - } - return outBuf; - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return this.ToString(); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.cache; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of RemoveSecretStore call. + * There will be one instance existing for every call made by the client. + */ + + internal class RemoveSecretStore : SSVerb + { + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint outMsgLen = 0; + private byte[] inBuf; + + private byte[] outBuf; + private int retCode = 0; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of RemoveSecretStore + * + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + CSSSLogger.ExecutionTrace(this); + + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2) ; + + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + try + { + SessionManager.RemoveUserSession(userId, true); + } + catch(UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore" ); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + + + + try + { + msgId = 3; + outMsgLen = 10; + outBuf = new byte[10]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,6,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + + } + return outBuf; + } + + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return this.ToString(); + } + } +} diff --git a/CASA/micasad/verbs/SetMasterPasscode.cs b/CASA/micasad/verbs/SetMasterPasscode.cs index b62f86cd..68ba7738 100644 --- a/CASA/micasad/verbs/SetMasterPasscode.cs +++ b/CASA/micasad/verbs/SetMasterPasscode.cs @@ -20,132 +20,132 @@ * ***********************************************************************/ -using System; -using System.Collections; -using System.Text; -using System.Threading; -using sscs.verbs; -using sscs.common; -using sscs.cache; -using sscs.constants; - -namespace sscs.verbs -{ - - /* - * This class is implementation of SetMasterPasscode call. - * There will be one instance existing for every call made by the client. - */ - - internal class SetMasterPasscode : SSVerb - { - - private ushort msgId = 0; - private uint inMsgLen = 0; - private uint passcodeLen = 0; - private string passcode; - private uint passcodeType = 0; - private uint outMsgLen = 0; - private byte[] inBuf; - private byte[] outBuf; - private int retCode = 0; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - CSSSLogger.ExecutionTrace(this); - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of SetMasterPasscode - */ - - public byte[] ProcessRequest(UserIdentifier userId) - { - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - CSSSLogger.ExecutionTrace(this); - - // Message Format decipher - Start - msgId = BitConverter.ToUInt16(inBuf,0); - inMsgLen = BitConverter.ToUInt32(inBuf,2); - if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - passcodeType = BitConverter.ToUInt32(inBuf,6); - passcodeLen = BitConverter.ToUInt32(inBuf,10); - - if (passcodeLen < 64) - { - byte[] tempArr = new byte[passcodeLen]; - Array.Copy(inBuf, 14, tempArr, 0, passcodeLen); - passcode = Encoding.UTF8.GetString(tempArr); - // Message Format decipher - End - - try - { - SecretStore ssStore = null; - ssStore = SessionManager.GetUserSecretStore(userId); - ssStore.PauseFileWatcher(); - if (ssStore.SetMasterPasscode(passcode)) - retCode = IPCRetCodes.SSCS_REPLY_SUCCESS; - else - retCode = IPCRetCodes.SSCS_E_SETTING_PASSCODE_FAILED; - ssStore.ResumeFileWatcher(); - } - catch (UserNotInSessionException) - { - CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore"); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - catch (Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; - } - } - else - { - retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; - } - - try - { - msgId = 15; - outMsgLen = 10; - outBuf = new byte[10]; - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,6,4); - } - catch(Exception e) - { - CSSSLogger.ExpLog(e.ToString()); - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - - } - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - CSSSLogger.ExecutionTrace(this); - return (this.ToString()); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.Threading; +using sscs.verbs; +using sscs.common; +using sscs.cache; +using sscs.constants; + +namespace sscs.verbs +{ + + /* + * This class is implementation of SetMasterPasscode call. + * There will be one instance existing for every call made by the client. + */ + + internal class SetMasterPasscode : SSVerb + { + + private ushort msgId = 0; + private uint inMsgLen = 0; + private uint passcodeLen = 0; + private string passcode; + private uint passcodeType = 0; + private uint outMsgLen = 0; + private byte[] inBuf; + private byte[] outBuf; + private int retCode = 0; + + /* + * This method sets the class member with the byte array received. + */ + + public void SetMessageContent(byte[] ipcBytes) + { + CSSSLogger.ExecutionTrace(this); + inBuf = ipcBytes; + } + + /* + * This method does the actual implementation of SetMasterPasscode + */ + + public byte[] ProcessRequest(UserIdentifier userId) + { + /* If an exception occurs in message format decoding, + * it is handled by AppHandler + */ + CSSSLogger.ExecutionTrace(this); + + // Message Format decipher - Start + msgId = BitConverter.ToUInt16(inBuf,0); + inMsgLen = BitConverter.ToUInt32(inBuf,2); + if( inMsgLen != inBuf.Length ) + throw new FormatException(" MsgLen sent does not match the length of the message received."); + passcodeType = BitConverter.ToUInt32(inBuf,6); + passcodeLen = BitConverter.ToUInt32(inBuf,10); + + if (passcodeLen < 64) + { + byte[] tempArr = new byte[passcodeLen]; + Array.Copy(inBuf, 14, tempArr, 0, passcodeLen); + passcode = Encoding.UTF8.GetString(tempArr); + // Message Format decipher - End + + try + { + SecretStore ssStore = null; + ssStore = SessionManager.GetUserSecretStore(userId); + ssStore.PauseFileWatcher(); + if (ssStore.SetMasterPasscode(passcode)) + retCode = IPCRetCodes.SSCS_REPLY_SUCCESS; + else + retCode = IPCRetCodes.SSCS_E_SETTING_PASSCODE_FAILED; + ssStore.ResumeFileWatcher(); + } + catch (UserNotInSessionException) + { + CSSSLogger.DbgLog("In " + CSSSLogger.GetExecutionPath(this) + " Unable to get user's secretstore"); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + catch (Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + retCode = IPCRetCodes.SSCS_E_SYSTEM_ERROR; + } + } + else + { + retCode = IPCRetCodes.SSCS_E_INVALID_INPUT; + } + + try + { + msgId = 15; + outMsgLen = 10; + outBuf = new byte[10]; + byte[] t = new byte[10]; + + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,outBuf,0,2); + + t = BitConverter.GetBytes((uint)outMsgLen); + Array.Copy(t,0,outBuf,2,4); + + t = BitConverter.GetBytes(retCode); + Array.Copy(t,0,outBuf,6,4); + } + catch(Exception e) + { + CSSSLogger.ExpLog(e.ToString()); + throw new FormatException("Unable to form the response " + e.ToString()); + } + return outBuf; + + } + + /* + * Gives the name of operation performed. Will be used in case + * of error. + */ + public string GetVerbName() + { + CSSSLogger.ExecutionTrace(this); + return (this.ToString()); + } + } +} diff --git a/CASA/micasad/verbs/WriteBinaryKey.cs b/CASA/micasad/verbs/WriteBinaryKey.cs index e50f5c63..2e7f47c6 100644 --- a/CASA/micasad/verbs/WriteBinaryKey.cs +++ b/CASA/micasad/verbs/WriteBinaryKey.cs @@ -92,12 +92,12 @@ namespace sscs.verbs inMsgLen = BitConverter.ToUInt32(inBuf,2); if( inMsgLen != inBuf.Length ) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - // get flags + throw new FormatException(" MsgLen sent does not match the length of the message received."); + + // get flags ssFlags = BitConverter.ToUInt32(inBuf, 6); - // get keychain + // get keychain keyChainIdLen = BitConverter.ToUInt32(inBuf, 10); byte[] keyChainIdArr = new byte[keyChainIdLen]; @@ -132,10 +132,10 @@ namespace sscs.verbs } catch (Exception) { - //CSSSLogger.ExpLog(e.ToString()); - } - -#if W32 + //CSSSLogger.ExpLog(e.ToString()); + } + +#if W32 if (extId == 1) { // WINDOWS LUID @@ -143,45 +143,45 @@ namespace sscs.verbs // we might be able to change this if/when we abstract the session. // [4 byte extID][4 byte length][4 byte luidLow][4 byte luidHigh] luidLow = BitConverter.ToInt32(inBuf, 30 + ((int)keyChainIdLen)+((int)secretIdLen) +((int)keyLen) + (int)valLen + 8); - luidHigh = BitConverter.ToInt32(inBuf, 30 + ((int)keyChainIdLen)+((int)secretIdLen) +((int)keyLen) + (int)valLen + 12); - - if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) - { - - tempUserId = new WinUserIdentifier(luidLow, luidHigh); - SecretStore ss = SessionManager.CreateUserSession(tempUserId); - try - { - ss.AddKeyChain(new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0")); - } - catch (Exception) - { - - } - } - else - { - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - - keyChainId = luidHigh.ToString() + luidLow.ToString(); - SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); - if (!ssStore.CheckIfKeyChainExists(keyChainId)) - { - try - { - KeyChain newKeyChain = new KeyChain(keyChainId); - ssStore.AddKeyChain(newKeyChain); - } - catch (Exception e) - { - CSSSLogger.DbgLog("WriteKey: Adding keychain returned error: " + e.ToString()); - } - } - } - } -#endif - + luidHigh = BitConverter.ToInt32(inBuf, 30 + ((int)keyChainIdLen)+((int)secretIdLen) +((int)keyLen) + (int)valLen + 12); + + if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) + { + + tempUserId = new WinUserIdentifier(luidLow, luidHigh); + SecretStore ss = SessionManager.CreateUserSession(tempUserId); + try + { + ss.AddKeyChain(new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0")); + } + catch (Exception) + { + + } + } + else + { + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + + keyChainId = luidHigh.ToString() + luidLow.ToString(); + SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); + if (!ssStore.CheckIfKeyChainExists(keyChainId)) + { + try + { + KeyChain newKeyChain = new KeyChain(keyChainId); + ssStore.AddKeyChain(newKeyChain); + } + catch (Exception e) + { + CSSSLogger.DbgLog("WriteKey: Adding keychain returned error: " + e.ToString()); + } + } + } + } +#endif + try { KeyChain keyChain = null; @@ -208,22 +208,22 @@ namespace sscs.verbs (ConstStrings.MICASA_DESKTOP_PASSWD_KEYNAME == key) ) { - KeyValue kvDesktop = secret.GetKeyValue(ConstStrings.MICASA_DESKTOP_PASSWD_KEYNAME); - if (null != kvDesktop) + KeyValue kvDesktop = secret.GetKeyValue(ConstStrings.MICASA_DESKTOP_PASSWD_KEYNAME); + if (null != kvDesktop) oldPasswd = kvDesktop.GetValue(); } - secret.SetKeyValue(key,val); - - KeyValue kv = secret.GetKeyValue(key); - if ((ssFlags & SSFLAGS.FLAG_DO_NOT_PERSIST) == SSFLAGS.FLAG_DO_NOT_PERSIST) - { - kv.IsPersistent = false; - } - else - { - kv.IsPersistent = true; - } + secret.SetKeyValue(key,val); + + KeyValue kv = secret.GetKeyValue(key); + if ((ssFlags & SSFLAGS.FLAG_DO_NOT_PERSIST) == SSFLAGS.FLAG_DO_NOT_PERSIST) + { + kv.IsPersistent = false; + } + else + { + kv.IsPersistent = true; + } if((ConstStrings.MICASA_DESKTOP_PASSWD == secretId) && @@ -257,7 +257,7 @@ namespace sscs.verbs } } else - { + { retCode = IPCRetCodes.SSCS_SECRET_STORE_IS_LOCKED; } diff --git a/CASA/micasad/verbs/WriteKey.cs b/CASA/micasad/verbs/WriteKey.cs index 23433475..cdc7541f 100644 --- a/CASA/micasad/verbs/WriteKey.cs +++ b/CASA/micasad/verbs/WriteKey.cs @@ -118,7 +118,7 @@ namespace sscs.verbs valLen = BitConverter.ToUInt32(inBuf,(18+(int)keyChainIdLen+(int)secretIdLen+(int)keyLen)); val = new byte[valLen]; Array.Copy(inBuf,(22+keyChainIdLen+secretIdLen+keyLen),val,0,valLen); - valStr = Encoding.UTF8.GetString(val); + valStr = Encoding.UTF8.GetString(val); CSSSLogger.DbgLog("Writing Secret:Key [" + secretId + ":" + key + "]"); @@ -130,13 +130,13 @@ namespace sscs.verbs } catch (Exception) { - //CSSSLogger.ExpLog(e.ToString()); - } - - -#if W32 + //CSSSLogger.ExpLog(e.ToString()); + } + + +#if W32 if (extId == 1) - { + { CSSSLogger.DbgLog("LUID ExtID found"); // WINDOWS LUID @@ -144,47 +144,47 @@ namespace sscs.verbs // we might be able to change this if/when we abstract the session. // [4 byte extID][4 byte length][4 byte luidLow][4 byte luidHigh] luidLow = BitConverter.ToInt32(inBuf, 26 + ((int)keyChainIdLen)+((int)secretIdLen) +((int)keyLen) + (int)valLen + 8); - luidHigh = BitConverter.ToInt32(inBuf, 26 + ((int)keyChainIdLen)+((int)secretIdLen) +((int)keyLen) + (int)valLen + 12); - - if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) - { - tempUserId = new WinUserIdentifier(luidLow, luidHigh); - SecretStore ss = SessionManager.CreateUserSession(tempUserId); - - CSSSLogger.DbgLog("Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); - - try - { - ss.AddKeyChain(new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0")); - } - catch (Exception) - { - - } - } - else - { - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - - keyChainId = luidHigh.ToString() + luidLow.ToString(); - SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); - if (!ssStore.CheckIfKeyChainExists(keyChainId)) - { - try - { - KeyChain newKeyChain = new KeyChain(keyChainId); - ssStore.AddKeyChain(newKeyChain); - } - catch (Exception e) - { - CSSSLogger.DbgLog("WriteKey: Adding keychain returned error: " + e.ToString()); - } - } - } - } -#endif - + luidHigh = BitConverter.ToInt32(inBuf, 26 + ((int)keyChainIdLen)+((int)secretIdLen) +((int)keyLen) + (int)valLen + 12); + + if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) + { + tempUserId = new WinUserIdentifier(luidLow, luidHigh); + SecretStore ss = SessionManager.CreateUserSession(tempUserId); + + CSSSLogger.DbgLog("Switching LUID to [" + luidHigh.ToString() + "][" + luidLow.ToString() + "]"); + + try + { + ss.AddKeyChain(new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0")); + } + catch (Exception) + { + + } + } + else + { + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + + keyChainId = luidHigh.ToString() + luidLow.ToString(); + SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); + if (!ssStore.CheckIfKeyChainExists(keyChainId)) + { + try + { + KeyChain newKeyChain = new KeyChain(keyChainId); + ssStore.AddKeyChain(newKeyChain); + } + catch (Exception e) + { + CSSSLogger.DbgLog("WriteKey: Adding keychain returned error: " + e.ToString()); + } + } + } + } +#endif + if (secretId.Length < 1 || key.Length < 1 || valStr.Length < 1) { CSSSLogger.DbgLog("Error in length"); @@ -204,24 +204,24 @@ namespace sscs.verbs if( ssStore.CheckIfKeyChainExists(keyChainId) ) { keyChain = ssStore.GetKeyChain(keyChainId); - Secret secret = null; - - if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) - { - secret = ssStore.GetDesktopSecret(); - } - else - { - // add this secret if it doesn't already exist - if (keyChain.CheckIfSecretExists(secretId) == false) - { - secret = new Secret(secretId); - keyChain.AddSecret(secret); - } - else - { - secret = keyChain.GetSecret(secretId); - } + Secret secret = null; + + if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) + { + secret = ssStore.GetDesktopSecret(); + } + else + { + // add this secret if it doesn't already exist + if (keyChain.CheckIfSecretExists(secretId) == false) + { + secret = new Secret(secretId); + keyChain.AddSecret(secret); + } + else + { + secret = keyChain.GetSecret(secretId); + } } string oldPasswd = null; diff --git a/CASA/micasad/verbs/WriteSecret.cs b/CASA/micasad/verbs/WriteSecret.cs index 93821123..a40467bd 100644 --- a/CASA/micasad/verbs/WriteSecret.cs +++ b/CASA/micasad/verbs/WriteSecret.cs @@ -120,10 +120,10 @@ namespace sscs.verbs } catch (Exception) { - //CSSSLogger.ExpLog(e.ToString()); - } - -#if W32 + //CSSSLogger.ExpLog(e.ToString()); + } + +#if W32 if (extId == 1) { // WINDOWS LUID @@ -131,43 +131,43 @@ namespace sscs.verbs // we might be able to change this if/when we abstract the session. // [4 byte extID][4 byte length][4 byte luidLow][4 byte luidHigh] luidLow = BitConverter.ToInt32(inBuf, 22 + ((int)keyChainIdLen)+((int)secretIdLen) +(int)secretValLen + 8); - luidHigh = BitConverter.ToInt32(inBuf, 22 + ((int)keyChainIdLen)+((int)secretIdLen) +(int)secretValLen + 12); - - if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) - { - tempUserId = new WinUserIdentifier(luidLow, luidHigh); - SecretStore ss = SessionManager.CreateUserSession(tempUserId); - try - { - ss.AddKeyChain(new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0")); - } - catch (Exception) - { - - } - } - else - { - // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. - // ZEN processes run as system and pass the LUID in the extension parameter. - - keyChainId = luidHigh.ToString() + luidLow.ToString(); - SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); - if (!ssStore.CheckIfKeyChainExists(keyChainId)) - { - try - { - KeyChain newKeyChain = new KeyChain(keyChainId); - ssStore.AddKeyChain(newKeyChain); - } - catch (Exception e) - { - CSSSLogger.DbgLog("WriteSecret: Adding keychain returned error: " + e.ToString()); - } - } - } - } -#endif + luidHigh = BitConverter.ToInt32(inBuf, 22 + ((int)keyChainIdLen)+((int)secretIdLen) +(int)secretValLen + 12); + + if (ConstStrings.MICASA_DESKTOP_PASSWD == secretId) + { + tempUserId = new WinUserIdentifier(luidLow, luidHigh); + SecretStore ss = SessionManager.CreateUserSession(tempUserId); + try + { + ss.AddKeyChain(new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0")); + } + catch (Exception) + { + + } + } + else + { + // this code is for ZEN. Here we switch to a keychain who's ID is the LUID of the user logging in. + // ZEN processes run as system and pass the LUID in the extension parameter. + + keyChainId = luidHigh.ToString() + luidLow.ToString(); + SecretStore ssStore = SessionManager.GetUserSecretStore(tempUserId); + if (!ssStore.CheckIfKeyChainExists(keyChainId)) + { + try + { + KeyChain newKeyChain = new KeyChain(keyChainId); + ssStore.AddKeyChain(newKeyChain); + } + catch (Exception e) + { + CSSSLogger.DbgLog("WriteSecret: Adding keychain returned error: " + e.ToString()); + } + } + } + } +#endif try {