[balsa/wip/gtk4: 175/351] address-book-ldap: Declare it final
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 175/351] address-book-ldap: Declare it final
- Date: Wed, 23 May 2018 21:31:39 +0000 (UTC)
commit 1c876506c5c03dd4eb693b22ca03f58bfeec15c1
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Wed Feb 14 19:02:03 2018 -0500
address-book-ldap: Declare it final
Use G_DECLARE_FINAL_TYPE for LibBalsaAddressBookLdap, take all members
private, and provide getters and setters.
libbalsa/address-book-ldap.c | 341 ++++++++++++++++++++++++++----------------
libbalsa/address-book-ldap.h | 56 ++++----
src/address-book-config.c | 40 +++---
3 files changed, 261 insertions(+), 176 deletions(-)
---
diff --git a/libbalsa/address-book-ldap.c b/libbalsa/address-book-ldap.c
index b836d10..b9af368 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);
- }
+struct _LibBalsaAddressBookLdap {
+ LibBalsaAddressBook parent;
- return address_book_ldap_type;
-}
+ 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);
@@ -185,7 +174,7 @@ libbalsa_address_book_ldap_init(LibBalsaAddressBookLdap * ab)
ab->passwd = NULL;
ab->enable_tls = FALSE;
ab->directory = NULL;
- LIBBALSA_ADDRESS_BOOK(ab)->is_expensive = TRUE;
+ libbalsa_address_book_set_is_expensive(LIBBALSA_ADDRESS_BOOK(ab), TRUE);
}
static void
@@ -203,7 +192,7 @@ libbalsa_address_book_ldap_finalize(GObject * object)
g_free(addr_ldap->priv_book_dn);
g_free(addr_ldap->passwd);
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(libbalsa_address_book_ldap_parent_class)->finalize(object);
}
LibBalsaAddressBook *
@@ -212,25 +201,26 @@ 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);
- ab->name = g_strdup(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;
+ libbalsa_address_book_set_name(ab, name);
+ 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 +228,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 +243,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 +256,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,53 +282,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, g_strdup("Host not found"));
+ ldap_initialize(&ab_ldap->directory, ab_ldap->host);
+ if (ab_ldap->directory == NULL) { /* very unlikely... */
+ libbalsa_address_book_set_status(ab, g_strdup("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)
+ v3_enabled =
+ 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, g_strdup(ldap_err2string(result)));
+ ldap_unbind_ext(ab_ldap->directory, NULL, NULL);
+ ab_ldap->directory = NULL;
+ libbalsa_address_book_set_status(ab, g_strdup(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 */
@@ -346,13 +335,13 @@ 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,
+ libbalsa_address_book_set_status(ab,
g_strdup(ldap_err2string(result)));
- ldap_unbind_ext(ab->directory, NULL, NULL);
- ab->directory = NULL;
+ ldap_unbind_ext(ab_ldap->directory, NULL, NULL);
+ ab_ldap->directory = NULL;
}
return result;
}
@@ -368,7 +357,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;
@@ -379,13 +368,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;
}
@@ -404,21 +393,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);
@@ -426,7 +415,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);
@@ -447,7 +436,7 @@ static LibBalsaAddress*
libbalsa_address_book_ldap_get_address(LibBalsaAddressBook * ab,
LDAPMessage * e)
{
- LibBalsaAddressBookLdap *ldap_ab;
+ LibBalsaAddressBookLdap *ab_ldap;
gchar *email = NULL, *cn = NULL, *org = NULL, *uid = NULL;
gchar *first = NULL, *last = NULL;
LibBalsaAddress *address = NULL;
@@ -456,14 +445,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);
@@ -591,17 +580,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;
@@ -609,7 +598,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";
@@ -641,7 +630,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:
@@ -650,8 +639,8 @@ libbalsa_address_book_ldap_add_address(LibBalsaAddressBook *ab,
g_strdup(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;
@@ -671,30 +660,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;
@@ -729,7 +718,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);
@@ -745,15 +734,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)) {
@@ -801,12 +790,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;
@@ -827,6 +816,8 @@ static void
libbalsa_address_book_ldap_save_config(LibBalsaAddressBook * ab,
const gchar * prefix)
{
+ LibBalsaAddressBookClass *parent_class =
+ LIBBALSA_ADDRESS_BOOK_CLASS(libbalsa_address_book_ldap_parent_class);
LibBalsaAddressBookLdap *ldap;
g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK_LDAP(ab));
@@ -840,14 +831,16 @@ libbalsa_address_book_ldap_save_config(LibBalsaAddressBook * ab,
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);
+ 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)
{
+ LibBalsaAddressBookClass *parent_class =
+ LIBBALSA_ADDRESS_BOOK_CLASS(libbalsa_address_book_ldap_parent_class);
LibBalsaAddressBookLdap *ldap;
g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK_LDAP(ab));
@@ -874,11 +867,8 @@ libbalsa_address_book_ldap_load_config(LibBalsaAddressBook * 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);
-
- if (ab->is_expensive < 0)
- ab->is_expensive = TRUE;
+ if (parent_class->load_config != NULL)
+ parent_class->load_config(ab, prefix);
}
@@ -952,7 +942,7 @@ 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;
InternetAddress *addr;
GList *res = NULL;
gchar* filter;
@@ -962,11 +952,12 @@ libbalsa_address_book_ldap_alias_complete(LibBalsaAddressBook * ab,
g_return_val_if_fail ( LIBBALSA_ADDRESS_BOOK_LDAP(ab), NULL);
- ldap_ab = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
+ ab_ldap = LIBBALSA_ADDRESS_BOOK_LDAP(ab);
- if (!ab->expand_aliases || strlen(prefix)<ABL_MIN_LEN) return NULL;
- if (ldap_ab->directory == NULL) {
- if( (rc=libbalsa_address_book_ldap_open_connection(ldap_ab))
+ if (!libbalsa_address_book_get_expand_aliases(ab) || strlen(prefix)<ABL_MIN_LEN)
+ return NULL;
+ if (ab_ldap->directory == NULL) {
+ if( (rc=libbalsa_address_book_ldap_open_connection(ab_ldap))
!= LDAP_SUCCESS)
return NULL;
}
@@ -982,21 +973,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)) {
- addr = lbabl_get_internet_address(ldap_ab->directory, e);
+ for(e = ldap_first_entry(ab_ldap->directory, result);
+ e != NULL; e = ldap_next_entry(ab_ldap->directory, e)) {
+ addr = lbabl_get_internet_address(ab_ldap->directory, e);
res = g_list_prepend(res, addr);
}
case LDAP_SIZELIMIT_EXCEEDED:
@@ -1007,7 +998,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:
@@ -1026,4 +1017,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 62a68f4..3481968 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,
@@ -67,5 +43,31 @@ LibBalsaAddressBook *libbalsa_address_book_ldap_new(const gchar *name,
gboolean enable_tls);
void libbalsa_address_book_ldap_close_connection(LibBalsaAddressBookLdap *ab);
+/*
+ * 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 2797891..913385a 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;
@@ -499,34 +499,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);
@@ -717,8 +717,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 =
@@ -731,7 +731,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
@@ -813,8 +813,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 =
@@ -829,13 +829,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]