[balsa] Declare LibBalsaAddressBookLdap final



commit 70e87b811e6c91dfe3ce3c19b7d00b330a4f2a84
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Wed May 15 15:09:58 2019 -0400

    Declare LibBalsaAddressBookLdap final
    
    Use G_DECLARE_FINAL_TYPE to declare LibBalsaAddressBookLdap
    
    Make the structure private, and provide and use the necessary
    getters and setters.
    
    Adopt ab_ldap as the identifier.
    
    * libbalsa/address-book-ldap.c
    (libbalsa_address_book_ldap_class_init),
    (libbalsa_address_book_ldap_init),
    (libbalsa_address_book_ldap_finalize),
    (libbalsa_address_book_ldap_new),
    (libbalsa_address_book_ldap_close_connection), (abl_interaction),
    (libbalsa_address_book_ldap_open_connection),
    (libbalsa_address_book_ldap_load),
    (libbalsa_address_book_ldap_get_address),
    (libbalsa_address_book_ldap_add_address),
    (libbalsa_address_book_ldap_remove_address),
    (libbalsa_address_book_ldap_modify_address),
    (libbalsa_address_book_ldap_save_config),
    (libbalsa_address_book_ldap_load_config),
    (libbalsa_address_book_ldap_alias_complete),
    (libbalsa_address_book_ldap_get_host),
    (libbalsa_address_book_ldap_get_base_dn),
    (libbalsa_address_book_ldap_get_bind_dn),
    (libbalsa_address_book_ldap_get_passwd),
    (libbalsa_address_book_ldap_get_book_dn),
    (libbalsa_address_book_ldap_get_enable_tls),
    (libbalsa_address_book_ldap_set_host),
    (libbalsa_address_book_ldap_set_base_dn),
    (libbalsa_address_book_ldap_set_bind_dn),
    (libbalsa_address_book_ldap_set_passwd),
    (libbalsa_address_book_ldap_set_book_dn),
    (libbalsa_address_book_ldap_set_enable_tls):
    * libbalsa/address-book-ldap.h:
    * src/address-book-config.c (create_ldap_dialog), (create_book),
    (modify_book):

 ChangeLog                    |  40 +++++
 libbalsa/address-book-ldap.c | 418 ++++++++++++++++++++++++++-----------------
 libbalsa/address-book-ldap.h |  58 +++---
 src/address-book-config.c    |  40 ++---
 4 files changed, 345 insertions(+), 211 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b7c76cc85..164dce433 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,43 @@
+2019-05-15  Peter Bloomfield  <pbloomfield bellsouth net>
+
+       Use G_DECLARE_FINAL_TYPE to declare LibBalsaAddressBookLdap
+
+       Make the structure private, and provide and use the necessary
+       getters and setters.
+
+       Adopt ab_ldap as the identifier.
+
+       * libbalsa/address-book-ldap.c
+       (libbalsa_address_book_ldap_class_init),
+       (libbalsa_address_book_ldap_init),
+       (libbalsa_address_book_ldap_finalize),
+       (libbalsa_address_book_ldap_new),
+       (libbalsa_address_book_ldap_close_connection), (abl_interaction),
+       (libbalsa_address_book_ldap_open_connection),
+       (libbalsa_address_book_ldap_load),
+       (libbalsa_address_book_ldap_get_address),
+       (libbalsa_address_book_ldap_add_address),
+       (libbalsa_address_book_ldap_remove_address),
+       (libbalsa_address_book_ldap_modify_address),
+       (libbalsa_address_book_ldap_save_config),
+       (libbalsa_address_book_ldap_load_config),
+       (libbalsa_address_book_ldap_alias_complete),
+       (libbalsa_address_book_ldap_get_host),
+       (libbalsa_address_book_ldap_get_base_dn),
+       (libbalsa_address_book_ldap_get_bind_dn),
+       (libbalsa_address_book_ldap_get_passwd),
+       (libbalsa_address_book_ldap_get_book_dn),
+       (libbalsa_address_book_ldap_get_enable_tls),
+       (libbalsa_address_book_ldap_set_host),
+       (libbalsa_address_book_ldap_set_base_dn),
+       (libbalsa_address_book_ldap_set_bind_dn),
+       (libbalsa_address_book_ldap_set_passwd),
+       (libbalsa_address_book_ldap_set_book_dn),
+       (libbalsa_address_book_ldap_set_enable_tls):
+       * libbalsa/address-book-ldap.h:
+       * src/address-book-config.c (create_ldap_dialog), (create_book),
+       (modify_book):
+
 2019-05-15  Peter Bloomfield  <pbloomfield bellsouth net>
 
        Use G_DECLARE_FINAL_TYPE to declare LibBalsaAddressBookGpe
diff --git a/libbalsa/address-book-ldap.c b/libbalsa/address-book-ldap.c
index 136861770..6a1305884 100644
--- a/libbalsa/address-book-ldap.c
+++ b/libbalsa/address-book-ldap.c
@@ -78,11 +78,8 @@ static char* complete_attrs[] = {
 };
 /* End of FIXME */
 
-static LibBalsaAddressBookClass *parent_class = NULL;
-
 static void
-libbalsa_address_book_ldap_class_init(LibBalsaAddressBookLdapClass *
-                                     klass);
+libbalsa_address_book_ldap_class_init(LibBalsaAddressBookLdapClass * klass);
 static void libbalsa_address_book_ldap_init(LibBalsaAddressBookLdap * ab);
 static void libbalsa_address_book_ldap_finalize(GObject * object);
 
@@ -120,31 +117,25 @@ libbalsa_address_book_ldap_get_address(LibBalsaAddressBook * ab,
 
 static gchar *create_name(gchar *, gchar *);
 
-GType libbalsa_address_book_ldap_get_type(void)
-{
-    static GType address_book_ldap_type = 0;
-
-    if (!address_book_ldap_type) {
-       static const GTypeInfo address_book_ldap_info = {
-           sizeof(LibBalsaAddressBookLdapClass),
-            NULL,               /* base_init */
-            NULL,               /* base_finalize */
-           (GClassInitFunc) libbalsa_address_book_ldap_class_init,
-            NULL,               /* class_finalize */
-            NULL,               /* class_data */
-           sizeof(LibBalsaAddressBookLdap),
-            0,                  /* n_preallocs */
-           (GInstanceInitFunc) libbalsa_address_book_ldap_init
-       };
-
-       address_book_ldap_type =
-            g_type_register_static(LIBBALSA_TYPE_ADDRESS_BOOK,
-                                  "LibBalsaAddressBookLdap",
-                                  &address_book_ldap_info, 0);
-    }
-
-    return address_book_ldap_type;
-}
+struct _LibBalsaAddressBookLdap {
+    LibBalsaAddressBook parent;
+
+    gchar *host;
+    gchar *base_dn;
+    gchar *bind_dn;
+    gchar *priv_book_dn; /* location of user-writeable entries */
+    gchar *passwd;
+    gboolean enable_tls;
+
+    LDAP *directory;
+};
+
+struct _LibBalsaAddressBookLdapClass {
+    LibBalsaAddressBookClass parent_class;
+};
+
+G_DEFINE_TYPE(LibBalsaAddressBookLdap, libbalsa_address_book_ldap,
+        LIBBALSA_TYPE_ADDRESS_BOOK)
 
 static void
 libbalsa_address_book_ldap_class_init(LibBalsaAddressBookLdapClass * klass)
@@ -152,8 +143,6 @@ libbalsa_address_book_ldap_class_init(LibBalsaAddressBookLdapClass * klass)
     LibBalsaAddressBookClass *address_book_class;
     GObjectClass *object_class;
 
-    parent_class = g_type_class_peek_parent(klass);
-
     object_class = G_OBJECT_CLASS(klass);
     address_book_class = LIBBALSA_ADDRESS_BOOK_CLASS(klass);
 
@@ -176,34 +165,34 @@ libbalsa_address_book_ldap_class_init(LibBalsaAddressBookLdapClass * klass)
 }
 
 static void
-libbalsa_address_book_ldap_init(LibBalsaAddressBookLdap * ab)
+libbalsa_address_book_ldap_init(LibBalsaAddressBookLdap * ab_ldap)
 {
-    ab->host = NULL;
-    ab->base_dn = NULL;
-    ab->bind_dn = NULL;
-    ab->priv_book_dn = NULL;
-    ab->passwd  = NULL;
-    ab->enable_tls = FALSE;
-    ab->directory = NULL;
-    libbalsa_address_book_set_is_expensive(LIBBALSA_ADDRESS_BOOK(ab), TRUE);
+    ab_ldap->host = NULL;
+    ab_ldap->base_dn = NULL;
+    ab_ldap->bind_dn = NULL;
+    ab_ldap->priv_book_dn = NULL;
+    ab_ldap->passwd  = NULL;
+    ab_ldap->enable_tls = FALSE;
+    ab_ldap->directory = NULL;
+    libbalsa_address_book_set_is_expensive(LIBBALSA_ADDRESS_BOOK(ab_ldap), TRUE);
 }
 
 static void
 libbalsa_address_book_ldap_finalize(GObject * object)
 {
-    LibBalsaAddressBookLdap *addr_ldap;
+    LibBalsaAddressBookLdap *ab_ldap;
 
-    addr_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(object);
+    ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(object);
 
-    libbalsa_address_book_ldap_close_connection(addr_ldap);
+    libbalsa_address_book_ldap_close_connection(ab_ldap);
 
-    g_free(addr_ldap->host);    addr_ldap->host = NULL;
-    g_free(addr_ldap->base_dn); addr_ldap->base_dn = NULL;
-    g_free(addr_ldap->bind_dn); addr_ldap->bind_dn = NULL;
-    g_free(addr_ldap->priv_book_dn); addr_ldap->priv_book_dn = NULL;
-    g_free(addr_ldap->passwd);  addr_ldap->passwd  = NULL;
+    g_free(ab_ldap->host);         ab_ldap->host = NULL;
+    g_free(ab_ldap->base_dn);      ab_ldap->base_dn = NULL;
+    g_free(ab_ldap->bind_dn);      ab_ldap->bind_dn = NULL;
+    g_free(ab_ldap->priv_book_dn); ab_ldap->priv_book_dn = NULL;
+    g_free(ab_ldap->passwd);       ab_ldap->passwd  = NULL;
 
-    G_OBJECT_CLASS(parent_class)->finalize(object);
+    G_OBJECT_CLASS(libbalsa_address_book_ldap_parent_class)->finalize(object);
 }
 
 LibBalsaAddressBook *
@@ -212,25 +201,25 @@ libbalsa_address_book_ldap_new(const gchar *name, const gchar *host,
                                const gchar *passwd, const gchar *priv_book_dn,
                                gboolean enable_tls)
 {
-    LibBalsaAddressBookLdap *ldap;
+    LibBalsaAddressBookLdap *ab_ldap;
     LibBalsaAddressBook *ab;
 
-    ldap =
+    ab_ldap =
         LIBBALSA_ADDRESS_BOOK_LDAP(g_object_new
                                    (LIBBALSA_TYPE_ADDRESS_BOOK_LDAP,
                                     NULL));
-    ab = LIBBALSA_ADDRESS_BOOK(ldap);
+    ab = LIBBALSA_ADDRESS_BOOK(ab_ldap);
 
     libbalsa_address_book_set_name(ab, name);
-    ldap->host = g_strdup(host);
-    ldap->base_dn = g_strdup(base_dn);
-    ldap->bind_dn = g_strdup(bind_dn);
-    ldap->priv_book_dn = g_strdup(priv_book_dn ? priv_book_dn : bind_dn);
-    ldap->passwd = g_strdup(passwd);
-    ldap->enable_tls = enable_tls;
+    ab_ldap->host = g_strdup(host);
+    ab_ldap->base_dn = g_strdup(base_dn);
+    ab_ldap->bind_dn = g_strdup(bind_dn);
+    ab_ldap->priv_book_dn = g_strdup(priv_book_dn ? priv_book_dn : bind_dn);
+    ab_ldap->passwd = g_strdup(passwd);
+    ab_ldap->enable_tls = enable_tls;
 
     /* We open on demand... */
-    ldap->directory = NULL;
+    ab_ldap->directory = NULL;
     return ab;
 }
 
@@ -238,11 +227,11 @@ libbalsa_address_book_ldap_new(const gchar *name, const gchar *host,
  * Close the ldap connection....
  */
 void
-libbalsa_address_book_ldap_close_connection(LibBalsaAddressBookLdap * ab)
+libbalsa_address_book_ldap_close_connection(LibBalsaAddressBookLdap * ab_ldap)
 {
-    if (ab->directory) {
-       ldap_unbind_ext(ab->directory, NULL, NULL);
-       ab->directory = NULL;
+    if (ab_ldap->directory) {
+       ldap_unbind_ext(ab_ldap->directory, NULL, NULL);
+       ab_ldap->directory = NULL;
     }
 }
 
@@ -253,7 +242,7 @@ libbalsa_address_book_ldap_close_connection(LibBalsaAddressBookLdap * ab)
 #ifdef HAVE_CYRUS_SASL
 static int
 abl_interaction(unsigned flags, sasl_interact_t *interact,
-                LibBalsaAddressBookLdap *ab)
+                LibBalsaAddressBookLdap *ab_ldap)
 {
     switch(interact->id) {
     case SASL_CB_PASS: break;
@@ -266,7 +255,7 @@ abl_interaction(unsigned flags, sasl_interact_t *interact,
         return LDAP_INAVAILABLE;
     }
 
-    interact->result = ab->passwd;;
+    interact->result = ab_ldap->passwd;;
     interact->len = interact->result ? strlen(interact->result) : 0;
     return LDAP_SUCCESS;
 }
@@ -292,52 +281,52 @@ int abl_interact(LDAP *ld, unsigned flags, void* defaults, void *interact )
 #endif
 
 static int
-libbalsa_address_book_ldap_open_connection(LibBalsaAddressBookLdap * ab)
+libbalsa_address_book_ldap_open_connection(LibBalsaAddressBookLdap * ab_ldap)
 {
     int result;
     static const int version = LDAP_VERSION3;
     gboolean v3_enabled;
-    LibBalsaAddressBook *lbab = LIBBALSA_ADDRESS_BOOK(ab);
+    LibBalsaAddressBook *ab = LIBBALSA_ADDRESS_BOOK(ab_ldap);
 
-    g_return_val_if_fail(ab->host != NULL, FALSE);
+    g_return_val_if_fail(ab_ldap->host != NULL, FALSE);
 
-    ldap_initialize(&ab->directory, ab->host);
-    if (ab->directory == NULL) { /* very unlikely... */
-        libbalsa_address_book_set_status(lbab, _("Host not found"));
+    ldap_initialize(&ab_ldap->directory, ab_ldap->host);
+    if (ab_ldap->directory == NULL) { /* very unlikely... */
+        libbalsa_address_book_set_status(ab, _("Host not found"));
        return LDAP_SERVER_DOWN;
     }
     /* ignore error if the V3 LDAP cannot be set */
     v3_enabled = 
-        ldap_set_option(ab->directory, LDAP_OPT_PROTOCOL_VERSION, &version)
+        ldap_set_option(ab_ldap->directory, LDAP_OPT_PROTOCOL_VERSION, &version)
        == LDAP_OPT_SUCCESS;
     if(!v3_enabled) printf("Too old LDAP server - interaction may fail.\n");
-    if(v3_enabled && ab->enable_tls) {
+    if(v3_enabled && ab_ldap->enable_tls) {
 #ifdef HAVE_LDAP_TLS
         /* turn TLS on  but what if we have SSL already on? */
-        result = ldap_start_tls_s(ab->directory, NULL, NULL);
+        result = ldap_start_tls_s(ab_ldap->directory, NULL, NULL);
         if(result != LDAP_SUCCESS) {
-            ldap_unbind_ext(ab->directory, NULL, NULL);
-            ab->directory = NULL;
-            libbalsa_address_book_set_status(lbab, ldap_err2string(result));
+            ldap_unbind_ext(ab_ldap->directory, NULL, NULL);
+            ab_ldap->directory = NULL;
+            libbalsa_address_book_set_status(ab, ldap_err2string(result));
             return result;
         }
 #else /* HAVE_LDAP_TLS */
-     libbalsa_address_book_set_status(lbab,
+     libbalsa_address_book_set_status(ab,
                                       _("TLS requested but not compiled in"));
      return LDAP_INAPPRIOPRIATE_AUTH;
 #endif /* HAVE_LDAP_TLS */
     }
 
 #ifdef HAVE_CYRUS_SASL
-    result = ldap_sasl_interactive_bind_s(ab->directory, ab->bind_dn, NULL,
+    result = ldap_sasl_interactive_bind_s(ab_ldap->directory, ab_ldap->bind_dn, NULL,
                                           NULL, NULL,
-                                          LDAP_SASL_QUIET, abl_interact, ab);
+                                          LDAP_SASL_QUIET, abl_interact, ab_ldap);
 #else /* HAVE_CYRUS_SASL */
     {
-     struct berval   cred;   
-     cred.bv_val = ab->passwd;
-     cred.bv_len = ab->passwd ? strlen(ab->passwd) : 0;
-     result = ldap_sasl_bind_s(ab->directory, ab->bind_dn, NULL, &cred,
+     struct berval   cred;
+     cred.bv_val = ab_ldap->passwd;
+     cred.bv_len = ab_ldap->passwd ? strlen(ab_ldap->passwd) : 0;
+     result = ldap_sasl_bind_s(ab_ldap->directory, ab_ldap->bind_dn, NULL, &cred,
                               NULL, NULL, NULL);
     }
 #endif /* HAVE_CYRUS_SASL */
@@ -345,12 +334,12 @@ libbalsa_address_book_ldap_open_connection(LibBalsaAddressBookLdap * ab)
     /* do not follow referrals (OpenLDAP binds anonymously here, which will usually
      * fail */
     if (result == LDAP_SUCCESS)
-       result = ldap_set_option(ab->directory, LDAP_OPT_REFERRALS, (void *)LDAP_OPT_OFF);
+       result = ldap_set_option(ab_ldap->directory, LDAP_OPT_REFERRALS, (void *)LDAP_OPT_OFF);
 
     if (result != LDAP_SUCCESS) {
-        libbalsa_address_book_set_status(lbab, ldap_err2string(result));
-       ldap_unbind_ext(ab->directory, NULL, NULL);
-       ab->directory = NULL;
+        libbalsa_address_book_set_status(ab, ldap_err2string(result));
+       ldap_unbind_ext(ab_ldap->directory, NULL, NULL);
+       ab_ldap->directory = NULL;
     }
     return result;
 }
@@ -366,7 +355,7 @@ libbalsa_address_book_ldap_load(LibBalsaAddressBook * ab,
                                 LibBalsaAddressBookLoadFunc callback,
                                 gpointer closure)
 {
-    LibBalsaAddressBookLdap *ldap_ab;
+    LibBalsaAddressBookLdap *ab_ldap;
     LibBalsaAddress *address;
     LDAPMessage *msg, *result;
     int msgid, rc, attempt;
@@ -377,13 +366,13 @@ libbalsa_address_book_ldap_load(LibBalsaAddressBook * ab,
     if (callback == NULL)
        return LBABERR_OK;
 
-    ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
     /*
      * Connect to the server.
      */
     for(attempt=0; attempt<2; attempt++) {
-        if (ldap_ab->directory == NULL) {
-            if ((rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+        if (ab_ldap->directory == NULL) {
+            if ((rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
                 != LDAP_SUCCESS)
                 return LBABERR_CANNOT_CONNECT;
         }
@@ -402,21 +391,21 @@ libbalsa_address_book_ldap_load(LibBalsaAddressBook * ab,
             : g_strdup("(&(objectClass=organizationalPerson)(mail=*))");
        if(DEBUG_LDAP)
            g_print("Send LDAP request: %s (basedn=%s)\n", ldap_filter,
-                   ldap_ab->base_dn);
-        if(ldap_search_ext(ldap_ab->directory, ldap_ab->base_dn,
+                   ab_ldap->base_dn);
+        if(ldap_search_ext(ab_ldap->directory, ab_ldap->base_dn,
                            LDAP_SCOPE_SUBTREE, 
                            ldap_filter, book_attrs, 0, NULL, NULL,
                            NULL, ABL_SIZE_LIMIT, &msgid) != LDAP_SUCCESS) {
-            libbalsa_address_book_ldap_close_connection(ldap_ab);
+            libbalsa_address_book_ldap_close_connection(ab_ldap);
             continue; /* try again */
         }
         /* 
          * Now loop over all the results, and spit out the output.
          */
         
-        while((rc=ldap_result(ldap_ab->directory, msgid, 
+        while((rc=ldap_result(ab_ldap->directory, msgid, 
                               LDAP_MSG_ONE, NULL, &result))>0) {
-            msg = ldap_first_entry(ldap_ab->directory, result);
+            msg = ldap_first_entry(ab_ldap->directory, result);
             if (!msg || ldap_msgtype( msg ) == LDAP_RES_SEARCH_RESULT)
                 break;
             address = libbalsa_address_book_ldap_get_address(ab, msg);
@@ -424,7 +413,7 @@ libbalsa_address_book_ldap_load(LibBalsaAddressBook * ab,
             g_object_unref(address);
         }
         if(rc == -1) { /* try again */
-            libbalsa_address_book_ldap_close_connection(ldap_ab);
+            libbalsa_address_book_ldap_close_connection(ab_ldap);
             continue;
        }
         callback(ab, NULL, closure);
@@ -445,7 +434,7 @@ static LibBalsaAddress*
 libbalsa_address_book_ldap_get_address(LibBalsaAddressBook * ab,
                                       LDAPMessage * e)
 {
-    LibBalsaAddressBookLdap *ldap_ab;
+    LibBalsaAddressBookLdap *ab_ldap;
     GList *email = NULL;
     gchar *cn = NULL, *org = NULL, *uid = NULL;
     gchar *first = NULL, *last = NULL;
@@ -455,14 +444,14 @@ libbalsa_address_book_ldap_get_address(LibBalsaAddressBook * ab,
     BerElement *ber = NULL;
     int i;
 
-    ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
 
-    for (attr = ldap_first_attribute(ldap_ab->directory, e, &ber);
-        attr != NULL; attr=ldap_next_attribute(ldap_ab->directory, e, ber)) {
+    for (attr = ldap_first_attribute(ab_ldap->directory, e, &ber);
+        attr != NULL; attr=ldap_next_attribute(ab_ldap->directory, e, ber)) {
        /*
         * For each attribute, get the attribute name and values.
         */
-       if ((vals=ldap_get_values_len(ldap_ab->directory, e, attr)) != NULL) {
+       if ((vals=ldap_get_values_len(ab_ldap->directory, e, attr)) != NULL) {
            for (i = 0; vals[i] != NULL; i++) {
                if ((g_ascii_strcasecmp(attr, "sn") == 0) && (!last))
                    last = g_strndup(vals[i]->bv_val, vals[i]->bv_len);
@@ -589,17 +578,17 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
     char *org[]  = {NULL, NULL};
     char *sn[]   = {NULL, NULL};
     char *mail[] = {NULL, NULL};
-    LibBalsaAddressBookLdap *ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    LibBalsaAddressBookLdap *ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
 
     g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
     g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
 
-    if (ldap_ab->directory == NULL) {
-        if(libbalsa_address_book_ldap_open_connection(ldap_ab) != LDAP_SUCCESS)
+    if (ab_ldap->directory == NULL) {
+        if(libbalsa_address_book_ldap_open_connection(ab_ldap) != LDAP_SUCCESS)
            return LBABERR_CANNOT_CONNECT;
     }
 
-    if(ldap_ab->priv_book_dn == NULL) {
+    if(ab_ldap->priv_book_dn == NULL) {
         libbalsa_address_book_set_status
             (ab, _("Undefined location of user address book"));
         return LBABERR_CANNOT_WRITE;
@@ -607,7 +596,7 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
 
     dn = g_strdup_printf("mail=%s,%s",
                          (char*)address->address_list->data,
-                         ldap_ab->priv_book_dn);
+                         ab_ldap->priv_book_dn);
     mods[0] = &modarr[0];
     modarr[0].mod_op = LDAP_MOD_ADD;
     modarr[0].mod_type = "objectClass";
@@ -639,7 +628,7 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
 
     cnt = 0;
     do {
-        int rc = ldap_add_ext_s(ldap_ab->directory, dn, mods, NULL, NULL);
+        int rc = ldap_add_ext_s(ab_ldap->directory, dn, mods, NULL, NULL);
         switch(rc) {
         case LDAP_SUCCESS: g_free(dn); return LBABERR_OK;
         case LDAP_ALREADY_EXISTS: 
@@ -647,8 +636,8 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
            libbalsa_address_book_set_status(ab, ldap_err2string(rc));
            return LBABERR_DUPLICATE;
         case LDAP_SERVER_DOWN:
-            libbalsa_address_book_ldap_close_connection(ldap_ab);
-        if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+            libbalsa_address_book_ldap_close_connection(ab_ldap);
+        if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
            != LDAP_SUCCESS) {
            g_free(dn);
            return LBABERR_CANNOT_CONNECT;
@@ -668,30 +657,30 @@ static LibBalsaABErr
 libbalsa_address_book_ldap_remove_address(LibBalsaAddressBook *ab,
                                           LibBalsaAddress *address)
 {
-    LibBalsaAddressBookLdap *ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    LibBalsaAddressBookLdap *ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
     gchar *dn;
     int cnt, rc;
 
     g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
     g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
 
-    if (ldap_ab->directory == NULL) {
-        if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+    if (ab_ldap->directory == NULL) {
+        if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
            != LDAP_SUCCESS)
            return LBABERR_CANNOT_CONNECT;
     }
 
     dn = g_strdup_printf("mail=%s,%s",
                          (char*)address->address_list->data,
-                         ldap_ab->priv_book_dn);
+                         ab_ldap->priv_book_dn);
     cnt = 0;
     do {
-        rc = ldap_delete_ext_s(ldap_ab->directory, dn, NULL, NULL);
+        rc = ldap_delete_ext_s(ab_ldap->directory, dn, NULL, NULL);
         switch(rc) {
         case LDAP_SUCCESS: g_free(dn); return LBABERR_OK;
         case LDAP_SERVER_DOWN:
-            libbalsa_address_book_ldap_close_connection(ldap_ab);
-           if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+            libbalsa_address_book_ldap_close_connection(ab_ldap);
+           if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
                != LDAP_SUCCESS) {
                 g_free(dn);
                return LBABERR_CANNOT_CONNECT;
@@ -725,7 +714,7 @@ libbalsa_address_book_ldap_modify_address(LibBalsaAddressBook *ab,
     char *gn[]   = {NULL, NULL};
     char *org[]  = {NULL, NULL};
     char *sn[]   = {NULL, NULL};
-    LibBalsaAddressBookLdap *ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    LibBalsaAddressBookLdap *ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
 
     g_return_val_if_fail(address, LBABERR_CANNOT_WRITE);
     g_return_val_if_fail(address->address_list, LBABERR_CANNOT_WRITE);
@@ -741,15 +730,15 @@ libbalsa_address_book_ldap_modify_address(LibBalsaAddressBook *ab,
     }
     /* the email address has not changed, continue with changing other 
      * attributes. */
-    if (ldap_ab->directory == NULL) {
-        if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+    if (ab_ldap->directory == NULL) {
+        if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
            != LDAP_SUCCESS)
            return LBABERR_CANNOT_CONNECT;
     }
 
     dn = g_strdup_printf("mail=%s,%s",
                          (char*)address->address_list->data,
-                         ldap_ab->priv_book_dn);
+                         ab_ldap->priv_book_dn);
     cnt = 0;
 
     if(!STREQ(address->full_name,newval->full_name)) {
@@ -797,12 +786,12 @@ libbalsa_address_book_ldap_modify_address(LibBalsaAddressBook *ab,
     }
     cnt = 0;
     do {
-        rc = ldap_modify_ext_s(ldap_ab->directory, dn, mods, NULL, NULL);
+        rc = ldap_modify_ext_s(ab_ldap->directory, dn, mods, NULL, NULL);
         switch(rc) {
         case LDAP_SUCCESS: return LBABERR_OK;
         case LDAP_SERVER_DOWN:
-            libbalsa_address_book_ldap_close_connection(ldap_ab);
-           if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+            libbalsa_address_book_ldap_close_connection(ab_ldap);
+           if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
                != LDAP_SUCCESS) {
                g_free(dn);
                return LBABERR_CANNOT_CONNECT;
@@ -822,52 +811,63 @@ static void
 libbalsa_address_book_ldap_save_config(LibBalsaAddressBook * ab,
                                       const gchar * prefix)
 {
-    LibBalsaAddressBookLdap *ldap;
+    LibBalsaAddressBookClass *parent_class =
+        LIBBALSA_ADDRESS_BOOK_CLASS(libbalsa_address_book_ldap_parent_class);
+    LibBalsaAddressBookLdap *ab_ldap;
 
     g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK_LDAP(ab));
 
-    ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
-
-    libbalsa_conf_set_string("Host", ldap->host);
-    if(ldap->base_dn) libbalsa_conf_set_string("BaseDN", ldap->base_dn);
-    if(ldap->bind_dn) libbalsa_conf_private_set_string("BindDN", ldap->bind_dn, FALSE);
-    if(ldap->passwd)  libbalsa_conf_private_set_string("Passwd", ldap->passwd, FALSE);
-    if(ldap->priv_book_dn)
-        libbalsa_conf_set_string("BookDN", ldap->priv_book_dn);
-    libbalsa_conf_set_bool("EnableTLS", ldap->enable_tls);
-    if (LIBBALSA_ADDRESS_BOOK_CLASS(parent_class)->save_config)
-       LIBBALSA_ADDRESS_BOOK_CLASS(parent_class)->save_config(ab, prefix);
+    ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+
+    libbalsa_conf_set_string("Host", ab_ldap->host);
+    if (ab_ldap->base_dn != NULL)
+        libbalsa_conf_set_string("BaseDN", ab_ldap->base_dn);
+    if (ab_ldap->bind_dn != NULL)
+        libbalsa_conf_private_set_string("BindDN", ab_ldap->bind_dn, FALSE);
+    if (ab_ldap->passwd != NULL)
+        libbalsa_conf_private_set_string("Passwd", ab_ldap->passwd, FALSE);
+    if (ab_ldap->priv_book_dn != NULL)
+        libbalsa_conf_set_string("BookDN", ab_ldap->priv_book_dn);
+    libbalsa_conf_set_bool("EnableTLS", ab_ldap->enable_tls);
+    if (parent_class->save_config != NULL)
+       parent_class->save_config(ab, prefix);
 }
 
 static void
 libbalsa_address_book_ldap_load_config(LibBalsaAddressBook * ab,
                                       const gchar * prefix)
 {
-    LibBalsaAddressBookLdap *ldap;
+    LibBalsaAddressBookClass *parent_class =
+        LIBBALSA_ADDRESS_BOOK_CLASS(libbalsa_address_book_ldap_parent_class);
+    LibBalsaAddressBookLdap *ab_ldap;
 
     g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK_LDAP(ab));
 
-    ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
 
-    ldap->host = libbalsa_conf_get_string("Host");
-    ldap->base_dn = libbalsa_conf_get_string("BaseDN");
-    if(ldap->base_dn && *ldap->base_dn == 0) { 
-       g_free(ldap->base_dn); ldap->base_dn = NULL; 
+    ab_ldap->host = libbalsa_conf_get_string("Host");
+    ab_ldap->base_dn = libbalsa_conf_get_string("BaseDN");
+    if (ab_ldap->base_dn != NULL && *ab_ldap->base_dn == '\0') {
+        g_free(ab_ldap->base_dn);
+        ab_ldap->base_dn = NULL;
     }
 
-    ldap->bind_dn = libbalsa_conf_private_get_string("BindDN", FALSE);
-    if(ldap->bind_dn && *ldap->bind_dn == 0) { 
-       g_free(ldap->bind_dn); ldap->bind_dn = NULL; 
+    ab_ldap->bind_dn = libbalsa_conf_private_get_string("BindDN", FALSE);
+    if (ab_ldap->bind_dn != NULL && *ab_ldap->bind_dn == '\0') {
+       g_free(ab_ldap->bind_dn);
+        ab_ldap->bind_dn = NULL;
     }
-    ldap->passwd = libbalsa_conf_private_get_string("Passwd", FALSE);
-    if(ldap->passwd && *ldap->passwd == 0) { 
-       g_free(ldap->passwd); ldap->passwd = NULL; 
+    ab_ldap->passwd = libbalsa_conf_private_get_string("Passwd", FALSE);
+    if (ab_ldap->passwd != NULL && *ab_ldap->passwd == '\0') {
+       g_free(ab_ldap->passwd);
+        ab_ldap->passwd = NULL;
     }
-    ldap->priv_book_dn = libbalsa_conf_get_string("BookDN");
-    if(ldap->priv_book_dn && *ldap->priv_book_dn == 0) { 
-       g_free(ldap->priv_book_dn); ldap->priv_book_dn = NULL; 
+    ab_ldap->priv_book_dn = libbalsa_conf_get_string("BookDN");
+    if (ab_ldap->priv_book_dn != NULL && *ab_ldap->priv_book_dn == '\0') {
+       g_free(ab_ldap->priv_book_dn);
+        ab_ldap->priv_book_dn = NULL;
     }
-    ldap->enable_tls = libbalsa_conf_get_bool("EnableTLS");
+    ab_ldap->enable_tls = libbalsa_conf_get_bool("EnableTLS");
 
     if (LIBBALSA_ADDRESS_BOOK_CLASS(parent_class)->load_config)
        LIBBALSA_ADDRESS_BOOK_CLASS(parent_class)->load_config(ab, prefix);
@@ -947,20 +947,20 @@ libbalsa_address_book_ldap_alias_complete(LibBalsaAddressBook * ab,
                                          const gchar * prefix)
 {
     static struct timeval timeout = { 15, 0 }; /* 15 sec timeout */
-    LibBalsaAddressBookLdap *ldap_ab;
+    LibBalsaAddressBookLdap *ab_ldap;
     GList *res = NULL;
     gchar* filter;
     gchar* ldap;
     int rc;
     LDAPMessage * e, *result;
 
-    ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+    ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
 
     if (!libbalsa_address_book_get_expand_aliases(ab) || strlen(prefix) < ABL_MIN_LEN)
         return NULL;
 
-    if (ldap_ab->directory == NULL) {
-        if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+    if (ab_ldap->directory == NULL) {
+        if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
            != LDAP_SUCCESS)
            return NULL;
     }
@@ -976,21 +976,21 @@ libbalsa_address_book_ldap_alias_complete(LibBalsaAddressBook * ab,
                             ldap, ldap, ldap);
     g_free(ldap);
     result = NULL;
-    rc = ldap_search_ext_s(ldap_ab->directory, ldap_ab->base_dn,
+    rc = ldap_search_ext_s(ab_ldap->directory, ab_ldap->base_dn,
                            LDAP_SCOPE_SUBTREE, filter, complete_attrs, 0, 
                            NULL, NULL, &timeout, ABL_SIZE_LIMIT_LOOKUP,
                            &result);
     if(DEBUG_LDAP)
         g_print("Sent LDAP request: %s (basedn=%s) res=0x%x\n", 
-                filter, ldap_ab->base_dn, rc);
+                filter, ab_ldap->base_dn, rc);
     g_free(filter);
     switch (rc) {
     case LDAP_SUCCESS:
     case LDAP_PARTIAL_RESULTS:
        if (result)
-           for(e = ldap_first_entry(ldap_ab->directory, result);
-               e != NULL; e = ldap_next_entry(ldap_ab->directory, e)) {
-               res = lbabl_get_internet_address(res, ldap_ab->directory, e);
+           for(e = ldap_first_entry(ab_ldap->directory, result);
+               e != NULL; e = ldap_next_entry(ab_ldap->directory, e)) {
+               res = lbabl_get_internet_address(res, ab_ldap->directory, e);
            }
     case LDAP_SIZELIMIT_EXCEEDED:
     case LDAP_TIMELIMIT_EXCEEDED:
@@ -1000,7 +1000,7 @@ libbalsa_address_book_ldap_alias_complete(LibBalsaAddressBook * ab,
         */
        break;
     case LDAP_SERVER_DOWN:
-        libbalsa_address_book_ldap_close_connection(ldap_ab);
+        libbalsa_address_book_ldap_close_connection(ab_ldap);
         g_print("Server down. Next attempt will try to reconnect.\n");
         break;
     default:
@@ -1019,4 +1019,96 @@ libbalsa_address_book_ldap_alias_complete(LibBalsaAddressBook * ab,
 
     return res;
 }
+
+/*
+ * Getters
+ */
+
+const gchar *
+libbalsa_address_book_ldap_get_host(LibBalsaAddressBookLdap * ab_ldap)
+{
+    return ab_ldap->host;
+}
+
+const gchar *
+libbalsa_address_book_ldap_get_base_dn(LibBalsaAddressBookLdap * ab_ldap)
+{
+    return ab_ldap->base_dn;
+}
+
+const gchar *
+libbalsa_address_book_ldap_get_bind_dn(LibBalsaAddressBookLdap * ab_ldap)
+{
+    return ab_ldap->bind_dn;
+}
+
+const gchar *
+libbalsa_address_book_ldap_get_passwd(LibBalsaAddressBookLdap * ab_ldap)
+{
+    return ab_ldap->passwd;
+}
+
+const gchar *
+libbalsa_address_book_ldap_get_book_dn(LibBalsaAddressBookLdap * ab_ldap)
+{
+    return ab_ldap->priv_book_dn;
+}
+
+gboolean
+libbalsa_address_book_ldap_get_enable_tls(LibBalsaAddressBookLdap * ab_ldap)
+{
+    return ab_ldap->enable_tls;
+}
+
+/*
+ * Setters
+ */
+
+void
+libbalsa_address_book_ldap_set_host(LibBalsaAddressBookLdap * ab_ldap,
+                                    const gchar             * host)
+{
+    g_free(ab_ldap->host);
+    ab_ldap->host = g_strdup(host);
+}
+
+void
+libbalsa_address_book_ldap_set_base_dn(LibBalsaAddressBookLdap * ab_ldap,
+                                       const gchar             * base_dn)
+{
+    g_free(ab_ldap->base_dn);
+    ab_ldap->base_dn = g_strdup(base_dn);
+}
+
+void
+libbalsa_address_book_ldap_set_bind_dn(LibBalsaAddressBookLdap * ab_ldap,
+                                       const gchar             * bind_dn)
+{
+    g_free(ab_ldap->bind_dn);
+    ab_ldap->bind_dn = g_strdup(bind_dn);
+}
+
+void
+libbalsa_address_book_ldap_set_passwd(LibBalsaAddressBookLdap * ab_ldap,
+                                      const gchar             * passwd)
+{
+    g_free(ab_ldap->passwd);
+    ab_ldap->passwd = g_strdup(passwd);
+}
+
+void
+libbalsa_address_book_ldap_set_book_dn(LibBalsaAddressBookLdap * ab_ldap,
+                                       const gchar             * book_dn)
+{
+    g_free(ab_ldap->priv_book_dn);
+    ab_ldap->priv_book_dn = g_strdup(book_dn);
+}
+
+void
+libbalsa_address_book_ldap_set_enable_tls(LibBalsaAddressBookLdap * ab_ldap,
+                                          gboolean                  enable_tls)
+{
+    ab_ldap->enable_tls = enable_tls;
+}
+
 #endif                         /*LDAP_ENABLED */
diff --git a/libbalsa/address-book-ldap.h b/libbalsa/address-book-ldap.h
index 62a68f48e..14ec4bd22 100644
--- a/libbalsa/address-book-ldap.h
+++ b/libbalsa/address-book-ldap.h
@@ -30,33 +30,9 @@
 
 #include "address-book.h"
 
-#define LIBBALSA_TYPE_ADDRESS_BOOK_LDAP                (libbalsa_address_book_ldap_get_type())
-#define LIBBALSA_ADDRESS_BOOK_LDAP(obj)                (G_TYPE_CHECK_INSTANCE_CAST(obj, 
LIBBALSA_TYPE_ADDRESS_BOOK_LDAP, LibBalsaAddressBookLdap))
-#define LIBBALSA_ADDRESS_BOOK_LDAP_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST (klass, 
LIBBALSA_TYPE_ADDRESS_BOOK_LDAP, LibBalsaAddressBookLdapClass))
-#define LIBBALSA_IS_ADDRESS_BOOK_LDAP(obj)             (G_TYPE_CHECK_INSTANCE_TYPE(obj, 
LIBBALSA_TYPE_ADDRESS_BOOK_LDAP))
-#define LIBBALSA_IS_ADDRESS_BOOK_LDAP_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE (klass, 
LIBBALSA_TYPE_ADDRESS_BOOK_LDAP))
-
-typedef struct _LibBalsaAddressBookLdap LibBalsaAddressBookLdap;
-typedef struct _LibBalsaAddressBookLdapClass LibBalsaAddressBookLdapClass;
-
-struct _LibBalsaAddressBookLdap {
-    LibBalsaAddressBook parent;
-
-    gchar *host;
-    gchar *base_dn;
-    gchar *bind_dn;
-    gchar *priv_book_dn; /* location of user-writeable entries */
-    gchar *passwd;
-    gboolean enable_tls;
-
-    LDAP *directory;
-};
-
-struct _LibBalsaAddressBookLdapClass {
-    LibBalsaAddressBookClass parent_class;
-};
-
-GType libbalsa_address_book_ldap_get_type(void);
+#define LIBBALSA_TYPE_ADDRESS_BOOK_LDAP (libbalsa_address_book_ldap_get_type())
+G_DECLARE_FINAL_TYPE(LibBalsaAddressBookLdap, libbalsa_address_book_ldap,
+        LIBBALSA, ADDRESS_BOOK_LDAP, LibBalsaAddressBook)
 
 LibBalsaAddressBook *libbalsa_address_book_ldap_new(const gchar *name,
                                                    const gchar *host,
@@ -65,7 +41,33 @@ LibBalsaAddressBook *libbalsa_address_book_ldap_new(const gchar *name,
                                                    const gchar *passwd,
                                                     const gchar *priv_book_dn,
                                                     gboolean enable_tls);
-void libbalsa_address_book_ldap_close_connection(LibBalsaAddressBookLdap *ab);
+void libbalsa_address_book_ldap_close_connection(LibBalsaAddressBookLdap *ab_ldap);
 
+/*
+ * Getters
+ */
+const gchar * libbalsa_address_book_ldap_get_host   (LibBalsaAddressBookLdap * ab_ldap);
+const gchar * libbalsa_address_book_ldap_get_passwd (LibBalsaAddressBookLdap * ab_ldap);
+const gchar * libbalsa_address_book_ldap_get_base_dn(LibBalsaAddressBookLdap * ab_ldap);
+const gchar * libbalsa_address_book_ldap_get_bind_dn(LibBalsaAddressBookLdap * ab_ldap);
+const gchar * libbalsa_address_book_ldap_get_book_dn(LibBalsaAddressBookLdap * ab_ldap);
+gboolean      libbalsa_address_book_ldap_get_enable_tls(LibBalsaAddressBookLdap *
+                                                        ab_ldap);
+
+/*
+ * Setters
+ */
+void libbalsa_address_book_ldap_set_host      (LibBalsaAddressBookLdap * ab_ldap,
+                                               const gchar             * host);
+void libbalsa_address_book_ldap_set_passwd    (LibBalsaAddressBookLdap * ab_ldap,
+                                               const gchar             * passwd);
+void libbalsa_address_book_ldap_set_base_dn   (LibBalsaAddressBookLdap * ab_ldap,
+                                               const gchar             * base_dn);
+void libbalsa_address_book_ldap_set_bind_dn   (LibBalsaAddressBookLdap * ab_ldap,
+                                               const gchar             * bind_dn);
+void libbalsa_address_book_ldap_set_book_dn   (LibBalsaAddressBookLdap * ab_ldap,
+                                               const gchar             * book_dn);
+void libbalsa_address_book_ldap_set_enable_tls(LibBalsaAddressBookLdap * ab_ldap,
+                                               gboolean                  enable_tls);
 
 #endif                         /* __LIBBALSA_ADDRESS_BOOK_LDAP_H__ */
diff --git a/src/address-book-config.c b/src/address-book-config.c
index 49ee8cbb9..6eb4f0818 100644
--- a/src/address-book-config.c
+++ b/src/address-book-config.c
@@ -50,7 +50,7 @@ struct _AddressBookConfig {
 
 #ifdef ENABLE_LDAP
        struct {
-           GtkWidget *host_name;
+           GtkWidget *host;
            GtkWidget *base_dn;
            GtkWidget *bind_dn;
            GtkWidget *book_dn;
@@ -501,34 +501,34 @@ create_ldap_dialog(AddressBookConfig * abc)
                                   label);
 
     label = libbalsa_create_grid_label(_("_Host Name"), grid, 1);
-    abc->ab_specific.ldap.host_name = 
+    abc->ab_specific.ldap.host = 
        libbalsa_create_grid_entry(grid, NULL, NULL, 1, 
-                    ab ? ab->host : host, label);
+                    ab ? libbalsa_address_book_ldap_get_host(ab) : host, label);
 
     label = libbalsa_create_grid_label(_("Base Domain _Name"), grid, 2);
     abc->ab_specific.ldap.base_dn = 
        libbalsa_create_grid_entry(grid, NULL, NULL, 2, 
-                    ab ? ab->base_dn : base, label);
+                    ab ? libbalsa_address_book_ldap_get_base_dn(ab) : base, label);
 
     label = libbalsa_create_grid_label(_("_User Name (Bind DN)"), grid, 3);
     abc->ab_specific.ldap.bind_dn = 
        libbalsa_create_grid_entry(grid, NULL, NULL, 3, 
-                    ab ? ab->bind_dn : "", label);
+                    ab ? libbalsa_address_book_ldap_get_bind_dn(ab) : "", label);
 
     label = libbalsa_create_grid_label(_("_Password"), grid, 4);
     abc->ab_specific.ldap.passwd = 
        libbalsa_create_grid_entry(grid, NULL, NULL, 4, 
-                    ab ? ab->passwd : "", label);
+                    ab ? libbalsa_address_book_ldap_get_passwd(ab) : "", label);
     gtk_entry_set_visibility(GTK_ENTRY(abc->ab_specific.ldap.passwd), FALSE);
 
     label = libbalsa_create_grid_label(_("_User Address Book DN"), grid, 5);
     abc->ab_specific.ldap.book_dn = 
        libbalsa_create_grid_entry(grid, NULL, NULL, 5,
-                    ab ? ab->priv_book_dn : "", label);
+                    ab ? libbalsa_address_book_ldap_get_book_dn(ab) : "", label);
 
     abc->ab_specific.ldap.enable_tls =
        libbalsa_create_grid_check(_("Enable _TLS"), grid, 6,
-                    ab ? ab->enable_tls : FALSE);
+                    ab ? libbalsa_address_book_ldap_get_enable_tls(ab) : FALSE);
 
     add_radio_buttons(grid, 7, abc);
 
@@ -724,8 +724,8 @@ create_book(AddressBookConfig * abc)
         g_free(path);
 #ifdef ENABLE_LDAP
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDAP) {
-        const gchar *host_name =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.host_name));
+        const gchar *host =
+            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.host));
         const gchar *base_dn =
             gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.base_dn));
         const gchar *bind_dn =
@@ -738,7 +738,7 @@ create_book(AddressBookConfig * abc)
             gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
                                          (abc->ab_specific.ldap.enable_tls));
         address_book =
-            libbalsa_address_book_ldap_new(name, host_name, base_dn,
+            libbalsa_address_book_ldap_new(name, host, base_dn,
                                            bind_dn, passwd, book_dn,
                                            enable_tls);
 #endif
@@ -815,8 +815,8 @@ modify_book(AddressBookConfig * abc)
 #ifdef ENABLE_LDAP
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDAP) {
         LibBalsaAddressBookLdap *ldap;
-        const gchar *host_name =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.host_name));
+        const gchar *host =
+            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.host));
         const gchar *base_dn =
             gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.base_dn));
         const gchar *bind_dn =
@@ -831,13 +831,13 @@ modify_book(AddressBookConfig * abc)
 
         ldap = LIBBALSA_ADDRESS_BOOK_LDAP(address_book);
 
-        g_free(ldap->host);     ldap->host = g_strdup(host_name);
-        g_free(ldap->base_dn);  ldap->base_dn = g_strdup(base_dn);
-        g_free(ldap->bind_dn);  ldap->bind_dn = g_strdup(bind_dn);
-        g_free(ldap->passwd);   ldap->passwd  = g_strdup(passwd);
-        g_free(ldap->priv_book_dn);
-        ldap->priv_book_dn = g_strdup(book_dn && *book_dn ? book_dn : bind_dn);
-        ldap->enable_tls = enable_tls;
+        libbalsa_address_book_ldap_set_host(ldap, host);
+        libbalsa_address_book_ldap_set_base_dn(ldap, base_dn);
+        libbalsa_address_book_ldap_set_bind_dn(ldap, bind_dn);
+        libbalsa_address_book_ldap_set_passwd(ldap, passwd);
+        libbalsa_address_book_ldap_set_book_dn(ldap,
+                                               book_dn && *book_dn ? book_dn : bind_dn);
+        libbalsa_address_book_ldap_set_enable_tls(ldap, enable_tls);
         libbalsa_address_book_ldap_close_connection(ldap);
 #endif
 #if HAVE_SQLITE



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]