diff options
Diffstat (limited to 'lib/ldaputil/vtable.c')
-rw-r--r-- | lib/ldaputil/vtable.c | 223 |
1 files changed, 1 insertions, 222 deletions
diff --git a/lib/ldaputil/vtable.c b/lib/ldaputil/vtable.c index 0ead6c11..18ac0a4d 100644 --- a/lib/ldaputil/vtable.c +++ b/lib/ldaputil/vtable.c @@ -42,187 +42,8 @@ #include "ldaputili.h" #include <ldap.h> -#ifdef USE_LDAP_SSL -#include <ldap_ssl.h> -#endif - -#if defined( _WINDOWS ) && ! defined( _WIN32 ) -/* On 16-bit WINDOWS platforms, it's erroneous to call LDAP API functions - * via a function pointer, since they are not declared LDAP_CALLBACK. - * So, we define the following functions, which are LDAP_CALLBACK, and - * simply delegate to their counterparts in the LDAP API. - */ - -#ifdef USE_LDAP_SSL -static LDAP_CALL LDAP_CALLBACK LDAP* -ldapuVd_ssl_init( const char *host, int port, int encrypted ) -{ - return ldapssl_init (host, port, encrypted); -} -#else -static LDAP_CALL LDAP_CALLBACK LDAP* -ldapuVd_init ( const char *host, int port ) -{ - return ldap_init (host, port); -} -#endif - -static LDAP_CALL LDAP_CALLBACK int -ldapuVd_set_option( LDAP *ld, int opt, const void *val ) -{ - return ldap_set_option (ld, opt, val); -} - -static LDAP_CALL LDAP_CALLBACK int -ldapuVd_simple_bind_s( LDAP* ld, const char *username, const char *passwd ) -{ - return ldap_simple_bind_s (ld, username, passwd); -} - -static LDAP_CALL LDAP_CALLBACK int -ldapuVd_unbind( LDAP *ld ) -{ - return ldap_unbind (ld); -} - -static LDAP_CALL LDAP_CALLBACK int -ldapuVd_search_s( LDAP* ld, const char* baseDN, int scope, const char* filter, - char** attrs, int attrsonly, LDAPMessage** result ) -{ - return ldap_search_s (ld, baseDN, scope, filter, attrs, attrsonly, result); -} - -static LDAP_CALL LDAP_CALLBACK int -ldapuVd_count_entries( LDAP* ld, LDAPMessage* msg ) -{ - return ldap_count_entries (ld, msg); -} - -static LDAP_CALL LDAP_CALLBACK LDAPMessage* -ldapuVd_first_entry( LDAP* ld, LDAPMessage* msg ) -{ - return ldap_first_entry (ld, msg); -} - -static LDAP_CALL LDAP_CALLBACK LDAPMessage* -ldapuVd_next_entry( LDAP* ld, LDAPMessage* entry ) -{ - return ldap_next_entry(ld, entry); -} - -static LDAP_CALL LDAP_CALLBACK char* -ldapuVd_get_dn( LDAP* ld, LDAPMessage* entry ) -{ - return ldap_get_dn (ld, entry); -} - -static LDAP_CALL LDAP_CALLBACK char* -ldapuVd_first_attribute( LDAP* ld, LDAPMessage* entry, BerElement** iter ) -{ - return ldap_first_attribute (ld, entry, iter); -} - -static LDAP_CALL LDAP_CALLBACK char* -ldapuVd_next_attribute( LDAP* ld, LDAPMessage* entry, BerElement* iter) -{ - return ldap_next_attribute (ld, entry, iter); -} - -static LDAP_CALL LDAP_CALLBACK char** -ldapuVd_get_values( LDAP *ld, LDAPMessage *entry, const char *desc ) -{ - return ldap_get_values (ld, entry, desc); -} - -static LDAP_CALL LDAP_CALLBACK struct berval** -ldapuVd_get_values_len( LDAP *ld, LDAPMessage *entry, const char *desc ) -{ - return ldap_get_values_len (ld, entry, desc); -} - -#else -/* On other platforms, an LDAP API function can be called via a pointer. */ -#ifdef USE_LDAP_SSL -#define ldapuVd_ssl_init ldapssl_init -#else -#define ldapuVd_init ldap_init -#endif -#define ldapuVd_set_option ldap_set_option -#define ldapuVd_simple_bind_s ldap_simple_bind_s -#define ldapuVd_unbind ldap_unbind -#define ldapuVd_simple_bind_s ldap_simple_bind_s -#define ldapuVd_unbind ldap_unbind -#define ldapuVd_search_s ldap_search_s -#define ldapuVd_count_entries ldap_count_entries -#define ldapuVd_first_entry ldap_first_entry -#define ldapuVd_next_entry ldap_next_entry -#define ldapuVd_get_dn ldap_get_dn -#define ldapuVd_first_attribute ldap_first_attribute -#define ldapuVd_next_attribute ldap_next_attribute -#define ldapuVd_get_values ldap_get_values -#define ldapuVd_get_values_len ldap_get_values_len - -#endif - -/* Several functions in the standard LDAP API have no LDAP* parameter, - but all the VTable functions do. Here are some little functions that - make up the difference, by ignoring their LDAP* parameter: -*/ -static int LDAP_CALL LDAP_CALLBACK -ldapuVd_msgfree( LDAP *ld, LDAPMessage *chain ) -{ - return ldap_msgfree (chain); -} - -static void LDAP_CALL LDAP_CALLBACK -ldapuVd_memfree( LDAP *ld, void *dn ) -{ - ldap_memfree (dn); -} - -static void LDAP_CALL LDAP_CALLBACK -ldapuVd_ber_free( LDAP *ld, BerElement *ber, int freebuf ) -{ - ldap_ber_free (ber, freebuf); -} - -static void LDAP_CALL LDAP_CALLBACK -ldapuVd_value_free( LDAP *ld, char **vals ) -{ - ldap_value_free (vals); -} -static void LDAP_CALL LDAP_CALLBACK -ldapuVd_value_free_len( LDAP *ld, struct berval **vals ) -{ - ldap_value_free_len (vals); -} - -static LDAPUVTable_t ldapu_VTable = { -/* By default, the VTable points to the standard LDAP API. */ -#ifdef USE_LDAP_SSL - ldapuVd_ssl_init, -#else - ldapuVd_init, -#endif - ldapuVd_set_option, - ldapuVd_simple_bind_s, - ldapuVd_unbind, - ldapuVd_search_s, - ldapuVd_count_entries, - ldapuVd_first_entry, - ldapuVd_next_entry, - ldapuVd_msgfree, - ldapuVd_get_dn, - ldapuVd_memfree, - ldapuVd_first_attribute, - ldapuVd_next_attribute, - ldapuVd_ber_free, - ldapuVd_get_values, - ldapuVd_value_free, - ldapuVd_get_values_len, - ldapuVd_value_free_len -}; +static LDAPUVTable_t ldapu_VTable = {}; /* Replace ldapu_VTable. Subsequently, ldaputil will call the functions in 'from' (not the LDAP API) to access the directory. @@ -235,26 +56,6 @@ ldapu_VTable_set (LDAPUVTable_t* from) } } -#ifdef USE_LDAP_SSL -LDAP* -ldapu_ssl_init( const char *defhost, int defport, int defsecure ) -{ - if (ldapu_VTable.ldapuV_ssl_init) { - return ldapu_VTable.ldapuV_ssl_init (defhost, defport, defsecure); - } - return NULL; -} -#else -LDAP* -ldapu_init( const char *defhost, int defport ) -{ - if (ldapu_VTable.ldapuV_init) { - return ldapu_VTable.ldapuV_init (defhost, defport); - } - return NULL; -} -#endif - int ldapu_set_option( LDAP *ld, int option, void *optdata ) { @@ -422,28 +223,6 @@ ldapu_get_values_len( LDAP *ld, LDAPMessage *entry, const char *desc ) { if (ldapu_VTable.ldapuV_get_values_len) { return ldapu_VTable.ldapuV_get_values_len (ld, entry, desc); - } else if (!ldapu_VTable.ldapuV_value_free_len - && ldapu_VTable.ldapuV_get_values) { - auto char** vals = - ldapu_VTable.ldapuV_get_values (ld, entry, desc); - if (vals) { - auto struct berval** bvals = (struct berval**) - ldapu_malloc ((ldap_count_values (vals) + 1) - * sizeof(struct berval*)); - if (bvals) { - auto char** val; - auto struct berval** bval; - for (val = vals, bval = bvals; *val; ++val, ++bval) { - auto const size_t len = strlen(*val); - *bval = (struct berval*) ldapu_malloc (sizeof(struct berval) + len); - (*bval)->bv_len = len; - (*bval)->bv_val = ((char*)(*bval)) + sizeof(struct berval); - memcpy ((*bval)->bv_val, *val, len); - } - *bval = NULL; - return bvals; - } - } } return NULL; } |