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/backend/pas | |
parent | d760764af84a693d3fb580c8b402b2347a61bba8 (diff) | |
download | gsoc2013-evolution-5dca3046d3ad660485cc68e3c9f4ef3f98a5922d.tar.gz 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/backend/pas')
-rw-r--r-- | addressbook/backend/pas/pas-backend-file.c | 13 | ||||
-rw-r--r-- | addressbook/backend/pas/pas-backend-ldap.c | 34 | ||||
-rw-r--r-- | addressbook/backend/pas/pas-book.c | 48 | ||||
-rw-r--r-- | addressbook/backend/pas/pas-book.h | 7 |
4 files changed, 93 insertions, 9 deletions
diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c index cfe7c90ab8..5a9a5a1005 100644 --- a/addressbook/backend/pas/pas-backend-file.c +++ b/addressbook/backend/pas/pas-backend-file.c @@ -1083,6 +1083,15 @@ pas_backend_file_extract_path_from_uri (const char *uri) return g_strdup (uri + 5); } +static void +pas_backend_file_process_authenticate_user (PASBackend *backend, + PASBook *book, + PASRequest *req) +{ + pas_book_respond_authenticate_user (book, + GNOME_Evolution_Addressbook_BookListener_Success); +} + static gboolean can_write (PASBackend *backend) { @@ -1154,6 +1163,10 @@ pas_backend_file_process_client_requests (PASBook *book) case GetChanges: pas_backend_file_process_get_changes (backend, book, req); break; + + case AuthenticateUser: + pas_backend_file_process_authenticate_user (backend, book, req); + break; } g_free (req); diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c index 4d86538a6e..1aa49cd17b 100644 --- a/addressbook/backend/pas/pas-backend-ldap.c +++ b/addressbook/backend/pas/pas-backend-ldap.c @@ -210,18 +210,18 @@ pas_backend_ldap_connect (PASBackendLDAP *bl) { PASBackendLDAPPrivate *blpriv = bl->priv; -#ifdef DEBUG - { - extern int ldap_debug; - ldap_debug = LDAP_DEBUG_ANY; - } -#endif - /* close connection first if it's open first */ if (blpriv->ldap) ldap_unbind (blpriv->ldap); blpriv->ldap = ldap_open (blpriv->ldap_host, blpriv->ldap_port); +#ifdef DEBUG + { + int debug_level = ~0; + ldap_set_option (blpriv->ldap, LDAP_OPT_DEBUG_LEVEL, &debug_level); + } +#endif + if (NULL != blpriv->ldap) { ldap_simple_bind_s(blpriv->ldap, NULL /*binddn*/, NULL /*passwd*/); @@ -1249,7 +1249,7 @@ pas_backend_ldap_build_query (gchar *query) r = e_sexp_eval(sexp); - gtk_object_unref(GTK_OBJECT(sexp)); + e_sexp_unref (sexp); e_sexp_result_free(r); if (list->next) { @@ -1550,6 +1550,20 @@ pas_backend_ldap_process_check_connection (PASBackend *backend, pas_book_report_connection (book, bl->priv->connected); } +static void +pas_backend_ldap_process_authenticate_user (PASBackend *backend, + PASBook *book, + PASRequest *req) +{ + PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend); + int ldap_error = ldap_simple_bind_s(bl->priv->ldap, + req->user, + req->passwd); + + pas_book_respond_authenticate_user (book, + ldap_error_to_response (ldap_error)); +} + static gboolean pas_backend_ldap_can_write (PASBook *book) { @@ -1603,6 +1617,10 @@ pas_backend_ldap_process_client_requests (PASBook *book) case GetChanges: /* FIXME: Code this. */ break; + + case AuthenticateUser: + pas_backend_ldap_process_authenticate_user (backend, book, req); + break; } g_free (req); diff --git a/addressbook/backend/pas/pas-book.c b/addressbook/backend/pas/pas-book.c index 6fded8301d..783c699603 100644 --- a/addressbook/backend/pas/pas-book.c +++ b/addressbook/backend/pas/pas-book.c @@ -106,6 +106,20 @@ pas_book_queue_get_cursor (PASBook *book, const char *search) } static void +pas_book_queue_authenticate_user (PASBook *book, + const char *user, const char *passwd) +{ + PASRequest *req; + + req = g_new0 (PASRequest, 1); + req->op = AuthenticateUser; + req->user = g_strdup(user); + req->passwd = g_strdup(passwd); + + pas_book_queue_request (book, req); +} + +static void pas_book_queue_get_book_view (PASBook *book, const GNOME_Evolution_Addressbook_BookViewListener listener, const char *search) { PASRequest *req; @@ -206,6 +220,17 @@ impl_GNOME_Evolution_Addressbook_Book_isCardWriteable (PortableServer_Servant se } static void +impl_GNOME_Evolution_Addressbook_Book_authenticateUser (PortableServer_Servant servant, + const char* user, + const char* passwd, + CORBA_Environment *ev) +{ + PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant)); + + pas_book_queue_authenticate_user (book, user, passwd); +} + +static void impl_GNOME_Evolution_Addressbook_Book_addCard (PortableServer_Servant servant, const GNOME_Evolution_Addressbook_VCard vcard, CORBA_Environment *ev) @@ -451,6 +476,28 @@ pas_book_respond_modify (PASBook *book, } /** + * pas_book_respond_authenticate_user: + */ +void +pas_book_respond_authenticate_user (PASBook *book, + GNOME_Evolution_Addressbook_BookListener_CallStatus status) +{ + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + GNOME_Evolution_Addressbook_BookListener_notifyAuthenticationResult ( + book->priv->listener, status, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_warning ("pas_book_respond_authenticate_user: Exception " + "responding to BookListener!\n"); + } + + CORBA_exception_free (&ev); +} + +/** * pas_book_respond_get_cursor: */ void @@ -676,6 +723,7 @@ pas_book_get_epv (void) epv->getVCard = impl_GNOME_Evolution_Addressbook_Book_getVCard; epv->isWriteable = impl_GNOME_Evolution_Addressbook_Book_isWriteable; epv->isCardWriteable = impl_GNOME_Evolution_Addressbook_Book_isCardWriteable; + epv->authenticateUser = impl_GNOME_Evolution_Addressbook_Book_authenticateUser; epv->addCard = impl_GNOME_Evolution_Addressbook_Book_addCard; epv->removeCard = impl_GNOME_Evolution_Addressbook_Book_removeCard; epv->modifyCard = impl_GNOME_Evolution_Addressbook_Book_modifyCard; diff --git a/addressbook/backend/pas/pas-book.h b/addressbook/backend/pas/pas-book.h index 3c7f5a2bde..d94d859d3e 100644 --- a/addressbook/backend/pas/pas-book.h +++ b/addressbook/backend/pas/pas-book.h @@ -30,7 +30,8 @@ typedef enum { GetCursor, GetBookView, GetChanges, - CheckConnection + CheckConnection, + AuthenticateUser } PASOperation; typedef struct { @@ -39,6 +40,8 @@ typedef struct { char *vcard; char *search; char *change_id; + char *user; + char *passwd; GNOME_Evolution_Addressbook_BookViewListener listener; } PASRequest; @@ -76,6 +79,8 @@ void pas_book_respond_remove (PASBook GNOME_Evolution_Addressbook_BookListener_CallStatus status); void pas_book_respond_modify (PASBook *book, GNOME_Evolution_Addressbook_BookListener_CallStatus status); +void pas_book_respond_authenticate_user (PASBook *book, + GNOME_Evolution_Addressbook_BookListener_CallStatus status); void pas_book_respond_get_cursor (PASBook *book, GNOME_Evolution_Addressbook_BookListener_CallStatus status, PASCardCursor *cursor); |