diff options
author | Rich Megginson <rmeggins@redhat.com> | 2009-07-06 12:11:01 -0600 |
---|---|---|
committer | Rich Megginson <rmeggins@redhat.com> | 2009-07-07 08:32:42 -0600 |
commit | 209521323f731daad54682fd98715f7b22c88c78 (patch) | |
tree | 74a1fa8df06641fe543c8518e4db4357ab610828 /ldap/servers/slapd/operation.c | |
parent | 3116dbec570b65d2d0a1df5bd000f6e63439e8ee (diff) | |
download | ds-209521323f731daad54682fd98715f7b22c88c78.tar.gz ds-209521323f731daad54682fd98715f7b22c88c78.tar.xz ds-209521323f731daad54682fd98715f7b22c88c78.zip |
OpenLDAP supportcleanup
These changes allow the server to be built with OpenLDAP (2.4.17+). A brief summary of the changes:
* #defines not provided by OpenLDAP were copied into slapi-plugin.h and protected with #ifndef blocks
* where it made sense, I created slapi wrapper functions for things like URL and LDIF processing to abstract way the differences in the APIs
* I created a new file utf8.c which contains the UTF8 functions from MozLDAP - this is only compiled when using OpenLDAP
* I tried to clean up the code - use the _ext versions of LDAP functions everywhere since the older versions should be considered deprecated
* I removed some unused code
NOTE that this should still be considered a work in progress since it depends on functionality not yet present in a released version of OpenLDAP, for NSS crypto and for the LDIF public API.
Diffstat (limited to 'ldap/servers/slapd/operation.c')
-rw-r--r-- | ldap/servers/slapd/operation.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ldap/servers/slapd/operation.c b/ldap/servers/slapd/operation.c index 85a19a45..510b257c 100644 --- a/ldap/servers/slapd/operation.c +++ b/ldap/servers/slapd/operation.c @@ -115,6 +115,43 @@ get_operation_object_type() return operation_type; } +#if defined(USE_OPENLDAP) +/* openldap doesn't have anything like this, nor does it have + a way to portably and without cheating discover the + sizeof BerElement - see lber_pvt.h for the trick used + for BerElementBuffer + so we just allocate everything separately + If we wanted to get fancy, we could use LBER_OPT_MEMORY_FNS + to override the ber malloc, realloc, etc. and use + LBER_OPT_BER_MEMCTX to provide callback data for use + with those functions +*/ +static void* +ber_special_alloc(size_t size, BerElement **ppBer) +{ + void *mem = NULL; + + /* starts out with a null buffer - will grow as needed */ + *ppBer = ber_alloc_t(0); + + /* Make sure mem size requested is aligned */ + if (0 != ( size & 0x03 )) { + size += (sizeof(ber_int_t) - (size & 0x03)); + } + + mem = slapi_ch_malloc(size); + + return mem; +} + +static void +ber_special_free(void* buf, BerElement *ber) +{ + ber_free(ber, 1); + slapi_ch_free(&buf); +} +#endif + /* * Allocate a new Slapi_Operation. * The flag parameter indicates whether the the operation is |