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 /addressbook/backend | |
parent | 19bf10036145eb24280ac5792dd85add67d4d238 (diff) | |
download | gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar.gz gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar.bz2 gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar.lz gsoc2013-evolution-9b1f4e133bc79b2cac6cf342972c713739b075a6.tar.xz 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
Diffstat (limited to 'addressbook/backend')
-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 |
7 files changed, 47 insertions, 36 deletions
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; |