Add Export/import feature
This commit is contained in:
parent
38264cc856
commit
2d3518d9bd
@ -185,6 +185,11 @@
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "ExportSecrets.cs"
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "Firefox.cs"
|
||||
SubType = "Code"
|
||||
@ -195,6 +200,11 @@
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "ImportSecrets.cs"
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "KdeWallet.cs"
|
||||
SubType = "Code"
|
||||
@ -235,11 +245,6 @@
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "TrayLib.cs"
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "images\CASA.bmp"
|
||||
BuildAction = "Content"
|
||||
|
@ -2072,6 +2072,23 @@ namespace Novell.CASA.GUI
|
||||
}
|
||||
|
||||
|
||||
public void on_exportSecrets_activate(object obj, EventArgs args)
|
||||
{
|
||||
|
||||
ExportSecrets es = new ExportSecrets(config);
|
||||
es.Run();
|
||||
|
||||
}
|
||||
|
||||
public void on_importSecrets_activate(object obj, EventArgs args)
|
||||
{
|
||||
ImportSecrets importSecrets = new ImportSecrets(config, objMiCasa);
|
||||
importSecrets.Run();
|
||||
if (objMiCasa != null)
|
||||
objMiCasa.AggregateStore();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ********************************************************************
|
||||
/// private void HandleQuit()
|
||||
|
@ -39,6 +39,9 @@ namespace Novell.CASA.GUI
|
||||
public class CommonGUI
|
||||
{
|
||||
|
||||
public static string HINT_DIR = "Export Directory";
|
||||
public static string HINT_FILENAME = "Export Filename";
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Label label86,
|
||||
label88;
|
||||
@ -212,6 +215,106 @@ namespace Novell.CASA.GUI
|
||||
mTrayInstance.UpdateTrayIcon(false);
|
||||
}
|
||||
}
|
||||
|
||||
public static string FileChooser(FileChooserAction action, String sWindowTitle, String sCurrentFolder, String sHintFileName)
|
||||
{
|
||||
FileChooserDialog chooser = new FileChooserDialog (sWindowTitle,
|
||||
null,
|
||||
action);
|
||||
|
||||
if (sCurrentFolder != null)
|
||||
chooser.SetCurrentFolder(sCurrentFolder);
|
||||
|
||||
if (sHintFileName != null)
|
||||
chooser.SetFilename(sCurrentFolder+sHintFileName);
|
||||
|
||||
|
||||
// set location
|
||||
chooser.SetPosition(Gtk.WindowPosition.CenterAlways);
|
||||
chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
|
||||
|
||||
if (action == FileChooserAction.Open)
|
||||
chooser.AddButton (Stock.Open, ResponseType.Ok);
|
||||
else
|
||||
chooser.AddButton(Stock.Save, ResponseType.Ok);
|
||||
|
||||
int response = chooser.Run ();
|
||||
|
||||
string ret = null;
|
||||
if ((ResponseType) response == ResponseType.Ok)
|
||||
{
|
||||
ret = chooser.Uri;
|
||||
}
|
||||
|
||||
/*
|
||||
// if the action is SAVE, and the file that is choosen exists, prompt the user for overwrite
|
||||
if (action == FileChooserAction.Save)
|
||||
{
|
||||
string sFilename = ret.Substring(8);
|
||||
if (System.IO.File.Exists(sFilename))
|
||||
{
|
||||
// prompt user for overwrite
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
*/
|
||||
chooser.Destroy();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VerifyMasterPasswordWithUser dialog
|
||||
/// </summary>
|
||||
public void VerifyMasterPasswordWithUser()
|
||||
{
|
||||
|
||||
//Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
|
||||
#if W32
|
||||
Glade.XML gxmlTemp = new Glade.XML ("../images/casa.glade", "dialogLogin", null);
|
||||
#endif
|
||||
#if LINUX
|
||||
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
|
||||
#endif
|
||||
|
||||
gxmlTemp.Autoconnect (this);
|
||||
dialogLogin.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain");;
|
||||
|
||||
label86.Text = "Enter your Master Password to continue.";
|
||||
entryMasterPassword3.Text="";
|
||||
label88.Hide();
|
||||
entryMasterPassword4.Hide();
|
||||
//dialogLogin.SetPosition(Gtk.WindowPosition.Center);
|
||||
dialogLogin.Destroyed += new EventHandler(dialogLogin_Destroyed);
|
||||
dialogLogin.Modal = true;
|
||||
dialogLogin.Show();
|
||||
}
|
||||
|
||||
public static void DisplayMessage(Gtk.MessageType messageType, String sMessage)
|
||||
{
|
||||
MessageDialog md = new MessageDialog(null,
|
||||
Gtk.DialogFlags.Modal,
|
||||
messageType,
|
||||
Gtk.ButtonsType.Close,
|
||||
sMessage);
|
||||
|
||||
md.SetPosition(Gtk.WindowPosition.CenterAlways);
|
||||
md.Response +=new ResponseHandler(md_Response3);
|
||||
md.Show();
|
||||
|
||||
}
|
||||
|
||||
private static void md_Response3(object o, ResponseArgs args)
|
||||
{
|
||||
MessageDialog md = (MessageDialog)o;
|
||||
if (md != null)
|
||||
{
|
||||
md.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if W32
|
||||
|
||||
public static bool IsGTKSharpInstalled()
|
||||
|
150
CASA/gui/ExportSecrets.cs
Normal file
150
CASA/gui/ExportSecrets.cs
Normal file
@ -0,0 +1,150 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using Novell.CASA.MiCasa.Communication;
|
||||
using Novell.CASA.MiCasa.Common;
|
||||
|
||||
using Gtk;
|
||||
using Glade;
|
||||
|
||||
namespace Novell.CASA.GUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for ExportSecrets.
|
||||
/// </summary>
|
||||
public class ExportSecrets
|
||||
{
|
||||
|
||||
private Config m_config = null;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Label label86,
|
||||
label88;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Entry entryMasterPassword;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Dialog dialogExport;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.CheckButton checkbuttonNoEncrypt;
|
||||
|
||||
public ExportSecrets(Config config)
|
||||
{
|
||||
m_config = config;
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
// prompt for master password, and optional passphrase to encrypt
|
||||
//Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
|
||||
#if W32
|
||||
Glade.XML gxmlTemp = new Glade.XML ("../images/casa.glade", "dialogExport", null);
|
||||
#endif
|
||||
#if LINUX
|
||||
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
|
||||
#endif
|
||||
|
||||
gxmlTemp.Autoconnect (this);
|
||||
dialogExport.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain");;
|
||||
|
||||
|
||||
dialogExport.Destroyed += new EventHandler(dialogExport_Destroyed);
|
||||
dialogExport.Modal = true;
|
||||
dialogExport.Show();
|
||||
}
|
||||
private void dialogExport_Destroyed(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void on_buttonCloseExportSecrets_clicked(object sender, EventArgs args)
|
||||
{
|
||||
if (dialogExport != null)
|
||||
{
|
||||
dialogExport.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
private void on_buttonOkExportSecrets_clicked(object sender, EventArgs args)
|
||||
{
|
||||
if( 0 == miCASA.SetMasterPassword(0, entryMasterPassword.Text) )
|
||||
{
|
||||
string sMasterPWD = entryMasterPassword.Text;
|
||||
string sEncryptString = entryMasterPassword.Text;
|
||||
|
||||
if (checkbuttonNoEncrypt.Active)
|
||||
sEncryptString = null;
|
||||
|
||||
if (dialogExport != null)
|
||||
{
|
||||
dialogExport.Destroy();
|
||||
}
|
||||
|
||||
string sHintDir = m_config.GetConfigSetting(CommonGUI.HINT_DIR, null);
|
||||
string sHintFile = m_config.GetConfigSetting(CommonGUI.HINT_FILENAME, null);
|
||||
|
||||
// prompt the user for storage location
|
||||
string sFileName = GetStorageFileName(sHintDir, sHintFile);
|
||||
|
||||
if (sFileName != null)
|
||||
{
|
||||
//Store off this location for next export
|
||||
int iLastSlash = sFileName.LastIndexOf("/");
|
||||
if (iLastSlash > 0)
|
||||
{
|
||||
sHintFile = sFileName.Substring(iLastSlash + 1);
|
||||
sHintDir = sFileName.Substring(8, sFileName.Length - sHintFile.Length - 8);
|
||||
}
|
||||
|
||||
// save for later use
|
||||
m_config.SetConfigSetting(CommonGUI.HINT_DIR, sHintDir);
|
||||
m_config.SetConfigSetting(CommonGUI.HINT_FILENAME, sHintFile);
|
||||
m_config.WriteConfig();
|
||||
|
||||
// call our daemon to get the users secrets
|
||||
ExportXMLSecrets exportSecrets = new ExportXMLSecrets(sMasterPWD, sEncryptString);
|
||||
byte[] theSecrets = (byte[])Novell.CASA.MiCasa.Communication.MiCasaRequestReply.Send(MiCasaRequestReply.VERB_EXPORT_SECRETS, null, null, null, exportSecrets);
|
||||
|
||||
// write em out.
|
||||
FileStream fs = new FileStream(sFileName.Substring(8), FileMode.Create);
|
||||
fs.Write(theSecrets, 0, theSecrets.Length);
|
||||
fs.Flush();
|
||||
fs.Close();
|
||||
|
||||
CommonGUI.DisplayMessage(MessageType.Info, "Secrets saved to: \r\n" + sFileName.Substring(8));
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// prompt user
|
||||
MessageDialog md=new MessageDialog(dialogExport,Gtk.DialogFlags.Modal,
|
||||
Gtk.MessageType.Warning,
|
||||
Gtk.ButtonsType.Ok,
|
||||
"Master Password incorrect");
|
||||
|
||||
md.Response +=new ResponseHandler(md_Response2);
|
||||
md.SetPosition(Gtk.WindowPosition.CenterOnParent);
|
||||
md.Modal = true;
|
||||
md.Show();
|
||||
}
|
||||
}
|
||||
|
||||
private string GetStorageFileName(string sHintDir, string sHintFile)
|
||||
{
|
||||
String sFileName = CommonGUI.FileChooser(FileChooserAction.Save, "Select filename and location for secrets", sHintDir, sHintFile);
|
||||
return sFileName;
|
||||
}
|
||||
|
||||
private void md_Response2(object o, ResponseArgs args)
|
||||
{
|
||||
MessageDialog md = (MessageDialog)o;
|
||||
if (md != null)
|
||||
{
|
||||
md.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
119
CASA/gui/ImportSecrets.cs
Normal file
119
CASA/gui/ImportSecrets.cs
Normal file
@ -0,0 +1,119 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using Novell.CASA.MiCasa.Communication;
|
||||
using Novell.CASA.MiCasa.Common;
|
||||
|
||||
namespace Novell.CASA.GUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for ImportSecrets.
|
||||
/// </summary>
|
||||
public class ImportSecrets
|
||||
{
|
||||
Config m_config = null;
|
||||
public MiCasa m_objMiCasa = null;
|
||||
byte[] buffer = null;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Entry entryMasterPassword;
|
||||
|
||||
[Glade.Widget]
|
||||
Gtk.Dialog dialogImport;
|
||||
|
||||
public ImportSecrets(Config config, MiCasa objMiCasa)
|
||||
{
|
||||
m_config = config;
|
||||
m_objMiCasa = objMiCasa;
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
String sHintDir = m_config.GetConfigSetting(CommonGUI.HINT_DIR, null);;
|
||||
String sHintFilename = m_config.GetConfigSetting(CommonGUI.HINT_FILENAME, null);
|
||||
|
||||
// ask the user to locate the secret file to import
|
||||
string sFile = CommonGUI.FileChooser(Gtk.FileChooserAction.Open, "Select import file", sHintDir, sHintFilename);
|
||||
if (sFile != null)
|
||||
{
|
||||
// parse of the file:///
|
||||
sFile = sFile.Substring(8);
|
||||
|
||||
if (File.Exists(sFile))
|
||||
{
|
||||
|
||||
// let's read it
|
||||
FileStream fs = new FileStream(sFile, FileMode.Open);
|
||||
buffer = new byte[fs.Length];
|
||||
|
||||
int iBytes = fs.Read(buffer, 0, (int)fs.Length);
|
||||
string data = System.Text.Encoding.ASCII.GetString(buffer);
|
||||
|
||||
fs.Flush();
|
||||
fs.Close();
|
||||
|
||||
// check for clear text secrets
|
||||
if (data.StartsWith("<?xml"))
|
||||
{
|
||||
ImportXMLSecrets addSecrets = new ImportXMLSecrets(null, buffer);
|
||||
MiCasaRequestReply.Send(MiCasaRequestReply.VERB_ADD_XML_SECRETS, null, null, null, addSecrets);
|
||||
CommonGUI.DisplayMessage(Gtk.MessageType.Info, "Import complete");
|
||||
}
|
||||
else
|
||||
{
|
||||
GetMasterPasswordUsedForImport();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void GetMasterPasswordUsedForImport()
|
||||
{
|
||||
// prompt for master password, and optional passphrase to encrypt
|
||||
//Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
|
||||
#if W32
|
||||
Glade.XML gxmlTemp = new Glade.XML ("../images/casa.glade", "dialogImport", null);
|
||||
#endif
|
||||
#if LINUX
|
||||
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
|
||||
#endif
|
||||
|
||||
gxmlTemp.Autoconnect (this);
|
||||
dialogImport.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain");;
|
||||
dialogImport.Modal = true;
|
||||
dialogImport.Show();
|
||||
}
|
||||
|
||||
private void on_buttonImportOK_clicked(object sender, EventArgs args)
|
||||
{
|
||||
if (entryMasterPassword != null)
|
||||
{
|
||||
ImportXMLSecrets addSecrets = new ImportXMLSecrets(entryMasterPassword.Text, buffer);
|
||||
addSecrets = (ImportXMLSecrets)MiCasaRequestReply.Send(MiCasaRequestReply.VERB_ADD_XML_SECRETS, null, null, null, addSecrets);
|
||||
|
||||
if (dialogImport != null)
|
||||
{
|
||||
dialogImport.Destroy();
|
||||
}
|
||||
if (m_objMiCasa != null)
|
||||
{
|
||||
m_objMiCasa.AggregateStore();
|
||||
}
|
||||
|
||||
if (addSecrets.GetStatus().Equals("Success"))
|
||||
CommonGUI.DisplayMessage(Gtk.MessageType.Info, "Import complete");
|
||||
else
|
||||
CommonGUI.DisplayMessage(Gtk.MessageType.Info, "Failed: " + addSecrets.GetStatus());
|
||||
}
|
||||
}
|
||||
|
||||
private void on_buttonImportClose_clicked(object sender, EventArgs args)
|
||||
{
|
||||
if (dialogImport != null)
|
||||
{
|
||||
dialogImport.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -56,7 +56,7 @@
|
||||
<property name="use_underline">True</property>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3732">
|
||||
<widget class="GtkImage" id="image3902">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-new</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -78,7 +78,7 @@
|
||||
<signal name="activate" handler="OnNewSecretActivated" last_modification_time="Tue, 27 Sep 2005 06:02:26 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3733">
|
||||
<widget class="GtkImage" id="image3903">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-new</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -99,7 +99,7 @@
|
||||
<signal name="activate" handler="OnNewKeyActivated" last_modification_time="Tue, 27 Sep 2005 06:02:36 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3734">
|
||||
<widget class="GtkImage" id="image3904">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-new</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -125,7 +125,7 @@
|
||||
<accelerator key="F5" modifiers="0" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3735">
|
||||
<widget class="GtkImage" id="image3905">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-refresh</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -152,7 +152,7 @@
|
||||
<signal name="activate" handler="OnLockMiCASASecrets" last_modification_time="Mon, 10 Oct 2005 19:51:54 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3736">
|
||||
<widget class="GtkImage" id="image3906">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-dialog-authentication</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -173,7 +173,7 @@
|
||||
<signal name="activate" handler="OnUnLockMiCASASecrets" last_modification_time="Tue, 11 Oct 2005 20:12:35 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3737">
|
||||
<widget class="GtkImage" id="image3907">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-open</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -194,7 +194,7 @@
|
||||
<signal name="activate" handler="OnDestroyMiCASASecrets" last_modification_time="Tue, 11 Oct 2005 20:12:35 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3738">
|
||||
<widget class="GtkImage" id="image3908">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-delete</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -213,6 +213,54 @@
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="exportSecrets">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Export Secrets</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_exportSecrets_activate" last_modification_time="Mon, 07 Aug 2006 19:38:42 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3909">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-floppy</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="importSecrets">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Import Secrets</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_importSecrets_activate" last_modification_time="Mon, 07 Aug 2006 19:38:42 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3910">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-open</property>
|
||||
<property name="icon_size">1</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkSeparatorMenuItem" id="separator7">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="quit1">
|
||||
<property name="visible">True</property>
|
||||
@ -222,7 +270,7 @@
|
||||
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3739">
|
||||
<widget class="GtkImage" id="image3911">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-quit</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -258,7 +306,7 @@
|
||||
<accelerator key="F2" modifiers="0" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3740">
|
||||
<widget class="GtkImage" id="image3912">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-zoom-fit</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -279,7 +327,7 @@
|
||||
<signal name="activate" handler="LinkKeyValue" last_modification_time="Fri, 19 Aug 2005 06:23:15 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3741">
|
||||
<widget class="GtkImage" id="image3913">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-jump-to</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -300,7 +348,7 @@
|
||||
<signal name="activate" handler="CopyKeyValue" last_modification_time="Fri, 19 Aug 2005 06:23:15 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3742">
|
||||
<widget class="GtkImage" id="image3914">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-copy</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -328,7 +376,7 @@
|
||||
<accelerator key="Delete" modifiers="0" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3743">
|
||||
<widget class="GtkImage" id="image3915">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-delete</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -362,7 +410,7 @@
|
||||
<property name="use_underline">True</property>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3744">
|
||||
<widget class="GtkImage" id="image3916">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -384,7 +432,7 @@
|
||||
<signal name="activate" handler="on_konquerer_activate" last_modification_time="Thu, 02 Mar 2006 07:08:06 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3745">
|
||||
<widget class="GtkImage" id="image3917">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -405,7 +453,7 @@
|
||||
<signal name="activate" handler="on_kopete_activate" last_modification_time="Thu, 02 Mar 2006 07:08:44 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3746">
|
||||
<widget class="GtkImage" id="image3918">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -426,7 +474,7 @@
|
||||
<signal name="activate" handler="on_networkmanager_activate" last_modification_time="Thu, 02 Mar 2006 07:07:54 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3747">
|
||||
<widget class="GtkImage" id="image3919">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -447,7 +495,7 @@
|
||||
<signal name="activate" handler="on_gaim_activate" last_modification_time="Thu, 02 Mar 2006 07:07:29 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3748">
|
||||
<widget class="GtkImage" id="image3920">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -472,7 +520,7 @@
|
||||
<signal name="activate" handler="ResetMasterPassword" last_modification_time="Wed, 02 Nov 2005 15:28:00 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3749">
|
||||
<widget class="GtkImage" id="image3921">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-revert-to-saved</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -499,7 +547,7 @@
|
||||
<signal name="activate" handler="Preferences" last_modification_time="Fri, 19 Aug 2005 06:40:17 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3750">
|
||||
<widget class="GtkImage" id="image3922">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-preferences</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -533,7 +581,7 @@
|
||||
<signal name="activate" handler="on_create_sample_secrets1_activate" last_modification_time="Fri, 30 Sep 2005 12:58:41 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3751">
|
||||
<widget class="GtkImage" id="image3923">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -554,7 +602,7 @@
|
||||
<signal name="activate" handler="on_remove_test_secrets1_activate" last_modification_time="Fri, 30 Sep 2005 12:59:05 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3752">
|
||||
<widget class="GtkImage" id="image3924">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -605,7 +653,7 @@
|
||||
<accelerator key="F1" modifiers="0" signal="activate"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3753">
|
||||
<widget class="GtkImage" id="image3925">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-help</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -632,7 +680,7 @@
|
||||
<signal name="activate" handler="About" last_modification_time="Thu, 01 Sep 2005 15:30:28 GMT"/>
|
||||
|
||||
<child internal-child="image">
|
||||
<widget class="GtkImage" id="image3754">
|
||||
<widget class="GtkImage" id="image3926">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-dialog-info</property>
|
||||
<property name="icon_size">1</property>
|
||||
@ -11863,4 +11911,614 @@ the following characters
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkDialog" id="dialogExport">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes">CASA - Export Secrets</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="icon">CASAicons.ico</property>
|
||||
<property name="decorated">True</property>
|
||||
<property name="skip_taskbar_hint">False</property>
|
||||
<property name="skip_pager_hint">False</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
||||
<property name="focus_on_map">True</property>
|
||||
<property name="urgency_hint">False</property>
|
||||
<property name="has_separator">True</property>
|
||||
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="vbox148">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="hbuttonbox23">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button64">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-help</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NONE</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-11</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="buttonCloseExportSecrets">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-7</property>
|
||||
<signal name="clicked" handler="on_buttonCloseExportSecrets_clicked" last_modification_time="Tue, 08 Aug 2006 19:58:38 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="buttonOkExportSecrets">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-5</property>
|
||||
<signal name="clicked" handler="on_buttonOkExportSecrets_clicked" last_modification_time="Mon, 07 Aug 2006 23:37:55 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox149">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox87">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox150">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image3853">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-dialog-authentication</property>
|
||||
<property name="icon_size">6</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox151">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label263">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>Export miCASA Secrets</b></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label264">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Your Master Password is required to
|
||||
export your secrets. Your secrets will
|
||||
be encrypted using your Master Password.
|
||||
|
||||
If you wish, you can export your secrets
|
||||
in clear text. </property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="frame30">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="label_yalign">0.5</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkAlignment" id="alignment45">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xscale">1</property>
|
||||
<property name="yscale">1</property>
|
||||
<property name="top_padding">0</property>
|
||||
<property name="bottom_padding">0</property>
|
||||
<property name="left_padding">12</property>
|
||||
<property name="right_padding">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTable" id="table31">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label265">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Master Password :</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkEntry" id="entryMasterPassword">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="max_length">512</property>
|
||||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="checkbuttonNoEncrypt">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Do not encrypt export file</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkDialog" id="dialogImport">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes">CASA - Import Secrets</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="icon">CASAicons.ico</property>
|
||||
<property name="decorated">True</property>
|
||||
<property name="skip_taskbar_hint">False</property>
|
||||
<property name="skip_pager_hint">False</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
||||
<property name="focus_on_map">True</property>
|
||||
<property name="urgency_hint">False</property>
|
||||
<property name="has_separator">True</property>
|
||||
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="vbox152">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="hbuttonbox24">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button65">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-help</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NONE</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-11</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="buttonImportClose">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-7</property>
|
||||
<signal name="clicked" handler="on_buttonImportClose_clicked" last_modification_time="Wed, 09 Aug 2006 20:53:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="buttonImportOK">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-5</property>
|
||||
<signal name="clicked" handler="on_buttonImportOK_clicked" last_modification_time="Wed, 09 Aug 2006 20:53:23 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox153">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox88">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox154">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image3854">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-dialog-authentication</property>
|
||||
<property name="icon_size">6</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox155">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label266">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>Export miCASA Secrets</b></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label267">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">The file you selected appears
|
||||
to be encypted. Please enter
|
||||
the Master Password used
|
||||
to encrypt this file</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">4</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="frame31">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="label_yalign">0.5</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkAlignment" id="alignment46">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xscale">1</property>
|
||||
<property name="yscale">1</property>
|
||||
<property name="top_padding">0</property>
|
||||
<property name="bottom_padding">0</property>
|
||||
<property name="left_padding">12</property>
|
||||
<property name="right_padding">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTable" id="table32">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label268">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Master Password :</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkEntry" id="entryMasterPassword">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="max_length">512</property>
|
||||
<property name="text" translatable="yes"></property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
</glade-interface>
|
||||
|
44
CASA/micasad/cache/SecretStore.cs
vendored
44
CASA/micasad/cache/SecretStore.cs
vendored
@ -804,5 +804,49 @@ namespace sscs.cache
|
||||
string homeDir = GetUserHomeDirectory();
|
||||
return homeDir + ConstStrings.MICASA_VALIDATION_FILE;
|
||||
}
|
||||
internal byte[] GetSecrets(string sEncryptionString)
|
||||
{
|
||||
if (lss != null)
|
||||
{
|
||||
MemoryStream ms = lss.GetSecretsAsXMLStream();
|
||||
byte[] baSecrets = ms.ToArray();
|
||||
|
||||
// encrypt if an encryptionstring was passed
|
||||
if ((sEncryptionString != null) && (sEncryptionString.Length > 0))
|
||||
{
|
||||
byte[] baKey = sscs.crypto.CASACrypto.Generate16ByteKeyFromString(sEncryptionString, null, false);
|
||||
|
||||
// now encypt it.
|
||||
baSecrets = sscs.crypto.CASACrypto.EncryptData(baSecrets, baKey);
|
||||
}
|
||||
return baSecrets;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal void MergeXMLSecrets(byte[] encryptedXmlSecrets, string sEncryptionString)
|
||||
{
|
||||
if (sEncryptionString != null)
|
||||
{
|
||||
// decrypt the buffer using the string passed in.
|
||||
byte[] baKey = sscs.crypto.CASACrypto.Generate16ByteKeyFromString(sEncryptionString, null, false);
|
||||
byte[] baBuffer = sscs.crypto.CASACrypto.DecryptData(encryptedXmlSecrets, baKey);
|
||||
MergeXMLSecrets(baBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
internal void MergeXMLSecrets(byte[] decryptedXmlSecrets)
|
||||
{
|
||||
XmlDocument doc = new XmlDocument();
|
||||
String sXMLData = Encoding.ASCII.GetString(decryptedXmlSecrets);
|
||||
doc.LoadXml(sXMLData);
|
||||
if (lss != null)
|
||||
{
|
||||
lss.AddXMLSecretsToStore(doc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ namespace sscs.communication.win {
|
||||
private uint NumberPipes = 16;
|
||||
private uint OutBuffer = 65536; //512;
|
||||
private uint InBuffer = 65536; //512;
|
||||
private const int MAX_READ_BYTES = 5000;
|
||||
private const int MAX_READ_BYTES = 15000;
|
||||
private bool _listen = true;
|
||||
public bool Listen {
|
||||
get {
|
||||
|
@ -98,6 +98,16 @@
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "common\ExportXMLSecrets.cs"
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "common\ImportXMLSecrets.cs"
|
||||
SubType = "Code"
|
||||
BuildAction = "Compile"
|
||||
/>
|
||||
<File
|
||||
RelPath = "common\LinkedKeyInfo.cs"
|
||||
SubType = "Code"
|
||||
|
34
CASA/micasad/lib/common/ExportXMLSecrets.cs
Normal file
34
CASA/micasad/lib/common/ExportXMLSecrets.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using System;
|
||||
|
||||
namespace Novell.CASA.MiCasa.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for ExportSecrets.
|
||||
/// </summary>
|
||||
///
|
||||
[Serializable]
|
||||
public class ExportXMLSecrets
|
||||
{
|
||||
private string m_sMasterPassword = null;
|
||||
private string m_sPassphrase = null;
|
||||
|
||||
public ExportXMLSecrets(string sMasterPassword, string sPassphrase)
|
||||
{
|
||||
m_sMasterPassword = sMasterPassword;
|
||||
if (sPassphrase != null)
|
||||
{
|
||||
m_sPassphrase = sPassphrase;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetMasterPassword()
|
||||
{
|
||||
return m_sMasterPassword;
|
||||
}
|
||||
|
||||
public string GetPassphrase()
|
||||
{
|
||||
return m_sPassphrase;
|
||||
}
|
||||
}
|
||||
}
|
42
CASA/micasad/lib/common/ImportXMLSecrets.cs
Normal file
42
CASA/micasad/lib/common/ImportXMLSecrets.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
|
||||
namespace Novell.CASA.MiCasa.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for AddXMLSecrets.
|
||||
/// </summary>
|
||||
///
|
||||
[Serializable]
|
||||
public class ImportXMLSecrets
|
||||
{
|
||||
private string m_MasterPassword = null;
|
||||
private byte[] m_XmlSecrets = null;
|
||||
private string m_sStatus = "";
|
||||
|
||||
public ImportXMLSecrets(string sMasterPassword, byte[] XmlSecrets)
|
||||
{
|
||||
m_MasterPassword = sMasterPassword;
|
||||
m_XmlSecrets = XmlSecrets;
|
||||
}
|
||||
|
||||
public string GetMasterPasssword()
|
||||
{
|
||||
return m_MasterPassword;
|
||||
}
|
||||
|
||||
public byte[] GetXmlSecrets()
|
||||
{
|
||||
return m_XmlSecrets;
|
||||
}
|
||||
|
||||
public void SetStatus(string s)
|
||||
{
|
||||
m_sStatus = s;
|
||||
}
|
||||
|
||||
public string GetStatus()
|
||||
{
|
||||
return m_sStatus;
|
||||
}
|
||||
}
|
||||
}
|
@ -56,6 +56,8 @@ namespace Novell.CASA.MiCasa.Communication
|
||||
public const int VERB_RESET_MASTER_PASSWORD = 18;
|
||||
public const int VERB_GET_SECRETIDS = 19;
|
||||
public const int VERB_VALIDATE_DESKTOP_PWD = 20;
|
||||
public const int VERB_EXPORT_SECRETS = 21;
|
||||
public const int VERB_ADD_XML_SECRETS = 22;
|
||||
|
||||
public const int VERB_DUMP_LINKED_KEYS = 96;
|
||||
public const int VERB_CREATE_TEST_SECRETS = 97;
|
||||
|
@ -32,143 +32,199 @@ using sscs.constants;
|
||||
|
||||
namespace sscs.crypto
|
||||
{
|
||||
public class CASACrypto
|
||||
{
|
||||
public class CASACrypto
|
||||
{
|
||||
|
||||
private const int SALTSIZE = 64;
|
||||
private const int ITERATION_COUNT = 1000;
|
||||
private const int HASH_SIZE = 32;
|
||||
private const int SALTSIZE = 64;
|
||||
private const int ITERATION_COUNT = 1000;
|
||||
private const int HASH_SIZE = 32;
|
||||
|
||||
internal static byte[] Generate16ByteKeyFromString(string sTheString, string sFilepath, bool bUseOldMethod)
|
||||
{
|
||||
byte[] baKey = new byte[16]; //return value
|
||||
try
|
||||
{
|
||||
Rfc2898DeriveBytes pkcs5 = new Rfc2898DeriveBytes(sTheString, SALTSIZE, ITERATION_COUNT, bUseOldMethod);
|
||||
baKey = pkcs5.GetBytes(16);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Key generation failed");
|
||||
baKey = null;
|
||||
}
|
||||
return baKey;
|
||||
}
|
||||
internal static byte[] Generate16ByteKeyFromString(string sTheString, string sFilepath, bool bUseOldMethod)
|
||||
{
|
||||
byte[] baKey = new byte[16]; //return value
|
||||
try
|
||||
{
|
||||
Rfc2898DeriveBytes pkcs5 = new Rfc2898DeriveBytes(sTheString, SALTSIZE, ITERATION_COUNT, bUseOldMethod);
|
||||
baKey = pkcs5.GetBytes(16);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Key generation failed");
|
||||
baKey = null;
|
||||
}
|
||||
return baKey;
|
||||
}
|
||||
|
||||
internal static bool StoreKeySetUsingMasterPasscode(byte[] key,
|
||||
byte[] IV, byte[] baMasterPasscode, string fileName)
|
||||
{
|
||||
bool bRet = false;
|
||||
FileStream fsEncrypt = null;
|
||||
CryptoStream csEncrypt = null;
|
||||
try
|
||||
{
|
||||
internal static bool StoreKeySetUsingMasterPasscode(byte[] key,
|
||||
byte[] IV, byte[] baMasterPasscode, string fileName)
|
||||
{
|
||||
bool bRet = false;
|
||||
FileStream fsEncrypt = null;
|
||||
CryptoStream csEncrypt = null;
|
||||
try
|
||||
{
|
||||
|
||||
//Get an encryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform encryptor;
|
||||
encryptor = myRijndael.CreateEncryptor(baMasterPasscode, GenerateAndSaveIV(fileName, myRijndael));
|
||||
//Get an encryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform encryptor;
|
||||
encryptor = myRijndael.CreateEncryptor(baMasterPasscode, GenerateAndSaveIV(fileName, myRijndael));
|
||||
|
||||
//Encrypt the data to a file
|
||||
fsEncrypt = new FileStream(fileName, FileMode.Create);
|
||||
//Encrypt the data to a file
|
||||
fsEncrypt = new FileStream(fileName, FileMode.Create);
|
||||
|
||||
// make hidden
|
||||
File.SetAttributes(fileName, FileAttributes.Hidden);
|
||||
|
||||
SHA256 sha = new SHA256Managed();
|
||||
byte[] hash = sha.ComputeHash(key);
|
||||
SHA256 sha = new SHA256Managed();
|
||||
byte[] hash = sha.ComputeHash(key);
|
||||
|
||||
fsEncrypt.Write(hash,0,hash.Length);
|
||||
fsEncrypt.Flush();
|
||||
fsEncrypt.Write(hash,0,hash.Length);
|
||||
fsEncrypt.Flush();
|
||||
|
||||
csEncrypt = new CryptoStream(fsEncrypt, encryptor, CryptoStreamMode.Write);
|
||||
csEncrypt = new CryptoStream(fsEncrypt, encryptor, CryptoStreamMode.Write);
|
||||
|
||||
//Write all data to the crypto stream and flush it.
|
||||
csEncrypt.Write(key, 0, key.Length);
|
||||
csEncrypt.FlushFinalBlock();
|
||||
bRet = true;
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Unable to store the generated key");
|
||||
bRet = false;
|
||||
}
|
||||
if (csEncrypt != null)
|
||||
csEncrypt.Close();
|
||||
if( fsEncrypt != null )
|
||||
fsEncrypt.Close();
|
||||
return bRet;
|
||||
}
|
||||
//Write all data to the crypto stream and flush it.
|
||||
csEncrypt.Write(key, 0, key.Length);
|
||||
csEncrypt.FlushFinalBlock();
|
||||
bRet = true;
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Unable to store the generated key");
|
||||
bRet = false;
|
||||
}
|
||||
if (csEncrypt != null)
|
||||
csEncrypt.Close();
|
||||
if( fsEncrypt != null )
|
||||
fsEncrypt.Close();
|
||||
return bRet;
|
||||
}
|
||||
|
||||
internal static byte[] GetKeySetFromFile(byte[] baMasterPasscode,
|
||||
string fileName )
|
||||
{
|
||||
byte[] baSavedKey = null;
|
||||
FileStream fsDecrypt = null;
|
||||
CryptoStream csDecrypt = null;
|
||||
internal static byte[] GetKeySetFromFile(byte[] baMasterPasscode,
|
||||
string fileName )
|
||||
{
|
||||
byte[] baSavedKey = null;
|
||||
FileStream fsDecrypt = null;
|
||||
CryptoStream csDecrypt = null;
|
||||
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
#if LINUX
|
||||
UnixFileInfo fsTest = new UnixFileInfo (fileName);
|
||||
if((fsTest == null) || !(fsTest.Exists) || fsTest.IsSymbolicLink)
|
||||
#else
|
||||
if(!File.Exists(fileName))
|
||||
if(!File.Exists(fileName))
|
||||
#endif
|
||||
{
|
||||
return null;
|
||||
}
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/* Get a decryptor that uses the same key and IV
|
||||
* as the encryptor.
|
||||
*/
|
||||
/* Get a decryptor that uses the same key and IV
|
||||
* as the encryptor.
|
||||
*/
|
||||
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform decryptor = myRijndael.CreateDecryptor(baMasterPasscode, RetrieveIV(fileName, baMasterPasscode));
|
||||
//Now decrypt
|
||||
fsDecrypt = new FileStream(fileName, FileMode.Open);
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform decryptor = myRijndael.CreateDecryptor(baMasterPasscode, RetrieveIV(fileName, baMasterPasscode));
|
||||
//Now decrypt
|
||||
fsDecrypt = new FileStream(fileName, FileMode.Open);
|
||||
|
||||
byte[] storedHash = new byte[32];
|
||||
fsDecrypt.Read(storedHash,0,storedHash.Length);
|
||||
byte[] storedHash = new byte[32];
|
||||
fsDecrypt.Read(storedHash,0,storedHash.Length);
|
||||
|
||||
csDecrypt = new CryptoStream(fsDecrypt, decryptor, CryptoStreamMode.Read);
|
||||
baSavedKey = new byte[32];
|
||||
csDecrypt = new CryptoStream(fsDecrypt, decryptor, CryptoStreamMode.Read);
|
||||
baSavedKey = new byte[32];
|
||||
|
||||
//Read the data out of the crypto stream.
|
||||
csDecrypt.Read(baSavedKey, 0, baSavedKey.Length);
|
||||
//Read the data out of the crypto stream.
|
||||
csDecrypt.Read(baSavedKey, 0, baSavedKey.Length);
|
||||
|
||||
SHA256 sha = new SHA256Managed();
|
||||
byte[] newHash = sha.ComputeHash(baSavedKey);
|
||||
for( int i = 0 ; i < 32; i++ )
|
||||
{
|
||||
if(storedHash[i] != newHash[i])
|
||||
{
|
||||
CSSSLogger.DbgLog("Hash doesnot match");
|
||||
csDecrypt.Close();
|
||||
fsDecrypt.Close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Unable to get the stored key");
|
||||
baSavedKey = null;
|
||||
}
|
||||
SHA256 sha = new SHA256Managed();
|
||||
byte[] newHash = sha.ComputeHash(baSavedKey);
|
||||
for( int i = 0 ; i < 32; i++ )
|
||||
{
|
||||
if(storedHash[i] != newHash[i])
|
||||
{
|
||||
CSSSLogger.DbgLog("Hash doesnot match");
|
||||
csDecrypt.Close();
|
||||
fsDecrypt.Close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Unable to get the stored key");
|
||||
baSavedKey = null;
|
||||
}
|
||||
|
||||
|
||||
if (csDecrypt != null)
|
||||
csDecrypt.Close();
|
||||
if (csDecrypt != null)
|
||||
csDecrypt.Close();
|
||||
|
||||
if ( fsDecrypt != null )
|
||||
fsDecrypt.Close();
|
||||
if ( fsDecrypt != null )
|
||||
fsDecrypt.Close();
|
||||
|
||||
|
||||
return baSavedKey;
|
||||
}
|
||||
return baSavedKey;
|
||||
}
|
||||
|
||||
internal static byte[] DecryptData(byte[] encyptedXmlData, byte[] key)
|
||||
{
|
||||
CryptoStream csDecrypt = null;
|
||||
byte[] buffer = new byte[encyptedXmlData.Length];
|
||||
MemoryStream ms = new MemoryStream(encyptedXmlData);
|
||||
|
||||
try
|
||||
{
|
||||
//Get an decryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, key);
|
||||
csDecrypt = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
|
||||
|
||||
//Read all data to the crypto stream and flush it.
|
||||
int iBytesRead = csDecrypt.Read(buffer,0,encyptedXmlData.Length);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("decrypting failed.");
|
||||
}
|
||||
if (csDecrypt != null)
|
||||
csDecrypt.Close();
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
internal static byte[] EncryptData(byte[] xmlData, byte[] key)
|
||||
{
|
||||
CryptoStream csEncrypt = null;
|
||||
MemoryStream encryptedData = new MemoryStream();
|
||||
try
|
||||
{
|
||||
//Get an encryptor.
|
||||
RijndaelManaged myRijndael = new RijndaelManaged();
|
||||
ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, key);
|
||||
|
||||
//csEncrypt = new CryptoStream(fsEncrypt, encryptor, CryptoStreamMode.Write);
|
||||
csEncrypt = new CryptoStream(encryptedData, encryptor, CryptoStreamMode.Write);
|
||||
|
||||
//Write all data to the crypto stream and flush it.
|
||||
csEncrypt.Write(xmlData, 0, xmlData.Length);
|
||||
csEncrypt.FlushFinalBlock();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
CSSSLogger.ExpLog(e.ToString());
|
||||
CSSSLogger.DbgLog("Encrypting failed.");
|
||||
}
|
||||
if (csEncrypt != null)
|
||||
csEncrypt.Close();
|
||||
|
||||
return encryptedData.ToArray();
|
||||
}
|
||||
|
||||
|
||||
internal static void EncryptDataAndWriteToFile(byte[] xmlData,
|
||||
byte[] key, string fileName)
|
||||
|
@ -237,89 +237,9 @@ namespace sscs.lss
|
||||
{
|
||||
return false;
|
||||
}
|
||||
xpath = "//" + XmlConsts.miCASANode;
|
||||
XmlNode miCASANode = doc.SelectSingleNode(xpath);
|
||||
if(miCASANode != null)
|
||||
{
|
||||
xpath = "descendant::" + XmlConsts.keyChainNode;
|
||||
XmlNodeList keyChainNodeList = miCASANode.SelectNodes(xpath);
|
||||
foreach(XmlNode node in keyChainNodeList)
|
||||
{
|
||||
XmlAttributeCollection attrColl = node.Attributes;
|
||||
string keyChainId = (attrColl[XmlConsts.idAttr]).Value + "\0";
|
||||
KeyChain keyChain = null;
|
||||
|
||||
if( userStore.CheckIfKeyChainExists(keyChainId) == false )
|
||||
{
|
||||
keyChain = new KeyChain(keyChainId);
|
||||
userStore.AddKeyChain(keyChain);
|
||||
}
|
||||
else
|
||||
{
|
||||
keyChain = userStore.GetKeyChain(keyChainId);
|
||||
}
|
||||
xpath = "descendant::" + XmlConsts.secretNode;
|
||||
XmlNodeList secretNodeList = node.SelectNodes(xpath);
|
||||
foreach(XmlNode secretNode in secretNodeList)
|
||||
{
|
||||
attrColl = secretNode.Attributes;
|
||||
string secretId = (attrColl[XmlConsts.idAttr]).Value + "\0";
|
||||
xpath = "descendant::" + XmlConsts.valueNode;
|
||||
Secret secret = new Secret(secretId);
|
||||
if( keyChain.CheckIfSecretExists(secretId) == false)
|
||||
{
|
||||
keyChain.AddSecret(secret);
|
||||
XmlNode secretValNode = (secretNode.SelectSingleNode(xpath));
|
||||
xpath = "descendant::" + XmlConsts.keyNode;
|
||||
|
||||
XmlNodeList keyNodeList = secretValNode.SelectNodes(xpath);
|
||||
|
||||
secret = keyChain.GetSecret(secretId);
|
||||
foreach(XmlNode keyNode in keyNodeList)
|
||||
{
|
||||
attrColl = keyNode.Attributes;
|
||||
string key;
|
||||
try
|
||||
{
|
||||
key = (attrColl[XmlConsts.idAttr]).Value;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// LinkedKey node, continue
|
||||
continue;
|
||||
}
|
||||
xpath = "descendant::" + XmlConsts.keyValueNode;
|
||||
XmlNode keyValNode = keyNode.SelectSingleNode(xpath);
|
||||
string keyValue = keyValNode.InnerText;
|
||||
secret.SetKeyValue(key,keyValue);
|
||||
|
||||
|
||||
// add linked keys
|
||||
xpath = "descendant::" + XmlConsts.linkedKeyNode;
|
||||
XmlNodeList linkNodeList = keyNode.SelectNodes(xpath);
|
||||
foreach(XmlNode linkNode in linkNodeList)
|
||||
{
|
||||
// get TargetSecretID
|
||||
xpath = "descendant::" + XmlConsts.linkedTargetSecretNode;
|
||||
XmlNode targetSecretNode = linkNode.SelectSingleNode(xpath);
|
||||
string sSecretID = targetSecretNode.InnerText + "\0";
|
||||
|
||||
// get TargetSecretKey
|
||||
xpath = "descendant::" + XmlConsts.linkedTargetKeyNode;
|
||||
XmlNode targetKeyNode = linkNode.SelectSingleNode(xpath);
|
||||
string sKeyID = targetKeyNode.InnerText;
|
||||
|
||||
LinkedKeyInfo lki = new LinkedKeyInfo(sSecretID, sKeyID, true);
|
||||
KeyValue kv = secret.GetKeyValue(key);
|
||||
kv.AddLink(lki);
|
||||
}
|
||||
|
||||
}
|
||||
}//if ends
|
||||
}
|
||||
|
||||
}//end of traversing keyChainNodeList
|
||||
}
|
||||
// add these to the store
|
||||
AddXMLSecretsToStore(doc);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
@ -332,6 +252,94 @@ namespace sscs.lss
|
||||
return true;
|
||||
}
|
||||
|
||||
internal void AddXMLSecretsToStore(XmlDocument doc)
|
||||
{
|
||||
string xpath = "";
|
||||
xpath = "//" + XmlConsts.miCASANode;
|
||||
XmlNode miCASANode = doc.SelectSingleNode(xpath);
|
||||
if(miCASANode != null)
|
||||
{
|
||||
xpath = "descendant::" + XmlConsts.keyChainNode;
|
||||
XmlNodeList keyChainNodeList = miCASANode.SelectNodes(xpath);
|
||||
foreach(XmlNode node in keyChainNodeList)
|
||||
{
|
||||
XmlAttributeCollection attrColl = node.Attributes;
|
||||
string keyChainId = (attrColl[XmlConsts.idAttr]).Value + "\0";
|
||||
KeyChain keyChain = null;
|
||||
|
||||
if( userStore.CheckIfKeyChainExists(keyChainId) == false )
|
||||
{
|
||||
keyChain = new KeyChain(keyChainId);
|
||||
userStore.AddKeyChain(keyChain);
|
||||
}
|
||||
else
|
||||
{
|
||||
keyChain = userStore.GetKeyChain(keyChainId);
|
||||
}
|
||||
xpath = "descendant::" + XmlConsts.secretNode;
|
||||
XmlNodeList secretNodeList = node.SelectNodes(xpath);
|
||||
foreach(XmlNode secretNode in secretNodeList)
|
||||
{
|
||||
attrColl = secretNode.Attributes;
|
||||
string secretId = (attrColl[XmlConsts.idAttr]).Value + "\0";
|
||||
xpath = "descendant::" + XmlConsts.valueNode;
|
||||
Secret secret = new Secret(secretId);
|
||||
if( keyChain.CheckIfSecretExists(secretId) == false)
|
||||
{
|
||||
keyChain.AddSecret(secret);
|
||||
XmlNode secretValNode = (secretNode.SelectSingleNode(xpath));
|
||||
xpath = "descendant::" + XmlConsts.keyNode;
|
||||
|
||||
XmlNodeList keyNodeList = secretValNode.SelectNodes(xpath);
|
||||
|
||||
secret = keyChain.GetSecret(secretId);
|
||||
foreach(XmlNode keyNode in keyNodeList)
|
||||
{
|
||||
attrColl = keyNode.Attributes;
|
||||
string key;
|
||||
try
|
||||
{
|
||||
key = (attrColl[XmlConsts.idAttr]).Value;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// LinkedKey node, continue
|
||||
continue;
|
||||
}
|
||||
xpath = "descendant::" + XmlConsts.keyValueNode;
|
||||
XmlNode keyValNode = keyNode.SelectSingleNode(xpath);
|
||||
string keyValue = keyValNode.InnerText;
|
||||
secret.SetKeyValue(key,keyValue);
|
||||
|
||||
|
||||
// add linked keys
|
||||
xpath = "descendant::" + XmlConsts.linkedKeyNode;
|
||||
XmlNodeList linkNodeList = keyNode.SelectNodes(xpath);
|
||||
foreach(XmlNode linkNode in linkNodeList)
|
||||
{
|
||||
// get TargetSecretID
|
||||
xpath = "descendant::" + XmlConsts.linkedTargetSecretNode;
|
||||
XmlNode targetSecretNode = linkNode.SelectSingleNode(xpath);
|
||||
string sSecretID = targetSecretNode.InnerText + "\0";
|
||||
|
||||
// get TargetSecretKey
|
||||
xpath = "descendant::" + XmlConsts.linkedTargetKeyNode;
|
||||
XmlNode targetKeyNode = linkNode.SelectSingleNode(xpath);
|
||||
string sKeyID = targetKeyNode.InnerText;
|
||||
|
||||
LinkedKeyInfo lki = new LinkedKeyInfo(sSecretID, sKeyID, true);
|
||||
KeyValue kv = secret.GetKeyValue(key);
|
||||
kv.AddLink(lki);
|
||||
}
|
||||
|
||||
}
|
||||
}//if ends
|
||||
}
|
||||
|
||||
}//end of traversing keyChainNodeList
|
||||
}
|
||||
}
|
||||
|
||||
private void PersistStoreDelayThreadFn()
|
||||
{
|
||||
Thread.Sleep(15000);
|
||||
|
@ -33,6 +33,7 @@ using sscs.lss;
|
||||
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
using Novell.CASA.MiCasa.Common;
|
||||
using Novell.CASA.MiCasa.Communication;
|
||||
@ -218,6 +219,14 @@ namespace sscs.verbs
|
||||
{
|
||||
return DoValidateDesktopPwd(ssStore, wo);
|
||||
}
|
||||
case MiCasaRequestReply.VERB_EXPORT_SECRETS:
|
||||
{
|
||||
return DoExportSecrets(ssStore, wo);
|
||||
}
|
||||
case MiCasaRequestReply.VERB_ADD_XML_SECRETS:
|
||||
{
|
||||
return DoMergeXMLSecrets(ssStore, wo);
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
@ -235,6 +244,61 @@ namespace sscs.verbs
|
||||
return wo;
|
||||
}
|
||||
|
||||
private WrappedObject DoMergeXMLSecrets(SecretStore ssStore, WrappedObject wo)
|
||||
{
|
||||
ImportXMLSecrets addSecrets = (ImportXMLSecrets)wo.GetObject();
|
||||
string sMasterPassword = addSecrets.GetMasterPasssword();
|
||||
byte[] baXMLSecrets = addSecrets.GetXmlSecrets();
|
||||
|
||||
try
|
||||
{
|
||||
if (sMasterPassword != null)
|
||||
{
|
||||
// decrypt secrets if possible
|
||||
ssStore.MergeXMLSecrets(baXMLSecrets, sMasterPassword);
|
||||
}
|
||||
else
|
||||
{
|
||||
// do the merge now.
|
||||
ssStore.MergeXMLSecrets(baXMLSecrets);
|
||||
}
|
||||
addSecrets.SetStatus("Success");
|
||||
wo.SetError(constants.RetCodes.SUCCESS, "");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
addSecrets.SetStatus(e.ToString());
|
||||
wo.SetError(constants.RetCodes.FAILURE, e.ToString());
|
||||
}
|
||||
|
||||
return wo;
|
||||
}
|
||||
|
||||
private WrappedObject DoExportSecrets(SecretStore ssStore, WrappedObject wo)
|
||||
{
|
||||
ExportXMLSecrets secrets = (ExportXMLSecrets)wo.GetObject();
|
||||
|
||||
// validate masterpassword
|
||||
try
|
||||
{
|
||||
string sMasterPassword = secrets.GetMasterPassword();
|
||||
ssStore.UnlockStore(null, sMasterPassword);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
wo.SetError(constants.RetCodes.FAILURE, e.ToString());
|
||||
return wo;
|
||||
}
|
||||
|
||||
string sEncrpyptionPassphrase = secrets.GetPassphrase();
|
||||
|
||||
// get all secrets
|
||||
wo.SetObject(ssStore.GetSecrets(sEncrpyptionPassphrase));
|
||||
wo.SetError(constants.RetCodes.SUCCESS, "");
|
||||
return wo;
|
||||
|
||||
}
|
||||
|
||||
private WrappedObject DoValidateDesktopPwd(SecretStore ssStore, WrappedObject wo)
|
||||
{
|
||||
// let's validate the Desktop pwd
|
||||
|
Binary file not shown.
Binary file not shown.
@ -21,24 +21,6 @@
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_43A67B1DA6D34A6098E563CC902B950F"
|
||||
"OwnerKey" = "8:_A6D188F9B5AF430C92D0B9606ADF4C63"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_43A67B1DA6D34A6098E563CC902B950F"
|
||||
"OwnerKey" = "8:_98DCC664712A41B993FCD33026D06FFC"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_43A67B1DA6D34A6098E563CC902B950F"
|
||||
"OwnerKey" = "8:_BF2CE61978054B2DB482792974E390F0"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_6CE0B932302E4E3783AAD1EA468ABD34"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
@ -75,6 +57,24 @@
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_EF3E9937AC8B4A898E7B80BCEA175E6A"
|
||||
"OwnerKey" = "8:_98DCC664712A41B993FCD33026D06FFC"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_EF3E9937AC8B4A898E7B80BCEA175E6A"
|
||||
"OwnerKey" = "8:_BF2CE61978054B2DB482792974E390F0"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_EF3E9937AC8B4A898E7B80BCEA175E6A"
|
||||
"OwnerKey" = "8:_A6D188F9B5AF430C92D0B9606ADF4C63"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_EF467E7BEF8E4109BAD7E2FE47508D13"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
@ -307,13 +307,13 @@
|
||||
{
|
||||
"Name" = "8:Microsoft Visual Studio"
|
||||
"ProductName" = "8:CASA"
|
||||
"ProductCode" = "8:{9763A76D-50C8-4D81-AAB2-0415D042E299}"
|
||||
"PackageCode" = "8:{A775679E-BE18-4FCC-884B-B5A6626CD0A4}"
|
||||
"ProductCode" = "8:{970A65D5-A969-4659-B2AF-F212B518F99A}"
|
||||
"PackageCode" = "8:{1368B6D9-3ACA-446D-8E33-C207F44508D6}"
|
||||
"UpgradeCode" = "8:{DFD8B8A0-EA51-4202-831C-7CD2B90A63AE}"
|
||||
"RestartWWWService" = "11:FALSE"
|
||||
"RemovePreviousVersions" = "11:TRUE"
|
||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||
"ProductVersion" = "8:1.7.732"
|
||||
"ProductVersion" = "8:1.7.786"
|
||||
"Manufacturer" = "8:Novell"
|
||||
"ARPHELPTELEPHONE" = "8:"
|
||||
"ARPHELPLINK" = "8:"
|
||||
@ -835,7 +835,7 @@
|
||||
}
|
||||
"MergeModule"
|
||||
{
|
||||
"{35A69C6E-5BA4-440D-803D-762B59A45393}:_43A67B1DA6D34A6098E563CC902B950F"
|
||||
"{35A69C6E-5BA4-440D-803D-762B59A45393}:_EF3E9937AC8B4A898E7B80BCEA175E6A"
|
||||
{
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:TRUE"
|
||||
@ -854,7 +854,7 @@
|
||||
{
|
||||
"{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_98DCC664712A41B993FCD33026D06FFC"
|
||||
{
|
||||
"SourcePath" = "8:..\\CASA-gui-msm\\Debug\\CASA-gui.msm"
|
||||
"SourcePath" = "8:..\\CASA-gui-msm\\Release\\CASA-gui.msm"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_E8900D5F0BD44DC0BB0BEFDF7C43B30C"
|
||||
@ -907,7 +907,7 @@
|
||||
}
|
||||
"{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_A6D188F9B5AF430C92D0B9606ADF4C63"
|
||||
{
|
||||
"SourcePath" = "8:..\\CASA-dev-msm\\Debug\\miCASA-Dev-msm.msm"
|
||||
"SourcePath" = "8:..\\CASA-dev-msm\\Release\\miCASA-Dev-msm.msm"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_E8900D5F0BD44DC0BB0BEFDF7C43B30C"
|
||||
@ -939,17 +939,31 @@
|
||||
"SourcePath" = "8:..\\CASA-dev-msm\\Release\\miCASA-Dev-msm.msm"
|
||||
"Properties"
|
||||
{
|
||||
"_62D43560615587AE3DB95A0BA428D5BE.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"_4610C2D660057AC39D7FDD4891590B10.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
{
|
||||
"Name" = "8:_62D43560615587AE3DB95A0BA428D5BE.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Name" = "8:_4610C2D660057AC39D7FDD4891590B10.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DisplayName" = "8:"
|
||||
"Description" = "8:"
|
||||
"Type" = "3:2"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_A1ECD7DAF522A0E5D85BCDD9EAED3209.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_8FCF3A547028ECFD0B5049EFAB348182.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:2"
|
||||
"Value" = "8:_A1ECD7DAF522A0E5D85BCDD9EAED3209.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_A1ECD7DAF522A0E5D85BCDD9EAED3209.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Value" = "8:_8FCF3A547028ECFD0B5049EFAB348182.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_8FCF3A547028ECFD0B5049EFAB348182.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
"_4F85CEF984A77868D0A929E54872824F.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
{
|
||||
"Name" = "8:_4F85CEF984A77868D0A929E54872824F.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DisplayName" = "8:"
|
||||
"Description" = "8:"
|
||||
"Type" = "3:2"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_0683B4C519DB3748EBD996E0ABA831C0.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:2"
|
||||
"Value" = "8:_0683B4C519DB3748EBD996E0ABA831C0.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_0683B4C519DB3748EBD996E0ABA831C0.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
@ -964,59 +978,45 @@
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
"_6E1C74B0F6DBAA22C571F4B02C1DB283.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"_B6F5734BF952F464EAB21BAD6E20F38A.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
{
|
||||
"Name" = "8:_6E1C74B0F6DBAA22C571F4B02C1DB283.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Name" = "8:_B6F5734BF952F464EAB21BAD6E20F38A.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DisplayName" = "8:"
|
||||
"Description" = "8:"
|
||||
"Type" = "3:2"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_E33B56BF66EDE9E5F123E5CB7C4EEAB7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_79BCEE497E2B712D20C7E4A2F4800E60.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:2"
|
||||
"Value" = "8:_E33B56BF66EDE9E5F123E5CB7C4EEAB7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_E33B56BF66EDE9E5F123E5CB7C4EEAB7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Value" = "8:_79BCEE497E2B712D20C7E4A2F4800E60.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_79BCEE497E2B712D20C7E4A2F4800E60.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
"_95C01A87787956AC69FC2E9C7FA507A7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"_E7CF2B4A827BE173141CA1E1D0F82AFF.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
{
|
||||
"Name" = "8:_95C01A87787956AC69FC2E9C7FA507A7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Name" = "8:_E7CF2B4A827BE173141CA1E1D0F82AFF.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DisplayName" = "8:"
|
||||
"Description" = "8:"
|
||||
"Type" = "3:2"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_79C6F8F43FF4CB3AF63B925D0EA1C564.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_108CF762A5E732DB8AA6185773BCA705.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:2"
|
||||
"Value" = "8:_79C6F8F43FF4CB3AF63B925D0EA1C564.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_79C6F8F43FF4CB3AF63B925D0EA1C564.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Value" = "8:_108CF762A5E732DB8AA6185773BCA705.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_108CF762A5E732DB8AA6185773BCA705.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
"_E1A13CA07F77E5ABDB363BA4E14A8EED.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"_F0F8D6D23B097F7830C01E614D9034B9.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
{
|
||||
"Name" = "8:_E1A13CA07F77E5ABDB363BA4E14A8EED.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Name" = "8:_F0F8D6D23B097F7830C01E614D9034B9.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DisplayName" = "8:"
|
||||
"Description" = "8:"
|
||||
"Type" = "3:2"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_793F49C101FDC71EA468B0F50F5E7FF8.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_290870C7D1693472634A9D8D875DA83B.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:2"
|
||||
"Value" = "8:_793F49C101FDC71EA468B0F50F5E7FF8.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_793F49C101FDC71EA468B0F50F5E7FF8.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
"_ED516AEF413A6424C60E58C4FE881B58.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
{
|
||||
"Name" = "8:_ED516AEF413A6424C60E58C4FE881B58.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DisplayName" = "8:"
|
||||
"Description" = "8:"
|
||||
"Type" = "3:2"
|
||||
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_4CF0917F390ACC0AF5A1750516A3993E.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:2"
|
||||
"Value" = "8:_4CF0917F390ACC0AF5A1750516A3993E.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_4CF0917F390ACC0AF5A1750516A3993E.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"Value" = "8:_290870C7D1693472634A9D8D875DA83B.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"DefaultValue" = "8:_290870C7D1693472634A9D8D875DA83B.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
|
||||
"UsePlugInResources" = "11:FALSE"
|
||||
}
|
||||
@ -1030,7 +1030,7 @@
|
||||
}
|
||||
"{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_BF2CE61978054B2DB482792974E390F0"
|
||||
{
|
||||
"SourcePath" = "8:..\\CASA-msm\\Debug\\CASA-msm.msm"
|
||||
"SourcePath" = "8:..\\CASA-msm\\Release\\CASA-msm.msm"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_E8900D5F0BD44DC0BB0BEFDF7C43B30C"
|
||||
|
Loading…
Reference in New Issue
Block a user