Bug 176460. Added a filewatcher on file in question

This commit is contained in:
Jim Norman 2006-07-05 18:29:53 +00:00
parent 1b5e320313
commit 8ff56b0a12
5 changed files with 155 additions and 3 deletions

View File

@ -1,3 +1,7 @@
--------------------------------------------------------------------
Mon Jul 05 12:22:53 MST 2006 - jnorman@novell.com
- Bug 176460. Added a filewatcher on file in question
--------------------------------------------------------------------
Mon Jul 03 13:01:53 MST 2006 - jnorman@novell.com
- Bug 164181. Prevent multiple instances of CASAManager on windows.

View File

@ -1479,7 +1479,7 @@ namespace Novell.CASA.GUI
// check Current MP
if (entryOldMP.Text != "")
{
int rcode = miCASA.SetMasterPassword(1, entryOldMP.Text);
int rcode = miCASA.SetMasterPassword(0, entryOldMP.Text);
if (rcode != 0)
{
DisplayError("Current Master Password is not correct");

127
CASA/micasad/cache/MPFileWatcher.cs vendored Normal file
View File

@ -0,0 +1,127 @@
using System;
using System.IO;
using sscs.common;
namespace sscs.cache
{
/// <summary>
/// Summary description for MPFileWatcher.
/// </summary>
public class MPFileWatcher
{
FileSystemWatcher fwatcher;
private string m_dir = null;
private string m_filename = null;
private byte[] m_baMP = new byte[32];
private byte[] m_baMPIV = new byte[32];
private bool m_bIgnoreFileDeletes = false;
public MPFileWatcher(string MPFilePath, string MPFileName)
{
m_dir = MPFilePath;
m_filename = MPFileName;
if ((MPFilePath != null) && (MPFileName != null))
{
LogMessage("Starting MPFile watcher on " + MPFilePath + "/" + MPFileName.Substring(1));
fwatcher = new FileSystemWatcher(MPFilePath);
fwatcher.Filter = MPFileName.Substring(1)+"*";
fwatcher.Deleted += new FileSystemEventHandler(fwatcher_Deleted);
fwatcher.Renamed += new RenamedEventHandler(fwatcher_Renamed);
fwatcher.Changed += new FileSystemEventHandler(fwatcher_Changed);
fwatcher.EnableRaisingEvents = true;
}
if (File.Exists(MPFilePath + MPFileName))
{
LoadAndCacheMPFiles();
}
}
~MPFileWatcher()
{
if (fwatcher != null)
fwatcher.EnableRaisingEvents = false;
fwatcher = null;
}
internal void pauseWatcher()
{
m_bIgnoreFileDeletes = true;
}
internal void resumeWatcher()
{
m_bIgnoreFileDeletes = false;
}
private void fwatcher_Deleted(object sender, FileSystemEventArgs e)
{
if (!m_bIgnoreFileDeletes)
{
LogMessage("MP file deleted");
ReWriteFiles();
}
}
private void fwatcher_Changed(object sender, FileSystemEventArgs e)
{
LogMessage("MP file Changed");
LoadAndCacheMPFiles();
}
private void fwatcher_Renamed(object sender, RenamedEventArgs e)
{
LogMessage("MP file renamed");
fwatcher_Deleted(sender, e);
}
private void LoadAndCacheMPFiles()
{
LogMessage("Loading and caching MP files");
try
{
FileStream fs = new FileStream(m_dir + m_filename, FileMode.Open);
fs.Read(m_baMP, 0, m_baMP.Length);
fs.Flush();
fs.Close();
fs = new FileStream(m_dir + m_filename + ".IV", FileMode.Open);
fs.Read(m_baMPIV, 0, m_baMPIV.Length);
fs.Flush();
fs.Close();
}
catch (Exception e)
{
LogMessage(e.ToString());
}
}
private void ReWriteFiles()
{
try
{
FileStream fs = new FileStream(m_dir + m_filename, FileMode.Create);
fs.Write(m_baMP, 0, m_baMP.Length);
fs.Flush();
fs.Close();
fs = new FileStream(m_dir + m_filename + ".IV", FileMode.Create);
fs.Write(m_baMPIV, 0, m_baMPIV.Length);
fs.Flush();
fs.Close();
}
catch (Exception e)
{
LogMessage(e.ToString());
}
}
private void LogMessage(string message)
{
Console.WriteLine(message);
CSSSLogger.DbgLog("MPFileWatcher:" + message);
}
}
}

View File

@ -54,6 +54,8 @@ namespace sscs.cache
private LocalStorage lss = null;
bool bIsStorePersistent = false;
private MPFileWatcher mpWatcher = null;
private DateTime createTime;
public DateTime CreateTime
@ -83,6 +85,13 @@ namespace sscs.cache
keyChainList = Hashtable.Synchronized(tKeyChainList);
ssMutex = new Mutex();
// start a MPFileWatcher if necessary
if (mpWatcher == null)
{
mpWatcher = new MPFileWatcher(GetUserHomeDirectory(), ConstStrings.MICASA_PASSCODE_BY_MASTERPASSWD_FILE);
}
}
internal bool IsStorePersistent()
@ -721,7 +730,9 @@ namespace sscs.cache
byte[] baPasscode = CASACrypto.GetMasterPasscodeUsingMasterPasswd(sCurrentPWD, sMasterFilePath, false);
if (baPasscode != null)
{
mpWatcher.pauseWatcher();
CASACrypto.EncryptAndStoreMasterPasscodeUsingString(baPasscode, sNewPWD, sMasterFilePath);
mpWatcher.resumeWatcher();
return true;
}
return false;

View File

@ -158,6 +158,11 @@
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "cache\MPFileWatcher.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "cache\Secret.cs"
SubType = "Code"
@ -260,7 +265,7 @@
/>
<File
RelPath = "init\ProjectInstaller.cs"
SubType = "Code"
SubType = "Component"
BuildAction = "Compile"
/>
<File
@ -270,7 +275,7 @@
/>
<File
RelPath = "init\WinSecretStoreClientService.cs"
SubType = "Code"
SubType = "Component"
BuildAction = "Compile"
/>
<File
@ -359,6 +364,11 @@
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "verbs\RemoveKey.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "verbs\RemoveKeyChain.cs"
SubType = "Code"