summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsimon.zheng <simon.zheng@sun.com>2006-06-12 12:34:15 +0000
committerSimon Zheng <simonz@src.gnome.org>2006-06-12 12:34:15 +0000
commitcd4bc38abd0c98b1a4d4a3e22955c9afdc5506d8 (patch)
tree6268563671029b3b92dcbaad1ebe546bcbefce4e
parent00c29ff882a661329c3c7dd78a2dfb2a95c9f931 (diff)
downloadevolution-data-server-cd4bc38abd0c98b1a4d4a3e22955c9afdc5506d8.tar.gz
Fix for #336453
2006-06-12 simon.zheng <simon.zheng@sun.com> Fix for #336453 * backends/ldap/e-book-backend-ldap.c: (e_book_backend_ldap_connect), (e_book_backend_ldap_class_init): * backends/ldap/openldap-extract.h: Add SunLDAP library support - a variant of Netscape LDAP.
-rw-r--r--addressbook/ChangeLog8
-rw-r--r--addressbook/backends/ldap/e-book-backend-ldap.c50
-rw-r--r--addressbook/backends/ldap/openldap-extract.h18
3 files changed, 73 insertions, 3 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 8893302c6..25c53857b 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,11 @@
+2006-06-12 simon.zheng <simon.zheng@sun.com>
+
+ Fix for #336453
+ * backends/ldap/e-book-backend-ldap.c:
+ (e_book_backend_ldap_connect), (e_book_backend_ldap_class_init):
+ * backends/ldap/openldap-extract.h:
+ Add SunLDAP library support - a variant of Netscape LDAP.
+
2006-06-12 Devashish Sharma <sdevashish@novell.com>
* addressbook/libebook/e-book.c : Fix for bug #342162.
diff --git a/addressbook/backends/ldap/e-book-backend-ldap.c b/addressbook/backends/ldap/e-book-backend-ldap.c
index a15260b95..b829b9e7f 100644
--- a/addressbook/backends/ldap/e-book-backend-ldap.c
+++ b/addressbook/backends/ldap/e-book-backend-ldap.c
@@ -63,8 +63,15 @@
#endif
#ifdef OPENLDAP2
+#ifndef SUNLDAP
#include <ldap_schema.h>
#endif
+#endif
+
+#ifdef SUNLDAP
+#include "openldap-extract.h"
+#endif
+
#endif
@@ -596,6 +603,8 @@ check_schema_support (EBookBackendLDAP *bl)
}
}
+
+#ifndef SUNLDAP
static void
get_ldap_library_info ()
{
@@ -634,6 +643,7 @@ get_ldap_library_info ()
ldap_unbind (ldap);
}
+#endif
static int
query_ldap_root_dse (EBookBackendLDAP *bl)
@@ -755,6 +765,7 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl)
int protocol_version = LDAP_VERSION3;
GTimeVal start, end;
unsigned long diff;
+ int ldap_flag = 0;
if (enable_debug) {
printf ("e_book_backend_ldap_connect ... \n");
@@ -766,6 +777,16 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl)
if (blpriv->ldap) {
ldap_unbind (blpriv->ldap);
}
+
+#ifdef SUNLDAP
+ if (bl->priv->use_tls != E_BOOK_BACKEND_LDAP_TLS_NO) {
+ char *evolution_dir_path =
+ g_build_path ("/", g_get_home_dir (), ".evolution", NULL);
+ ldap_flag = ldapssl_client_init (evolution_dir_path, NULL);
+ g_free (evolution_dir_path);
+ }
+#endif
+
blpriv->ldap = ldap_init (blpriv->ldap_host, blpriv->ldap_port);
#if defined (DEBUG) && defined (LDAP_OPT_DEBUG_LEVEL)
@@ -778,7 +799,7 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl)
int ldap_error;
ldap_error = ldap_set_option (blpriv->ldap, LDAP_OPT_PROTOCOL_VERSION, &protocol_version);
- if (LDAP_OPT_SUCCESS != ldap_error) {
+ if (LDAP_SUCCESS != ldap_error) {
g_warning ("failed to set protocol version to LDAPv3");
bl->priv->ldap_v3 = FALSE;
}
@@ -797,6 +818,17 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl)
}
if (bl->priv->ldap_port == LDAPS_PORT && bl->priv->use_tls == E_BOOK_BACKEND_LDAP_TLS_ALWAYS) {
+#ifdef SUNLDAP
+ if (ldap_flag >= 0) {
+ ldap_error = ldapssl_install_routines (blpriv->ldap);
+ } else
+ ldap_error = LDAP_NOT_SUPPORTED;
+
+ if (LDAP_SUCCESS == ldap_error) {
+ ldap_error = ldap_set_option (blpriv->ldap, LDAP_OPT_SSL, LDAP_OPT_ON );
+ ldap_set_option(blpriv->ldap, LDAP_OPT_RECONNECT, LDAP_OPT_ON );
+ }
+#else
#if defined (LDAP_OPT_X_TLS_HARD) && defined (LDAP_OPT_X_TLS)
tls_level = LDAP_OPT_X_TLS_HARD;
ldap_set_option (blpriv->ldap, LDAP_OPT_X_TLS, &tls_level);
@@ -806,9 +838,22 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl)
#else
g_message ("TLS option not available");
#endif
+#endif
}
else if (bl->priv->use_tls) {
+#ifdef SUNLDAP
+ if (ldap_flag >= 0) {
+ ldap_error = ldapssl_install_routines (blpriv->ldap);
+ } else
+ ldap_error = LDAP_NOT_SUPPORTED;
+
+ if (LDAP_SUCCESS == ldap_error) {
+ ldap_error = ldap_set_option (blpriv->ldap, LDAP_OPT_SSL, LDAP_OPT_ON );
+ ldap_set_option(blpriv->ldap, LDAP_OPT_RECONNECT, LDAP_OPT_ON );
+ }
+#else
ldap_error = ldap_start_tls_s (blpriv->ldap, NULL, NULL);
+#endif
if (LDAP_SUCCESS != ldap_error) {
if (bl->priv->use_tls == E_BOOK_BACKEND_LDAP_TLS_ALWAYS) {
g_message ("TLS not available (fatal version), (ldap_error 0x%02x)", ldap_error);
@@ -4876,9 +4921,10 @@ e_book_backend_ldap_class_init (EBookBackendLDAPClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
EBookBackendClass *parent_class;
+#ifndef SUNLDAP
/* get client side information (extensions present in the library) */
get_ldap_library_info ();
-
+#endif
e_book_backend_ldap_parent_class = g_type_class_peek_parent (klass);
parent_class = E_BOOK_BACKEND_CLASS (klass);
diff --git a/addressbook/backends/ldap/openldap-extract.h b/addressbook/backends/ldap/openldap-extract.h
index 25c47df65..eea0aa055 100644
--- a/addressbook/backends/ldap/openldap-extract.h
+++ b/addressbook/backends/ldap/openldap-extract.h
@@ -30,6 +30,19 @@
#include <string.h>
#include <assert.h>
+#ifdef SUNLDAP
+#include <ldap.h>
+#include <lber.h>
+
+/* copy from openldap Ldap-init.h */
+#define LBER_CALLOC(n,s) calloc((n),(s))
+#define LBER_REALLOC(p,s) realloc((p),(s))
+/* vfree is defined in openldap-extract.h */
+#define LBER_VFREE(v) vfree((void**)(v))
+#define LBER_FREE(p) free((p))
+#define LDAP_OPT_SSL 10
+#endif
+
/* from various header files */
#define LDAP_CONST const
@@ -54,8 +67,10 @@
#define LDAP_RANGE(n,x,y) (((x) <= (n)) && ((n) <= (y)))
#define LDAP_NAME_ERROR(n) LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */
+#ifdef G_OS_WIN32
#define ldap_msgtype(lm) (lm)->lm_msgtype
#define ldap_msgid(lm) (lm)->lm_msgid
+#endif
#define LDAP_SCHERR_OUTOFMEM 1
#define LDAP_SCHERR_UNEXPTOKEN 2
@@ -735,6 +750,7 @@ ldap_str2objectclass( LDAP_CONST char * s,
}
}
+#ifdef G_OS_WIN32
/* from utf-8.c */
#define LDAP_UTF8_NEXT(p) g_utf8_next_char((p))
@@ -1424,4 +1440,4 @@ ldap_url_parse( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
return rc;
}
-
+#endif