diff --git a/c_micasad/cache/SecretStore.cs b/c_micasad/cache/SecretStore.cs
index e1b76480..1879e6da 100644
--- a/c_micasad/cache/SecretStore.cs
+++ b/c_micasad/cache/SecretStore.cs
@@ -597,6 +597,18 @@ namespace sscs.cache
return true;
}
+ internal bool ChangeMasterPassword(string sCurrentPWD, string sNewPWD)
+ {
+ string sMasterFilePath = GetPasscodeByMasterPasswdFilePath();
+ byte[] baPasscode = CASACrypto.GetMasterPasscodeUsingMasterPasswd(sCurrentPWD, sMasterFilePath);
+ if (baPasscode != null)
+ {
+ CASACrypto.EncryptAndStoreMasterPasscodeUsingString(baPasscode, sNewPWD, sMasterFilePath);
+ return true;
+ }
+ return false;
+ }
+
internal string GetDesktopPasswd()
{
try
diff --git a/c_micasad/lib/Novell.CASA.Common.csproj b/c_micasad/lib/Novell.CASA.Common.csproj
index 6bc05488..583a94cc 100644
--- a/c_micasad/lib/Novell.CASA.Common.csproj
+++ b/c_micasad/lib/Novell.CASA.Common.csproj
@@ -113,6 +113,11 @@
SubType = "Code"
BuildAction = "Compile"
/>
+
+ /// Summary description for ResetMasterPassword.
+ ///
+ ///
+ [Serializable]
+ public class ResetMasterPassword
+ {
+ public string m_currentPassword;
+ public string m_newPassword;
+ public int rcode = 0;
+
+ public ResetMasterPassword(string currentPassword, string newPassword)
+ {
+ m_currentPassword = currentPassword;
+ m_newPassword = newPassword;
+ }
+ }
+}
diff --git a/c_micasad/lib/communication/MiCasaRequestReply.cs b/c_micasad/lib/communication/MiCasaRequestReply.cs
index 929586e8..5d87b952 100644
--- a/c_micasad/lib/communication/MiCasaRequestReply.cs
+++ b/c_micasad/lib/communication/MiCasaRequestReply.cs
@@ -30,6 +30,7 @@ namespace Novell.CASA.MiCasa.Communication
public const int VERB_REMOVE_KEY = 15;
public const int VERB_READ_KEY = 16;
public const int VERB_GET_KEY_LIST = 17;
+ public const int VERB_RESET_MASTER_PASSWORD = 18;
public const int VERB_DUMP_LINKED_KEYS = 96;
public const int VERB_CREATE_TEST_SECRETS = 97;
@@ -129,7 +130,10 @@ namespace Novell.CASA.MiCasa.Communication
reply = (WrappedObject)formatter.Deserialize(ms);
if (reply.GetReturnCode() != 0)
+ {
+ ipcChannel.Close();
throw new Exception(reply.GetReturnCode().ToString());
+ }
}
diff --git a/c_micasad/lib/objs.lux b/c_micasad/lib/objs.lux
index 662906f2..b1d80d57 100644
--- a/c_micasad/lib/objs.lux
+++ b/c_micasad/lib/objs.lux
@@ -2,6 +2,7 @@ OBJS=\
AssemblyInfo \
common/LinkedKeyInfo \
common/Ping \
+ common/ResetMasterPassword \
common/WrappedObject \
common/MiCASAStore \
communication/IClientChannel \
diff --git a/c_micasad/lib/src.lux b/c_micasad/lib/src.lux
index 222d9b00..1cd67403 100644
--- a/c_micasad/lib/src.lux
+++ b/c_micasad/lib/src.lux
@@ -2,6 +2,7 @@ SRC=\
AssemblyInfo.cs \
common/LinkedKeyInfo.cs \
common/Ping.cs \
+ common/ResetMasterPassword.cs \
common/WrappedObject.cs \
common/MiCASAStore.cs \
communication/IClientChannel.cs \
diff --git a/c_micasad/verbs/ObjectSerialization.cs b/c_micasad/verbs/ObjectSerialization.cs
index 15da1b2a..f59a66b2 100644
--- a/c_micasad/verbs/ObjectSerialization.cs
+++ b/c_micasad/verbs/ObjectSerialization.cs
@@ -183,6 +183,11 @@ namespace sscs.verbs
{
return DoGetKeyList(ssStore, wo);
}
+ case MiCasaRequestReply.VERB_RESET_MASTER_PASSWORD:
+ {
+ return DoResetMasterPassword(ssStore, wo);
+ }
+
default:
{
wo.SetError(constants.RetCodes.FAILURE, "Verb Not Supported");
@@ -654,6 +659,39 @@ namespace sscs.verbs
return wo;
}
+
+ private WrappedObject DoResetMasterPassword(SecretStore ssStore, WrappedObject wo)
+ {
+ ResetMasterPassword rmp = (ResetMasterPassword)wo.GetObject();
+ // verify current master password
+ try
+ {
+ string sMasterPassword = rmp.m_currentPassword;
+ ssStore.UnlockStore(null, sMasterPassword);
+ }
+ catch (Exception e)
+ {
+ wo.SetError(constants.RetCodes.FAILURE, e.ToString());
+ return wo;
+ }
+
+ // change master master password
+ string sNewPassword = rmp.m_newPassword;
+ if (sNewPassword == null || sNewPassword.Length < 8)
+ {
+ wo.SetError(constants.RetCodes.FAILURE, null);
+ return wo;
+ }
+
+ if (!ssStore.ChangeMasterPassword(rmp.m_currentPassword, rmp.m_newPassword))
+ wo.SetError(constants.RetCodes.FAILURE, null);
+ else
+ wo.SetError(constants.RetCodes.SUCCESS, null);
+
+
+ return wo;
+ }
+
private WrappedObject DoPing(WrappedObject wo)
{
//Console.WriteLine("MICASAD received Ping from Client");