summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2010-06-08 16:45:33 -0600
committerRich Megginson <rmeggins@redhat.com>2010-08-31 10:36:00 -0600
commitfcb9ddd203b372bcd7bd62d9500eefda1cc10bd9 (patch)
tree715dd59462b987097a65d480cc80d72d4c5e01ef
parent80bd11eab9edb4113a324618c44319cd9ab06a0b (diff)
downloadds-fcb9ddd203b372bcd7bd62d9500eefda1cc10bd9.tar.gz
ds-fcb9ddd203b372bcd7bd62d9500eefda1cc10bd9.tar.xz
ds-fcb9ddd203b372bcd7bd62d9500eefda1cc10bd9.zip
port client tools to use openldap API
There are some differences between the mozldap and the openldap apis: openldap has deprecated ldap_init in favor of ldap_initialize openldap has deprecated the regular ldap op functions in favor of their _ext alternatives Reviewed by: nkinder (Thanks!) Platforms tested: Fedora 14 (rawhide)
-rw-r--r--ldap/servers/slapd/tools/rsearch/addthread.c25
-rw-r--r--ldap/servers/slapd/tools/rsearch/searchthread.c60
2 files changed, 71 insertions, 14 deletions
diff --git a/ldap/servers/slapd/tools/rsearch/addthread.c b/ldap/servers/slapd/tools/rsearch/addthread.c
index 417a4c19..f01ba181 100644
--- a/ldap/servers/slapd/tools/rsearch/addthread.c
+++ b/ldap/servers/slapd/tools/rsearch/addthread.c
@@ -180,16 +180,33 @@ static void at_bind(AddThread *at)
{
int ret;
int retry = 0;
+#if defined(USE_OPENLDAP)
+ char *ldapurl = NULL;
+ at->ld = NULL;
+ ldapurl = PR_smprintf("ldap://%s:%d", hostname, port);
+ ret = ldap_initialize(&at->ld, ldapurl);
+ PR_smprintf_free(ldapurl);
+ ldapurl = NULL;
+ if (ret) {
+ fprintf(stderr, "T%d: failed to init: %s port %d: %d:%s\n", at->id, hostname, port,
+ ret, ldap_err2string(ret));
+ return;
+ }
+#else
at->ld = ldap_init(hostname, port);
+#endif
if (! at->ld) {
fprintf(stderr, "T%d: failed to init: %s port %d\n", at->id, hostname, port);
return;
}
while (retry < 10)
{
- ret = ldap_simple_bind_s(at->ld, strlen(username) ? username : NULL,
- strlen(password) ? password : NULL);
+ struct berval bvcreds = {0, NULL};
+ bvcreds.bv_val = password;
+ bvcreds.bv_len = password ? strlen(password) : 0;
+ ret = ldap_sasl_bind_s(at->ld, username, LDAP_SASL_SIMPLE, &bvcreds,
+ NULL, NULL, NULL);
if (LDAP_SUCCESS == ret) {
return; /* ok */
} else if (LDAP_CONNECT_ERROR == ret) {
@@ -198,7 +215,7 @@ static void at_bind(AddThread *at)
break;
}
}
- fprintf(stderr, "T%d: failed to bind, ldap_simple_bind_s returned %d\n",
+ fprintf(stderr, "T%d: failed to bind, ldap_sasl_bind_s returned %d\n",
at->id, ret);
}
@@ -318,7 +335,7 @@ static int at_add(AddThread *at)
fprintf(stderr, "'%s'\n", attrs[i]->mod_values[0]);
}
#endif
- ret = ldap_add_s(at->ld, dn, attrs);
+ ret = ldap_add_ext_s(at->ld, dn, attrs, NULL, NULL);
if (ret != LDAP_SUCCESS) {
fprintf(stderr, "T%d: failed to add, error = %d\n", at->id, ret);
}
diff --git a/ldap/servers/slapd/tools/rsearch/searchthread.c b/ldap/servers/slapd/tools/rsearch/searchthread.c
index c229d759..9e2b0d66 100644
--- a/ldap/servers/slapd/tools/rsearch/searchthread.c
+++ b/ldap/servers/slapd/tools/rsearch/searchthread.c
@@ -160,7 +160,11 @@ static int st_bind_core(SearchThread *st, LDAP **ld, char *dn, char *pw)
int ret = 0;
int retry = 0;
while (1) {
- ret = ldap_simple_bind_s(*ld, dn, pw);
+ struct berval bvcreds = {0, NULL};
+ bvcreds.bv_val = pw;
+ bvcreds.bv_len = pw ? strlen(pw) : 0;
+ ret = ldap_sasl_bind_s(*ld, dn, LDAP_SASL_SIMPLE, &bvcreds,
+ NULL, NULL, NULL);
if (LDAP_SUCCESS == ret) {
break;
} else if (LDAP_CONNECT_ERROR == ret && retry < 10) {
@@ -179,14 +183,46 @@ static int st_bind_core(SearchThread *st, LDAP **ld, char *dn, char *pw)
static int st_bind(SearchThread *st)
{
if (!st->ld) {
+#if defined(USE_OPENLDAP)
+ int ret = 0;
+ char *ldapurl = NULL;
+
+ st->ld = NULL;
+ ldapurl = PR_smprintf("ldap://%s:%d", hostname, port);
+ ret = ldap_initialize(&st->ld, ldapurl);
+ PR_smprintf_free(ldapurl);
+ ldapurl = NULL;
+ if (ret) {
+ fprintf(stderr, "T%d: failed to init: %s port %d: %d:%s\n", st->id, hostname, port,
+ ret, ldap_err2string(ret));
+ return 0;
+ }
+#else
st->ld = ldap_init(hostname, port);
+#endif
if (!st->ld) {
fprintf(stderr, "T%d: failed to init\n", st->id);
return 0;
}
}
if (!st->ld2) { /* aux LDAP handle */
+#if defined(USE_OPENLDAP)
+ int ret = 0;
+ char *ldapurl = NULL;
+
+ st->ld2 = NULL;
+ ldapurl = PR_smprintf("ldap://%s:%d", hostname, port);
+ ret = ldap_initialize(&st->ld2, ldapurl);
+ PR_smprintf_free(ldapurl);
+ ldapurl = NULL;
+ if (ret) {
+ fprintf(stderr, "T%d: failed to init: %s port %d: %d:%s\n", st->id, hostname, port,
+ ret, ldap_err2string(ret));
+ return 0;
+ }
+#else
st->ld2 = ldap_init(hostname, port);
+#endif
if (!st->ld2) {
fprintf(stderr, "T%d: failed to init 2\n", st->id);
return 0;
@@ -230,8 +266,9 @@ static int st_bind(SearchThread *st)
timeout.tv_sec = 3600;
timeout.tv_usec = 0;
while (1) {
- int ret = ldap_search_st(st->ld2, suffix, scope, pFilter,
- NULL, attrsOnly, &timeout, &result);
+ int ret = ldap_search_ext_s(st->ld2, suffix, scope, pFilter,
+ NULL, attrsOnly, NULL, NULL,
+ &timeout, -1, &result);
if (LDAP_SUCCESS == ret) {
break;
} else if ((LDAP_CONNECT_ERROR == ret ||
@@ -289,7 +326,7 @@ static int st_bind(SearchThread *st)
static void st_unbind(SearchThread *st)
{
- if (ldap_unbind(st->ld) != LDAP_SUCCESS)
+ if (ldap_unbind_ext(st->ld, NULL, NULL) != LDAP_SUCCESS)
fprintf(stderr, "T%d: failed to unbind\n", st->id);
st->ld = NULL;
st->soc = -1;
@@ -335,8 +372,8 @@ static int st_search(SearchThread *st)
timeout.tv_usec = 0;
timeoutp = &timeout;
}
- ret = ldap_search_st(st->ld, suffix, scope, pFilter, attrToReturn,
- attrsOnly, timeoutp, &result);
+ ret = ldap_search_ext_s(st->ld, suffix, scope, pFilter, attrToReturn,
+ attrsOnly, NULL, NULL, timeoutp, -1, &result);
if (ret != LDAP_SUCCESS) {
fprintf(stderr, "T%d: failed to search 2, error=0x%02X\n",
st->id, ret);
@@ -388,7 +425,7 @@ static int st_modify_nonidx(SearchThread *st)
attr_description.mod_type = "description";
attr_description.mod_values = description_values;
- rval = ldap_modify_s(st->ld, dn, attrs);
+ rval = ldap_modify_ext_s(st->ld, dn, attrs, NULL, NULL);
if (rval != LDAP_SUCCESS) {
fprintf(stderr, "T%d: Failed to modify error=0x%x\n", st->id, rval);
fprintf(stderr, "dn: %s\n", dn);
@@ -431,7 +468,7 @@ static int st_modify_idx(SearchThread *st)
attr_telephonenumber.mod_type = "telephonenumber";
attr_telephonenumber.mod_values = telephonenumber_values;
- rval = ldap_modify_s(st->ld, dn, attrs);
+ rval = ldap_modify_ext_s(st->ld, dn, attrs, NULL, NULL);
if (rval != LDAP_SUCCESS) {
fprintf(stderr, "T%d: Failed to modify error=0x%x\n", st->id, rval);
fprintf(stderr, "dn: %s\n", dn);
@@ -448,6 +485,7 @@ static int st_compare(SearchThread *st)
char *dn = NULL;
char *uid = NULL;
char uid0[100];
+ struct berval bvvalue = {0, NULL};
/* Decide what entry to modify, for this we need a table */
if (NULL == sdattable || sdt_getlen(sdattable) == 0) {
@@ -469,7 +507,9 @@ static int st_compare(SearchThread *st)
uid0[0] = '@'; /* make it not matched */
uid = uid0;
}
- rval = ldap_compare_s(st->ld, dn, "uid", uid);
+ bvvalue.bv_val = uid;
+ bvvalue.bv_len = uid ? strlen(uid) : 0;
+ rval = ldap_compare_ext_s(st->ld, dn, "uid", &bvvalue, NULL, NULL);
correct_answer = compare_true ? LDAP_COMPARE_TRUE : LDAP_COMPARE_FALSE;
if (rval == correct_answer) {
rval = LDAP_SUCCESS;
@@ -499,7 +539,7 @@ static int st_delete(SearchThread *st)
} while (e < 0);
dn = sdt_dn_get(sdattable, e);
- rval = ldap_delete_s(st->ld, dn);
+ rval = ldap_delete_ext_s(st->ld, dn, NULL, NULL);
if (rval != LDAP_SUCCESS) {
if (rval == LDAP_NO_SUCH_OBJECT) {
rval = LDAP_SUCCESS;