aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component/addressbook-storage.c
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2001-08-10 01:21:46 +0800
committerChris Toshok <toshok@src.gnome.org>2001-08-10 01:21:46 +0800
commit30876e0d14b1ac0bb110dc8a1635eb434205f5fb (patch)
tree6b4042ba9aa3cfbb35e91bc98fc928fce0854b0c /addressbook/gui/component/addressbook-storage.c
parent44f7f1b1aeed1f1ec213fdacd1d1af5bc59be95d (diff)
downloadgsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.tar
gsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.tar.gz
gsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.tar.bz2
gsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.tar.lz
gsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.tar.xz
gsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.tar.zst
gsoc2013-evolution-30876e0d14b1ac0bb110dc8a1635eb434205f5fb.zip
[ Fixes ximian bugs #5080, #6021, #6704, #6705 ]
2001-08-09 Chris Toshok <toshok@ximian.com> [ Fixes ximian bugs #5080, #6021, #6704, #6705 ] * gui/component/addressbook.c (book_open_cb): create our own dialog that prompts for both the email address and the password. the email address is stored in the source and filled in for the user after the first time they enter one and press OK. * gui/component/addressbook-storage.c (create_ldap_folder): has a return value, not a int* parameter. (create_ldap_folder): new function, we can create ldap servers from the File->New->Folder menu item now. (register_storage): hook up the "create_folder" signal. (addressbook_storage_init_source_uri): remove the file case, we only build ldap uris here. (load_source_data): remove the file source stuff, and handle "emailaddr". (save_source_data): call ldap_source_foreach directly. (addressbook_source_free): remove file source stuff. (addressbook_source_copy): same. * gui/component/addressbook-storage.h: get rid of all the file source stuff from AddressbookSource, since this is only being used for ldap servers. * backend/pas/pas-backend-ldap.c (pas_backend_ldap_process_authenticate_user): look up the ldap entry based on the provided email address and use the resulting DN/passwd to authenticate. * gui/component/addressbook-config.c: pretty much gutted to make it work with the new UI. * gui/component/addressbook-config.glade: new version from anna. svn path=/trunk/; revision=11834
Diffstat (limited to 'addressbook/gui/component/addressbook-storage.c')
-rw-r--r--addressbook/gui/component/addressbook-storage.c142
1 files changed, 52 insertions, 90 deletions
diff --git a/addressbook/gui/component/addressbook-storage.c b/addressbook/gui/component/addressbook-storage.c
index 0dc8cd6295..e4bb8e1441 100644
--- a/addressbook/gui/component/addressbook-storage.c
+++ b/addressbook/gui/component/addressbook-storage.c
@@ -21,29 +21,20 @@
* Author: Chris Toshok
*/
-/* The ldap server file goes like this:
+/* The addressbook-sources.xml file goes like this:
<?xml version="1.0"?>
<addressbooks>
<contactserver>
<name>LDAP Server</name>
- <description>This is my company address book.</description>
<host>ldap.server.com</host>
<port>389</port>
<rootdn></rootdn>
<authmethod>simple</authmethod>
- <binddn>cn=Chris Toshok,dc=helixcode,dc=com</binddn>
+ <emailaddr>toshok@blubag.com</emailaddr>
<rememberpass/>
</contactserver>
- <contactfile>
- <name>On Disk Contacts</name>
- <description>This is one of my private contact dbs.</description>
- <path>/home/toshok/contacts/work-contacts.db</path>
- </contactfile>
</addressbooks>
-
- FIXME: Do we want to use a namespace for this?
- FIXME: Do we want to have an internationalized description?
*/
#ifdef HAVE_CONFIG_H
@@ -110,14 +101,27 @@ addressbook_storage_setup (EvolutionShellComponent *shell_component,
}
#ifdef HAVE_LDAP
-static void
+static int
remove_ldap_folder (EvolutionStorage *storage,
const CORBA_char *path, const CORBA_char *physical_uri,
- int *result, gpointer data)
+ gpointer data)
{
addressbook_storage_remove_source (path + 1);
addressbook_storage_write_sources();
- *result = GNOME_Evolution_Storage_OK;
+ return GNOME_Evolution_Storage_OK;
+}
+static int
+create_ldap_folder (EvolutionStorage *storage,
+ const CORBA_char *path, const CORBA_char *type,
+ const CORBA_char *description, const CORBA_char *parent_physical_uri,
+ int *result, gpointer data)
+{
+ if (strcmp (type, "contacts"))
+ return GNOME_Evolution_Storage_UNSUPPORTED_TYPE;
+
+ addressbook_create_new_source (path + 1, NULL);
+
+ return GNOME_Evolution_Storage_OK;
}
#endif
@@ -132,6 +136,9 @@ register_storage (void)
gtk_signal_connect (GTK_OBJECT (storage),
"remove_folder",
GTK_SIGNAL_FUNC(remove_ldap_folder), NULL);
+ gtk_signal_connect (GTK_OBJECT (storage),
+ "create_folder",
+ GTK_SIGNAL_FUNC(create_ldap_folder), NULL);
result = evolution_storage_register_on_shell (storage, corba_shell);
switch (result) {
case EVOLUTION_STORAGE_OK:
@@ -252,13 +259,9 @@ addressbook_storage_init_source_uri (AddressbookSource *source)
if (source->uri)
g_free (source->uri);
- if (source->type == ADDRESSBOOK_SOURCE_LDAP)
- source->uri = g_strdup_printf ("ldap://%s:%s/%s??%s",
- source->ldap.host, source->ldap.port,
- source->ldap.rootdn, ldap_unparse_scope(source->ldap.scope));
- else
- source->uri = g_strdup_printf ("file://%s",
- source->file.path);
+ source->uri = g_strdup_printf ("ldap://%s:%s/%s??%s",
+ source->host, source->port,
+ source->rootdn, ldap_unparse_scope(source->scope));
}
static gboolean
@@ -311,16 +314,12 @@ load_source_data (const char *file_path)
if (!strcmp (child->name, "contactserver")) {
source->type = ADDRESSBOOK_SOURCE_LDAP;
- source->ldap.port = get_string_value (child, "port");
- source->ldap.host = get_string_value (child, "host");
- source->ldap.rootdn = get_string_value (child, "rootdn");
- source->ldap.scope = ldap_parse_scope (get_string_value (child, "scope"));
- source->ldap.auth = ldap_parse_auth (get_string_value (child, "authmethod"));
- source->ldap.binddn = get_string_value (child, "binddn");
- }
- else if (!strcmp (child->name, "contactfile")) {
- source->type = ADDRESSBOOK_SOURCE_FILE;
- source->file.path = get_string_value (child, "path");
+ source->port = get_string_value (child, "port");
+ source->host = get_string_value (child, "host");
+ source->rootdn = get_string_value (child, "rootdn");
+ source->scope = ldap_parse_scope (get_string_value (child, "scope"));
+ source->auth = ldap_parse_auth (get_string_value (child, "authmethod"));
+ source->email_addr = get_string_value (child, "emailaddr");
}
else {
g_warning ("unknown node '%s' in %s", child->name, file_path);
@@ -364,53 +363,24 @@ ldap_source_foreach(AddressbookSource *source, xmlNode *root)
(xmlChar *) source->description);
xmlNewChild (source_root, NULL, (xmlChar *) "port",
- (xmlChar *) source->ldap.port);
+ (xmlChar *) source->port);
xmlNewChild (source_root, NULL, (xmlChar *) "host",
- (xmlChar *) source->ldap.host);
+ (xmlChar *) source->host);
xmlNewChild (source_root, NULL, (xmlChar *) "rootdn",
- (xmlChar *) source->ldap.rootdn);
+ (xmlChar *) source->rootdn);
xmlNewChild (source_root, NULL, (xmlChar *) "scope",
- (xmlChar *) ldap_unparse_scope(source->ldap.scope));
+ (xmlChar *) ldap_unparse_scope(source->scope));
xmlNewChild (source_root, NULL, (xmlChar *) "authmethod",
- (xmlChar *) ldap_unparse_auth(source->ldap.auth));
- if (source->ldap.auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE) {
- xmlNewChild (source_root, NULL, (xmlChar *) "binddn",
- (xmlChar *) source->ldap.binddn);
- if (source->ldap.remember_passwd)
+ (xmlChar *) ldap_unparse_auth(source->auth));
+ if (source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE) {
+ xmlNewChild (source_root, NULL, (xmlChar *) "emailaddr",
+ (xmlChar *) source->email_addr);
+ if (source->remember_passwd)
xmlNewChild (source_root, NULL, (xmlChar *) "rememberpass",
NULL);
}
}
-static void
-file_source_foreach (AddressbookSource *source, xmlNode *root)
-{
- xmlNode *source_root = xmlNewNode (NULL,
- (xmlChar *) "contactfile");
-
- xmlAddChild (root, source_root);
-
- xmlNewChild (source_root, NULL, (xmlChar *) "name",
- (xmlChar *) source->name);
- xmlNewChild (source_root, NULL, (xmlChar *) "description",
- (xmlChar *) source->description);
-
- xmlNewChild (source_root, NULL, (xmlChar *) "path",
- (xmlChar *) source->file.path);
-}
-
-static void
-source_foreach(gpointer value, gpointer user_data)
-{
- AddressbookSource *source = value;
- xmlNode *root = user_data;
-
- if (source->type == ADDRESSBOOK_SOURCE_LDAP)
- ldap_source_foreach(source, root);
- else
- file_source_foreach(source, root);
-}
-
static gboolean
save_source_data (const char *file_path)
{
@@ -425,7 +395,7 @@ save_source_data (const char *file_path)
root = xmlNewDocNode (doc, NULL, (xmlChar *) "addressbooks", NULL);
xmlDocSetRootElement (doc, root);
- g_list_foreach (sources, source_foreach, root);
+ g_list_foreach (sources, (GFunc)ldap_source_foreach, root);
fd = open (new_path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
fchmod (fd, 0600);
@@ -532,14 +502,10 @@ addressbook_source_free (AddressbookSource *source)
g_free (source->name);
g_free (source->description);
g_free (source->uri);
- if (source->type == ADDRESSBOOK_SOURCE_LDAP) {
- g_free (source->ldap.host);
- g_free (source->ldap.port);
- g_free (source->ldap.rootdn);
- g_free (source->ldap.binddn);
- } else {
- g_free (source->file.path);
- }
+ g_free (source->host);
+ g_free (source->port);
+ g_free (source->rootdn);
+ g_free (source->email_addr);
g_free (source);
}
@@ -582,17 +548,13 @@ addressbook_source_copy (const AddressbookSource *source)
copy->type = source->type;
copy->uri = g_strdup (source->uri);
- if (copy->type == ADDRESSBOOK_SOURCE_LDAP) {
- copy->ldap.host = g_strdup (source->ldap.host);
- copy->ldap.port = g_strdup (source->ldap.port);
- copy->ldap.rootdn = g_strdup (source->ldap.rootdn);
- copy->ldap.scope = source->ldap.scope;
- copy->ldap.auth = source->ldap.auth;
- copy->ldap.binddn = g_strdup (source->ldap.binddn);
- copy->ldap.remember_passwd = source->ldap.remember_passwd;
- }
- else {
- copy->file.path = g_strdup (source->file.path);
- }
+ copy->host = g_strdup (source->host);
+ copy->port = g_strdup (source->port);
+ copy->rootdn = g_strdup (source->rootdn);
+ copy->scope = source->scope;
+ copy->auth = source->auth;
+ copy->email_addr = g_strdup (source->email_addr);
+ copy->remember_passwd = source->remember_passwd;
+
return copy;
}