diff options
| author | Chris Toshok <toshok@ximian.com> | 2002-01-25 12:22:58 +0800 | 
|---|---|---|
| committer | Chris Toshok <toshok@src.gnome.org> | 2002-01-25 12:22:58 +0800 | 
| commit | 9b1f4e133bc79b2cac6cf342972c713739b075a6 (patch) | |
| tree | 07066b05749e5327182a0a6b45df3f2ca29d952a | |
| parent | 19bf10036145eb24280ac5792dd85add67d4d238 (diff) | |
| download | gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar.gz gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar.zst gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.zip  | |
[ fixes bug 16097 ] gui love for the new auth stuff.
2002-01-24  Chris Toshok  <toshok@ximian.com>
	[ fixes bug 16097 ]
	* gui/component/addressbook-config.glade: gui love for the new
	auth stuff.
	* gui/component/addressbook.c (load_uri_cb): track change to auth,
	and offer up different prompt strings depending on which method
	(binddn or email) we're using.
	* gui/component/addressbook-storage.c (ldap_unparse_auth): use the
	new auth types for ldap.
	(ldap_parse_auth): same.
	(addressbook_storage_auth_type_to_string): new function.
	(load_source_data): get the binddn too.
	(ldap_source_foreach): store out binddn or emailaddr, depending on
	the auth type chosen.
	* gui/component/addressbook-storage.h: add the more detailed auth
	types, add "binddn" to the source structure, and add a prototype
	for addressbook_storage_auth_type_to_string.
	* gui/component/addressbook-config.c (auth_checkbutton_changed):
	set the auth stuff  (in)sensitive.
	(auth_optionmenu_activated): new function.
	(addressbook_source_dialog_set_source): track UI change.
	(addressbook_source_dialog_get_source): same.
	(add_scope_activate_cb): rename add_activate_cb to this to
	distinguish it from the auth stuff.
	(add_auth_activate_cb): new function.
	(addressbook_source_dialog): track change to auth UI stuff.
	(addressbook_storage_auth_type_to_string): new function.
	* backend/ebook/e-book.h: add auth_method arg to
	e_book_authenticate_user.
	* backend/ebook/e-book.c (e_book_authenticate_user): track change
	to prototype - add auth_method arg, and pass it along to the CORBA
	call.
	* backend/ebook/test-client.c (book_open_cb): track api change -
	keep this building.
	* backend/pas/pas-book.h: add auth_method slot in PASRequest.
	* backend/pas/pas-book.c (pas_book_queue_authenticate_user): add
	auth_method arg and add it to the PASRequest.
	(impl_GNOME_Evolution_Addressbook_Book_authenticateUser): track
	idl change, add auth_method and pass it along to
	pas_book_queue_authenticate_user.
	* backend/pas/pas-backend-ldap.c
	(pas_backend_ldap_process_authenticate_user): support both
	"ldap/simple-email" and "ldap/simple-binddn" auth methods.
	* backend/idl/addressbook.idl: add "in string authMethod" to
	authenticateUser.
svn path=/trunk/; revision=15467
| -rw-r--r-- | addressbook/ChangeLog | 58 | ||||
| -rw-r--r-- | addressbook/backend/ebook/e-book.c | 2 | ||||
| -rw-r--r-- | addressbook/backend/ebook/e-book.h | 1 | ||||
| -rw-r--r-- | addressbook/backend/ebook/test-client.c | 4 | ||||
| -rw-r--r-- | addressbook/backend/idl/addressbook.idl | 3 | ||||
| -rw-r--r-- | addressbook/backend/pas/pas-backend-ldap.c | 66 | ||||
| -rw-r--r-- | addressbook/backend/pas/pas-book.c | 6 | ||||
| -rw-r--r-- | addressbook/backend/pas/pas-book.h | 1 | ||||
| -rw-r--r-- | addressbook/gui/component/addressbook-config.c | 79 | ||||
| -rw-r--r-- | addressbook/gui/component/addressbook-config.glade | 322 | ||||
| -rw-r--r-- | addressbook/gui/component/addressbook.c | 20 | 
11 files changed, 445 insertions, 117 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index d1be6e5907..da06d3d2ac 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,61 @@ +2002-01-24  Chris Toshok  <toshok@ximian.com> + +	[ fixes bug 16097 ] +	* gui/component/addressbook-config.glade: gui love for the new +	auth stuff. +	 +	* gui/component/addressbook.c (load_uri_cb): track change to auth, +	and offer up different prompt strings depending on which method +	(binddn or email) we're using. +	 +	* gui/component/addressbook-storage.c (ldap_unparse_auth): use the +	new auth types for ldap. +	(ldap_parse_auth): same. +	(addressbook_storage_auth_type_to_string): new function. +	(load_source_data): get the binddn too. +	(ldap_source_foreach): store out binddn or emailaddr, depending on +	the auth type chosen. + +	* gui/component/addressbook-storage.h: add the more detailed auth +	types, add "binddn" to the source structure, and add a prototype +	for addressbook_storage_auth_type_to_string. +	 +	* gui/component/addressbook-config.c (auth_checkbutton_changed): +	set the auth stuff  (in)sensitive. +	(auth_optionmenu_activated): new function. +	(addressbook_source_dialog_set_source): track UI change. +	(addressbook_source_dialog_get_source): same. +	(add_scope_activate_cb): rename add_activate_cb to this to +	distinguish it from the auth stuff. +	(add_auth_activate_cb): new function. +	(addressbook_source_dialog): track change to auth UI stuff. +	(addressbook_storage_auth_type_to_string): new function. + +	* backend/ebook/e-book.h: add auth_method arg to +	e_book_authenticate_user. + +	* backend/ebook/e-book.c (e_book_authenticate_user): track change +	to prototype - add auth_method arg, and pass it along to the CORBA +	call. + +	* backend/ebook/test-client.c (book_open_cb): track api change - +	keep this building. + +	* backend/pas/pas-book.h: add auth_method slot in PASRequest. + +	* backend/pas/pas-book.c (pas_book_queue_authenticate_user): add +	auth_method arg and add it to the PASRequest. +	(impl_GNOME_Evolution_Addressbook_Book_authenticateUser): track +	idl change, add auth_method and pass it along to +	pas_book_queue_authenticate_user. + +	* backend/pas/pas-backend-ldap.c +	(pas_backend_ldap_process_authenticate_user): support both +	"ldap/simple-email" and "ldap/simple-binddn" auth methods. + +	* backend/idl/addressbook.idl: add "in string authMethod" to +	authenticateUser. +  2002-01-24  Ettore Perazzoli  <ettore@ximian.com>  	* conduit/Makefile.am: Use EVOLUTION_ADDRESSBOOK_CONDUIT_CFLAGS diff --git a/addressbook/backend/ebook/e-book.c b/addressbook/backend/ebook/e-book.c index d787ee8e01..fdc7252cfa 100644 --- a/addressbook/backend/ebook/e-book.c +++ b/addressbook/backend/ebook/e-book.c @@ -888,6 +888,7 @@ void  e_book_authenticate_user (EBook         *book,  			  const char    *user,  			  const char    *passwd, +			  const char    *auth_method,  			  EBookCallback cb,  			  gpointer      closure)  { @@ -908,6 +909,7 @@ e_book_authenticate_user (EBook         *book,  	GNOME_Evolution_Addressbook_Book_authenticateUser (book->priv->corba_book,  							   user,  							   passwd, +							   auth_method,  							   &ev);  	if (ev._major != CORBA_NO_EXCEPTION) { diff --git a/addressbook/backend/ebook/e-book.h b/addressbook/backend/ebook/e-book.h index cf90c8c57d..1403a23f60 100644 --- a/addressbook/backend/ebook/e-book.h +++ b/addressbook/backend/ebook/e-book.h @@ -74,6 +74,7 @@ guint     e_book_get_supported_fields     (EBook                 *book,  void      e_book_authenticate_user        (EBook                 *book,  					   const char            *user,  					   const char            *passwd, +					   const char            *auth_method,  					   EBookCallback         cb,  					   gpointer              closure); diff --git a/addressbook/backend/ebook/test-client.c b/addressbook/backend/ebook/test-client.c index 44b20ebdde..900edcd024 100644 --- a/addressbook/backend/ebook/test-client.c +++ b/addressbook/backend/ebook/test-client.c @@ -128,7 +128,7 @@ auth_user_cb (EBook *book, EBookStatus status, gpointer closure)  static void  book_open_cb (EBook *book, EBookStatus status, gpointer closure)  { -	e_book_authenticate_user (book, "username", "password", auth_user_cb, NULL); +	e_book_authenticate_user (book, "username", "password", "auth_method", auth_user_cb, NULL);  }  static guint @@ -146,7 +146,7 @@ ebook_create (void)  	} -	if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) { +	if (! e_book_load_default_book (book, book_open_cb, NULL)) {  		printf ("error calling load_uri!\n");  	} diff --git a/addressbook/backend/idl/addressbook.idl b/addressbook/backend/idl/addressbook.idl index 342482d573..21479d1de2 100644 --- a/addressbook/backend/idl/addressbook.idl +++ b/addressbook/backend/idl/addressbook.idl @@ -47,7 +47,8 @@ module Addressbook {  		 */  		void getVCard (in CardId id); -		void authenticateUser (in string user, in string passwd); +		void authenticateUser (in string user, in string passwd, +				       in string authMethod);  		/*  		 * Adding and deleting cards in the book. diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c index ff5c29168b..cfd6b0d1d5 100644 --- a/addressbook/backend/pas/pas-backend-ldap.c +++ b/addressbook/backend/pas/pas-backend-ldap.c @@ -2412,46 +2412,50 @@ pas_backend_ldap_process_authenticate_user (PASBackend *backend,  {  	PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);  	int ldap_error; -	char *query; -	LDAPMessage    *res, *e; - -	query = g_strdup_printf ("(mail=%s)", req->user); - -	ldap_error = ldap_search_s (bl->priv->ldap, -				    bl->priv->ldap_rootdn, -				    bl->priv->ldap_scope, -				    query, -				    NULL, 0, &res); - -	if (ldap_error == LDAP_SUCCESS) { -		char *dn; +	char *dn = NULL; -		e = ldap_first_entry (bl->priv->ldap, res); -		dn = ldap_get_dn (bl->priv->ldap, e); +	if (!strcmp (req->auth_method, "ldap/simple-email")) { +		LDAPMessage    *res, *e; +		char *query = g_strdup_printf ("(mail=%s)", req->user); -		printf ("authenticating as %s\n", dn); +		ldap_error = ldap_search_s (bl->priv->ldap, +					    bl->priv->ldap_rootdn, +					    bl->priv->ldap_scope, +					    query, +					    NULL, 0, &res); +		g_free (query); -		ldap_error = ldap_simple_bind_s(bl->priv->ldap, -						dn, -						req->passwd); +		if (ldap_error == LDAP_SUCCESS) { +			e = ldap_first_entry (bl->priv->ldap, res); +			dn = g_strdup(ldap_get_dn (bl->priv->ldap, e)); +			ldap_msgfree (res); +		} +		else { +			pas_book_respond_authenticate_user (book, +						    GNOME_Evolution_Addressbook_BookListener_PermissionDenied); +			return; +		} +	} +	else { +		dn = g_strdup (req->user); +	} -		pas_book_respond_authenticate_user (book, -						    ldap_error_to_response (ldap_error)); +	/* now authenticate against the DN we were either supplied or queried for */ +	printf ("authenticating as %s\n", dn); +	ldap_error = ldap_simple_bind_s(bl->priv->ldap, +					dn, +					req->passwd); +	g_free (dn); -		bl->priv->writable = (ldap_error == LDAP_SUCCESS); +	pas_book_respond_authenticate_user (book, +					    ldap_error_to_response (ldap_error)); -		if (!bl->priv->evolutionPersonChecked) -			check_schema_support (bl); +	bl->priv->writable = (ldap_error == LDAP_SUCCESS); -		ldap_msgfree (res); -	} -	else { -		pas_book_respond_authenticate_user (book, GNOME_Evolution_Addressbook_BookListener_PermissionDenied); -	} +	if (!bl->priv->evolutionPersonChecked) +		check_schema_support (bl);  	pas_book_report_writable (book, bl->priv->writable); - -	g_free (query);  }  static void diff --git a/addressbook/backend/pas/pas-book.c b/addressbook/backend/pas/pas-book.c index d51d182dad..b0b35b2c0f 100644 --- a/addressbook/backend/pas/pas-book.c +++ b/addressbook/backend/pas/pas-book.c @@ -129,7 +129,7 @@ pas_book_queue_get_vcard (PASBook *book, const char *id)  static void  pas_book_queue_authenticate_user (PASBook *book, -				  const char *user, const char *passwd) +				  const char *user, const char *passwd, const char *auth_method)  {  	PASRequest *req; @@ -137,6 +137,7 @@ pas_book_queue_authenticate_user (PASBook *book,  	req->op     = AuthenticateUser;  	req->user   = g_strdup(user);  	req->passwd = g_strdup(passwd); +	req->auth_method = g_strdup(auth_method);  	pas_book_queue_request (book, req);  } @@ -226,11 +227,12 @@ static void  impl_GNOME_Evolution_Addressbook_Book_authenticateUser (PortableServer_Servant servant,  							const char* user,  							const char* passwd, +							const char* auth_method,  							CORBA_Environment *ev)  {  	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant)); -	pas_book_queue_authenticate_user (book, user, passwd); +	pas_book_queue_authenticate_user (book, user, passwd, auth_method);  }  static void diff --git a/addressbook/backend/pas/pas-book.h b/addressbook/backend/pas/pas-book.h index 6f5832d914..8afba26b45 100644 --- a/addressbook/backend/pas/pas-book.h +++ b/addressbook/backend/pas/pas-book.h @@ -45,6 +45,7 @@ typedef struct {  	char                      *change_id;  	char                      *user;          char                      *passwd; +	char                      *auth_method;  	GNOME_Evolution_Addressbook_BookViewListener listener;  	GNOME_Evolution_Addressbook_stringlist fields;  } PASRequest; diff --git a/addressbook/gui/component/addressbook-config.c b/addressbook/gui/component/addressbook-config.c index 33feb391ab..5061e6368b 100644 --- a/addressbook/gui/component/addressbook-config.c +++ b/addressbook/gui/component/addressbook-config.c @@ -29,15 +29,19 @@ struct _AddressbookSourceDialog {  	GtkWidget *name;  	GtkWidget *host; + +	GtkWidget *auth_checkbutton; +	GtkWidget *auth_optionmenu; +	GtkWidget *auth_notebook;  	GtkWidget *email; -	GtkWidget *email_label; +	GtkWidget *binddn; +	int        auth;  	GtkWidget *port;  	GtkWidget *rootdn;  	GtkWidget *limit;  	GtkWidget *scope_optionmenu;  	AddressbookLDAPScopeType ldap_scope; -	GtkWidget *auth_checkbutton;  	gint id; /* button we closed the dialog with */ @@ -83,14 +87,14 @@ auth_checkbutton_changed (GtkWidget *item, AddressbookSourceDialog *dialog)  	/* make sure the change is reflected by the state of the dialog's OK button */  	addressbook_source_edit_changed (item, dialog); -	gtk_widget_set_sensitive (dialog->email_label, +	gtk_widget_set_sensitive (dialog->auth_optionmenu, +				  gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->auth_checkbutton))); +	gtk_widget_set_sensitive (dialog->auth_notebook,  				  gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->auth_checkbutton))); -	gtk_entry_set_editable (GTK_ENTRY(dialog->email), -				gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->auth_checkbutton)));  }  static void -option_menuitem_activated (GtkWidget *item, AddressbookSourceDialog *dialog) +scope_optionmenu_activated (GtkWidget *item, AddressbookSourceDialog *dialog)  {  	/* make sure the change is reflected by the state of the dialog's OK button */  	addressbook_source_edit_changed (item, dialog); @@ -99,6 +103,18 @@ option_menuitem_activated (GtkWidget *item, AddressbookSourceDialog *dialog)  					   item);  } +static void +auth_optionmenu_activated (GtkWidget *item, AddressbookSourceDialog *dialog) +{ +	/* make sure the change is reflected by the state of the dialog's OK button */ +	addressbook_source_edit_changed (item, dialog); + +	dialog->auth = g_list_index (gtk_container_children (GTK_CONTAINER (item->parent)), +				     item) + 1; + +	gtk_notebook_set_page (GTK_NOTEBOOK(dialog->auth_notebook), dialog->auth - 1); +} +  typedef struct {  	GtkWidget *notebook;  	int page_num; @@ -132,18 +148,24 @@ addressbook_source_dialog_set_source (AddressbookSourceDialog *dialog, Addressbo  	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->name), source ? source->name : "");  	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->host), source ? source->host : "");  	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->email), source ? source->email_addr : ""); +	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->binddn), source ? source->binddn : "");  	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->port), source ? source->port : "389");  	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->rootdn), source ? source->rootdn : ""); +  	string = g_strdup_printf ("%d", source ? source->limit : 100);  	e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->limit), string);  	g_free (string); -	gtk_option_menu_set_history (GTK_OPTION_MENU(dialog->scope_optionmenu), source ? source->scope : ADDRESSBOOK_LDAP_SCOPE_ONELEVEL); +	dialog->auth = source ? source->auth : ADDRESSBOOK_LDAP_AUTH_NONE; +	if (dialog->auth != ADDRESSBOOK_LDAP_AUTH_NONE) +		gtk_option_menu_set_history (GTK_OPTION_MENU(dialog->auth_optionmenu), dialog->auth - 1); +  	dialog->ldap_scope = source ? source->scope : ADDRESSBOOK_LDAP_SCOPE_ONELEVEL; +	gtk_option_menu_set_history (GTK_OPTION_MENU(dialog->scope_optionmenu), dialog->ldap_scope); -	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->auth_checkbutton), source && source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE); -	gtk_widget_set_sensitive (dialog->email_label, source && source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE); -	gtk_entry_set_editable (GTK_ENTRY(dialog->email), source && source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE); +	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->auth_checkbutton), source && source->auth != ADDRESSBOOK_LDAP_AUTH_NONE); +	gtk_widget_set_sensitive (dialog->auth_optionmenu, source && source->auth != ADDRESSBOOK_LDAP_AUTH_NONE); +	gtk_widget_set_sensitive (dialog->auth_notebook, source && source->auth != ADDRESSBOOK_LDAP_AUTH_NONE);  }  static AddressbookSource * @@ -154,12 +176,12 @@ addressbook_source_dialog_get_source (AddressbookSourceDialog *dialog)  	source->name       = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->name));  	source->host       = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->host));  	source->email_addr = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->email)); +	source->binddn     = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->binddn));  	source->port       = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->port));  	source->rootdn     = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->rootdn));  	source->limit      = atoi(e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->limit)));  	source->scope      = dialog->ldap_scope; -	source->auth       = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->auth_checkbutton)) -			      ? ADDRESSBOOK_LDAP_AUTH_SIMPLE : ADDRESSBOOK_LDAP_AUTH_NONE); +	source->auth       = dialog->auth;  	addressbook_storage_init_source_uri (source); @@ -173,12 +195,20 @@ addressbook_source_dialog_ok_clicked (GtkWidget *widget, AddressbookSourceDialog  }  static void -add_activate_cb (GtkWidget *item, AddressbookSourceDialog *dialog) +add_scope_activate_cb (GtkWidget *item, AddressbookSourceDialog *dialog) +{ +	gtk_signal_connect (GTK_OBJECT (item), "activate", +			    GTK_SIGNAL_FUNC (scope_optionmenu_activated), dialog); +} + +static void +add_auth_activate_cb (GtkWidget *item, AddressbookSourceDialog *dialog)  {  	gtk_signal_connect (GTK_OBJECT (item), "activate", -			    GTK_SIGNAL_FUNC (option_menuitem_activated), dialog); +			    GTK_SIGNAL_FUNC (auth_optionmenu_activated), dialog);  } +  static AddressbookSourceDialog*  addressbook_source_dialog (GladeXML *gui, AddressbookSource *source, GtkWidget *parent)  { @@ -214,18 +244,25 @@ addressbook_source_dialog (GladeXML *gui, AddressbookSource *source, GtkWidget *  			    GTK_SIGNAL_FUNC (addressbook_source_edit_changed), dialog);  	add_focus_handler (dialog->host, dialog->basic_notebook, 1); -	dialog->email = glade_xml_get_widget (gui, "email-address-entry"); -	gtk_signal_connect (GTK_OBJECT (dialog->email), "changed", -			    GTK_SIGNAL_FUNC (addressbook_source_edit_changed), dialog); -	add_focus_handler (dialog->email, dialog->basic_notebook, 2); - -	dialog->email_label = glade_xml_get_widget (gui, "email-address-label"); +	/* BASIC -> AUTH STUFF */ +	dialog->auth_notebook = glade_xml_get_widget (gui, "auth-notebook");  	dialog->auth_checkbutton = glade_xml_get_widget (gui, "auth-checkbutton");  	add_focus_handler (dialog->auth_checkbutton, dialog->basic_notebook, 2);  	gtk_signal_connect (GTK_OBJECT (dialog->auth_checkbutton), "toggled",  			    GTK_SIGNAL_FUNC (auth_checkbutton_changed), dialog); +	dialog->auth_optionmenu = glade_xml_get_widget (gui, "auth-optionmenu"); +	menu = gtk_option_menu_get_menu (GTK_OPTION_MENU(dialog->auth_optionmenu)); +	gtk_container_foreach (GTK_CONTAINER (menu), (GtkCallback)add_auth_activate_cb, dialog); +	add_focus_handler (dialog->auth_optionmenu, dialog->basic_notebook, 3); + +	dialog->email = glade_xml_get_widget (gui, "email-entry"); +	add_focus_handler (dialog->email, dialog->basic_notebook, 4); + +	dialog->binddn = glade_xml_get_widget (gui, "dn-entry"); +	add_focus_handler (dialog->binddn, dialog->basic_notebook, 5); +  	/* ADVANCED STUFF */  	dialog->port = glade_xml_get_widget (gui, "port-entry");  	gtk_signal_connect (GTK_OBJECT (dialog->port), "changed", @@ -240,7 +277,7 @@ addressbook_source_dialog (GladeXML *gui, AddressbookSource *source, GtkWidget *  	dialog->scope_optionmenu = glade_xml_get_widget (gui, "scope-optionmenu");  	add_focus_handler (dialog->scope_optionmenu, dialog->advanced_notebook, 2);  	menu = gtk_option_menu_get_menu (GTK_OPTION_MENU(dialog->scope_optionmenu)); -	gtk_container_foreach (GTK_CONTAINER (menu), (GtkCallback)add_activate_cb, dialog); +	gtk_container_foreach (GTK_CONTAINER (menu), (GtkCallback)add_scope_activate_cb, dialog);  	dialog->limit = glade_xml_get_widget (gui, "limit-entry");  	gtk_signal_connect (GTK_OBJECT (dialog->limit), "changed", diff --git a/addressbook/gui/component/addressbook-config.glade b/addressbook/gui/component/addressbook-config.glade index 50b36e2462..23ef8105a5 100644 --- a/addressbook/gui/component/addressbook-config.glade +++ b/addressbook/gui/component/addressbook-config.glade @@ -2,6 +2,8 @@  <GTK-Interface>  <project> +  <name>addressbook-config-mockup</name> +  <program_name>addressbook-config-mockup</program_name>    <directory></directory>    <source_directory>src</source_directory>    <pixmaps_directory>pixmaps</pixmaps_directory> @@ -94,7 +96,7 @@  	<name>vbox1</name>  	<border_width>3</border_width>  	<homogeneous>False</homogeneous> -	<spacing>6</spacing> +	<spacing>3</spacing>  	<widget>  	  <class>GtkLabel</class> @@ -117,7 +119,7 @@  	  <class>GtkTable</class>  	  <name>table1</name>  	  <border_width>3</border_width> -	  <rows>3</rows> +	  <rows>2</rows>  	  <columns>2</columns>  	  <homogeneous>False</homogeneous>  	  <row_spacing>3</row_spacing> @@ -229,36 +231,15 @@  	      <yfill>False</yfill>  	    </child>  	  </widget> - -	  <widget> -	    <class>GtkCheckButton</class> -	    <name>auth-checkbutton</name> -	    <can_focus>True</can_focus> -	    <label>_My server requires authentication</label> -	    <active>False</active> -	    <draw_indicator>True</draw_indicator> -	    <child> -	      <left_attach>0</left_attach> -	      <right_attach>2</right_attach> -	      <top_attach>2</top_attach> -	      <bottom_attach>3</bottom_attach> -	      <xpad>0</xpad> -	      <ypad>0</ypad> -	      <xexpand>False</xexpand> -	      <yexpand>False</yexpand> -	      <xshrink>False</xshrink> -	      <yshrink>False</yshrink> -	      <xfill>True</xfill> -	      <yfill>False</yfill> -	    </child> -	  </widget>  	</widget>  	<widget> -	  <class>GtkHBox</class> -	  <name>hbox4</name> -	  <homogeneous>False</homogeneous> -	  <spacing>0</spacing> +	  <class>GtkAlignment</class> +	  <name>alignment2</name> +	  <xalign>0</xalign> +	  <yalign>0.5</yalign> +	  <xscale>1</xscale> +	  <yscale>1</yscale>  	  <child>  	    <padding>0</padding>  	    <expand>False</expand> @@ -266,35 +247,187 @@  	  </child>  	  <widget> -	    <class>GtkLabel</class> -	    <name>email-address-label</name> -	    <label>Email Address:</label> -	    <justify>GTK_JUSTIFY_CENTER</justify> -	    <wrap>False</wrap> -	    <xalign>0.5</xalign> -	    <yalign>0.5</yalign> -	    <xpad>0</xpad> -	    <ypad>0</ypad> -	    <child> -	      <padding>0</padding> -	      <expand>False</expand> -	      <fill>False</fill> -	    </child> -	  </widget> +	    <class>GtkVBox</class> +	    <name>auth-vbox</name> +	    <homogeneous>False</homogeneous> +	    <spacing>3</spacing> -	  <widget> -	    <class>GtkEntry</class> -	    <name>email-address-entry</name> -	    <can_focus>True</can_focus> -	    <editable>True</editable> -	    <text_visible>True</text_visible> -	    <text_max_length>0</text_max_length> -	    <text></text> -	    <child> -	      <padding>0</padding> -	      <expand>True</expand> -	      <fill>True</fill> -	    </child> +	    <widget> +	      <class>GtkHBox</class> +	      <name>hbox9</name> +	      <homogeneous>False</homogeneous> +	      <spacing>0</spacing> +	      <child> +		<padding>0</padding> +		<expand>False</expand> +		<fill>False</fill> +	      </child> + +	      <widget> +		<class>GtkCheckButton</class> +		<name>auth-checkbutton</name> +		<can_focus>True</can_focus> +		<label>A_uthenticate with server using:</label> +		<active>False</active> +		<draw_indicator>True</draw_indicator> +		<child> +		  <padding>0</padding> +		  <expand>False</expand> +		  <fill>False</fill> +		</child> +	      </widget> + +	      <widget> +		<class>GtkHBox</class> +		<name>hbox10</name> +		<homogeneous>False</homogeneous> +		<spacing>3</spacing> +		<child> +		  <padding>0</padding> +		  <expand>True</expand> +		  <fill>True</fill> +		</child> + +		<widget> +		  <class>GtkOptionMenu</class> +		  <name>auth-optionmenu</name> +		  <can_focus>True</can_focus> +		  <items>Email address +Distinguished name (DN) +</items> +		  <initial_choice>0</initial_choice> +		  <child> +		    <padding>0</padding> +		    <expand>False</expand> +		    <fill>False</fill> +		  </child> +		</widget> +	      </widget> +	    </widget> + +	    <widget> +	      <class>GtkNotebook</class> +	      <name>auth-notebook</name> +	      <show_tabs>False</show_tabs> +	      <show_border>False</show_border> +	      <tab_pos>GTK_POS_TOP</tab_pos> +	      <scrollable>False</scrollable> +	      <tab_hborder>2</tab_hborder> +	      <tab_vborder>2</tab_vborder> +	      <popup_enable>False</popup_enable> +	      <child> +		<padding>0</padding> +		<expand>True</expand> +		<fill>True</fill> +	      </child> + +	      <widget> +		<class>GtkHBox</class> +		<name>hbox5</name> +		<border_width>3</border_width> +		<homogeneous>False</homogeneous> +		<spacing>3</spacing> + +		<widget> +		  <class>GtkLabel</class> +		  <name>email-label</name> +		  <label>_Email address:</label> +		  <justify>GTK_JUSTIFY_CENTER</justify> +		  <wrap>False</wrap> +		  <xalign>0.5</xalign> +		  <yalign>0.5</yalign> +		  <xpad>0</xpad> +		  <ypad>0</ypad> +		  <default_focus_target>email-entry</default_focus_target> +		  <child> +		    <padding>0</padding> +		    <expand>False</expand> +		    <fill>False</fill> +		  </child> +		</widget> + +		<widget> +		  <class>GtkEntry</class> +		  <name>email-entry</name> +		  <can_focus>True</can_focus> +		  <editable>True</editable> +		  <text_visible>True</text_visible> +		  <text_max_length>0</text_max_length> +		  <text></text> +		  <child> +		    <padding>0</padding> +		    <expand>True</expand> +		    <fill>True</fill> +		  </child> +		</widget> +	      </widget> + +	      <widget> +		<class>GtkLabel</class> +		<child_name>Notebook:tab</child_name> +		<name>label52</name> +		<label>label52</label> +		<justify>GTK_JUSTIFY_CENTER</justify> +		<wrap>False</wrap> +		<xalign>0.5</xalign> +		<yalign>0.5</yalign> +		<xpad>0</xpad> +		<ypad>0</ypad> +	      </widget> + +	      <widget> +		<class>GtkHBox</class> +		<name>hbox6</name> +		<homogeneous>False</homogeneous> +		<spacing>3</spacing> + +		<widget> +		  <class>GtkLabel</class> +		  <name>dn-label</name> +		  <label>_Distinguished Name:</label> +		  <justify>GTK_JUSTIFY_CENTER</justify> +		  <wrap>False</wrap> +		  <xalign>0.5</xalign> +		  <yalign>0.5</yalign> +		  <xpad>0</xpad> +		  <ypad>0</ypad> +		  <default_focus_target>dn-entry</default_focus_target> +		  <child> +		    <padding>0</padding> +		    <expand>False</expand> +		    <fill>False</fill> +		  </child> +		</widget> + +		<widget> +		  <class>GtkEntry</class> +		  <name>dn-entry</name> +		  <can_focus>True</can_focus> +		  <editable>True</editable> +		  <text_visible>True</text_visible> +		  <text_max_length>0</text_max_length> +		  <text></text> +		  <child> +		    <padding>0</padding> +		    <expand>True</expand> +		    <fill>True</fill> +		  </child> +		</widget> +	      </widget> + +	      <widget> +		<class>GtkLabel</class> +		<child_name>Notebook:tab</child_name> +		<name>label53</name> +		<label>label53</label> +		<justify>GTK_JUSTIFY_CENTER</justify> +		<wrap>False</wrap> +		<xalign>0.5</xalign> +		<yalign>0.5</yalign> +		<xpad>0</xpad> +		<ypad>0</ypad> +	      </widget> +	    </widget>  	  </widget>  	</widget> @@ -366,6 +499,56 @@  	  <widget>  	    <class>GtkLabel</class> +	    <name>label57</name> +	    <label>Check this if the server requires you to authenticate.</label> +	    <justify>GTK_JUSTIFY_CENTER</justify> +	    <wrap>True</wrap> +	    <xalign>0.5</xalign> +	    <yalign>0.5</yalign> +	    <xpad>0</xpad> +	    <ypad>0</ypad> +	  </widget> + +	  <widget> +	    <class>GtkLabel</class> +	    <child_name>Notebook:tab</child_name> +	    <name>label56</name> +	    <label>label56</label> +	    <justify>GTK_JUSTIFY_CENTER</justify> +	    <wrap>False</wrap> +	    <xalign>0.5</xalign> +	    <yalign>0.5</yalign> +	    <xpad>0</xpad> +	    <ypad>0</ypad> +	  </widget> + +	  <widget> +	    <class>GtkLabel</class> +	    <name>label61</name> +	    <label>This is the method evolution will use to authenticate you.  Note that setting this to "Email Address" requires anonymous access to your ldap server.</label> +	    <justify>GTK_JUSTIFY_CENTER</justify> +	    <wrap>True</wrap> +	    <xalign>0.5</xalign> +	    <yalign>0.5</yalign> +	    <xpad>0</xpad> +	    <ypad>0</ypad> +	  </widget> + +	  <widget> +	    <class>GtkLabel</class> +	    <child_name>Notebook:tab</child_name> +	    <name>label60</name> +	    <label>label60</label> +	    <justify>GTK_JUSTIFY_CENTER</justify> +	    <wrap>False</wrap> +	    <xalign>0.5</xalign> +	    <yalign>0.5</yalign> +	    <xpad>0</xpad> +	    <ypad>0</ypad> +	  </widget> + +	  <widget> +	    <class>GtkLabel</class>  	    <name>label48</name>  	    <label>Evolution will use this email address to authenticate you with the server</label>  	    <justify>GTK_JUSTIFY_CENTER</justify> @@ -388,6 +571,31 @@  	    <xpad>0</xpad>  	    <ypad>0</ypad>  	  </widget> + +	  <widget> +	    <class>GtkLabel</class> +	    <name>label59</name> +	    <label>Evolution will use this Distinquished Name (DN) to authenticate you with the server</label> +	    <justify>GTK_JUSTIFY_CENTER</justify> +	    <wrap>True</wrap> +	    <xalign>0.5</xalign> +	    <yalign>0.5</yalign> +	    <xpad>0</xpad> +	    <ypad>0</ypad> +	  </widget> + +	  <widget> +	    <class>GtkLabel</class> +	    <child_name>Notebook:tab</child_name> +	    <name>label58</name> +	    <label>label58</label> +	    <justify>GTK_JUSTIFY_CENTER</justify> +	    <wrap>False</wrap> +	    <xalign>0.5</xalign> +	    <yalign>0.5</yalign> +	    <xpad>0</xpad> +	    <ypad>0</ypad> +	  </widget>  	</widget>        </widget> diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index 93c3bdf246..74aceb9c4e 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -641,7 +641,7 @@ load_uri_cb (EBook *book, EBookStatus status, gpointer closure)  		if (source &&  		    source->type == ADDRESSBOOK_SOURCE_LDAP && -		    source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE) { +		    source->auth != ADDRESSBOOK_LDAP_AUTH_NONE) {  			const char *password;  			char *pass_dup = NULL; @@ -651,7 +651,12 @@ load_uri_cb (EBook *book, EBookStatus status, gpointer closure)  				char *prompt;  				gboolean remember; -				prompt = g_strdup_printf (_("Enter password for %s (user %s)"), source->name, source->email_addr); +				if (source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE_BINDDN) +					prompt = g_strdup_printf (_("Enter password for %s (user %s)"), +								  source->name, source->binddn); +				else +					prompt = g_strdup_printf (_("Enter password for %s (user %s)"), +								  source->name, source->email_addr);  				remember = source->remember_passwd;  				pass_dup = e_passwords_ask_password (  								     prompt, load_uri_data->uri, prompt, TRUE, @@ -665,7 +670,16 @@ load_uri_cb (EBook *book, EBookStatus status, gpointer closure)  			}  			if (password || pass_dup) { -				e_book_authenticate_user (book, source->email_addr, password ? password : pass_dup, +				char *user; + +				if (source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE_BINDDN) +					user = source->binddn; +				else +					user = source->email_addr; +				if (!user) +					user = ""; +				e_book_authenticate_user (book, user, password ? password : pass_dup, +							  addressbook_storage_auth_type_to_string (source->auth),  							  load_uri_auth_cb, closure);  				g_free (pass_dup);  				return;  | 
