diff options
author | simon.zheng <simon.zheng@sun.com> | 2006-06-12 12:34:15 +0000 |
---|---|---|
committer | Simon Zheng <simonz@src.gnome.org> | 2006-06-12 12:34:15 +0000 |
commit | cd4bc38abd0c98b1a4d4a3e22955c9afdc5506d8 (patch) | |
tree | 6268563671029b3b92dcbaad1ebe546bcbefce4e | |
parent | 00c29ff882a661329c3c7dd78a2dfb2a95c9f931 (diff) | |
download | evolution-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/ChangeLog | 8 | ||||
-rw-r--r-- | addressbook/backends/ldap/e-book-backend-ldap.c | 50 | ||||
-rw-r--r-- | addressbook/backends/ldap/openldap-extract.h | 18 |
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 |