svn commit: samba r15422 - in branches/SAMBA_4_0/source: auth/credentials gtk/common gtk/tools

jelmer at samba.org jelmer at samba.org
Wed May 3 20:56:15 GMT 2006


Author: jelmer
Date: 2006-05-03 20:56:14 +0000 (Wed, 03 May 2006)
New Revision: 15422

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15422

Log:
Fix issues with functions being called recursively in the credentials 
callback code.

Modified:
   branches/SAMBA_4_0/source/auth/credentials/credentials.c
   branches/SAMBA_4_0/source/auth/credentials/credentials.h
   branches/SAMBA_4_0/source/gtk/common/credentials.c
   branches/SAMBA_4_0/source/gtk/common/gtk-smb.c
   branches/SAMBA_4_0/source/gtk/tools/gwsam.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/credentials/credentials.c
===================================================================
--- branches/SAMBA_4_0/source/auth/credentials/credentials.c	2006-05-03 20:31:24 UTC (rev 15421)
+++ branches/SAMBA_4_0/source/auth/credentials/credentials.c	2006-05-03 20:56:14 UTC (rev 15422)
@@ -89,8 +89,11 @@
 		cli_credentials_set_machine_account(cred);
 	}
 
-	if (cred->username_obtained == CRED_CALLBACK) {
+	if (cred->username_obtained == CRED_CALLBACK && 
+	    !cred->callback_running) {
+	    	cred->callback_running = True;
 		cred->username = cred->username_cb(cred);
+	    	cred->callback_running = False;
 		cred->username_obtained = CRED_SPECIFIED;
 	}
 
@@ -152,8 +155,11 @@
 		cli_credentials_set_machine_account(cred);
 	}
 
-	if (cred->principal_obtained == CRED_CALLBACK) {
+	if (cred->principal_obtained == CRED_CALLBACK && 
+	    !cred->callback_running) {
+	    	cred->callback_running = False;
 		cred->principal = cred->principal_cb(cred);
+	    	cred->callback_running = True;
 		cred->principal_obtained = CRED_SPECIFIED;
 	}
 
@@ -233,8 +239,11 @@
 		cli_credentials_set_machine_account(cred);
 	}
 
-	if (cred->password_obtained == CRED_CALLBACK) {
+	if (cred->password_obtained == CRED_CALLBACK && 
+	    !cred->callback_running) {
+	    	cred->callback_running = False;
 		cred->password = cred->password_cb(cred);
+	    	cred->callback_running = True;
 		cred->password_obtained = CRED_CALLBACK_RESULT;
 	}
 
@@ -347,8 +356,11 @@
 		cli_credentials_set_machine_account(cred);
 	}
 
-	if (cred->domain_obtained == CRED_CALLBACK) {
+	if (cred->domain_obtained == CRED_CALLBACK && 
+	    !cred->callback_running) {
+	    	cred->callback_running = True;
 		cred->domain = cred->domain_cb(cred);
+	    	cred->callback_running = False;
 		cred->domain_obtained = CRED_SPECIFIED;
 	}
 
@@ -396,8 +408,11 @@
 		cli_credentials_set_machine_account(cred);
 	}
 
-	if (cred->realm_obtained == CRED_CALLBACK) {
+	if (cred->realm_obtained == CRED_CALLBACK && 
+	    !cred->callback_running) {
+	    	cred->callback_running = True;
 		cred->realm = cred->realm_cb(cred);
+	    	cred->callback_running = False;
 		cred->realm_obtained = CRED_SPECIFIED;
 	}
 
@@ -442,8 +457,11 @@
  */
 const char *cli_credentials_get_workstation(struct cli_credentials *cred)
 {
-	if (cred->workstation_obtained == CRED_CALLBACK) {
+	if (cred->workstation_obtained == CRED_CALLBACK && 
+	    !cred->callback_running) {
+	    	cred->callback_running = True;
 		cred->workstation = cred->workstation_cb(cred);
+	    	cred->callback_running = False;
 		cred->workstation_obtained = CRED_SPECIFIED;
 	}
 

Modified: branches/SAMBA_4_0/source/auth/credentials/credentials.h
===================================================================
--- branches/SAMBA_4_0/source/auth/credentials/credentials.h	2006-05-03 20:31:24 UTC (rev 15421)
+++ branches/SAMBA_4_0/source/auth/credentials/credentials.h	2006-05-03 20:56:14 UTC (rev 15422)
@@ -108,6 +108,9 @@
 
 	/* Number of retries left before bailing out */
 	int tries;
+
+	/* Whether any callback is currently running */
+	BOOL callback_running;
 };
 
 #include "auth/credentials/credentials_proto.h"

Modified: branches/SAMBA_4_0/source/gtk/common/credentials.c
===================================================================
--- branches/SAMBA_4_0/source/gtk/common/credentials.c	2006-05-03 20:31:24 UTC (rev 15421)
+++ branches/SAMBA_4_0/source/gtk/common/credentials.c	2006-05-03 20:56:14 UTC (rev 15422)
@@ -30,11 +30,11 @@
 	GtkWidget *table;
 	GtkWidget *entry_username;
 	GtkWidget *entry_password;
-	GtkWidget *entry_domain;
 	GtkWidget *dialog_action_area1;
 	GtkWidget *cancelbutton1;
 	GtkWidget *okbutton1;
 	GtkWidget *anonymous;
+	char *username;
 
 	dialog = gtk_dialog_new ();
 	gtk_window_set_title (GTK_WINDOW (dialog), "Credentials");
@@ -44,19 +44,6 @@
 	table = gtk_table_new(4, 2, FALSE);
 	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table);
 
-	label = gtk_label_new ("Domain:");
-
-	gtk_table_attach(GTK_TABLE(table),label,0,1,0,1,GTK_FILL,0,0,0);
-
-	entry_domain = gtk_entry_new ();
-	gtk_table_attach(GTK_TABLE(table), entry_domain, 1,2,0,1, GTK_FILL, 0,0,0);
-	gtk_entry_set_activates_default (GTK_ENTRY (entry_domain), TRUE);
-
-	if (credentials->domain_obtained != CRED_UNINITIALISED && 
-	    credentials->domain) {
-		gtk_entry_set_text(GTK_ENTRY(entry_domain), credentials->domain);
-	}
-
 	label = gtk_label_new ("Username:");
 
 	gtk_table_attach(GTK_TABLE(table),label,0,1,1,2,GTK_FILL,0,0,0);
@@ -64,8 +51,12 @@
 	entry_username = gtk_entry_new ();
 	gtk_table_attach(GTK_TABLE(table),entry_username,1,2,1,2,GTK_FILL,0,0,0);
 	gtk_entry_set_activates_default (GTK_ENTRY (entry_username), TRUE);
-	if (credentials->username_obtained != CRED_UNINITIALISED) {
-		gtk_entry_set_text(GTK_ENTRY(entry_username), credentials->username);
+
+	username = cli_credentials_get_unparsed_name(credentials, credentials);
+
+	if (credentials->username_obtained != CRED_UNINITIALISED && 
+	    username) {
+		gtk_entry_set_text(GTK_ENTRY(entry_username), username);
 	}
 
 	label = gtk_label_new ("Password:");
@@ -77,6 +68,7 @@
 	gtk_entry_set_visibility (GTK_ENTRY (entry_password), FALSE);
 	gtk_entry_set_activates_default (GTK_ENTRY (entry_password), TRUE);
 	if (credentials->password_obtained != CRED_UNINITIALISED &&
+	    credentials->password_obtained != CRED_CALLBACK &&
 	    credentials->password) {
 		gtk_entry_set_text(GTK_ENTRY(entry_password), credentials->password);
 	}
@@ -99,9 +91,8 @@
 
     switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
 	case GTK_RESPONSE_OK:
-		cli_credentials_set_username(credentials, gtk_entry_get_text(GTK_ENTRY(entry_username)), CRED_SPECIFIED);
-		cli_credentials_set_password(credentials, gtk_entry_get_text(GTK_ENTRY(entry_password)), CRED_SPECIFIED);
-		cli_credentials_set_domain(credentials, gtk_entry_get_text(GTK_ENTRY(entry_domain)), CRED_SPECIFIED);
+		cli_credentials_parse_string(credentials, gtk_entry_get_text(GTK_ENTRY(entry_username)), CRED_CALLBACK_RESULT);
+		cli_credentials_set_password(credentials, gtk_entry_get_text(GTK_ENTRY(entry_password)), CRED_CALLBACK_RESULT);
 
 		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(anonymous))) {
 			cli_credentials_set_anonymous(credentials);

Modified: branches/SAMBA_4_0/source/gtk/common/gtk-smb.c
===================================================================
--- branches/SAMBA_4_0/source/gtk/common/gtk-smb.c	2006-05-03 20:31:24 UTC (rev 15421)
+++ branches/SAMBA_4_0/source/gtk/common/gtk-smb.c	2006-05-03 20:56:14 UTC (rev 15422)
@@ -174,7 +174,7 @@
 	gtk_dialog_add_action_widget (GTK_DIALOG (gtk_rpc_binding_dialog), btn_cancel, GTK_RESPONSE_CANCEL);
 	GTK_WIDGET_SET_FLAGS (btn_cancel, GTK_CAN_DEFAULT);
 
-	btn_connect = gtk_button_new_with_mnemonic ("_Connect");
+	btn_connect = gtk_button_new_with_mnemonic ("C_onnect");
 	gtk_dialog_add_action_widget (GTK_DIALOG (gtk_rpc_binding_dialog), btn_connect, GTK_RESPONSE_ACCEPT);
 	gtk_container_set_border_width (GTK_CONTAINER (btn_connect), 1);
 	GTK_WIDGET_SET_FLAGS (btn_connect, GTK_CAN_DEFAULT);

Modified: branches/SAMBA_4_0/source/gtk/tools/gwsam.c
===================================================================
--- branches/SAMBA_4_0/source/gtk/tools/gwsam.c	2006-05-03 20:31:24 UTC (rev 15421)
+++ branches/SAMBA_4_0/source/gtk/tools/gwsam.c	2006-05-03 20:56:14 UTC (rev 15422)
@@ -437,7 +437,6 @@
 
 	gtk_init(&argc, &argv);
 	mainwin = create_mainwindow();
-	connect_sam();
 	gtk_widget_show_all(mainwin);
 
 	return gtk_event_loop();



More information about the samba-cvs mailing list