summaryrefslogtreecommitdiffstats
path: root/ldap/servers/plugins/replication
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/plugins/replication')
-rw-r--r--ldap/servers/plugins/replication/cl5_api.c86
-rw-r--r--ldap/servers/plugins/replication/repl5_connection.c97
-rw-r--r--ldap/servers/plugins/replication/repl5_replica.c6
-rw-r--r--ldap/servers/plugins/replication/repl5_total.c2
-rw-r--r--ldap/servers/plugins/replication/replutil.c10
-rw-r--r--ldap/servers/plugins/replication/urp_glue.c2
-rw-r--r--ldap/servers/plugins/replication/windows_connection.c37
7 files changed, 171 insertions, 69 deletions
diff --git a/ldap/servers/plugins/replication/cl5_api.c b/ldap/servers/plugins/replication/cl5_api.c
index b0c9f4e7..dfc5765d 100644
--- a/ldap/servers/plugins/replication/cl5_api.c
+++ b/ldap/servers/plugins/replication/cl5_api.c
@@ -1308,9 +1308,14 @@ done:;
*/
int cl5ImportLDIF (const char *clDir, const char *ldifFile, Object **replicas)
{
- FILE *file;
+#if defined(USE_OPENLDAP)
+ LDIFFP *file = NULL;
+ int buflen;
+#else
+ FILE *file = NULL;
+#endif
int rc;
- char *buff;
+ char *buff = NULL;
int lineno = 0;
slapi_operation_parameters op;
Object *replica = NULL;
@@ -1345,7 +1350,11 @@ int cl5ImportLDIF (const char *clDir, const char *ldifFile, Object **replicas)
}
/* open LDIF file */
+#if defined(USE_OPENLDAP)
+ file = ldif_open (ldifFile, "r");
+#else
file = fopen (ldifFile, "r"); /* XXXggood Does fopen reliably work if > 255 files open? */
+#endif
if (file == NULL)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -1374,10 +1383,14 @@ int cl5ImportLDIF (const char *clDir, const char *ldifFile, Object **replicas)
}
/* read entries and write them to changelog */
+#if defined(USE_OPENLDAP)
+ while (ldif_read_record( file, &lineno, &buff, &buflen ))
+#else
while ((buff = ldif_get_entry( file, &lineno )) != NULL)
+#endif
{
rc = _cl5LDIF2Operation (buff, &op, &replGen);
- slapi_ch_free ((void**)&buff);
+ slapi_ch_free_string(&buff);
if (rc != CL5_SUCCESS)
{
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
@@ -1394,7 +1407,7 @@ int cl5ImportLDIF (const char *clDir, const char *ldifFile, Object **replicas)
"cl5ImportLDIF: failed to locate replica for target dn (%s) and "
"replica generation %s\n", op.target_address.dn, replGen);
- slapi_ch_free ((void**)&replGen);
+ slapi_ch_free_string(&replGen);
operation_parameters_done (&op);
goto done;
}
@@ -1409,18 +1422,25 @@ int cl5ImportLDIF (const char *clDir, const char *ldifFile, Object **replicas)
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name_cl,
"cl5ImportLDIF: failed to write operation to the changelog\n");
object_release (replica);
- slapi_ch_free ((void**)&replGen);
+ slapi_ch_free_string(&replGen);
operation_parameters_done (&op);
goto done;
}
}
object_release (replica);
- slapi_ch_free ((void**)&replGen);
+ slapi_ch_free_string(&replGen);
operation_parameters_done (&op);
}
done:;
+ if (file) {
+#if defined(USE_OPENLDAP)
+ ldif_close(file);
+#else
+ fclose(file);
+#endif
+ }
_cl5Close ();
PR_RWLock_Unlock (s_cl5Desc.stLock);
return rc;
@@ -5041,46 +5061,46 @@ static int _cl5Operation2LDIF (const slapi_operation_parameters *op, const char
}
/* fill buffer */
- ldif_put_type_and_value(&buff, T_CHANGETYPESTR, (char*)strType, strlen (strType));
- ldif_put_type_and_value(&buff, T_REPLGEN, (char*)replGen, strlen (replGen));
- ldif_put_type_and_value(&buff, T_CSNSTR, (char*)strCSN, strlen (strCSN));
- ldif_put_type_and_value(&buff, T_UNIQUEIDSTR, op->target_address.uniqueid,
- strlen (op->target_address.uniqueid));
+ slapi_ldif_put_type_and_value_with_options(&buff, T_CHANGETYPESTR, (char*)strType, strlen (strType), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_REPLGEN, (char*)replGen, strlen (replGen), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_CSNSTR, (char*)strCSN, strlen (strCSN), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_UNIQUEIDSTR, op->target_address.uniqueid,
+ strlen (op->target_address.uniqueid), 0);
switch (op->operation_type)
{
case SLAPI_OPERATION_ADD: if (op->p.p_add.parentuniqueid)
- ldif_put_type_and_value(&buff, T_PARENTIDSTR,
- op->p.p_add.parentuniqueid, strlen (op->p.p_add.parentuniqueid));
- ldif_put_type_and_value(&buff, T_DNSTR, rawDN, strlen (rawDN));
- ldif_put_type_and_value(&buff, T_CHANGESTR, l->ls_buf, l->ls_len);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_PARENTIDSTR,
+ op->p.p_add.parentuniqueid, strlen (op->p.p_add.parentuniqueid), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_DNSTR, rawDN, strlen (rawDN), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_CHANGESTR, l->ls_buf, l->ls_len, 0);
slapi_ch_free ((void**)&rawDN);
break;
- case SLAPI_OPERATION_MODIFY: ldif_put_type_and_value(&buff, T_DNSTR, op->target_address.dn,
- strlen (op->target_address.dn));
- ldif_put_type_and_value(&buff, T_CHANGESTR, l->ls_buf, l->ls_len);
+ case SLAPI_OPERATION_MODIFY: slapi_ldif_put_type_and_value_with_options(&buff, T_DNSTR, op->target_address.dn,
+ strlen (op->target_address.dn), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_CHANGESTR, l->ls_buf, l->ls_len, 0);
break;
- case SLAPI_OPERATION_MODRDN: ldif_put_type_and_value(&buff, T_DNSTR, op->target_address.dn,
- strlen (op->target_address.dn));
- ldif_put_type_and_value(&buff, T_NEWRDNSTR, op->p.p_modrdn.modrdn_newrdn,
- strlen (op->p.p_modrdn.modrdn_newrdn));
- ldif_put_type_and_value(&buff, T_DRDNFLAGSTR, strDeleteOldRDN,
- strlen (strDeleteOldRDN));
+ case SLAPI_OPERATION_MODRDN: slapi_ldif_put_type_and_value_with_options(&buff, T_DNSTR, op->target_address.dn,
+ strlen (op->target_address.dn), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_NEWRDNSTR, op->p.p_modrdn.modrdn_newrdn,
+ strlen (op->p.p_modrdn.modrdn_newrdn), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_DRDNFLAGSTR, strDeleteOldRDN,
+ strlen (strDeleteOldRDN), 0);
if (op->p.p_modrdn.modrdn_newsuperior_address.dn)
- ldif_put_type_and_value(&buff, T_NEWSUPERIORDNSTR,
+ slapi_ldif_put_type_and_value_with_options(&buff, T_NEWSUPERIORDNSTR,
op->p.p_modrdn.modrdn_newsuperior_address.dn,
- strlen (op->p.p_modrdn.modrdn_newsuperior_address.dn));
+ strlen (op->p.p_modrdn.modrdn_newsuperior_address.dn), 0);
if (op->p.p_modrdn.modrdn_newsuperior_address.uniqueid)
- ldif_put_type_and_value(&buff, T_NEWSUPERIORIDSTR,
+ slapi_ldif_put_type_and_value_with_options(&buff, T_NEWSUPERIORIDSTR,
op->p.p_modrdn.modrdn_newsuperior_address.uniqueid,
- strlen (op->p.p_modrdn.modrdn_newsuperior_address.uniqueid));
- ldif_put_type_and_value(&buff, T_CHANGESTR, l->ls_buf, l->ls_len);
+ strlen (op->p.p_modrdn.modrdn_newsuperior_address.uniqueid), 0);
+ slapi_ldif_put_type_and_value_with_options(&buff, T_CHANGESTR, l->ls_buf, l->ls_len, 0);
break;
- case SLAPI_OPERATION_DELETE: ldif_put_type_and_value(&buff, T_DNSTR, op->target_address.dn,
- strlen (op->target_address.dn));
+ case SLAPI_OPERATION_DELETE: slapi_ldif_put_type_and_value_with_options(&buff, T_DNSTR, op->target_address.dn,
+ strlen (op->target_address.dn), 0);
break;
}
@@ -5101,7 +5121,11 @@ static int
_cl5LDIF2Operation (char *ldifEntry, slapi_operation_parameters *op, char **replGen)
{
int rc;
+#if defined(USE_OPENLDAP)
+ ber_len_t vlen;
+#else
int vlen;
+#endif
char *next, *line;
char *type, *value;
Slapi_Mods *mods;
diff --git a/ldap/servers/plugins/replication/repl5_connection.c b/ldap/servers/plugins/replication/repl5_connection.c
index 5a171cb5..47d07be4 100644
--- a/ldap/servers/plugins/replication/repl5_connection.c
+++ b/ldap/servers/plugins/replication/repl5_connection.c
@@ -52,8 +52,14 @@ replica locked. Seems like right thing to do.
*/
#include "repl5.h"
+#if defined(USE_OPENLDAP)
+#include "ldap.h"
+#else
#include "ldappr.h"
#include "ldap-extension.h"
+#endif
+#include "nspr.h"
+#include "private/pprio.h"
#include "nss.h"
typedef struct repl_connection
@@ -365,7 +371,7 @@ conn_read_result_ex(Repl_Connection *conn, char **retoidp, struct berval **retda
if (0 == rc)
{
/* Timeout */
- rc = ldap_get_lderrno(conn->ld, NULL, NULL);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, NULL);
conn->last_ldap_error = LDAP_TIMEOUT;
return_value = CONN_TIMEOUT;
}
@@ -383,7 +389,7 @@ conn_read_result_ex(Repl_Connection *conn, char **retoidp, struct berval **retda
/* Error */
char *s = NULL;
- rc = ldap_get_lderrno(conn->ld, NULL, &s);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, &s);
conn->last_ldap_errmsg = s;
conn->last_ldap_error = rc;
/* some errors will require a disconnect and retry the connection
@@ -485,6 +491,61 @@ conn_read_result(Repl_Connection *conn, int *message_id)
* on the same connection), we need to _first_ verify that the connection
* is writable. If it isn't, we can deadlock if we proceed any further...
*/
+#if defined(USE_OPENLDAP)
+/* openldap has LBER_SB_OPT_DATA_READY but that doesn't really
+ work for our purposes - so we grab the openldap fd from the
+ ber sockbuf layer, import it into a PR Poll FD, then
+ do the poll
+*/
+static ConnResult
+see_if_write_available(Repl_Connection *conn, PRIntervalTime timeout)
+{
+ PRFileDesc *pollfd = NULL;
+ PRPollDesc polldesc;
+ ber_socket_t fd = 0;
+ int rc;
+
+ /* get the sockbuf */
+ ldap_get_option(conn->ld, LDAP_OPT_DESC, &fd);
+ if (fd <= 0) {
+ slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
+ "%s: invalid connection insee_if_write_available \n",
+ agmt_get_long_name(conn->agmt));
+ conn->last_ldap_error = LDAP_PARAM_ERROR;
+ return CONN_OPERATION_FAILED;
+ }
+ /* wrap the sockbuf fd with a NSPR FD created especially
+ for use with polling, and only with polling */
+ pollfd = PR_CreateSocketPollFd(fd);
+ polldesc.fd = pollfd;
+ polldesc.in_flags = PR_POLL_WRITE|PR_POLL_EXCEPT;
+ polldesc.out_flags = 0;
+
+ /* do the poll */
+ rc = PR_Poll(&polldesc, 1, timeout);
+
+ /* unwrap the socket */
+ PR_DestroySocketPollFd(pollfd);
+
+ /* check */
+ if (rc == 0) { /* timeout */
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name,
+ "%s: poll timed out - poll interval [%d]\n",
+ agmt_get_long_name(conn->agmt),
+ timeout);
+ return CONN_TIMEOUT;
+ } else if ((rc < 0) || ((polldesc.out_flags|PR_POLL_WRITE) == 0)) { /* error */
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name,
+ "%s: error during poll attempt [%d:%s]\n",
+ agmt_get_long_name(conn->agmt),
+ PR_GetError(), slapd_pr_strerror(PR_GetError()));
+ conn->last_ldap_error = LDAP_PARAM_ERROR;
+ return CONN_OPERATION_FAILED;
+ }
+
+ return CONN_OPERATION_SUCCESS;
+}
+#else /* ! USE_OPENLDAP */
/* Since we're poking around with ldap c sdk internals, we have to
be careful since the PR layer stores different session and socket
info than the NSS SSL layer than the SASL layer - and they all
@@ -504,7 +565,7 @@ see_if_write_available(Repl_Connection *conn, PRIntervalTime timeout)
memset(&iofns, 0, sizeof(iofns));
iofns.lextiof_size = LDAP_X_EXTIO_FNS_SIZE;
if (ldap_get_option(conn->ld, LDAP_X_OPT_EXTIO_FN_PTRS, &iofns) < 0) {
- rc = ldap_get_lderrno(conn->ld, NULL, NULL);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, NULL);
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
"%s: Failed call to ldap_get_option to get extiofns in "
"see_if_write_available: LDAP error %d (%s)\n",
@@ -517,7 +578,7 @@ see_if_write_available(Repl_Connection *conn, PRIntervalTime timeout)
/* set up the poll structure */
if (ldap_get_option(conn->ld, LDAP_OPT_DESC, &pollstr.lpoll_fd) < 0) {
- rc = ldap_get_lderrno(conn->ld, NULL, NULL);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, NULL);
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
"%s: Failed call to ldap_get_option for poll_fd in "
"see_if_write_available: LDAP error %d (%s)\n",
@@ -529,7 +590,7 @@ see_if_write_available(Repl_Connection *conn, PRIntervalTime timeout)
if (ldap_get_option(conn->ld, LDAP_X_OPT_SOCKETARG,
&pollstr.lpoll_socketarg) < 0) {
- rc = ldap_get_lderrno(conn->ld, NULL, NULL);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, NULL);
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
"%s: Failed call to ldap_get_option for socketarg in "
"see_if_write_available: LDAP error %d (%s)\n",
@@ -553,6 +614,7 @@ see_if_write_available(Repl_Connection *conn, PRIntervalTime timeout)
return CONN_OPERATION_SUCCESS;
}
+#endif /* ! USE_OPENLDAP */
/*
* Common code to send an LDAPv3 operation and collect the result.
@@ -1010,7 +1072,9 @@ conn_connect(Repl_Connection *conn)
}
if (return_value == CONN_OPERATION_SUCCESS) {
+#if !defined(USE_OPENLDAP)
int io_timeout_ms;
+#endif
/* Now we initialize the LDAP Structure and set options */
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name,
@@ -1055,10 +1119,13 @@ conn_connect(Repl_Connection *conn)
ldap_set_option(conn->ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
/* override the default timeout with the specified timeout */
+#if defined(USE_OPENLDAP)
+ ldap_set_option(conn->ld, LDAP_OPT_NETWORK_TIMEOUT, &conn->timeout);
+#else
io_timeout_ms = conn->timeout.tv_sec * 1000 + conn->timeout.tv_usec / 1000;
prldap_set_session_option(conn->ld, NULL, PRLDAP_OPT_IO_MAX_TIMEOUT,
io_timeout_ms);
-
+#endif
/* We've got an ld. Now bind to the server. */
conn->last_operation = CONN_BIND;
@@ -1066,7 +1133,7 @@ conn_connect(Repl_Connection *conn)
if ( bind_and_check_pwp(conn, binddn, conn->plain) == CONN_OPERATION_FAILED )
{
- conn->last_ldap_error = ldap_get_lderrno (conn->ld, NULL, NULL);
+ conn->last_ldap_error = slapi_ldap_get_lderrno (conn->ld, NULL, NULL);
conn->state = STATE_DISCONNECTED;
return_value = CONN_OPERATION_FAILED;
}
@@ -1308,36 +1375,38 @@ attribute_string_value_present(LDAP *ld, LDAPMessage *entry, const char *type,
const char *value)
{
int return_value = 0;
+ ber_len_t vallen;
if (NULL != entry)
{
char *atype = NULL;
BerElement *ber = NULL;
+ vallen = strlen(value);
atype = ldap_first_attribute(ld, entry, &ber);
while (NULL != atype && 0 == return_value)
{
if (strcasecmp(atype, type) == 0)
{
- char **strvals = ldap_get_values(ld, entry, atype);
+ struct berval **vals = ldap_get_values_len(ld, entry, atype);
int i;
- for (i = 0; return_value == 0 && NULL != strvals && NULL != strvals[i]; i++)
+ for (i = 0; return_value == 0 && NULL != vals && NULL != vals[i]; i++)
{
- if (strcmp(strvals[i], value) == 0)
+ if ((vallen == vals[i]->bv_len) && !strncmp(vals[i]->bv_val, value, vallen))
{
return_value = 1;
}
}
- if (NULL != strvals)
+ if (NULL != vals)
{
- ldap_value_free(strvals);
+ ldap_value_free_len(vals);
}
}
ldap_memfree(atype);
atype = ldap_next_attribute(ld, entry, ber);
}
if (NULL != ber)
- ldap_ber_free(ber, 0);
+ ber_free(ber, 0);
/* The last atype has not been freed yet */
if (NULL != atype)
ldap_memfree(atype);
@@ -1659,7 +1728,7 @@ bind_and_check_pwp(Repl_Connection *conn, char * binddn, char *password)
char *errmsg = NULL;
conn->last_ldap_error = rc;
/* errmsg is a pointer directly into the ld structure - do not free */
- rc = ldap_get_lderrno( ld, NULL, &errmsg );
+ rc = slapi_ldap_get_lderrno( ld, NULL, &errmsg );
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
"%s: Replication bind with %s auth failed: LDAP error %d (%s) (%s)\n",
agmt_get_long_name(conn->agmt),
diff --git a/ldap/servers/plugins/replication/repl5_replica.c b/ldap/servers/plugins/replication/repl5_replica.c
index 30b7ee9c..5f280b1d 100644
--- a/ldap/servers/plugins/replication/repl5_replica.c
+++ b/ldap/servers/plugins/replication/repl5_replica.c
@@ -1011,10 +1011,10 @@ replica_set_referrals(Replica *r,const Slapi_ValueSet *vs)
while (vv)
{
const char *ref = slapi_value_get_string(vv);
- struct ldap_url_desc *lud = NULL;
- int myrc = ldap_url_parse(ref, &lud);
+ LDAPURLDesc *lud = NULL;
+ int myrc = slapi_ldap_url_parse(ref, &lud, 0, NULL);
/* see if the dn is already in the referral URL */
- if (myrc == LDAP_URL_ERR_NODN || !lud || !lud->lud_dn) {
+ if (!lud || !lud->lud_dn) {
/* add the dn */
Slapi_Value *newval = NULL;
int len = strlen(ref);
diff --git a/ldap/servers/plugins/replication/repl5_total.c b/ldap/servers/plugins/replication/repl5_total.c
index e82d8da3..a555bec6 100644
--- a/ldap/servers/plugins/replication/repl5_total.c
+++ b/ldap/servers/plugins/replication/repl5_total.c
@@ -472,7 +472,7 @@ static int
my_ber_scanf_value(BerElement *ber, Slapi_Value **value, PRBool *deleted)
{
struct berval *attrval = NULL;
- ber_len_t len;
+ ber_len_t len = -1;
ber_tag_t tag;
CSN *csn = NULL;
char csnstring[CSN_STRSIZE + 1];
diff --git a/ldap/servers/plugins/replication/replutil.c b/ldap/servers/plugins/replication/replutil.c
index c1a86255..8703c7c2 100644
--- a/ldap/servers/plugins/replication/replutil.c
+++ b/ldap/servers/plugins/replication/replutil.c
@@ -381,9 +381,9 @@ make_changes_string(LDAPMod **ldm, char **includeattrs)
ldm[ i ]->mod_bvalues[ j ]->bv_len ) + 1;
buf = slapi_ch_malloc( len );
bufp = buf;
- ldif_put_type_and_value( &bufp, ldm[ i ]->mod_type,
+ slapi_ldif_put_type_and_value_with_options( &bufp, ldm[ i ]->mod_type,
ldm[ i ]->mod_bvalues[ j ]->bv_val,
- ldm[ i ]->mod_bvalues[ j ]->bv_len );
+ ldm[ i ]->mod_bvalues[ j ]->bv_len, 0 );
*bufp = '\0';
addlenstr( l, buf );
@@ -739,10 +739,10 @@ repl_set_mtn_state_and_referrals(
/* next, add the repl root dn to each referral if not present */
for (ii = 0; referrals_to_set && referrals_to_set[ii]; ++ii) {
- struct ldap_url_desc *lud = NULL;
- int myrc = ldap_url_parse(referrals_to_set[ii], &lud);
+ LDAPURLDesc *lud = NULL;
+ int myrc = slapi_ldap_url_parse(referrals_to_set[ii], &lud, 0, NULL);
/* see if the dn is already in the referral URL */
- if (myrc == LDAP_URL_ERR_NODN || !lud || !lud->lud_dn) {
+ if (!lud || !lud->lud_dn) {
/* add the dn */
int len = strlen(referrals_to_set[ii]);
const char *cdn = slapi_sdn_get_dn(repl_root_sdn);
diff --git a/ldap/servers/plugins/replication/urp_glue.c b/ldap/servers/plugins/replication/urp_glue.c
index 6bceb5a0..15b29d41 100644
--- a/ldap/servers/plugins/replication/urp_glue.c
+++ b/ldap/servers/plugins/replication/urp_glue.c
@@ -186,7 +186,7 @@ do_create_glue_entry(const Slapi_RDN *rdn, const Slapi_DN *superiordn, const cha
rdnstr = slapi_ch_realloc(rdnstr, alloc_len);
rdnpair = &rdnstr[rdnstr_len];
}
- ldif_put_type_and_value_with_options(&rdnpair, rdntype,
+ slapi_ldif_put_type_and_value_with_options(&rdnpair, rdntype,
rdnval, rdnval_len, LDIF_OPT_NOWRAP);
*rdnpair = '\0';
}
diff --git a/ldap/servers/plugins/replication/windows_connection.c b/ldap/servers/plugins/replication/windows_connection.c
index 01b61cf9..b9643b5f 100644
--- a/ldap/servers/plugins/replication/windows_connection.c
+++ b/ldap/servers/plugins/replication/windows_connection.c
@@ -53,7 +53,9 @@ replica locked. Seems like right thing to do.
#include "repl5.h"
#include "windowsrepl.h"
+#if !defined(USE_OPENLDAP)
#include "ldappr.h"
+#endif
#include "slap.h"
#include "nss.h"
@@ -352,7 +354,7 @@ windows_perform_operation(Repl_Connection *conn, int optype, const char *dn,
if (0 == rc)
{
/* Timeout */
- rc = ldap_get_lderrno(conn->ld, NULL, NULL);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, NULL);
conn->last_ldap_error = LDAP_TIMEOUT;
return_value = CONN_TIMEOUT;
}
@@ -361,7 +363,7 @@ windows_perform_operation(Repl_Connection *conn, int optype, const char *dn,
/* Error */
char *s = NULL;
- rc = ldap_get_lderrno(conn->ld, NULL, &s);
+ rc = slapi_ldap_get_lderrno(conn->ld, NULL, &s);
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
"%s: Received error %d: %s for %s operation\n",
agmt_get_long_name(conn->agmt),
@@ -591,7 +593,7 @@ windows_LDAPMessage2Entry(Repl_Connection *conn, LDAPMessage * msg, int attrsonl
}
if ( NULL != ber )
{
- ldap_ber_free( ber, 0 );
+ ber_free( ber, 0 );
}
windows_private_set_raw_entry(conn->agmt, rawentry); /* windows private now owns rawentry */
@@ -1214,7 +1216,9 @@ windows_conn_connect(Repl_Connection *conn)
}
if (return_value == CONN_OPERATION_SUCCESS) {
+#if !defined(USE_OPENLDAP)
int io_timeout_ms;
+#endif
/* Now we initialize the LDAP Structure and set options */
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name,
@@ -1260,10 +1264,13 @@ windows_conn_connect(Repl_Connection *conn)
ldap_set_option(conn->ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
/* override the default timeout with the specified timeout */
+#if defined(USE_OPENLDAP)
+ ldap_set_option(conn->ld, LDAP_OPT_NETWORK_TIMEOUT, &conn->timeout);
+#else
io_timeout_ms = conn->timeout.tv_sec * 1000 + conn->timeout.tv_usec / 1000;
prldap_set_session_option(conn->ld, NULL, PRLDAP_OPT_IO_MAX_TIMEOUT,
io_timeout_ms);
-
+#endif
/* We've got an ld. Now bind to the server. */
conn->last_operation = CONN_BIND;
@@ -1271,7 +1278,7 @@ windows_conn_connect(Repl_Connection *conn)
if ( bind_and_check_pwp(conn, binddn, conn->plain) == CONN_OPERATION_FAILED )
{
- conn->last_ldap_error = ldap_get_lderrno (conn->ld, NULL, NULL);
+ conn->last_ldap_error = slapi_ldap_get_lderrno (conn->ld, NULL, NULL);
conn->state = STATE_DISCONNECTED;
return_value = CONN_OPERATION_FAILED;
}
@@ -1594,6 +1601,7 @@ attribute_string_value_present(LDAP *ld, LDAPMessage *entry, const char *type,
const char *value)
{
int return_value = 0;
+ ber_len_t vallen;
LDAPDebug( LDAP_DEBUG_TRACE, "=> attribute_string_value_present\n", 0, 0, 0 );
@@ -1602,30 +1610,31 @@ attribute_string_value_present(LDAP *ld, LDAPMessage *entry, const char *type,
char *atype = NULL;
BerElement *ber = NULL;
+ vallen = strlen(value);
atype = ldap_first_attribute(ld, entry, &ber);
while (NULL != atype && 0 == return_value)
{
if (strcasecmp(atype, type) == 0)
{
- char **strvals = ldap_get_values(ld, entry, atype);
+ struct berval **vals = ldap_get_values_len(ld, entry, atype);
int i;
- for (i = 0; return_value == 0 && NULL != strvals && NULL != strvals[i]; i++)
+ for (i = 0; return_value == 0 && NULL != vals && NULL != vals[i]; i++)
{
- if (strcmp(strvals[i], value) == 0)
+ if ((vallen == vals[i]->bv_len) && !strncmp(vals[i]->bv_val, value, vallen))
{
return_value = 1;
}
}
- if (NULL != strvals)
+ if (NULL != vals)
{
- ldap_value_free(strvals);
+ ldap_value_free_len(vals);
}
}
ldap_memfree(atype);
atype = ldap_next_attribute(ld, entry, ber);
}
if (NULL != ber)
- ldap_ber_free(ber, 0);
+ ber_free(ber, 0);
/* The last atype has not been freed yet */
if (NULL != atype)
ldap_memfree(atype);
@@ -1768,7 +1777,7 @@ bind_and_check_pwp(Repl_Connection *conn, char * binddn, char *password)
char *errmsg = NULL;
conn->last_ldap_error = rc;
/* errmsg is a pointer directly into the ld structure - do not free */
- rc = ldap_get_lderrno( ld, NULL, &errmsg );
+ rc = slapi_ldap_get_lderrno( ld, NULL, &errmsg );
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name,
"%s: Replication bind with %s auth failed: LDAP error %d (%s) (%s)\n",
agmt_get_long_name(conn->agmt),
@@ -1816,13 +1825,13 @@ do_simple_bind (Repl_Connection *conn, LDAP *ld, char * binddn, char *password)
LDAPDebug( LDAP_DEBUG_TRACE, "=> do_simple_bind\n", 0, 0, 0 );
- if( ( msgid = ldap_simple_bind( ld, binddn, password ) ) == -1 )
+ if( ( msgid = slapi_ldap_bind( ld, binddn, password, LDAP_SASL_SIMPLE, NULL, NULL, NULL, &msgid ) ) == -1 )
{
char *ldaperrtext = NULL;
int ldaperr;
int prerr = PR_GetError();
- ldaperr = ldap_get_lderrno( ld, NULL, &ldaperrtext );
+ ldaperr = slapi_ldap_get_lderrno( ld, NULL, &ldaperrtext );
/* Do not report the same error over and over again */
if (conn->last_ldap_error != ldaperr)
{