File ifolder_client_crash.patch of Package ifolder3

diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' src/UI/Linux/LinuxClient/application/iFolderApplication.cs src/UI/Linux/LinuxClient/application/iFolderApplication.cs
--- src/UI/Linux/LinuxClient/application/iFolderApplication.cs	2009-06-02 10:16:48.000000000 +0530
+++ src/UI/Linux/LinuxClient/application/iFolderApplication.cs	2009-10-22 04:11:26.000000000 +0530
@@ -119,6 +119,10 @@
 
                 private iFolderMsgDialog  quitDlg;
                 private bool quit_iFolder;
+
+                private Status ClientUpgradeStatus;
+		private string NewClientVersion;
+		private string NewClientDomainID;
 		
 		///
 		/// D-Bus variables
@@ -169,6 +173,10 @@
 
 			currentIconAnimationDirection = 0;
 
+			this.ClientUpgradeStatus = null;
+			this.NewClientVersion = null;
+			this.NewClientDomainID = null;
+
 			eBox = new EventBox();
 			eBox.ButtonPressEvent +=
 				new ButtonPressEventHandler(trayapp_clicked);
@@ -364,8 +372,26 @@
 			ReLogin(args.DomainID);
 		}
 		
-		private void OnClientUpgradeAvailableEvent(object sender, DomainClientUpgradeAvailableEventArgs args)
+		/// Now thw event handler does not show the upgrade dialog box directly, it will store the relevant informations
+		/// Just after this, there will be successful login event, so there ShowClientUpgradeMessageBox will be called
+		/// to show the upgrade dialog box with all the informations stored here
+		private void OnClientUpgradeAvailableEvent(object sender, DomainClientUpgradeAvailableEventArgs args) {
+
+			this.ClientUpgradeStatus = DomainController.upgradeStatus;
+			this.NewClientVersion = args.NewClientVersion;
+			this.NewClientDomainID = args.DomainID;
+		}
+
+		/// This method is called by Successful login handler, it is called before passphrase verify invocation
+		/// The variable used in this method should have been captured during the ClientUpgrade Event handler
+		/// This method should only be called during first time login (or after exit/login)
+		private void ShowClientUpgradeMessageBox()
 		{
+			if(this.NewClientVersion == null || this.ClientUpgradeStatus == null || this.NewClientDomainID == null)
+			{
+				return;
+			}
+
 			if (ClientUpgradeDialog != null)
 				return;	// This dialog is already showing
 			if(DomainController.upgradeStatus.statusCode == StatusCodes.ServerOld)
@@ -397,7 +423,7 @@
 				iFolderMsgDialog.ButtonSet.AcceptDeny,
 				Util.GS("iFolder Client Upgrade"),
 				Util.GS("Would you like to download new iFolder Client?"),
-				string.Format(Util.GS("A newer version \"{0}\" of the iFolder Client is available."), args.NewClientVersion));
+				string.Format(Util.GS("A newer version \"{0}\" of the iFolder Client is available."), this.NewClientVersion));
 			}
 			int rc = ClientUpgradeDialog.Run();
 			ClientUpgradeDialog.Hide();
@@ -424,9 +450,13 @@
                 	                }
                        		 }while( rc1 == (int)ResponseType.Ok);
 				if( cp != null)
+				{
 					cp.Destroy();
+					cp=null;
+				}
 				win.Hide();
 				win.Destroy();
+				win=null;
 				if( rc1 != (int) ResponseType.Ok)
 				{
 					Debug.PrintLine("OnClientUpgradeAvailableEvent return");
@@ -438,7 +468,7 @@
 					if(ifws !=null)
 					{
 						Debug.PrintLine("ifws.RunClientUpdate");
-						bUpdateRunning = ifws.RunClientUpdate(args.DomainID, selectedFolder);
+						bUpdateRunning = ifws.RunClientUpdate(this.NewClientDomainID, selectedFolder);
 					}
 				}
 				catch(Exception e)
@@ -480,8 +510,8 @@
 				if( DomainController.upgradeStatus.statusCode == StatusCodes.UpgradeNeeded )
 				{
 					// Deny login
-					if( domainController.GetDomain(args.DomainID) != null)
-						domainController.RemoveDomain(args.DomainID, false);
+					if( domainController.GetDomain(this.NewClientDomainID) != null)
+						domainController.RemoveDomain(this.NewClientDomainID, false);
 				}
 
 			}
@@ -490,12 +520,15 @@
 				if(DomainController.upgradeStatus.statusCode == StatusCodes.ServerOld || DomainController.upgradeStatus.statusCode == StatusCodes.UpgradeNeeded )
 				{
 					// Deny login
-					if( domainController.GetDomain(args.DomainID) != null)
-						domainController.RemoveDomain(args.DomainID, false);
+					if( domainController.GetDomain(this.NewClientDomainID) != null)
+						domainController.RemoveDomain(this.NewClientDomainID, false);
 				}
 			}
 
 			ClientUpgradeDialog = null;
+			this.ClientUpgradeStatus = null;
+			this.NewClientVersion = null;
+			this.NewClientDomainID = null;
 		}
 
 		private void ReLogin(string domainID)
@@ -582,6 +615,7 @@
                                                         // No recovery agent present;
                                                  //       return;
                                                 // }
+						ShowClientUpgradeMessageBox();
                                                 int result;
 						int policy = ifws.GetSecurityPolicy(DomainID);
 						if( policy % 2 == 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' src/UI/Linux/LinuxClient/library/CopyLocation.cs src/UI/Linux/LinuxClient/library/CopyLocation.cs
--- src/UI/Linux/LinuxClient/library/CopyLocation.cs	1970-01-01 05:30:00.000000000 +0530
+++ src/UI/Linux/LinuxClient/library/CopyLocation.cs	2009-10-22 04:17:49.000000000 +0530
@@ -0,0 +1,137 @@
+/*****************************************************************************
+*
+* Copyright (c) [2009] Novell, Inc.
+* All Rights Reserved.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, contact Novell, Inc.
+*
+* To contact Novell about this file by physical or electronic mail,
+* you may find current contact information at www.novell.com
+*
+*-----------------------------------------------------------------------------
+  *
+  *                 $Author: Ramesh Sunder <sramesh@novell.com> 
+  *                 $Modified by: <Modifier>
+  *                 $Mod Date: <Date Modified>
+  *                 $Revision: 0.0
+  *-----------------------------------------------------------------------------
+  * This module is used to:
+  *        <Description of the functionality of the file >
+  *
+  *
+  *******************************************************************************/
+
+using Gtk;
+using System;
+
+namespace Novell.iFolder
+{
+    /// <summary>
+    /// class Copy Location
+    /// </summary>
+	public class CopyLocation : FileChooserDialog
+	{
+		private DomainInformation[]	domains;
+		private ComboBox			domainComboBox;
+	//	private ComboBox			security_lvl_ComboBox;
+		private CheckButton			Encryption;
+		private CheckButton 			SSL;
+		private string				initialPath;
+		iFolderWebService			ifws;
+		private uint				keyReleasedTimeoutID;
+		private Label 				Mesg;
+
+        /// <summary>
+        /// Gets / Sets the iFolder Path
+        /// </summary>
+		public string iFolderPath
+		{
+			get
+			{
+				return this.Filename;
+			}
+			set
+			{
+				this.SetCurrentFolder(value);
+			}
+		}
+
+        /// <summary>
+        /// Gets / Sets Domain ID
+        /// </summary>
+		public string DomainID
+		{
+			get
+			{
+				int activeIndex = domainComboBox.Active;
+				if (activeIndex >= 0)
+					return domains[activeIndex].ID;
+				else
+					return "0";
+			}
+		}
+
+		///
+		/// filteredDomainID: If the main iFolders window is currently
+		/// filtering the list of domains, this parameter is used to allow this
+		/// dialog to respect the currently selected domain.             
+		public CopyLocation(Gtk.Window parentWindow, string initialPath)
+				: base("Choose folder", Util.GS("Select the folder to Download..."), parentWindow, FileChooserAction.SelectFolder, Stock.Cancel, ResponseType.Cancel,
+                Stock.Ok, ResponseType.Ok)
+		{
+			this.Icon = new Gdk.Pixbuf(Util.ImagesPath("ifolder16.png"));
+
+//			if (this.initialPath != null && this.initialPath.Length > 0)
+				this.SetCurrentFolder(initialPath);
+			this.SetFilename(initialPath);
+			// More options expander
+			this.SetResponseSensitive(ResponseType.Ok, false);
+		}
+
+		protected override void OnSelectionChanged()
+		{
+			string currentPath = this.Filename;
+
+			this.SetResponseSensitive(ResponseType.Ok, true);
+		}
+		
+		protected override bool OnKeyReleaseEvent(Gdk.EventKey evnt)
+		{
+//			if (descriptionTextView.HasFocus)
+//				return true;  // Don't do anything here
+			
+			if (keyReleasedTimeoutID != 0)
+			{
+				GLib.Source.Remove(keyReleasedTimeoutID);
+				keyReleasedTimeoutID = 0;
+			}
+
+			return true;
+		}
+
+        /// <summary>
+        /// Check Enable OK Button
+        /// </summary>
+        /// <returns></returns>
+		private bool CheckEnableOkButton()
+		{
+			try
+			{
+				string currentPath = this.Filename;
+			}
+			catch{}
+			this.SetResponseSensitive(ResponseType.Ok, false);
+			return false;
+		}
+	}
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' src/UI/Linux/LinuxClient/library/Makefile.am src/UI/Linux/LinuxClient/library/Makefile.am
--- src/UI/Linux/LinuxClient/library/Makefile.am	2009-06-02 10:16:48.000000000 +0530
+++ src/UI/Linux/LinuxClient/library/Makefile.am	2009-10-22 04:17:32.000000000 +0530
@@ -1,7 +1,7 @@
 # handle Mono secondary dependencies
 export MONO_PATH := $(MONO_PATH)
 
-UILIB_CSFILES = $(srcdir)/iFolderHolder.cs $(srcdir)/iFolderConflictDialog.cs $(srcdir)/iFolderAcceptDialog.cs $(srcdir)/iFolderUserSelector.cs $(srcdir)/iFolderLoginDialog.cs $(srcdir)/iFolderPropSettingsPage.cs $(srcdir)/iFolderPropSharingPage.cs $(srcdir)/iFolderPropertiesDialog.cs $(srcdir)/iFolderCrashDialog.cs $(srcdir)/iFolderMsgDialog.cs $(srcdir)/iFolderWindow.cs $(srcdir)/iFolderCreationDialog.cs $(srcdir)/iFolderExceptionDialog.cs $(srcdir)/iFolderAccessDialog.cs $(srcdir)/iFolderTreeView.cs $(srcdir)/NotifyWindow.cs $(srcdir)/CompatFileChooserDialog.cs $(srcdir)/ClientConfig.cs $(srcdir)/SimiasEventBroker.cs $(srcdir)/CreateDialog.cs $(srcdir)/DragCreateDialog.cs $(srcdir)/LogWindow.cs $(srcdir)/PreferencesWindow.cs $(srcdir)/PrefsGeneralPage.cs $(srcdir)/PrefsAccountsPage.cs $(srcdir)/AccountDialog.cs $(srcdir)/RemoveAccountDialog.cs $(srcdir)/iFolderData.cs $(srcdir)/FileRenameDialog.cs $(srcdir)/list.cs $(srcdir)/elabel.cs $(srcdir)/GnomeHttpProxy.cs $(srcdir)/Events.cs $(srcdir)/DomainController.cs $(srcdir)/iFolderIconView.cs $(srcdir)/AddAccountWizard.cs $(srcdir)/iFolderViewGroup.cs $(srcdir)/iFolderViewItem.cs $(srcdir)/iFolderWaitDialog.cs $(srcdir)/IDomainProviderUI.cs $(srcdir)/DomainProviderUI.cs $(srcdir)/EnterpriseAccountDialog.cs $(srcdir)/MigrationPage.cs $(srcdir)/MigrationWizard.cs $(srcdir)/MigrateLocation.cs $(srcdir)/MigrationWindow.cs $(srcdir)/EnterPassPhraseDialog.cs $(srcdir)/VerifyPassPhraseDialog.cs $(srcdir)/ResetPassPhraseDialog.cs $(srcdir)/ExportKeysDialog.cs $(srcdir)/ImportKeysDialog.cs $(srcdir)/CertificateDialog.cs IiFolderLog.cs iFolderLog.cs iFolderLogManager.cs $(srcdir)/MigrationDialog.cs $(srcdir)/ResetPasswordDialog.cs
+UILIB_CSFILES = $(srcdir)/iFolderHolder.cs $(srcdir)/iFolderConflictDialog.cs $(srcdir)/iFolderAcceptDialog.cs $(srcdir)/iFolderUserSelector.cs $(srcdir)/iFolderLoginDialog.cs $(srcdir)/iFolderPropSettingsPage.cs $(srcdir)/iFolderPropSharingPage.cs $(srcdir)/iFolderPropertiesDialog.cs $(srcdir)/iFolderCrashDialog.cs $(srcdir)/iFolderMsgDialog.cs $(srcdir)/iFolderWindow.cs $(srcdir)/iFolderCreationDialog.cs $(srcdir)/iFolderExceptionDialog.cs $(srcdir)/iFolderAccessDialog.cs $(srcdir)/iFolderTreeView.cs $(srcdir)/NotifyWindow.cs $(srcdir)/CompatFileChooserDialog.cs $(srcdir)/ClientConfig.cs $(srcdir)/SimiasEventBroker.cs $(srcdir)/CreateDialog.cs $(srcdir)/DragCreateDialog.cs $(srcdir)/LogWindow.cs $(srcdir)/PreferencesWindow.cs $(srcdir)/PrefsGeneralPage.cs $(srcdir)/PrefsAccountsPage.cs $(srcdir)/AccountDialog.cs $(srcdir)/RemoveAccountDialog.cs $(srcdir)/iFolderData.cs $(srcdir)/FileRenameDialog.cs $(srcdir)/list.cs $(srcdir)/elabel.cs $(srcdir)/GnomeHttpProxy.cs $(srcdir)/Events.cs $(srcdir)/DomainController.cs $(srcdir)/iFolderIconView.cs $(srcdir)/AddAccountWizard.cs $(srcdir)/iFolderViewGroup.cs $(srcdir)/iFolderViewItem.cs $(srcdir)/iFolderWaitDialog.cs $(srcdir)/IDomainProviderUI.cs $(srcdir)/DomainProviderUI.cs $(srcdir)/EnterpriseAccountDialog.cs $(srcdir)/MigrationPage.cs $(srcdir)/MigrationWizard.cs $(srcdir)/MigrateLocation.cs $(srcdir)/MigrationWindow.cs $(srcdir)/EnterPassPhraseDialog.cs $(srcdir)/VerifyPassPhraseDialog.cs $(srcdir)/ResetPassPhraseDialog.cs $(srcdir)/ExportKeysDialog.cs $(srcdir)/ImportKeysDialog.cs $(srcdir)/CertificateDialog.cs IiFolderLog.cs iFolderLog.cs iFolderLogManager.cs $(srcdir)/MigrationDialog.cs $(srcdir)/ResetPasswordDialog.cs $(srcdir)/CopyLocation.cs
 
 
 UILIB_CSFILES_CSC := $(subst /,$(SEP),$(UILIB_CSFILES))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' src/UI/Linux/LinuxClient/library/PrefsAccountsPage.cs src/UI/Linux/LinuxClient/library/PrefsAccountsPage.cs
--- src/UI/Linux/LinuxClient/library/PrefsAccountsPage.cs	2009-06-02 10:16:48.000000000 +0530
+++ src/UI/Linux/LinuxClient/library/PrefsAccountsPage.cs	2009-10-22 04:04:25.000000000 +0530
@@ -85,7 +85,12 @@
 		private DomainProviderUI domainProviderUI;
 		
 		private iFolderLoginDialog	LoginDialog;
-
+		
+		private iFolderWebService       ifws;
+		private iFolderMsgDialog        ClientUpgradeDialog;
+		private Status ClientUpgradeStatus;
+		private string NewClientVersion;
+		private string NewClientDomainID;
 
 		/// <summary>
 		/// Default constructor for iFolderAccountsPage
@@ -95,10 +100,20 @@
 		{
 			this.topLevelWindow = topWindow;
 			this.simiasManager = Util.GetSimiasManager();
+			string localServiceUrl = simiasManager.WebServiceUri.ToString();
+			ifws = new iFolderWebService();
+			ifws.Url = localServiceUrl + "/iFolder.asmx";
+			LocalService.Start(ifws, simiasManager.WebServiceUri, simiasManager.DataPath);
+
 			this.simws = new SimiasWebService();
 			simws.Url = simiasManager.WebServiceUri.ToString() +
 					"/Simias.asmx";
 			LocalService.Start(simws, simiasManager.WebServiceUri, simiasManager.DataPath);
+                        ClientUpgradeDialog = null;
+
+			this.ClientUpgradeStatus = null;
+			this.NewClientVersion = null;
+			this.NewClientDomainID = null;
 
 			curDomains = new Hashtable();
 			
@@ -127,6 +142,9 @@
 					new DomainNewDefaultEventHandler(OnNewDefaultDomainEvent);
 				domainController.DomainInGraceLoginPeriod +=
 					new DomainInGraceLoginPeriodEventHandler(OnDomainInGraceLoginPeriodEvent);
+				domainController.DomainClientUpgradeAvailable +=
+					new DomainClientUpgradeAvailableEventHandler(OnClientUpgradeAvailableEvent);
+
 			}
 			
 			detailsDialogs = new Hashtable();
@@ -158,6 +176,8 @@
 					new DomainNewDefaultEventHandler(OnNewDefaultDomainEvent);
 				domainController.DomainInGraceLoginPeriod -=
 					new DomainInGraceLoginPeriodEventHandler(OnDomainInGraceLoginPeriodEvent);
+				domainController.DomainClientUpgradeAvailable -=
+					new DomainClientUpgradeAvailableEventHandler(OnClientUpgradeAvailableEvent);
 			}
 		} 
 
@@ -627,6 +647,168 @@
 					break;
 			}
 		}
+
+		/// Now thw event handler does not show the upgrade dialog box directly, it will store the relevant informations
+		/// Just after this, there will be successful login event, so there ShowClientUpgradeMessageBox will be called
+		/// to show the upgrade dialog box with all the informations stored here
+		private void OnClientUpgradeAvailableEvent(object sender, DomainClientUpgradeAvailableEventArgs args) {
+
+                        this.ClientUpgradeStatus = DomainController.upgradeStatus;
+                        this.NewClientVersion = args.NewClientVersion;
+			this.NewClientDomainID = args.DomainID;
+		}
+
+		/// This method is called by Successful login handler, it is called before passphrase verify invocation
+		/// The variable used in this method should have been captured during the ClientUpgrade Event handler
+		/// This method should only be called during toggling of checkbox on prefs/account page (logout/login)
+		private void ShowClientUpgradeMessageBox()
+		{
+			if(this.NewClientVersion == null || this.ClientUpgradeStatus == null || this.NewClientDomainID == null)
+			{
+				return; // no handler was generated/caught for ClientUpgradeAvailable
+			}
+
+			if (ClientUpgradeDialog != null)
+				return;	// This dialog is already showing
+			if(DomainController.upgradeStatus.statusCode == StatusCodes.ServerOld)
+			{
+				ClientUpgradeDialog = new iFolderMsgDialog(
+				null,
+				iFolderMsgDialog.DialogType.Info,
+				iFolderMsgDialog.ButtonSet.Ok,
+				Util.GS("iFolder Server Older"),
+				Util.GS("The server is running an older version."),
+				string.Format(Util.GS("The server needs to be upgraded to be connected from this client")));
+			
+			}
+			else if(DomainController.upgradeStatus.statusCode == StatusCodes.UpgradeNeeded)
+			{
+				ClientUpgradeDialog = new iFolderMsgDialog(
+				null,
+				iFolderMsgDialog.DialogType.Info,
+				iFolderMsgDialog.ButtonSet.AcceptDeny,
+				Util.GS("iFolder Client Upgrade"),
+				Util.GS("Would you like to download new iFolder Client?"),
+				string.Format(Util.GS("The client needs to be upgraded to be connected to the server")));
+			}
+			else  
+			{
+				ClientUpgradeDialog = new iFolderMsgDialog(
+				null,
+				iFolderMsgDialog.DialogType.Info,
+				iFolderMsgDialog.ButtonSet.AcceptDeny,
+				Util.GS("iFolder Client Upgrade"),
+				Util.GS("Would you like to download new iFolder Client?"),
+				string.Format(Util.GS("A newer version \"{0}\" of the iFolder Client is available."), this.NewClientVersion));
+			}
+
+			int rc = ClientUpgradeDialog.Run();
+			ClientUpgradeDialog.Hide();
+			ClientUpgradeDialog.Destroy();
+			ClientUpgradeDialog = null;
+			
+			if (rc == -8)
+			{
+				bool bUpdateRunning = false;
+				Gtk.Window win = new Gtk.Window("");
+				string initialPath = (string)System.IO.Path.GetTempPath();
+				
+				Debug.PrintLine(String.Format("Initial Path: {0}", initialPath));
+				CopyLocation cp = new CopyLocation(win, (string)System.IO.Path.GetTempPath());
+				string selectedFolder = "";
+	                        int rc1 = 0;
+        	                do
+                	        {
+                        	        rc1 = cp.Run();
+                                	cp.Hide();
+	                                if(rc1 ==(int)ResponseType.Ok)
+        	                        {
+                	                        selectedFolder = cp.iFolderPath.Trim();
+                                		cp.Destroy();
+	                                        cp = null;
+        	                                break;
+                	                }
+                       		 }while( rc1 == (int)ResponseType.Ok);
+				if( cp != null)
+				{
+					cp.Destroy();
+					cp=null;
+				}
+				win.Hide();
+				win.Destroy();
+				win=null;
+				if( rc1 != (int) ResponseType.Ok)
+				{
+					Debug.PrintLine("OnClientUpgradeAvailableEvent return");
+					ClientUpgradeDialog = null;
+					return;
+				}
+				try
+				{
+					if(ifws !=null)
+					{
+						Debug.PrintLine("ifws.RunClientUpdate");
+						bUpdateRunning = ifws.RunClientUpdate(this.NewClientDomainID, selectedFolder);
+					}
+				}
+				catch(Exception e)
+				{
+					Debug.PrintLine(String.Format("ifws.RunClientUpdate exception :{0}", e.Message));
+					ClientUpgradeDialog = null;
+					return;
+				}
+				
+				if (bUpdateRunning)
+				{
+				ClientUpgradeDialog = new iFolderMsgDialog(
+				null,
+				iFolderMsgDialog.DialogType.Info,
+				iFolderMsgDialog.ButtonSet.Ok,
+				Util.GS("Download Complete..."),
+				Util.GS("Download Finished "),
+				string.Format(Util.GS("The new client rpm's have been downloaded.")));
+				ClientUpgradeDialog.Run();
+				ClientUpgradeDialog.Hide();
+				ClientUpgradeDialog.Destroy();
+				//	QuitiFolder();
+				}
+				else
+				{
+					iFolderMsgDialog dialog = new iFolderMsgDialog(
+						null,
+						iFolderMsgDialog.DialogType.Error,
+						iFolderMsgDialog.ButtonSet.None,
+						Util.GS("Upgrade Failure"),
+						Util.GS("The iFolder client upgrade failed."),
+						Util.GS("Please contact your system administrator."));
+					dialog.Run();
+					dialog.Hide();
+					dialog.Destroy();
+					dialog = null;
+				}
+				
+				if( DomainController.upgradeStatus.statusCode == StatusCodes.UpgradeNeeded )
+				{
+					// Deny login
+					if( domainController.GetDomain(this.NewClientDomainID) != null)
+						domainController.RemoveDomain(this.NewClientDomainID, false);
+				}
+
+			}
+			else //if(rc == -9)
+			{
+				if(DomainController.upgradeStatus.statusCode == StatusCodes.ServerOld || DomainController.upgradeStatus.statusCode == StatusCodes.UpgradeNeeded )
+				{
+					// Deny login
+					if( domainController.GetDomain(this.NewClientDomainID) != null)
+						domainController.RemoveDomain(this.NewClientDomainID, false);
+				}
+			}
+			ClientUpgradeDialog = null;
+			this.ClientUpgradeStatus = null;
+			this.NewClientVersion = null;
+			this.NewClientDomainID = null;			
+		}
 		
         /// <summary>
         /// Event handler for Domain Login COmpleted
@@ -660,6 +842,7 @@
 							// No recovery agent present;
 					//		return;
 						// }
+						ShowClientUpgradeMessageBox();
 						int result;
 						iFolderWebService ifws = DomainController.GetiFolderService();
 						int policy = ifws.GetSecurityPolicy(args.DomainID);
openSUSE Build Service is sponsored by