aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component
diff options
context:
space:
mode:
authorChris Toshok <toshok@helixcode.com>2001-01-05 10:22:47 +0800
committerChris Toshok <toshok@src.gnome.org>2001-01-05 10:22:47 +0800
commit5dca3046d3ad660485cc68e3c9f4ef3f98a5922d (patch)
tree1aaa131bc0b4a9ea283c8a41235d559162522ee1 /addressbook/gui/component
parentd760764af84a693d3fb580c8b402b2347a61bba8 (diff)
downloadgsoc2013-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.c4
-rw-r--r--addressbook/gui/component/addressbook-storage.c14
-rw-r--r--addressbook/gui/component/addressbook-storage.h1
-rw-r--r--addressbook/gui/component/addressbook.c55
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 (