Bug 148945. Handle the case were micasad is restarted, before

a user sets their master password
This commit is contained in:
Jim Norman 2006-02-21 19:07:18 +00:00
parent d9984f8958
commit f7b5adfb56
4 changed files with 533 additions and 12 deletions

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Mon Feb 21 12:05:17 MST 2006 - jnorman@novell.com
- Bug 148945. Handle the case were micasad is restarted, before
a user sets their master password
-------------------------------------------------------------------
Mon Feb 20 10:40:17 IST 2006 - smanojna@novell.com

View File

@ -67,6 +67,7 @@ namespace Novell.CASA.GUI
dialogAbout,
dialogLogin,
dialogLoginContinue,
dialogDesktopPassword,
dialogConfirmRefresh,
dialogSingleInstance,
dialogLoginReprompt,
@ -79,6 +80,8 @@ namespace Novell.CASA.GUI
entryMasterPassword2,
entryMasterPassword3,
entryMasterPassword4,
entryDesktopPassword1,
entryDesktopPassword2,
entryOldMP,
entryNewMP1,
entryNewMP2;
@ -93,7 +96,8 @@ namespace Novell.CASA.GUI
[Glade.Widget]
Gtk.Label label88,
labelLoginContinue1,
labelLoginContinue2;
labelLoginContinue2,
labelDesktopPasswordMessage;
[Glade.Widget]
Gtk.Button okbuttonPersistentStorage;
@ -344,17 +348,94 @@ namespace Novell.CASA.GUI
else
{
Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogLogin", null);
gxmlTemp.Autoconnect(this);
entryMasterPassword3.Text="";
entryMasterPassword4.Text="";
// 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 (true == DoPersistentFilesExist())
{
Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogDesktopPassword", null);
gxmlTemp.Autoconnect(this);
}
else
{
Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogLogin", null);
gxmlTemp.Autoconnect(this);
entryMasterPassword3.Text = "";
entryMasterPassword4.Text = "";
}
}
Logger.DbgLog("GUI:CasaMain.Login() - END");
}
}
public void on_entryDesktopPassword1_activate(object obj, EventArgs args)
{
on_buttonPasswordOk_clicked(obj, args);
}
public void on_entryDesktopPassword2_activate(object obj, EventArgs args)
{
on_buttonPasswordOk_clicked(obj, args);
}
public void on_buttonPasswordOk_clicked(object obj, EventArgs args)
{
object o = obj;
if (entryDesktopPassword1 != null && entryDesktopPassword2.Text != null)
{
if (entryDesktopPassword1.Text.Length < 1)
{
labelDesktopPasswordMessage.Text = "Please enter your desktop password";
return;
}
if (entryDesktopPassword1.Text.Equals(entryDesktopPassword2.Text))
{
// 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();
}
else
{
labelDesktopPasswordMessage.Text = "Passwords do not match";
entryDesktopPassword1.Text = "";
entryDesktopPassword2.Text = "";
}
}
}
public void on_helpbuttonDesktopPassword_clicked(object obj, EventArgs args)
{
Common.ShowHelpUrl("CASADesktopPassword.htm");
}
public void on_buttonPasswordClose_clicked(object obj, EventArgs args)
{
if (dialogDesktopPassword != null)
dialogDesktopPassword.Destroy();
closebuttonLogin_clicked(obj, args);
}
public void okbuttonLogin_clicked(object abj, EventArgs args)
{
@ -444,7 +525,9 @@ namespace Novell.CASA.GUI
public void closebuttonLogin_clicked(object abj, EventArgs args)
{
dialogLogin.Destroy();
if (dialogLogin != null)
dialogLogin.Destroy();
// close tray too
if (mCasaTray != null)
{
@ -494,7 +577,39 @@ namespace Novell.CASA.GUI
Logger.DbgLog("GUI:CasaMain.IsMasterPasswordSet() - END");
return (File.Exists(fileName));
}
}
public bool DoPersistentFilesExist()
{
Logger.DbgLog("GUI:CasaMain.DoesPersistentFilesExist() - BEGIN");
// is the desktop password set already?
try
{
BasicCredential bc = Novell.CASA.miCASA.GetCredential(0,
"Desktop",
null,
Novell.CASA.miCASA.USERNAME_TYPE_CN_F);
return false;
}
catch
{
// check for existence of persistent files
string MICASA_PASSCODE_BY_DESKTOP_FILE = "/.miCASAPCByDesktop";
string MICASA_KEY_FILE = "/.miCASAKey";
string MICASA_PERSISTENCE_FILE = "/.miCASA";
string MICASA_VALIDATION_FILE = "/.miCASAValidate";
string sHomeDir = GetUserHomeDir();
Logger.DbgLog("GUI:CasaMain.DoesPersistentFilesExist() - END");
return (File.Exists(sHomeDir + MICASA_PERSISTENCE_FILE)
&& File.Exists(sHomeDir + MICASA_KEY_FILE)
&& File.Exists(sHomeDir + MICASA_PASSCODE_BY_DESKTOP_FILE)
&& File.Exists(sHomeDir + MICASA_VALIDATION_FILE));
}
}
private string GetUserHomeDir()
{
@ -503,7 +618,13 @@ namespace Novell.CASA.GUI
else
return Environment.GetEnvironmentVariable("USERPROFILE");
}
}
private string GetLocalUsername()
{
return Environment.GetEnvironmentVariable("USERNAME");
}
///#######################################################################
/// LOGIN WARNING DIALOG

View File

@ -0,0 +1,45 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<!-- #BeginEditable "doctitle" -->
<title>Novell&reg; CASA Manager</title>
<!-- #EndEditable -->
<link href="hf_style.css" rel="styleSheet" type="text/css">
<style type="text/css" media="screen">
<!--
body { font-family: "Trebuchet MS", Arial, Helvetica, Geneva; background: white url(help_zcc_bg.gif) repeat-x 0% 0% }
#headgraphic { position: absolute; z-index: 0; top: 0px; left: 0px; width: 380px; visibility: visible }
#helpcontent { position: absolute; top: 37px; left: 10px; width: 93%; visibility: visible }
-->
</style>
</head>
<body bgcolor="white" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
<div id="headgraphic">
<img src="h1_help_zcc.gif" width="221" height="26" border="0"></div>
<div id="helpcontent">
<!--Begin Content -->
<div class="head3b">Entering your workstation password</div>
<!--Remove this section if you do not need introductory text for this topic -->
<p class="margintop2">You are prompted for your workstation password if the CASA
service is restarted and before you have set your master password.</p>
<p>Your desktop password and master password are used to encypt your secrets
and store them on your computer. When you login to the computer, CASA will decrypt
the saved secrets using your desktop password and make them available for
applications integrated with CASA.
If your desktop password changes, you must run CASA Manager and enter your master
password before CASA can decrypt your saved secrets.</p>
<p><b>Important:</b> To prevent unauthorized access to your credential stores,
always create confidential passwords that are not easily discovered.</p>
<!--End Content -->
<br>
<div class="ruleabove"></div></div>
</body>
</html>

View File

@ -8244,4 +8244,353 @@ prompted for the Master Password at startup.</property>
</child>
</widget>
<widget class="GtkDialog" id="dialogDesktopPassword">
<property name="visible">True</property>
<property name="title" translatable="yes">Enter Workstation Password</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="has_separator">True</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="vbox105">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="hbuttonbox13">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="helpbuttonDesktopPassword">
<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>
<signal name="clicked" handler="on_helpbuttonDesktopPassword_clicked" last_modification_time="Tue, 21 Feb 2006 16:51:04 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="buttonPasswordClose">
<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_buttonPasswordClose_clicked" last_modification_time="Fri, 17 Feb 2006 23:00:27 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="buttonPasswordOk">
<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_buttonPasswordOk_clicked" last_modification_time="Tue, 21 Feb 2006 18:15:24 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="vbox106">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkHBox" id="hbox71">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkVBox" id="vbox107">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2776">
<property name="visible">True</property>
<property name="stock">gtk-dialog-question</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">6</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="vbox108">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label174">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Enter Workstation Password&lt;/b&gt;</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>
</widget>
<packing>
<property name="padding">5</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label175">
<property name="visible">True</property>
<property name="label" translatable="yes">CASA encypts your credentials
and writes them in your home directory.
To retrieve them, please enter your
workstation 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">0</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">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="GtkLabel" id="labelDesktopPasswordMessage">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">True</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.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame20">
<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="alignment33">
<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="table17">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="n_rows">2</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="label176">
<property name="visible">True</property>
<property name="label" translatable="yes">Workstation 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>
</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="GtkLabel" id="label177">
<property name="visible">True</property>
<property name="label" translatable="yes">Re-enter 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>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</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>
<child>
<widget class="GtkEntry" id="entryDesktopPassword1">
<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">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<signal name="activate" handler="on_entryDesktopPassword1_activate" last_modification_time="Tue, 21 Feb 2006 18:30:33 GMT"/>
</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="GtkEntry" id="entryDesktopPassword2">
<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">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<signal name="activate" handler="on_entryDesktopPassword2_activate" last_modification_time="Tue, 21 Feb 2006 18:31:48 GMT"/>
</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="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>