- Bug 169353. Prompt user for Desktop Password when Master Password is not present.
This commit is contained in:
parent
f6a659b7eb
commit
837669576a
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu May 07 18:16:25 MST 2006 - jnorman@novell.com
|
||||
- Bug 169353. Prompt user for Desktop Password when Master Password
|
||||
is not present.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri May 5 17:51:27 IST 2006 - smanojna@novell.com
|
||||
|
||||
|
@ -78,7 +78,8 @@ namespace Novell.CASA.GUI
|
||||
dialogShortPassword,
|
||||
dialogResetMP,
|
||||
dialogStillRunning,
|
||||
dialogFirefoxMP;
|
||||
dialogFirefoxMP,
|
||||
dialogDeletePersistentFiles;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Entry entryMasterPassword1,
|
||||
@ -376,7 +377,7 @@ namespace Novell.CASA.GUI
|
||||
Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
|
||||
|
||||
// did the daemon get restarted before the user created a master password?
|
||||
// if so, let's ask the user for there desktop password and set it if there's a cache file
|
||||
// if so, let's ask the user for their desktop password and set it if there's a cache file
|
||||
if (true == DoPersistentFilesExist())
|
||||
{
|
||||
Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogDesktopPassword", null);
|
||||
@ -416,11 +417,8 @@ namespace Novell.CASA.GUI
|
||||
}
|
||||
|
||||
if (entryDesktopPassword1.Text.Equals(entryDesktopPassword2.Text))
|
||||
{
|
||||
|
||||
// validate entered desktop password - work in progress
|
||||
//if (miCASA.ValidateDesktopPwd(entryDesktopPassword1.Text))
|
||||
if (true)
|
||||
{
|
||||
if (miCASA.ValidateDesktopPwd(entryDesktopPassword1.Text))
|
||||
{
|
||||
// set the desktop password in micasa
|
||||
try
|
||||
@ -445,7 +443,10 @@ namespace Novell.CASA.GUI
|
||||
}
|
||||
else
|
||||
{
|
||||
labelDesktopPasswordMessage.Text = "Your desktop password does not match";
|
||||
labelDesktopPasswordMessage.Text = "This password does not match previous one entered";
|
||||
// TODO: prompt user to retry, or delete their persistent files
|
||||
Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogDeletePersistentFiles", null);
|
||||
gxmlTemp.Autoconnect(this);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -457,6 +458,73 @@ namespace Novell.CASA.GUI
|
||||
}
|
||||
}
|
||||
|
||||
public void on_buttonStoreRetry_clicked(object obj, EventArgs args)
|
||||
{
|
||||
if (dialogDeletePersistentFiles != null)
|
||||
dialogDeletePersistentFiles.Destroy();
|
||||
}
|
||||
|
||||
|
||||
public void on_buttonStoreDelete_clicked(object obj, EventArgs args)
|
||||
{
|
||||
// delete .micasa files
|
||||
if (!DeleteMiCasaFiles())
|
||||
{
|
||||
DisplayError("Failed to delete all miCASA files.\r\nCheck you home directory for .miCASA* files.");
|
||||
return;
|
||||
};
|
||||
|
||||
// close this dialog
|
||||
if (dialogDeletePersistentFiles != null)
|
||||
dialogDeletePersistentFiles.Destroy();
|
||||
|
||||
// set desktop password and close dialogDeskPassword
|
||||
// set the desktop password in micasa
|
||||
try
|
||||
{
|
||||
Novell.CASA.miCASA.SetCredential(0,
|
||||
"Desktop",
|
||||
null,
|
||||
Novell.CASA.miCASA.USERNAME_TYPE_CN_F,
|
||||
GetLocalUsername(),
|
||||
entryDesktopPassword1.Text);
|
||||
}
|
||||
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.DbgLog(e.ToString());
|
||||
}
|
||||
|
||||
if (dialogDesktopPassword != null)
|
||||
dialogDesktopPassword.Destroy();
|
||||
|
||||
MasterPasswordAuthentication();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private bool DeleteMiCasaFiles()
|
||||
{
|
||||
string[] faFiles = Directory.GetFiles(GetUserHomeDir(), ".miCASA*");
|
||||
bool bDeletedFiles = true;
|
||||
|
||||
for (int i=0; i<faFiles.Length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(faFiles[i]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.DbgLog(e.ToString());
|
||||
bDeletedFiles = false;
|
||||
}
|
||||
}
|
||||
|
||||
return bDeletedFiles;
|
||||
}
|
||||
|
||||
|
||||
public void on_helpbuttonDesktopPassword_clicked(object obj, EventArgs args)
|
||||
{
|
||||
Common.ShowHelpUrl("CASADesktopPassword.htm");
|
||||
|
23037
c_gui/images/casa.glade
23037
c_gui/images/casa.glade
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
|
||||
|
||||
<glade-project>
|
||||
<name>Casa</name>
|
||||
<program_name>casa</program_name>
|
||||
<pixmaps_directory></pixmaps_directory>
|
||||
<gnome_support>FALSE</gnome_support>
|
||||
</glade-project>
|
||||
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
|
||||
|
||||
<glade-project>
|
||||
<name>Casa</name>
|
||||
<program_name>casa</program_name>
|
||||
<pixmaps_directory></pixmaps_directory>
|
||||
<gnome_support>FALSE</gnome_support>
|
||||
</glade-project>
|
||||
|
24
c_micasad/cache/SecretStore.cs
vendored
24
c_micasad/cache/SecretStore.cs
vendored
@ -123,7 +123,6 @@ namespace sscs.cache
|
||||
//return true;
|
||||
}
|
||||
|
||||
|
||||
if (sMasterPassword != null)
|
||||
{
|
||||
// verify MasterPassword
|
||||
@ -136,6 +135,29 @@ namespace sscs.cache
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsDesktopPassword(string sDesktopPassword)
|
||||
{
|
||||
try
|
||||
{
|
||||
byte[] baPasscode = CASACrypto.GetMasterPasscodeUsingDesktopPasswd(sDesktopPassword, GetPasscodeByDesktopFilePath(), false);
|
||||
if(CASACrypto.ValidatePasscode(baPasscode,GetValidationFilePath()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// try old salt
|
||||
baPasscode = CASACrypto.GetMasterPasscodeUsingDesktopPasswd(sDesktopPassword, GetPasscodeByDesktopFilePath(), true);
|
||||
if(CASACrypto.ValidatePasscode(baPasscode,GetValidationFilePath()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
internal bool StartPersistenceByDesktopPasswd(string desktopPasswd)
|
||||
{
|
||||
|
@ -179,7 +179,10 @@ namespace sscs.crypto
|
||||
{
|
||||
//Get an encryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, GenerateAndSaveIV(fileName, myRijndael));
|
||||
byte[] baIV = GenerateAndSaveIV(fileName, myRijndael);
|
||||
|
||||
|
||||
ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, baIV);
|
||||
|
||||
//Encrypt the data to a file
|
||||
fsEncrypt = new FileStream(fileName, FileMode.Create);
|
||||
@ -235,7 +238,10 @@ namespace sscs.crypto
|
||||
|
||||
//Get a decryptor that uses the same key and IV as the encryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, RetrieveIV(fileName, key));
|
||||
|
||||
byte[] baIV = RetrieveIV(fileName, IV);
|
||||
|
||||
ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, baIV);
|
||||
#if LINUX
|
||||
UnixFileInfo fsTest = new UnixFileInfo (fileName);
|
||||
if((fsTest == null) || !(fsTest.Exists) || fsTest.IsSymbolicLink)
|
||||
@ -268,6 +274,7 @@ namespace sscs.crypto
|
||||
for(int i = 0 ; i < bytesRead; i++ )
|
||||
tmpEncrypt[i] = fromEncrypt[i];
|
||||
|
||||
|
||||
SHA256 sha = new SHA256Managed();
|
||||
byte[] newHash = sha.ComputeHash(tmpEncrypt);
|
||||
|
||||
@ -300,13 +307,27 @@ namespace sscs.crypto
|
||||
{
|
||||
CSSSLogger.DbgLog(e.ToString());
|
||||
}
|
||||
|
||||
if (csDecrypt != null)
|
||||
{
|
||||
csDecrypt.Close();
|
||||
try
|
||||
{
|
||||
csDecrypt.Close();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
if( fsDecrypt != null )
|
||||
{
|
||||
fsDecrypt.Close();
|
||||
try
|
||||
{
|
||||
fsDecrypt.Close();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -419,7 +440,7 @@ namespace sscs.crypto
|
||||
//Get an encryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform encryptor;
|
||||
encryptor = myRijndael.CreateEncryptor(baKey, baKey);
|
||||
encryptor = myRijndael.CreateEncryptor(baKey, GenerateAndSaveIV(fileName, myRijndael));
|
||||
|
||||
//Encrypt the data to a file
|
||||
fsEncrypt = new FileStream(fileName,FileMode.Create);
|
||||
@ -647,8 +668,11 @@ namespace sscs.crypto
|
||||
|
||||
try
|
||||
{
|
||||
if (File.Exists(sFileName + ".IV"))
|
||||
File.Delete(sFileName + ".IV");
|
||||
|
||||
// now save this
|
||||
FileStream fs = new FileStream(sFileName + ".IV", FileMode.Create);
|
||||
FileStream fs = new FileStream(sFileName + ".IV", FileMode.Create);
|
||||
fs.Write(baIV, 0, 16);
|
||||
fs.Flush();
|
||||
fs.Close();
|
||||
@ -670,7 +694,7 @@ namespace sscs.crypto
|
||||
// check for file existence
|
||||
try
|
||||
{
|
||||
FileStream fs = new FileStream(sFileName + ".IV", FileMode.Open);
|
||||
FileStream fs = new FileStream(sFileName + ".IV", FileMode.Open);
|
||||
fs.Read(IV, 0, 16);
|
||||
fs.Close();
|
||||
return IV;
|
||||
@ -679,7 +703,29 @@ namespace sscs.crypto
|
||||
{
|
||||
CSSSLogger.DbgLog(e.ToString());
|
||||
}
|
||||
return (byte[])baOrigValue.Clone();
|
||||
|
||||
// original IV size was 16 bytes, copy that much
|
||||
if (baOrigValue.Length == 16)
|
||||
{
|
||||
return (byte[])baOrigValue.Clone();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i=0; i<16; i++)
|
||||
{
|
||||
IV[i] = baOrigValue[i];
|
||||
}
|
||||
return IV;
|
||||
}
|
||||
}
|
||||
|
||||
private static void DumpIV(byte[] iv)
|
||||
{
|
||||
for (int i=0; i<iv.Length; i++)
|
||||
{
|
||||
Console.Write(iv[i] + " ");
|
||||
}
|
||||
Console.WriteLine("\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ using sscs.verbs;
|
||||
using sscs.cache;
|
||||
using sscs.common;
|
||||
using sscs.constants;
|
||||
using sscs.lss;
|
||||
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.IO;
|
||||
@ -212,6 +213,10 @@ namespace sscs.verbs
|
||||
{
|
||||
return DoGetSecretIDs(ssStore, wo);
|
||||
}
|
||||
case MiCasaRequestReply.VERB_VALIDATE_DESKTOP_PWD:
|
||||
{
|
||||
return DoValidateDesktopPwd(ssStore, wo);
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
@ -229,6 +234,24 @@ namespace sscs.verbs
|
||||
return wo;
|
||||
}
|
||||
|
||||
private WrappedObject DoValidateDesktopPwd(SecretStore ssStore, WrappedObject wo)
|
||||
{
|
||||
// let's validate the Desktop pwd
|
||||
|
||||
String sDesktopPwd = (String)wo.GetObject();
|
||||
bool bIsValid = ssStore.IsDesktopPassword(sDesktopPwd);
|
||||
if (bIsValid)
|
||||
{
|
||||
wo.SetObject("true");
|
||||
}
|
||||
else
|
||||
{
|
||||
wo.SetObject("false");
|
||||
}
|
||||
|
||||
return wo;
|
||||
}
|
||||
|
||||
private WrappedObject DoGetSecretIDs(SecretStore ssStore, WrappedObject wo)
|
||||
{
|
||||
if (!ssStore.IsStoreLocked())
|
||||
|
@ -154,6 +154,10 @@ namespace sscs.verbs
|
||||
#endif
|
||||
}
|
||||
|
||||
if (secretId.Length < 1 || key.Length < 1 || valStr.Length < 1)
|
||||
{
|
||||
CSSSLogger.DbgLog("Error in length");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -151,6 +151,18 @@ namespace Novell.CASA
|
||||
|
||||
return NativeCalls.ResetMasterPassword(sCurrentPassword, sNewPassword);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static bool ValidateDesktopPwd(string sPassword)
|
||||
{
|
||||
if (sPassword != null)
|
||||
{
|
||||
return NativeCalls.ValidateDesktopPwd(sPassword);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user