aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2002-01-25 12:22:58 +0800
committerChris Toshok <toshok@src.gnome.org>2002-01-25 12:22:58 +0800
commit9b1f4e133bc79b2cac6cf342972c713739b075a6 (patch)
tree07066b05749e5327182a0a6b45df3f2ca29d952a /addressbook/backend
parent19bf10036145eb24280ac5792dd85add67d4d238 (diff)
downloadgsoc2013-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.c2
-rw-r--r--addressbook/backend/ebook/e-book.h1
-rw-r--r--addressbook/backend/ebook/test-client.c4
-rw-r--r--addressbook/backend/idl/addressbook.idl3
-rw-r--r--addressbook/backend/pas/pas-backend-ldap.c66
-rw-r--r--addressbook/backend/pas/pas-book.c6
-rw-r--r--addressbook/backend/pas/pas-book.h1
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;