diff options
author | Chris Toshok <toshok@helixcode.com> | 2001-01-05 10:22:47 +0800 |
---|---|---|
committer | Chris Toshok <toshok@src.gnome.org> | 2001-01-05 10:22:47 +0800 |
commit | 5dca3046d3ad660485cc68e3c9f4ef3f98a5922d (patch) | |
tree | 1aaa131bc0b4a9ea283c8a41235d559162522ee1 /addressbook/gui/component | |
parent | d760764af84a693d3fb580c8b402b2347a61bba8 (diff) | |
download | gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar.gz gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar.bz2 gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar.lz gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar.xz gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar.zst gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.zip |
new function. (impl_BookListener_respond_authentication_result): new
2001-01-04 Chris Toshok <toshok@helixcode.com>
* backend/ebook/e-book-listener.c
(e_book_listener_queue_authentication_response): new function.
(impl_BookListener_respond_authentication_result): new function.
(e_book_listener_get_epv): fill in
epv->notifyAuthenticationResult.
* backend/ebook/e-book-listener.h: add AuthenticationResponse to
EBookListenerOperation.
* backend/ebook/e-book.c (e_book_authenticate_user): new function.
* backend/ebook/e-book.h: add prototype for
e_book_authenticate_user.
* backend/idl/addressbook.idl (GNOME:Evolution:Addressbook:Book):
add authenticateUser method.
(GNOME:Evolution:Addressbook:BookListener): add
AuthenticationFailed and AuthenticationRequired to CallStatus.
also add notifyAuthenticationResult method.
* backend/pas/pas-backend-file.c
(pas_backend_file_process_authenticate_user): dummy
authenticate_user function that always succeeds.
(pas_backend_file_process_client_requests): respond to the
AuthenticateUser request.
* backend/pas/pas-backend-ldap.c (pas_backend_ldap_build_query):
gtk_object_unref(sexp) => s_exp_unref(sexp).
(pas_backend_ldap_process_authenticate_user): fill in to use
ldap_simple_bind_s.
(pas_backend_ldap_process_client_requests): respond to the
AuthenticateUser request.
* backend/pas/pas-book.c (pas_book_queue_authenticate_user): new
function.
(impl_GNOME_Evolution_Addressbook_Book_authenticateUser): new
function.
(pas_book_respond_authenticate_user): new function.
(pas_book_get_epv): fill in epv->authenticateUser.
* backend/pas/pas-book.h: add AuthenticateUser operation type, and
add user/passwd to the PASRequest struct.
* gui/component/addressbook-storage.c
(addressbook_storage_get_source_by_uri): new function. should use
a hashtable, perhaps, but the lists will generally be small
anyway.
* gui/component/addressbook-storage.h: add prototype for
addressbook_storage_get_source_by_uri.
* gui/component/addressbook-config.c
(addressbook_source_dialog_set_source): fill in the binddn if the
auth page is shown.
* gui/component/addressbook.c (book_open_cb): shoe-horn
authentication in here. if the source was configured to use
authentication, authenticate the user after opening the ebook.
also, be paranoid and clear out the password after authenticating.
(book_auth_cb): callback for auth. set the "book" arg on the
view->view here.
(passwd_cb): set the view's passwd that'll be used in
book_open_cb.
(addressbook_view_free): g_free view->passwd.
svn path=/trunk/; revision=7265
Diffstat (limited to 'addressbook/gui/component')
-rw-r--r-- | addressbook/gui/component/addressbook-config.c | 4 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook-storage.c | 14 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook-storage.h | 1 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 55 |
4 files changed, 74 insertions, 0 deletions
diff --git a/addressbook/gui/component/addressbook-config.c b/addressbook/gui/component/addressbook-config.c index ae15b7aaf1..7439fd5b6a 100644 --- a/addressbook/gui/component/addressbook-config.c +++ b/addressbook/gui/component/addressbook-config.c @@ -501,6 +501,10 @@ addressbook_source_dialog_set_source (AddressbookSourceDialog *dialog, Addressbo auth_page = g_list_nth_data (source_page->auths, source->ldap.auth); ldap_auth_type_menuitem_activate (auth_page->item, auth_page); gtk_option_menu_set_history (GTK_OPTION_MENU(source_page->auth_optionmenu), auth_page->auth_type); + + if (auth_page->auth_type == ADDRESSBOOK_LDAP_AUTH_SIMPLE) { + e_utf8_gtk_entry_set_text (GTK_ENTRY (auth_page->binddn), source->ldap.binddn); + } } else { e_utf8_gtk_entry_set_text (GTK_ENTRY (source_page->path), source->file.path); diff --git a/addressbook/gui/component/addressbook-storage.c b/addressbook/gui/component/addressbook-storage.c index e1b02ec93a..df11a38cbe 100644 --- a/addressbook/gui/component/addressbook-storage.c +++ b/addressbook/gui/component/addressbook-storage.c @@ -456,6 +456,20 @@ addressbook_storage_get_sources () return sources; } +AddressbookSource * +addressbook_storage_get_source_by_uri (const char *uri) +{ + GList *l; + + for (l = sources; l ; l = l->next) { + AddressbookSource *source = l->data; + if (!strcmp (uri, source->uri)) + return source; + } + + return NULL; +} + void addressbook_source_free (AddressbookSource *source) { diff --git a/addressbook/gui/component/addressbook-storage.h b/addressbook/gui/component/addressbook-storage.h index 0262207603..518977598e 100644 --- a/addressbook/gui/component/addressbook-storage.h +++ b/addressbook/gui/component/addressbook-storage.h @@ -69,6 +69,7 @@ void addressbook_storage_setup (EvolutionShellComponent *shell_component, const char *evolution_homedir); GList *addressbook_storage_get_sources (void); +AddressbookSource *addressbook_storage_get_source_by_uri (const char *uri); void addressbook_storage_clear_sources (void); AddressbookSource *addressbook_source_copy (const AddressbookSource *source); void addressbook_source_free (AddressbookSource *source); diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index bdad6ae04c..e9d4f45527 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -44,6 +44,7 @@ typedef struct { BonoboControl *control; BonoboPropertyBag *properties; char *uri; + char *passwd; } AddressbookView; static void @@ -328,19 +329,73 @@ addressbook_view_free(AddressbookView *view) { if (view->properties) bonobo_object_unref(BONOBO_OBJECT(view->properties)); + g_free(view->passwd); g_free(view->uri); g_free(view); } static void +book_auth_cb (EBook *book, EBookStatus status, gpointer closure) +{ + AddressbookView *view = closure; + if (status == E_BOOK_STATUS_SUCCESS) { + gtk_object_set(GTK_OBJECT(view->view), + "book", book, + NULL); + } + else { + /* pop up a nice dialog, or redo the authentication + bit some number of times. */ + } +} + +static void +passwd_cb (gchar *string, gpointer data) +{ + AddressbookView *view = (AddressbookView*)data; + + view->passwd = g_strdup (string); +} + +static void book_open_cb (EBook *book, EBookStatus status, gpointer closure) { if (status == E_BOOK_STATUS_SUCCESS) { AddressbookView *view = closure; + AddressbookSource *source; + + /* check if the addressbook needs authentication */ + + source = addressbook_storage_get_source_by_uri (view->uri); + if (source && + source->type == ADDRESSBOOK_SOURCE_LDAP && + source->ldap.auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE) { + int button; + char *msg = g_strdup_printf (_("Enter password for %s"), source->ldap.binddn); + /* give a password prompt for the binddn */ + GtkWidget *dialog = gnome_request_dialog (TRUE, msg, NULL, + 0, passwd_cb, view, NULL); + + button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + + if (button == 0 && *(view->passwd)) { + e_book_authenticate_user (book, source->ldap.binddn, view->passwd, + book_auth_cb, closure); + memset (view->passwd, 0, strlen (view->passwd)); /* clear out the passwd */ + g_free (view->passwd); + view->passwd = NULL; + return; + } + } + + /* if they either didn't configure the source to use + authentication, or they canceled the dialog, + proceed without authenticating */ gtk_object_set(GTK_OBJECT(view->view), "book", book, NULL); + } else { GtkWidget *warning_dialog, *label, *href; warning_dialog = gnome_dialog_new ( |