Branch '389-ds-base-1.2.11' - ldap/servers
by Noriko Hosoi
ldap/servers/slapd/pagedresults.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
New commits:
commit b2ee65dd6c4af4f2cab515406a6f7fd9f1dc4dcc
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue Apr 29 17:34:47 2014 -0700
Ticket #47707 - 389 DS Server crashes and dies while handles paged searches from clients
Bug Description: If a simple paged search request was sent to the server
and the request was abandoned, the paged result slot in the connection
table was not properly released by setting NULL to pr_current_be. Since
the slot did not look available for the next request even though it was,
the next request failed to get the valid slot number, and the initial slot
number -1 failed to be replaced with the real slot number. Until the fix
for "Ticket #47623 fix memleak caused by 47347" was made, it overrode the
allocated array's [-1] location, which usually stores the meta data of the
allocated memory. That crashed the server in the next realloc since the
corrupted memory was passed to the function.
Fix Description: This patch cleans up the abandoned/cleaned up slot for
reuse. Also, more check not to break the meta data is added.
Special thanks to German Parente (gparente(a)redhat.com) for providing the
reproducer and analysing the crash.
https://fedorahosted.org/389/ticket/47707
Reviewed by rmeggins(a)redhat.com (Thanks, Rich!)
(cherry picked from commit 087356f7eaff2dff3c0c4f7dfcaa6aacc9979224)
(cherry picked from commit 2132875746ed9e1fc7c9c53450241c91d0c5ae55)
(cherry picked from commit 40e86e74fb4ecc0fc5a1027d8241945d9b2564e0)
diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c
index 9af5773..edd76c6 100644
--- a/ldap/servers/slapd/pagedresults.c
+++ b/ldap/servers/slapd/pagedresults.c
@@ -130,7 +130,8 @@ pagedresults_parse_control_value( Slapi_PBlock *pb,
}
}
}
- if (!conn->c_pagedresults.prl_list[*index].pr_mutex) {
+ if ((*index > -1) && (*index < conn->c_pagedresults.prl_maxlen) &&
+ !conn->c_pagedresults.prl_list[*index].pr_mutex) {
conn->c_pagedresults.prl_list[*index].pr_mutex = PR_NewLock();
}
conn->c_pagedresults.prl_count++;
@@ -270,6 +271,7 @@ pagedresults_free_one( Connection *conn, Operation *op, int index )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
if (prp->pr_mutex) {
/* pr_mutex is reused; back it up and reset it. */
@@ -307,6 +309,7 @@ pagedresults_free_one_msgid_nolock( Connection *conn, ber_int_t msgid )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
prp->pr_flags |= CONN_FLAG_PAGEDRESULTS_ABANDONED;
prp->pr_flags &= ~CONN_FLAG_PAGEDRESULTS_PROCESSING;
@@ -724,6 +727,7 @@ pagedresults_cleanup(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
if (prp->pr_mutex) {
@@ -771,6 +775,7 @@ pagedresults_cleanup_all(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
}
9 years, 1 month
Branch '389-ds-base-1.3.1' - ldap/servers
by Noriko Hosoi
ldap/servers/slapd/pagedresults.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
New commits:
commit 40e86e74fb4ecc0fc5a1027d8241945d9b2564e0
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue Apr 29 17:34:47 2014 -0700
Ticket #47707 - 389 DS Server crashes and dies while handles paged searches from clients
Bug Description: If a simple paged search request was sent to the server
and the request was abandoned, the paged result slot in the connection
table was not properly released by setting NULL to pr_current_be. Since
the slot did not look available for the next request even though it was,
the next request failed to get the valid slot number, and the initial slot
number -1 failed to be replaced with the real slot number. Until the fix
for "Ticket #47623 fix memleak caused by 47347" was made, it overrode the
allocated array's [-1] location, which usually stores the meta data of the
allocated memory. That crashed the server in the next realloc since the
corrupted memory was passed to the function.
Fix Description: This patch cleans up the abandoned/cleaned up slot for
reuse. Also, more check not to break the meta data is added.
Special thanks to German Parente (gparente(a)redhat.com) for providing the
reproducer and analysing the crash.
https://fedorahosted.org/389/ticket/47707
Reviewed by rmeggins(a)redhat.com (Thanks, Rich!)
(cherry picked from commit 087356f7eaff2dff3c0c4f7dfcaa6aacc9979224)
(cherry picked from commit 2132875746ed9e1fc7c9c53450241c91d0c5ae55)
diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c
index 9af5773..edd76c6 100644
--- a/ldap/servers/slapd/pagedresults.c
+++ b/ldap/servers/slapd/pagedresults.c
@@ -130,7 +130,8 @@ pagedresults_parse_control_value( Slapi_PBlock *pb,
}
}
}
- if (!conn->c_pagedresults.prl_list[*index].pr_mutex) {
+ if ((*index > -1) && (*index < conn->c_pagedresults.prl_maxlen) &&
+ !conn->c_pagedresults.prl_list[*index].pr_mutex) {
conn->c_pagedresults.prl_list[*index].pr_mutex = PR_NewLock();
}
conn->c_pagedresults.prl_count++;
@@ -270,6 +271,7 @@ pagedresults_free_one( Connection *conn, Operation *op, int index )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
if (prp->pr_mutex) {
/* pr_mutex is reused; back it up and reset it. */
@@ -307,6 +309,7 @@ pagedresults_free_one_msgid_nolock( Connection *conn, ber_int_t msgid )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
prp->pr_flags |= CONN_FLAG_PAGEDRESULTS_ABANDONED;
prp->pr_flags &= ~CONN_FLAG_PAGEDRESULTS_PROCESSING;
@@ -724,6 +727,7 @@ pagedresults_cleanup(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
if (prp->pr_mutex) {
@@ -771,6 +775,7 @@ pagedresults_cleanup_all(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
}
9 years, 1 month
Branch '389-ds-base-1.3.2' - ldap/servers
by Noriko Hosoi
ldap/servers/slapd/pagedresults.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
New commits:
commit 2132875746ed9e1fc7c9c53450241c91d0c5ae55
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue Apr 29 17:34:47 2014 -0700
Ticket #47707 - 389 DS Server crashes and dies while handles paged searches from clients
Bug Description: If a simple paged search request was sent to the server
and the request was abandoned, the paged result slot in the connection
table was not properly released by setting NULL to pr_current_be. Since
the slot did not look available for the next request even though it was,
the next request failed to get the valid slot number, and the initial slot
number -1 failed to be replaced with the real slot number. Until the fix
for "Ticket #47623 fix memleak caused by 47347" was made, it overrode the
allocated array's [-1] location, which usually stores the meta data of the
allocated memory. That crashed the server in the next realloc since the
corrupted memory was passed to the function.
Fix Description: This patch cleans up the abandoned/cleaned up slot for
reuse. Also, more check not to break the meta data is added.
Special thanks to German Parente (gparente(a)redhat.com) for providing the
reproducer and analysing the crash.
https://fedorahosted.org/389/ticket/47707
Reviewed by rmeggins(a)redhat.com (Thanks, Rich!)
(cherry picked from commit 087356f7eaff2dff3c0c4f7dfcaa6aacc9979224)
diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c
index 9af5773..edd76c6 100644
--- a/ldap/servers/slapd/pagedresults.c
+++ b/ldap/servers/slapd/pagedresults.c
@@ -130,7 +130,8 @@ pagedresults_parse_control_value( Slapi_PBlock *pb,
}
}
}
- if (!conn->c_pagedresults.prl_list[*index].pr_mutex) {
+ if ((*index > -1) && (*index < conn->c_pagedresults.prl_maxlen) &&
+ !conn->c_pagedresults.prl_list[*index].pr_mutex) {
conn->c_pagedresults.prl_list[*index].pr_mutex = PR_NewLock();
}
conn->c_pagedresults.prl_count++;
@@ -270,6 +271,7 @@ pagedresults_free_one( Connection *conn, Operation *op, int index )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
if (prp->pr_mutex) {
/* pr_mutex is reused; back it up and reset it. */
@@ -307,6 +309,7 @@ pagedresults_free_one_msgid_nolock( Connection *conn, ber_int_t msgid )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
prp->pr_flags |= CONN_FLAG_PAGEDRESULTS_ABANDONED;
prp->pr_flags &= ~CONN_FLAG_PAGEDRESULTS_PROCESSING;
@@ -724,6 +727,7 @@ pagedresults_cleanup(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
if (prp->pr_mutex) {
@@ -771,6 +775,7 @@ pagedresults_cleanup_all(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
}
9 years, 1 month
ldap/servers
by Noriko Hosoi
ldap/servers/slapd/pagedresults.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
New commits:
commit 087356f7eaff2dff3c0c4f7dfcaa6aacc9979224
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue Apr 29 17:34:47 2014 -0700
Ticket #47707 - 389 DS Server crashes and dies while handles paged searches from clients
Bug Description: If a simple paged search request was sent to the server
and the request was abandoned, the paged result slot in the connection
table was not properly released by setting NULL to pr_current_be. Since
the slot did not look available for the next request even though it was,
the next request failed to get the valid slot number, and the initial slot
number -1 failed to be replaced with the real slot number. Until the fix
for "Ticket #47623 fix memleak caused by 47347" was made, it overrode the
allocated array's [-1] location, which usually stores the meta data of the
allocated memory. That crashed the server in the next realloc since the
corrupted memory was passed to the function.
Fix Description: This patch cleans up the abandoned/cleaned up slot for
reuse. Also, more check not to break the meta data is added.
Special thanks to German Parente (gparente(a)redhat.com) for providing the
reproducer and analysing the crash.
https://fedorahosted.org/389/ticket/47707
Reviewed by rmeggins(a)redhat.com (Thanks, Rich!)
diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c
index 9af5773..edd76c6 100644
--- a/ldap/servers/slapd/pagedresults.c
+++ b/ldap/servers/slapd/pagedresults.c
@@ -130,7 +130,8 @@ pagedresults_parse_control_value( Slapi_PBlock *pb,
}
}
}
- if (!conn->c_pagedresults.prl_list[*index].pr_mutex) {
+ if ((*index > -1) && (*index < conn->c_pagedresults.prl_maxlen) &&
+ !conn->c_pagedresults.prl_list[*index].pr_mutex) {
conn->c_pagedresults.prl_list[*index].pr_mutex = PR_NewLock();
}
conn->c_pagedresults.prl_count++;
@@ -270,6 +271,7 @@ pagedresults_free_one( Connection *conn, Operation *op, int index )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
if (prp->pr_mutex) {
/* pr_mutex is reused; back it up and reset it. */
@@ -307,6 +309,7 @@ pagedresults_free_one_msgid_nolock( Connection *conn, ber_int_t msgid )
prp->pr_current_be->be_search_results_release &&
prp->pr_search_result_set) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
}
prp->pr_flags |= CONN_FLAG_PAGEDRESULTS_ABANDONED;
prp->pr_flags &= ~CONN_FLAG_PAGEDRESULTS_PROCESSING;
@@ -724,6 +727,7 @@ pagedresults_cleanup(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
if (prp->pr_mutex) {
@@ -771,6 +775,7 @@ pagedresults_cleanup_all(Connection *conn, int needlock)
if (prp->pr_current_be && prp->pr_search_result_set &&
prp->pr_current_be->be_search_results_release) {
prp->pr_current_be->be_search_results_release(&(prp->pr_search_result_set));
+ prp->pr_current_be = NULL;
rc = 1;
}
}
9 years, 1 month
Branch '389-ds-base-1.3.1' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/chainingdb/cb_add.c | 128 ++++-----
ldap/servers/plugins/chainingdb/cb_delete.c | 133 ++++-----
ldap/servers/plugins/chainingdb/cb_modify.c | 172 +++++-------
ldap/servers/plugins/chainingdb/cb_modrdn.c | 158 +++++------
ldap/servers/plugins/chainingdb/cb_search.c | 385 +++++++++++++---------------
5 files changed, 469 insertions(+), 507 deletions(-)
New commits:
commit ea1b127112efd3e962d363f12fcbae6f3b18c06a
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Apr 29 18:29:41 2014 -0400
Ticket 47792 - code cleanup
https://fedorahosted.org/389/ticket/47792
Reviewed by: rmeggins(Thanks!)
(cherry picked from commit d341b7734648e71c1b1ded398971c23b6fbdc1fb)
diff --git a/ldap/servers/plugins/chainingdb/cb_add.c b/ldap/servers/plugins/chainingdb/cb_add.c
index 07b90fa..03d0fc9 100644
--- a/ldap/servers/plugins/chainingdb/cb_add.c
+++ b/ldap/servers/plugins/chainingdb/cb_add.c
@@ -54,23 +54,22 @@
int
chaining_back_add ( Slapi_PBlock *pb )
{
-
- Slapi_Backend *be;
- Slapi_Entry *e;
- cb_backend_instance *cb;
- LDAPControl **serverctrls=NULL;
- LDAPControl **ctrls=NULL;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMod ** mods;
- LDAPMessage * res;
- char * matched_msg, *error_msg;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ Slapi_Entry *e;
+ cb_backend_instance *cb;
+ LDAPControl **serverctrls = NULL;
+ LDAPControl **ctrls = NULL;
+ LDAPMod **mods;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( (rc=cb_forward_operation(pb)) != LDAP_SUCCESS ) {
cb_send_ldap_result( pb, rc, NULL, "Remote data access disabled", 0, NULL );
@@ -85,7 +84,7 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Check wether the chaining BE is available or not */
if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
+ return -1;
}
slapi_pblock_get( pb, SLAPI_ADD_TARGET_SDN, &sdn );
@@ -108,8 +107,8 @@ chaining_back_add ( Slapi_PBlock *pb )
cb_eliminate_illegal_attributes(cb,e);
if ((rc = slapi_entry2mods ((const Slapi_Entry *)e, NULL, &mods)) != LDAP_SUCCESS) {
- cb_send_ldap_result( pb, rc,NULL,NULL, 0, NULL);
- return -1;
+ cb_send_ldap_result( pb, rc,NULL,NULL, 0, NULL);
+ return -1;
}
/* Grab a connection handle */
@@ -118,12 +117,11 @@ chaining_back_add ( Slapi_PBlock *pb )
static int warned_get_conn = 0;
if (!warned_get_conn) {
slapi_log_error(SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "cb_get_connection failed (%d) %s\n",
- rc, ldap_err2string(rc));
+ "cb_get_connection failed (%d) %s\n",
+ rc, ldap_err2string(rc));
warned_get_conn = 1;
}
- cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL,
- cnxerrbuf, 0, NULL);
+ cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL, cnxerrbuf, 0, NULL);
ldap_mods_free(mods, 1);
slapi_ch_free_string(&cnxerrbuf);
/* ping the farm.
@@ -135,23 +133,23 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Control management */
if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH)) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
- return -1;
+ return -1;
}
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
ldap_mods_free(mods,1);
if ( NULL != ctrls)
ldap_controls_free(ctrls);
- return -1;
- }
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/* Send LDAP operation to the remote host */
rc = ldap_add_ext( ld, dn, mods, ctrls, NULL, &msgid );
@@ -161,10 +159,9 @@ chaining_back_add ( Slapi_PBlock *pb )
if ( rc != LDAP_SUCCESS ) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "ldap_add_ext failed -- %s\n", ldap_err2string(rc) );
+ "ldap_add_ext failed -- %s\n", ldap_err2string(rc) );
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
return -1;
@@ -183,31 +180,31 @@ chaining_back_add ( Slapi_PBlock *pb )
return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /*
+ * does not respond. give up and return a
+ * error to the client.
+ */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
DS_Sleep(PR_INTERVAL_NO_WAIT);
@@ -219,20 +216,19 @@ chaining_back_add ( Slapi_PBlock *pb )
referrals=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc));
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc));
warned_parse_rc = 1;
}
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(parse_rc));
ldap_mods_free(mods,1);
slapi_ch_free((void **)&matched_msg);
@@ -250,10 +246,10 @@ chaining_back_add ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -276,22 +272,20 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Add control response sent by the farm server */
for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
if (serverctrls)
- ldap_controls_free(serverctrls);
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
-
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
slapi_entry_free(e);
- slapi_pblock_set( pb, SLAPI_ADD_ENTRY, NULL );
+ slapi_pblock_set( pb, SLAPI_ADD_ENTRY, NULL );
return 0;
}
}
-
/* Never reached */
}
diff --git a/ldap/servers/plugins/chainingdb/cb_delete.c b/ldap/servers/plugins/chainingdb/cb_delete.c
index 09972b2..97807ef 100644
--- a/ldap/servers/plugins/chainingdb/cb_delete.c
+++ b/ldap/servers/plugins/chainingdb/cb_delete.c
@@ -54,20 +54,19 @@
int
chaining_back_delete ( Slapi_PBlock *pb )
{
-
- Slapi_Backend * be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMessage * res;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *matched_msg, *error_msg;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
@@ -94,6 +93,7 @@ chaining_back_delete ( Slapi_PBlock *pb )
if (cb->local_acl && !cb->associated_be_is_disabled) {
char * errbuf=NULL;
Slapi_Entry *te = slapi_entry_alloc();
+
slapi_entry_set_sdn(te, sdn); /* sdn: copied */
rc = cb_access_allowed (pb, te, NULL, NULL, SLAPI_ACL_DELETE,&errbuf);
slapi_entry_free(te);
@@ -127,25 +127,24 @@ chaining_back_delete ( Slapi_PBlock *pb )
}
/*
- * Control management
- */
-
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
- }
+ * Control management
+ */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ return -1;
+ }
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/*
* Send LDAP operation to the remote host
@@ -153,43 +152,39 @@ chaining_back_delete ( Slapi_PBlock *pb )
rc = ldap_delete_ext( ld, dn, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
-
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
- return -1;
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,"FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
DS_Sleep(PR_INTERVAL_NO_WAIT);
@@ -198,15 +193,15 @@ chaining_back_delete ( Slapi_PBlock *pb )
default:
matched_msg=error_msg=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc) );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc) );
warned_parse_rc = 1;
}
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
@@ -227,10 +222,10 @@ chaining_back_delete ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -248,18 +243,18 @@ chaining_back_delete ( Slapi_PBlock *pb )
cb_release_op_connection(cb->pool,ld,0);
- /* Add control response sent by the farm server */
-
- for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
- if (serverctrls)
- ldap_controls_free(serverctrls);
+ /* Add control response sent by the farm server */
+ for (i=0; serverctrls && serverctrls[i];i++)
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_modify.c b/ldap/servers/plugins/chainingdb/cb_modify.c
index 65acb58..12d36da 100644
--- a/ldap/servers/plugins/chainingdb/cb_modify.c
+++ b/ldap/servers/plugins/chainingdb/cb_modify.c
@@ -56,21 +56,20 @@ static void cb_remove_illegal_mods(cb_backend_instance * inst, LDAPMod **mods);
int
chaining_back_modify ( Slapi_PBlock *pb )
{
-
- Slapi_Backend *be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMod ** mods;
- LDAPMessage * res;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *matched_msg, *error_msg;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMod ** mods;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals=NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf=NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
@@ -79,7 +78,6 @@ chaining_back_modify ( Slapi_PBlock *pb )
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
cb = cb_get_instance(be);
-
cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODIFY);
/* Check wether the chaining BE is available or not */
@@ -94,13 +92,11 @@ chaining_back_modify ( Slapi_PBlock *pb )
slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,"modify: target:<%s>\n",dn);
}
-
- ctrls=serverctrls=NULL;
+ ctrls = serverctrls = NULL;
slapi_pblock_get( pb, SLAPI_MODIFY_MODS, &mods );
slapi_pblock_get( pb, SLAPI_REQCONTROLS, &ctrls );
/* Check acls */
-
if ( cb->local_acl && !cb->associated_be_is_disabled ) {
char * errbuf=NULL;
Slapi_Entry *te = slapi_entry_alloc();
@@ -126,8 +122,7 @@ chaining_back_modify ( Slapi_PBlock *pb )
rc, ldap_err2string(rc));
warned_get_conn = 1;
}
- cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL,
- cnxerrbuf, 0, NULL);
+ cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL, cnxerrbuf, 0, NULL);
slapi_ch_free_string(&cnxerrbuf);
/* ping the farm.
* If the farm is unreachable, we increment the counter */
@@ -136,91 +131,88 @@ chaining_back_modify ( Slapi_PBlock *pb )
}
/* Control management */
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- /* Don't free mods here: are freed at the do_modify level */
- return -1;
- }
-
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- /* Don't free mods here: are freed at the do_modify level */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ /* Don't free mods here: are freed at the do_modify level */
+ return -1;
+ }
+
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ /* Don't free mods here: are freed at the do_modify level */
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* Remove illegal attributes from the mods */
cb_remove_illegal_mods(cb,mods);
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/* Send LDAP operation to the remote host */
rc = ldap_modify_ext( ld, dn, mods, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
/* connection handle released */
- return -1;
+ return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
- break;
- default:
+ break;
+ default:
matched_msg=error_msg=NULL;
serverctrls=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc));
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc));
warned_parse_rc = 1;
}
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(parse_rc));
slapi_ch_free((void **)&matched_msg);
slapi_ch_free((void **)&error_msg);
@@ -237,10 +229,10 @@ chaining_back_modify ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -261,20 +253,20 @@ chaining_back_modify ( Slapi_PBlock *pb )
/* Add control response sent by the farm server */
for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
/* SLAPI_ADD_RESCONTROL dups controls */
if (serverctrls)
- ldap_controls_free(serverctrls);
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
-
/* Never reached */
/* return 0; */
}
@@ -283,30 +275,28 @@ chaining_back_modify ( Slapi_PBlock *pb )
static void
cb_remove_illegal_mods(cb_backend_instance *inst, LDAPMod **mods)
{
- int i, j;
- LDAPMod *tmp;
+ int i, j;
+ LDAPMod *tmp;
if ( inst->illegal_attributes != NULL ) { /* Unlikely to happen */
-
- slapi_rwlock_wrlock(inst->rwl_config_lock);
+ slapi_rwlock_wrlock(inst->rwl_config_lock);
for (j=0; inst->illegal_attributes[j]; j++) {
- for ( i = 0; mods && mods[i] != NULL; i++ ) {
+ for ( i = 0; mods && mods[i] != NULL; i++ ) {
if (slapi_attr_types_equivalent(inst->illegal_attributes[j],mods[i]->mod_type)) {
- tmp = mods[i];
- for ( j = i; mods[j] != NULL; j++ ) {
- mods[j] = mods[j + 1];
- }
- slapi_ch_free( (void**)&(tmp->mod_type) );
- if ( tmp->mod_bvalues != NULL ) {
- ber_bvecfree( tmp->mod_bvalues );
- }
- slapi_ch_free( (void**)&tmp );
- i--;
+ tmp = mods[i];
+ for ( j = i; mods[j] != NULL; j++ ) {
+ mods[j] = mods[j + 1];
+ }
+ slapi_ch_free( (void**)&(tmp->mod_type) );
+ if ( tmp->mod_bvalues != NULL ) {
+ ber_bvecfree( tmp->mod_bvalues );
+ }
+ slapi_ch_free( (void**)&tmp );
+ i--;
}
}
}
-
- slapi_rwlock_unlock(inst->rwl_config_lock);
+ slapi_rwlock_unlock(inst->rwl_config_lock);
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_modrdn.c b/ldap/servers/plugins/chainingdb/cb_modrdn.c
index 1ce6c60..21903f7 100644
--- a/ldap/servers/plugins/chainingdb/cb_modrdn.c
+++ b/ldap/servers/plugins/chainingdb/cb_modrdn.c
@@ -54,46 +54,47 @@
int
chaining_back_modrdn ( Slapi_PBlock *pb )
{
- Slapi_Backend * be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMessage *res;
- char *matched_msg, *error_msg;
- char *ndn = NULL;
- Slapi_DN *sdn = NULL;
- int deleteoldrdn = 0;
- Slapi_DN *newsuperior = NULL;
- char *newrdn = NULL;
- char * cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
-
- if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
- cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
- return -1;
- }
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *newsuperior = NULL;
+ Slapi_DN *sdn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *ndn = NULL;
+ char *newrdn = NULL;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int deleteoldrdn = 0;
+ int rc, parse_rc, msgid, i;
+
+
+ if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
+ cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
+ return -1;
+ }
- slapi_pblock_get( pb, SLAPI_BACKEND, &be );
- cb = cb_get_instance(be);
+ slapi_pblock_get( pb, SLAPI_BACKEND, &be );
+ cb = cb_get_instance(be);
- cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODRDN);
+ cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODRDN);
- /* Check wether the chaining BE is available or not */
- if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
- }
+ /* Check wether the chaining BE is available or not */
+ if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
+ return -1;
+ }
- slapi_pblock_get( pb, SLAPI_MODRDN_TARGET_SDN, &sdn );
- /* newrdn is passed to ldap_rename, which does not require case-ignored
- * newrdn. */
- slapi_pblock_get( pb, SLAPI_MODRDN_NEWRDN, &newrdn );
- slapi_pblock_get( pb, SLAPI_MODRDN_NEWSUPERIOR_SDN, &newsuperior );
- slapi_pblock_get( pb, SLAPI_MODRDN_DELOLDRDN, &deleteoldrdn );
+ slapi_pblock_get( pb, SLAPI_MODRDN_TARGET_SDN, &sdn );
+ /* newrdn is passed to ldap_rename, which does not require case-ignored
+ * newrdn. */
+ slapi_pblock_get( pb, SLAPI_MODRDN_NEWRDN, &newrdn );
+ slapi_pblock_get( pb, SLAPI_MODRDN_NEWSUPERIOR_SDN, &newsuperior );
+ slapi_pblock_get( pb, SLAPI_MODRDN_DELOLDRDN, &deleteoldrdn );
- ndn = (char *)slapi_sdn_get_ndn(sdn);
+ ndn = (char *)slapi_sdn_get_ndn(sdn);
if (cb->local_acl && !cb->associated_be_is_disabled) {
/*
* Check local acls
@@ -111,7 +112,7 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
slapi_ch_free((void **)&errbuf);
return -1;
}
- }
+ }
/*
* Grab a connection handle
@@ -135,80 +136,77 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
}
/*
- * Control management
- */
-
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
- }
+ * Control management
+ */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ return -1;
+ }
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/*
* Send LDAP operation to the remote host
*/
-
rc = ldap_rename ( ld, ndn, newrdn, slapi_sdn_get_dn(newsuperior),
deleteoldrdn, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
- return -1;
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ return -1;
}
rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
switch ( rc ) {
case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
+
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
break;
+
default:
matched_msg=error_msg=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
@@ -259,18 +257,18 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
cb_release_op_connection(cb->pool,ld,0);
- /* Add control response sent by the farm server */
-
- for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
- if (serverctrls)
- ldap_controls_free(serverctrls);
+ /* Add control response sent by the farm server */
+ for (i=0; serverctrls && serverctrls[i]; i++)
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_search.c b/ldap/servers/plugins/chainingdb/cb_search.c
index a27e767..faca2e3 100644
--- a/ldap/servers/plugins/chainingdb/cb_search.c
+++ b/ldap/servers/plugins/chainingdb/cb_search.c
@@ -54,31 +54,30 @@
int
chainingdb_build_candidate_list ( Slapi_PBlock *pb )
-{
-
- Slapi_Backend * be;
- Slapi_Operation * op;
- char *filter;
- const char *target = NULL;
- Slapi_DN *target_sdn = NULL;
- int scope,attrsonly,sizelimit,timelimit,rc,searchreferral;
- char **attrs=NULL;
- LDAPControl **controls=NULL;
- LDAPControl **ctrls=NULL;
- LDAP *ld=NULL;
- cb_backend_instance *cb = NULL;
- cb_searchContext *ctx=NULL;
- struct timeval timeout;
- time_t optime;
- int doit,parse_rc;
- LDAPMessage *res=NULL;
- char *matched_msg,*error_msg;
- LDAPControl **serverctrls=NULL;
- char **referrals=NULL;
- char *cnxerrbuf=NULL;
- time_t endbefore=0;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+{
+ cb_backend_instance *cb = NULL;
+ cb_outgoing_conn *cnx;
+ cb_searchContext *ctx = NULL;
+ Slapi_Backend *be;
+ Slapi_Operation *op;
+ LDAPControl **serverctrls = NULL;
+ LDAPControl **controls = NULL;
+ LDAPControl **ctrls = NULL;
+ LDAPMessage *res = NULL;
+ LDAP *ld = NULL;
+ Slapi_DN *target_sdn = NULL;
+ const char *target = NULL;
+ char *filter;
+ char **attrs = NULL;
+ struct timeval timeout;
+ time_t optime;
+ time_t endbefore = 0;
+ time_t endtime = 0;
+ char *matched_msg, *error_msg;
+ char **referrals = NULL;
+ char *cnxerrbuf = NULL;
+ int scope, attrsonly, sizelimit, timelimit, searchreferral;
+ int rc, parse_rc, doit;
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
cb = cb_get_instance(be);
@@ -92,53 +91,50 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
target = slapi_sdn_get_dn(target_sdn);
if ( LDAP_SUCCESS != (parse_rc=cb_forward_operation(pb) )) {
-
/* Don't return errors */
-
if (cb_debug_on()) {
slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
"local search: base:<%s> scope:<%s> filter:<%s>\n",target,
scope==LDAP_SCOPE_SUBTREE?"SUBTREE":scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE" , filter);
}
- ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
- ctx->type = CB_SEARCHCONTEXT_ENTRY;
- ctx->data=NULL;
-
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- return 0;
- }
+ ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
+ ctx->type = CB_SEARCHCONTEXT_ENTRY;
+ ctx->data=NULL;
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
+
+ return 0;
+ }
- cb_update_monitor_info(pb,cb,SLAPI_OPERATION_SEARCH);
+ cb_update_monitor_info(pb,cb,SLAPI_OPERATION_SEARCH);
/* Check wether the chaining BE is available or not */
- if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
- }
+ if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
+ return -1;
+ }
if (cb_debug_on()) {
- slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
- "chained search: base:<%s> scope:<%s> filter:<%s>\n",target,
- scope==LDAP_SCOPE_SUBTREE?"SUBTREE":scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE" , filter);
+ slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
+ "chained search: base:<%s> scope:<%s> filter:<%s>\n",target,
+ scope==LDAP_SCOPE_SUBTREE ? "SUBTREE": scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE",
+ filter);
}
- slapi_pblock_get( pb, SLAPI_SEARCH_ATTRS, &attrs );
- slapi_pblock_get( pb, SLAPI_SEARCH_ATTRSONLY, &attrsonly );
- slapi_pblock_get( pb, SLAPI_REQCONTROLS, &controls );
- slapi_pblock_get( pb, SLAPI_SEARCH_TIMELIMIT, &timelimit );
- slapi_pblock_get( pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit );
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,NULL);
-
+ slapi_pblock_get( pb, SLAPI_SEARCH_ATTRS, &attrs );
+ slapi_pblock_get( pb, SLAPI_SEARCH_ATTRSONLY, &attrsonly );
+ slapi_pblock_get( pb, SLAPI_REQCONTROLS, &controls );
+ slapi_pblock_get( pb, SLAPI_SEARCH_TIMELIMIT, &timelimit );
+ slapi_pblock_get( pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit );
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,NULL);
if ((scope != LDAP_SCOPE_BASE) && (scope != LDAP_SCOPE_ONELEVEL) && (scope != LDAP_SCOPE_SUBTREE)) {
- cb_send_ldap_result( pb, LDAP_PROTOCOL_ERROR, NULL, "Bad scope", 0, NULL );
+ cb_send_ldap_result( pb, LDAP_PROTOCOL_ERROR, NULL, "Bad scope", 0, NULL );
return 1;
}
searchreferral=cb->searchreferral;
if (( scope != LDAP_SCOPE_BASE ) && ( searchreferral )) {
-
int i;
struct berval bv,*bvals[2];
Slapi_Entry ** aciArray=(Slapi_Entry **) slapi_ch_malloc(2*sizeof(Slapi_Entry *));
@@ -168,9 +164,8 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
ctx->type = CB_SEARCHCONTEXT_ENTRY;
ctx->data=aciArray;
-
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- return 0;
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
+ return 0;
}
/*
@@ -184,9 +179,9 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
time_t now=current_time();
endbefore=optime + timelimit;
if (now >= endbefore) {
- cb_send_ldap_result( pb, LDAP_TIMELIMIT_EXCEEDED, NULL,NULL, 0, NULL);
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_ENTRY, NULL );
- return 1;
+ cb_send_ldap_result( pb, LDAP_TIMELIMIT_EXCEEDED, NULL,NULL, 0, NULL);
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_ENTRY, NULL );
+ return 1;
}
timeout.tv_sec=(time_t)timelimit-(now-optime);
timeout.tv_usec=0;
@@ -200,20 +195,15 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
if ( (attrs == NULL) && operation_is_flag_set(op, OP_FLAG_INTERNAL) ) {
attrs = cb->every_attribute;
-
- }
- else
- {
+ } else {
int i;
- if ( attrs != NULL )
- {
+ if ( attrs != NULL ) {
for ( i = 0; attrs[i] != NULL; i++ ) {
- if ( strcasecmp( "nsrole", attrs[i] ) == 0 )
- {
+ if ( strcasecmp( "nsrole", attrs[i] ) == 0 ){
attrs = cb->every_attribute;
break;
}
- }
+ }
}
}
@@ -245,19 +235,19 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
*/
if ( LDAP_SUCCESS != (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH ))) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,0);
- return 1;
- }
-
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return 1;
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,0);
+ return 1;
+ }
+
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return 1;
}
- ctx = (cb_searchContext *) slapi_ch_calloc(1,sizeof(cb_searchContext));
+ ctx = (cb_searchContext *) slapi_ch_calloc(1,sizeof(cb_searchContext));
/*
** We need to store the connection handle in the search context
@@ -276,14 +266,14 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
timeout.tv_sec=timeout.tv_usec=-1;
/* heart-beat management */
- if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ if (cb->max_idle_time>0)
+ endtime=current_time() + cb->max_idle_time;
- rc=ldap_search_ext(ld ,target,scope,filter,attrs,attrsonly,
- ctrls, NULL, &timeout,sizelimit, &(ctx->msgid) );
+ rc = ldap_search_ext(ld ,target,scope,filter,attrs,attrsonly,
+ ctrls, NULL, &timeout,sizelimit, &(ctx->msgid) );
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
if ( LDAP_SUCCESS != rc ) {
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
@@ -299,136 +289,131 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
doit=1;
while (doit) {
+ if (cb_check_forward_abandon(cb,pb,ctx->ld,ctx->msgid)) {
+ slapi_ch_free((void **) &ctx);
+ return 1;
+ }
- if (cb_check_forward_abandon(cb,pb,ctx->ld,ctx->msgid)) {
- slapi_ch_free((void **) &ctx);
- return 1;
- }
+ rc = ldap_result(ld,ctx->msgid,LDAP_MSG_ONE,&cb->abandon_timeout,&res);
+ switch ( rc ) {
+ case -1:
+ /* An error occurred. return now */
+ rc = slapi_ldap_get_lderrno(ld,NULL,NULL);
+ /* tuck away some errors in a OPERATION_ERROR */
+ if (CB_LDAP_CONN_ERROR(rc)) {
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string( rc ), 0, NULL);
+ } else {
+ cb_send_ldap_result(pb,rc, NULL, NULL,0,NULL);
+ }
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
- rc=ldap_result(ld,ctx->msgid,LDAP_MSG_ONE,&cb->abandon_timeout,&res);
- switch ( rc ) {
- case -1:
- /* An error occurred. return now */
- rc = slapi_ldap_get_lderrno(ld,NULL,NULL);
- /* tuck away some errors in a OPERATION_ERROR */
- if (CB_LDAP_CONN_ERROR(rc)) {
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string( rc ), 0, NULL);
- } else {
- cb_send_ldap_result(pb,rc, NULL, NULL,0,NULL);
- }
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
- case 0:
-
- /* Local timeout management */
- if (timelimit != -1) {
- if (current_time() > endbefore) {
-
- slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
- "Local timeout expiration\n");
-
- cb_send_ldap_result(pb,LDAP_TIMELIMIT_EXCEEDED,
- NULL,NULL, 0, NULL);
- /* Force connection close */
- cb_release_op_connection(cb->pool,ld,1);
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
- }
- }
- /* heart-beat management */
- if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
+ case 0:
+ /* Local timeout management */
+ if (timelimit != -1) {
+ if (current_time() > endbefore) {
+ slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
+ "Local timeout expiration\n");
+ cb_send_ldap_result(pb,LDAP_TIMELIMIT_EXCEEDED,
+ NULL,NULL, 0, NULL);
+ /* Force connection close */
+ cb_release_op_connection(cb->pool,ld,1);
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
}
+ }
+ /* heart-beat management */
+ if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
+ }
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
- break;
- case LDAP_RES_SEARCH_ENTRY:
- case LDAP_RES_SEARCH_REFERENCE:
- /* Some results received */
- /* don't parse result here */
- ctx->pending_result=res;
- ctx->pending_result_type=rc;
- doit=0;
- break;
- case LDAP_RES_SEARCH_RESULT:
+ break;
+
+ case LDAP_RES_SEARCH_ENTRY:
+ case LDAP_RES_SEARCH_REFERENCE:
+ /* Some results received */
+ /* don't parse result here */
+ ctx->pending_result=res;
+ ctx->pending_result_type=rc;
+ doit = 0;
+ break;
+
+ case LDAP_RES_SEARCH_RESULT:
+ matched_msg=NULL;
+ error_msg=NULL;
+ referrals=NULL;
+ serverctrls=NULL;
+ parse_rc=ldap_parse_result(ld,res,&rc,&matched_msg,
+ &error_msg,&referrals, &serverctrls, 0 );
+ if ( parse_rc != LDAP_SUCCESS ) {
+ static int warned_parse_rc = 0;
+ if (!warned_parse_rc && error_msg) {
+ slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
+ warned_parse_rc = 1;
+ }
+ cb_send_ldap_result( pb, parse_rc, NULL, ENDUSERMSG, 0, NULL );
+ rc=-1;
+ } else if ( rc != LDAP_SUCCESS ) {
+ static int warned_rc = 0;
+ if (!warned_rc) {
+ slapi_ldap_get_lderrno( ctx->ld, &matched_msg, &error_msg );
+ slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
+ warned_rc = 1;
+ }
+ cb_send_ldap_result( pb, rc, NULL, ENDUSERMSG, 0, NULL);
+ /* BEWARE: matched_msg and error_msg points */
+ /* to ld fields. */
matched_msg=NULL;
error_msg=NULL;
- referrals=NULL;
- serverctrls=NULL;
- parse_rc=ldap_parse_result(ld,res,&rc,&matched_msg,
- &error_msg,&referrals, &serverctrls, 0 );
- if ( parse_rc != LDAP_SUCCESS ) {
- static int warned_parse_rc = 0;
- if (!warned_parse_rc && error_msg) {
- slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
- warned_parse_rc = 1;
- }
- cb_send_ldap_result( pb, parse_rc, NULL,
- ENDUSERMSG, 0, NULL );
- rc=-1;
- } else if ( rc != LDAP_SUCCESS ) {
- static int warned_rc = 0;
- if (!warned_rc) {
- slapi_ldap_get_lderrno( ctx->ld,
- &matched_msg, &error_msg );
- slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
- warned_rc = 1;
- }
- cb_send_ldap_result( pb, rc, NULL, ENDUSERMSG, 0, NULL);
- /* BEWARE: matched_msg and error_msg points */
- /* to ld fields. */
- matched_msg=NULL;
- error_msg=NULL;
- rc=-1;
- }
+ rc = -1;
+ }
+
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
+ if (referrals)
+ charray_free(referrals);
+ if (rc != LDAP_SUCCESS) {
+ cb_release_op_connection(cb->pool,ld,
+ CB_LDAP_CONN_ERROR(rc));
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return -1;
+ }
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (serverctrls)
- ldap_controls_free(serverctrls);
- if (referrals)
- charray_free(referrals);
-
- if (rc!=LDAP_SUCCESS) {
- cb_release_op_connection(cb->pool,ld,
- CB_LDAP_CONN_ERROR(rc));
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return -1;
- }
-
- /* Store the msg in the ctx */
- /* Parsed in iterate. */
-
- ctx->pending_result=res;
- ctx->pending_result_type=LDAP_RES_SEARCH_RESULT;
- doit=0;
+ /* Store the msg in the ctx */
+ /* Parsed in iterate. */
+ ctx->pending_result = res;
+ ctx->pending_result_type = LDAP_RES_SEARCH_RESULT;
+ doit = 0;
}
}
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
return 0;
}
9 years, 1 month
Branch '389-ds-base-1.3.2' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/chainingdb/cb_add.c | 128 ++++-----
ldap/servers/plugins/chainingdb/cb_delete.c | 133 ++++-----
ldap/servers/plugins/chainingdb/cb_modify.c | 172 +++++-------
ldap/servers/plugins/chainingdb/cb_modrdn.c | 158 +++++------
ldap/servers/plugins/chainingdb/cb_search.c | 385 +++++++++++++---------------
5 files changed, 469 insertions(+), 507 deletions(-)
New commits:
commit 65c5e584bae660d44c427c80536e82c4f99b2a80
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Apr 29 18:29:41 2014 -0400
Ticket 47792 - code cleanup
https://fedorahosted.org/389/ticket/47792
Reviewed by: rmeggins(Thanks!)
(cherry picked from commit d341b7734648e71c1b1ded398971c23b6fbdc1fb)
diff --git a/ldap/servers/plugins/chainingdb/cb_add.c b/ldap/servers/plugins/chainingdb/cb_add.c
index 07b90fa..03d0fc9 100644
--- a/ldap/servers/plugins/chainingdb/cb_add.c
+++ b/ldap/servers/plugins/chainingdb/cb_add.c
@@ -54,23 +54,22 @@
int
chaining_back_add ( Slapi_PBlock *pb )
{
-
- Slapi_Backend *be;
- Slapi_Entry *e;
- cb_backend_instance *cb;
- LDAPControl **serverctrls=NULL;
- LDAPControl **ctrls=NULL;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMod ** mods;
- LDAPMessage * res;
- char * matched_msg, *error_msg;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ Slapi_Entry *e;
+ cb_backend_instance *cb;
+ LDAPControl **serverctrls = NULL;
+ LDAPControl **ctrls = NULL;
+ LDAPMod **mods;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( (rc=cb_forward_operation(pb)) != LDAP_SUCCESS ) {
cb_send_ldap_result( pb, rc, NULL, "Remote data access disabled", 0, NULL );
@@ -85,7 +84,7 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Check wether the chaining BE is available or not */
if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
+ return -1;
}
slapi_pblock_get( pb, SLAPI_ADD_TARGET_SDN, &sdn );
@@ -108,8 +107,8 @@ chaining_back_add ( Slapi_PBlock *pb )
cb_eliminate_illegal_attributes(cb,e);
if ((rc = slapi_entry2mods ((const Slapi_Entry *)e, NULL, &mods)) != LDAP_SUCCESS) {
- cb_send_ldap_result( pb, rc,NULL,NULL, 0, NULL);
- return -1;
+ cb_send_ldap_result( pb, rc,NULL,NULL, 0, NULL);
+ return -1;
}
/* Grab a connection handle */
@@ -118,12 +117,11 @@ chaining_back_add ( Slapi_PBlock *pb )
static int warned_get_conn = 0;
if (!warned_get_conn) {
slapi_log_error(SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "cb_get_connection failed (%d) %s\n",
- rc, ldap_err2string(rc));
+ "cb_get_connection failed (%d) %s\n",
+ rc, ldap_err2string(rc));
warned_get_conn = 1;
}
- cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL,
- cnxerrbuf, 0, NULL);
+ cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL, cnxerrbuf, 0, NULL);
ldap_mods_free(mods, 1);
slapi_ch_free_string(&cnxerrbuf);
/* ping the farm.
@@ -135,23 +133,23 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Control management */
if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH)) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
- return -1;
+ return -1;
}
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
ldap_mods_free(mods,1);
if ( NULL != ctrls)
ldap_controls_free(ctrls);
- return -1;
- }
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/* Send LDAP operation to the remote host */
rc = ldap_add_ext( ld, dn, mods, ctrls, NULL, &msgid );
@@ -161,10 +159,9 @@ chaining_back_add ( Slapi_PBlock *pb )
if ( rc != LDAP_SUCCESS ) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "ldap_add_ext failed -- %s\n", ldap_err2string(rc) );
+ "ldap_add_ext failed -- %s\n", ldap_err2string(rc) );
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
return -1;
@@ -183,31 +180,31 @@ chaining_back_add ( Slapi_PBlock *pb )
return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /*
+ * does not respond. give up and return a
+ * error to the client.
+ */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
DS_Sleep(PR_INTERVAL_NO_WAIT);
@@ -219,20 +216,19 @@ chaining_back_add ( Slapi_PBlock *pb )
referrals=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc));
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc));
warned_parse_rc = 1;
}
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(parse_rc));
ldap_mods_free(mods,1);
slapi_ch_free((void **)&matched_msg);
@@ -250,10 +246,10 @@ chaining_back_add ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -276,22 +272,20 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Add control response sent by the farm server */
for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
if (serverctrls)
- ldap_controls_free(serverctrls);
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
-
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
slapi_entry_free(e);
- slapi_pblock_set( pb, SLAPI_ADD_ENTRY, NULL );
+ slapi_pblock_set( pb, SLAPI_ADD_ENTRY, NULL );
return 0;
}
}
-
/* Never reached */
}
diff --git a/ldap/servers/plugins/chainingdb/cb_delete.c b/ldap/servers/plugins/chainingdb/cb_delete.c
index 09972b2..97807ef 100644
--- a/ldap/servers/plugins/chainingdb/cb_delete.c
+++ b/ldap/servers/plugins/chainingdb/cb_delete.c
@@ -54,20 +54,19 @@
int
chaining_back_delete ( Slapi_PBlock *pb )
{
-
- Slapi_Backend * be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMessage * res;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *matched_msg, *error_msg;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
@@ -94,6 +93,7 @@ chaining_back_delete ( Slapi_PBlock *pb )
if (cb->local_acl && !cb->associated_be_is_disabled) {
char * errbuf=NULL;
Slapi_Entry *te = slapi_entry_alloc();
+
slapi_entry_set_sdn(te, sdn); /* sdn: copied */
rc = cb_access_allowed (pb, te, NULL, NULL, SLAPI_ACL_DELETE,&errbuf);
slapi_entry_free(te);
@@ -127,25 +127,24 @@ chaining_back_delete ( Slapi_PBlock *pb )
}
/*
- * Control management
- */
-
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
- }
+ * Control management
+ */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ return -1;
+ }
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/*
* Send LDAP operation to the remote host
@@ -153,43 +152,39 @@ chaining_back_delete ( Slapi_PBlock *pb )
rc = ldap_delete_ext( ld, dn, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
-
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
- return -1;
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,"FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
DS_Sleep(PR_INTERVAL_NO_WAIT);
@@ -198,15 +193,15 @@ chaining_back_delete ( Slapi_PBlock *pb )
default:
matched_msg=error_msg=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc) );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc) );
warned_parse_rc = 1;
}
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
@@ -227,10 +222,10 @@ chaining_back_delete ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -248,18 +243,18 @@ chaining_back_delete ( Slapi_PBlock *pb )
cb_release_op_connection(cb->pool,ld,0);
- /* Add control response sent by the farm server */
-
- for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
- if (serverctrls)
- ldap_controls_free(serverctrls);
+ /* Add control response sent by the farm server */
+ for (i=0; serverctrls && serverctrls[i];i++)
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_modify.c b/ldap/servers/plugins/chainingdb/cb_modify.c
index 65acb58..12d36da 100644
--- a/ldap/servers/plugins/chainingdb/cb_modify.c
+++ b/ldap/servers/plugins/chainingdb/cb_modify.c
@@ -56,21 +56,20 @@ static void cb_remove_illegal_mods(cb_backend_instance * inst, LDAPMod **mods);
int
chaining_back_modify ( Slapi_PBlock *pb )
{
-
- Slapi_Backend *be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMod ** mods;
- LDAPMessage * res;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *matched_msg, *error_msg;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMod ** mods;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals=NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf=NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
@@ -79,7 +78,6 @@ chaining_back_modify ( Slapi_PBlock *pb )
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
cb = cb_get_instance(be);
-
cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODIFY);
/* Check wether the chaining BE is available or not */
@@ -94,13 +92,11 @@ chaining_back_modify ( Slapi_PBlock *pb )
slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,"modify: target:<%s>\n",dn);
}
-
- ctrls=serverctrls=NULL;
+ ctrls = serverctrls = NULL;
slapi_pblock_get( pb, SLAPI_MODIFY_MODS, &mods );
slapi_pblock_get( pb, SLAPI_REQCONTROLS, &ctrls );
/* Check acls */
-
if ( cb->local_acl && !cb->associated_be_is_disabled ) {
char * errbuf=NULL;
Slapi_Entry *te = slapi_entry_alloc();
@@ -126,8 +122,7 @@ chaining_back_modify ( Slapi_PBlock *pb )
rc, ldap_err2string(rc));
warned_get_conn = 1;
}
- cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL,
- cnxerrbuf, 0, NULL);
+ cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL, cnxerrbuf, 0, NULL);
slapi_ch_free_string(&cnxerrbuf);
/* ping the farm.
* If the farm is unreachable, we increment the counter */
@@ -136,91 +131,88 @@ chaining_back_modify ( Slapi_PBlock *pb )
}
/* Control management */
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- /* Don't free mods here: are freed at the do_modify level */
- return -1;
- }
-
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- /* Don't free mods here: are freed at the do_modify level */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ /* Don't free mods here: are freed at the do_modify level */
+ return -1;
+ }
+
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ /* Don't free mods here: are freed at the do_modify level */
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* Remove illegal attributes from the mods */
cb_remove_illegal_mods(cb,mods);
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/* Send LDAP operation to the remote host */
rc = ldap_modify_ext( ld, dn, mods, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
/* connection handle released */
- return -1;
+ return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
- break;
- default:
+ break;
+ default:
matched_msg=error_msg=NULL;
serverctrls=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc));
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc));
warned_parse_rc = 1;
}
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(parse_rc));
slapi_ch_free((void **)&matched_msg);
slapi_ch_free((void **)&error_msg);
@@ -237,10 +229,10 @@ chaining_back_modify ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -261,20 +253,20 @@ chaining_back_modify ( Slapi_PBlock *pb )
/* Add control response sent by the farm server */
for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
/* SLAPI_ADD_RESCONTROL dups controls */
if (serverctrls)
- ldap_controls_free(serverctrls);
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
-
/* Never reached */
/* return 0; */
}
@@ -283,30 +275,28 @@ chaining_back_modify ( Slapi_PBlock *pb )
static void
cb_remove_illegal_mods(cb_backend_instance *inst, LDAPMod **mods)
{
- int i, j;
- LDAPMod *tmp;
+ int i, j;
+ LDAPMod *tmp;
if ( inst->illegal_attributes != NULL ) { /* Unlikely to happen */
-
- slapi_rwlock_wrlock(inst->rwl_config_lock);
+ slapi_rwlock_wrlock(inst->rwl_config_lock);
for (j=0; inst->illegal_attributes[j]; j++) {
- for ( i = 0; mods && mods[i] != NULL; i++ ) {
+ for ( i = 0; mods && mods[i] != NULL; i++ ) {
if (slapi_attr_types_equivalent(inst->illegal_attributes[j],mods[i]->mod_type)) {
- tmp = mods[i];
- for ( j = i; mods[j] != NULL; j++ ) {
- mods[j] = mods[j + 1];
- }
- slapi_ch_free( (void**)&(tmp->mod_type) );
- if ( tmp->mod_bvalues != NULL ) {
- ber_bvecfree( tmp->mod_bvalues );
- }
- slapi_ch_free( (void**)&tmp );
- i--;
+ tmp = mods[i];
+ for ( j = i; mods[j] != NULL; j++ ) {
+ mods[j] = mods[j + 1];
+ }
+ slapi_ch_free( (void**)&(tmp->mod_type) );
+ if ( tmp->mod_bvalues != NULL ) {
+ ber_bvecfree( tmp->mod_bvalues );
+ }
+ slapi_ch_free( (void**)&tmp );
+ i--;
}
}
}
-
- slapi_rwlock_unlock(inst->rwl_config_lock);
+ slapi_rwlock_unlock(inst->rwl_config_lock);
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_modrdn.c b/ldap/servers/plugins/chainingdb/cb_modrdn.c
index 1ce6c60..21903f7 100644
--- a/ldap/servers/plugins/chainingdb/cb_modrdn.c
+++ b/ldap/servers/plugins/chainingdb/cb_modrdn.c
@@ -54,46 +54,47 @@
int
chaining_back_modrdn ( Slapi_PBlock *pb )
{
- Slapi_Backend * be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMessage *res;
- char *matched_msg, *error_msg;
- char *ndn = NULL;
- Slapi_DN *sdn = NULL;
- int deleteoldrdn = 0;
- Slapi_DN *newsuperior = NULL;
- char *newrdn = NULL;
- char * cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
-
- if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
- cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
- return -1;
- }
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *newsuperior = NULL;
+ Slapi_DN *sdn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *ndn = NULL;
+ char *newrdn = NULL;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int deleteoldrdn = 0;
+ int rc, parse_rc, msgid, i;
+
+
+ if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
+ cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
+ return -1;
+ }
- slapi_pblock_get( pb, SLAPI_BACKEND, &be );
- cb = cb_get_instance(be);
+ slapi_pblock_get( pb, SLAPI_BACKEND, &be );
+ cb = cb_get_instance(be);
- cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODRDN);
+ cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODRDN);
- /* Check wether the chaining BE is available or not */
- if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
- }
+ /* Check wether the chaining BE is available or not */
+ if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
+ return -1;
+ }
- slapi_pblock_get( pb, SLAPI_MODRDN_TARGET_SDN, &sdn );
- /* newrdn is passed to ldap_rename, which does not require case-ignored
- * newrdn. */
- slapi_pblock_get( pb, SLAPI_MODRDN_NEWRDN, &newrdn );
- slapi_pblock_get( pb, SLAPI_MODRDN_NEWSUPERIOR_SDN, &newsuperior );
- slapi_pblock_get( pb, SLAPI_MODRDN_DELOLDRDN, &deleteoldrdn );
+ slapi_pblock_get( pb, SLAPI_MODRDN_TARGET_SDN, &sdn );
+ /* newrdn is passed to ldap_rename, which does not require case-ignored
+ * newrdn. */
+ slapi_pblock_get( pb, SLAPI_MODRDN_NEWRDN, &newrdn );
+ slapi_pblock_get( pb, SLAPI_MODRDN_NEWSUPERIOR_SDN, &newsuperior );
+ slapi_pblock_get( pb, SLAPI_MODRDN_DELOLDRDN, &deleteoldrdn );
- ndn = (char *)slapi_sdn_get_ndn(sdn);
+ ndn = (char *)slapi_sdn_get_ndn(sdn);
if (cb->local_acl && !cb->associated_be_is_disabled) {
/*
* Check local acls
@@ -111,7 +112,7 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
slapi_ch_free((void **)&errbuf);
return -1;
}
- }
+ }
/*
* Grab a connection handle
@@ -135,80 +136,77 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
}
/*
- * Control management
- */
-
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
- }
+ * Control management
+ */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ return -1;
+ }
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/*
* Send LDAP operation to the remote host
*/
-
rc = ldap_rename ( ld, ndn, newrdn, slapi_sdn_get_dn(newsuperior),
deleteoldrdn, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
- return -1;
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ return -1;
}
rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
switch ( rc ) {
case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
+
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
break;
+
default:
matched_msg=error_msg=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
@@ -259,18 +257,18 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
cb_release_op_connection(cb->pool,ld,0);
- /* Add control response sent by the farm server */
-
- for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
- if (serverctrls)
- ldap_controls_free(serverctrls);
+ /* Add control response sent by the farm server */
+ for (i=0; serverctrls && serverctrls[i]; i++)
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_search.c b/ldap/servers/plugins/chainingdb/cb_search.c
index a27e767..faca2e3 100644
--- a/ldap/servers/plugins/chainingdb/cb_search.c
+++ b/ldap/servers/plugins/chainingdb/cb_search.c
@@ -54,31 +54,30 @@
int
chainingdb_build_candidate_list ( Slapi_PBlock *pb )
-{
-
- Slapi_Backend * be;
- Slapi_Operation * op;
- char *filter;
- const char *target = NULL;
- Slapi_DN *target_sdn = NULL;
- int scope,attrsonly,sizelimit,timelimit,rc,searchreferral;
- char **attrs=NULL;
- LDAPControl **controls=NULL;
- LDAPControl **ctrls=NULL;
- LDAP *ld=NULL;
- cb_backend_instance *cb = NULL;
- cb_searchContext *ctx=NULL;
- struct timeval timeout;
- time_t optime;
- int doit,parse_rc;
- LDAPMessage *res=NULL;
- char *matched_msg,*error_msg;
- LDAPControl **serverctrls=NULL;
- char **referrals=NULL;
- char *cnxerrbuf=NULL;
- time_t endbefore=0;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+{
+ cb_backend_instance *cb = NULL;
+ cb_outgoing_conn *cnx;
+ cb_searchContext *ctx = NULL;
+ Slapi_Backend *be;
+ Slapi_Operation *op;
+ LDAPControl **serverctrls = NULL;
+ LDAPControl **controls = NULL;
+ LDAPControl **ctrls = NULL;
+ LDAPMessage *res = NULL;
+ LDAP *ld = NULL;
+ Slapi_DN *target_sdn = NULL;
+ const char *target = NULL;
+ char *filter;
+ char **attrs = NULL;
+ struct timeval timeout;
+ time_t optime;
+ time_t endbefore = 0;
+ time_t endtime = 0;
+ char *matched_msg, *error_msg;
+ char **referrals = NULL;
+ char *cnxerrbuf = NULL;
+ int scope, attrsonly, sizelimit, timelimit, searchreferral;
+ int rc, parse_rc, doit;
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
cb = cb_get_instance(be);
@@ -92,53 +91,50 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
target = slapi_sdn_get_dn(target_sdn);
if ( LDAP_SUCCESS != (parse_rc=cb_forward_operation(pb) )) {
-
/* Don't return errors */
-
if (cb_debug_on()) {
slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
"local search: base:<%s> scope:<%s> filter:<%s>\n",target,
scope==LDAP_SCOPE_SUBTREE?"SUBTREE":scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE" , filter);
}
- ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
- ctx->type = CB_SEARCHCONTEXT_ENTRY;
- ctx->data=NULL;
-
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- return 0;
- }
+ ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
+ ctx->type = CB_SEARCHCONTEXT_ENTRY;
+ ctx->data=NULL;
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
+
+ return 0;
+ }
- cb_update_monitor_info(pb,cb,SLAPI_OPERATION_SEARCH);
+ cb_update_monitor_info(pb,cb,SLAPI_OPERATION_SEARCH);
/* Check wether the chaining BE is available or not */
- if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
- }
+ if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
+ return -1;
+ }
if (cb_debug_on()) {
- slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
- "chained search: base:<%s> scope:<%s> filter:<%s>\n",target,
- scope==LDAP_SCOPE_SUBTREE?"SUBTREE":scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE" , filter);
+ slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
+ "chained search: base:<%s> scope:<%s> filter:<%s>\n",target,
+ scope==LDAP_SCOPE_SUBTREE ? "SUBTREE": scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE",
+ filter);
}
- slapi_pblock_get( pb, SLAPI_SEARCH_ATTRS, &attrs );
- slapi_pblock_get( pb, SLAPI_SEARCH_ATTRSONLY, &attrsonly );
- slapi_pblock_get( pb, SLAPI_REQCONTROLS, &controls );
- slapi_pblock_get( pb, SLAPI_SEARCH_TIMELIMIT, &timelimit );
- slapi_pblock_get( pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit );
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,NULL);
-
+ slapi_pblock_get( pb, SLAPI_SEARCH_ATTRS, &attrs );
+ slapi_pblock_get( pb, SLAPI_SEARCH_ATTRSONLY, &attrsonly );
+ slapi_pblock_get( pb, SLAPI_REQCONTROLS, &controls );
+ slapi_pblock_get( pb, SLAPI_SEARCH_TIMELIMIT, &timelimit );
+ slapi_pblock_get( pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit );
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,NULL);
if ((scope != LDAP_SCOPE_BASE) && (scope != LDAP_SCOPE_ONELEVEL) && (scope != LDAP_SCOPE_SUBTREE)) {
- cb_send_ldap_result( pb, LDAP_PROTOCOL_ERROR, NULL, "Bad scope", 0, NULL );
+ cb_send_ldap_result( pb, LDAP_PROTOCOL_ERROR, NULL, "Bad scope", 0, NULL );
return 1;
}
searchreferral=cb->searchreferral;
if (( scope != LDAP_SCOPE_BASE ) && ( searchreferral )) {
-
int i;
struct berval bv,*bvals[2];
Slapi_Entry ** aciArray=(Slapi_Entry **) slapi_ch_malloc(2*sizeof(Slapi_Entry *));
@@ -168,9 +164,8 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
ctx->type = CB_SEARCHCONTEXT_ENTRY;
ctx->data=aciArray;
-
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- return 0;
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
+ return 0;
}
/*
@@ -184,9 +179,9 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
time_t now=current_time();
endbefore=optime + timelimit;
if (now >= endbefore) {
- cb_send_ldap_result( pb, LDAP_TIMELIMIT_EXCEEDED, NULL,NULL, 0, NULL);
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_ENTRY, NULL );
- return 1;
+ cb_send_ldap_result( pb, LDAP_TIMELIMIT_EXCEEDED, NULL,NULL, 0, NULL);
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_ENTRY, NULL );
+ return 1;
}
timeout.tv_sec=(time_t)timelimit-(now-optime);
timeout.tv_usec=0;
@@ -200,20 +195,15 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
if ( (attrs == NULL) && operation_is_flag_set(op, OP_FLAG_INTERNAL) ) {
attrs = cb->every_attribute;
-
- }
- else
- {
+ } else {
int i;
- if ( attrs != NULL )
- {
+ if ( attrs != NULL ) {
for ( i = 0; attrs[i] != NULL; i++ ) {
- if ( strcasecmp( "nsrole", attrs[i] ) == 0 )
- {
+ if ( strcasecmp( "nsrole", attrs[i] ) == 0 ){
attrs = cb->every_attribute;
break;
}
- }
+ }
}
}
@@ -245,19 +235,19 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
*/
if ( LDAP_SUCCESS != (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH ))) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,0);
- return 1;
- }
-
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return 1;
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,0);
+ return 1;
+ }
+
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return 1;
}
- ctx = (cb_searchContext *) slapi_ch_calloc(1,sizeof(cb_searchContext));
+ ctx = (cb_searchContext *) slapi_ch_calloc(1,sizeof(cb_searchContext));
/*
** We need to store the connection handle in the search context
@@ -276,14 +266,14 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
timeout.tv_sec=timeout.tv_usec=-1;
/* heart-beat management */
- if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ if (cb->max_idle_time>0)
+ endtime=current_time() + cb->max_idle_time;
- rc=ldap_search_ext(ld ,target,scope,filter,attrs,attrsonly,
- ctrls, NULL, &timeout,sizelimit, &(ctx->msgid) );
+ rc = ldap_search_ext(ld ,target,scope,filter,attrs,attrsonly,
+ ctrls, NULL, &timeout,sizelimit, &(ctx->msgid) );
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
if ( LDAP_SUCCESS != rc ) {
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
@@ -299,136 +289,131 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
doit=1;
while (doit) {
+ if (cb_check_forward_abandon(cb,pb,ctx->ld,ctx->msgid)) {
+ slapi_ch_free((void **) &ctx);
+ return 1;
+ }
- if (cb_check_forward_abandon(cb,pb,ctx->ld,ctx->msgid)) {
- slapi_ch_free((void **) &ctx);
- return 1;
- }
+ rc = ldap_result(ld,ctx->msgid,LDAP_MSG_ONE,&cb->abandon_timeout,&res);
+ switch ( rc ) {
+ case -1:
+ /* An error occurred. return now */
+ rc = slapi_ldap_get_lderrno(ld,NULL,NULL);
+ /* tuck away some errors in a OPERATION_ERROR */
+ if (CB_LDAP_CONN_ERROR(rc)) {
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string( rc ), 0, NULL);
+ } else {
+ cb_send_ldap_result(pb,rc, NULL, NULL,0,NULL);
+ }
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
- rc=ldap_result(ld,ctx->msgid,LDAP_MSG_ONE,&cb->abandon_timeout,&res);
- switch ( rc ) {
- case -1:
- /* An error occurred. return now */
- rc = slapi_ldap_get_lderrno(ld,NULL,NULL);
- /* tuck away some errors in a OPERATION_ERROR */
- if (CB_LDAP_CONN_ERROR(rc)) {
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string( rc ), 0, NULL);
- } else {
- cb_send_ldap_result(pb,rc, NULL, NULL,0,NULL);
- }
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
- case 0:
-
- /* Local timeout management */
- if (timelimit != -1) {
- if (current_time() > endbefore) {
-
- slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
- "Local timeout expiration\n");
-
- cb_send_ldap_result(pb,LDAP_TIMELIMIT_EXCEEDED,
- NULL,NULL, 0, NULL);
- /* Force connection close */
- cb_release_op_connection(cb->pool,ld,1);
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
- }
- }
- /* heart-beat management */
- if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
+ case 0:
+ /* Local timeout management */
+ if (timelimit != -1) {
+ if (current_time() > endbefore) {
+ slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
+ "Local timeout expiration\n");
+ cb_send_ldap_result(pb,LDAP_TIMELIMIT_EXCEEDED,
+ NULL,NULL, 0, NULL);
+ /* Force connection close */
+ cb_release_op_connection(cb->pool,ld,1);
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
}
+ }
+ /* heart-beat management */
+ if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
+ }
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
- break;
- case LDAP_RES_SEARCH_ENTRY:
- case LDAP_RES_SEARCH_REFERENCE:
- /* Some results received */
- /* don't parse result here */
- ctx->pending_result=res;
- ctx->pending_result_type=rc;
- doit=0;
- break;
- case LDAP_RES_SEARCH_RESULT:
+ break;
+
+ case LDAP_RES_SEARCH_ENTRY:
+ case LDAP_RES_SEARCH_REFERENCE:
+ /* Some results received */
+ /* don't parse result here */
+ ctx->pending_result=res;
+ ctx->pending_result_type=rc;
+ doit = 0;
+ break;
+
+ case LDAP_RES_SEARCH_RESULT:
+ matched_msg=NULL;
+ error_msg=NULL;
+ referrals=NULL;
+ serverctrls=NULL;
+ parse_rc=ldap_parse_result(ld,res,&rc,&matched_msg,
+ &error_msg,&referrals, &serverctrls, 0 );
+ if ( parse_rc != LDAP_SUCCESS ) {
+ static int warned_parse_rc = 0;
+ if (!warned_parse_rc && error_msg) {
+ slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
+ warned_parse_rc = 1;
+ }
+ cb_send_ldap_result( pb, parse_rc, NULL, ENDUSERMSG, 0, NULL );
+ rc=-1;
+ } else if ( rc != LDAP_SUCCESS ) {
+ static int warned_rc = 0;
+ if (!warned_rc) {
+ slapi_ldap_get_lderrno( ctx->ld, &matched_msg, &error_msg );
+ slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
+ warned_rc = 1;
+ }
+ cb_send_ldap_result( pb, rc, NULL, ENDUSERMSG, 0, NULL);
+ /* BEWARE: matched_msg and error_msg points */
+ /* to ld fields. */
matched_msg=NULL;
error_msg=NULL;
- referrals=NULL;
- serverctrls=NULL;
- parse_rc=ldap_parse_result(ld,res,&rc,&matched_msg,
- &error_msg,&referrals, &serverctrls, 0 );
- if ( parse_rc != LDAP_SUCCESS ) {
- static int warned_parse_rc = 0;
- if (!warned_parse_rc && error_msg) {
- slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
- warned_parse_rc = 1;
- }
- cb_send_ldap_result( pb, parse_rc, NULL,
- ENDUSERMSG, 0, NULL );
- rc=-1;
- } else if ( rc != LDAP_SUCCESS ) {
- static int warned_rc = 0;
- if (!warned_rc) {
- slapi_ldap_get_lderrno( ctx->ld,
- &matched_msg, &error_msg );
- slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
- warned_rc = 1;
- }
- cb_send_ldap_result( pb, rc, NULL, ENDUSERMSG, 0, NULL);
- /* BEWARE: matched_msg and error_msg points */
- /* to ld fields. */
- matched_msg=NULL;
- error_msg=NULL;
- rc=-1;
- }
+ rc = -1;
+ }
+
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
+ if (referrals)
+ charray_free(referrals);
+ if (rc != LDAP_SUCCESS) {
+ cb_release_op_connection(cb->pool,ld,
+ CB_LDAP_CONN_ERROR(rc));
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return -1;
+ }
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (serverctrls)
- ldap_controls_free(serverctrls);
- if (referrals)
- charray_free(referrals);
-
- if (rc!=LDAP_SUCCESS) {
- cb_release_op_connection(cb->pool,ld,
- CB_LDAP_CONN_ERROR(rc));
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return -1;
- }
-
- /* Store the msg in the ctx */
- /* Parsed in iterate. */
-
- ctx->pending_result=res;
- ctx->pending_result_type=LDAP_RES_SEARCH_RESULT;
- doit=0;
+ /* Store the msg in the ctx */
+ /* Parsed in iterate. */
+ ctx->pending_result = res;
+ ctx->pending_result_type = LDAP_RES_SEARCH_RESULT;
+ doit = 0;
}
}
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
return 0;
}
9 years, 1 month
ldap/servers
by Mark Reynolds
ldap/servers/plugins/chainingdb/cb_add.c | 128 ++++-----
ldap/servers/plugins/chainingdb/cb_delete.c | 133 ++++-----
ldap/servers/plugins/chainingdb/cb_modify.c | 172 +++++-------
ldap/servers/plugins/chainingdb/cb_modrdn.c | 158 +++++------
ldap/servers/plugins/chainingdb/cb_search.c | 385 +++++++++++++---------------
5 files changed, 469 insertions(+), 507 deletions(-)
New commits:
commit d341b7734648e71c1b1ded398971c23b6fbdc1fb
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Apr 29 18:29:41 2014 -0400
Ticket 47792 - code cleanup
https://fedorahosted.org/389/ticket/47792
Reviewed by: rmeggins(Thanks!)
diff --git a/ldap/servers/plugins/chainingdb/cb_add.c b/ldap/servers/plugins/chainingdb/cb_add.c
index 07b90fa..03d0fc9 100644
--- a/ldap/servers/plugins/chainingdb/cb_add.c
+++ b/ldap/servers/plugins/chainingdb/cb_add.c
@@ -54,23 +54,22 @@
int
chaining_back_add ( Slapi_PBlock *pb )
{
-
- Slapi_Backend *be;
- Slapi_Entry *e;
- cb_backend_instance *cb;
- LDAPControl **serverctrls=NULL;
- LDAPControl **ctrls=NULL;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMod ** mods;
- LDAPMessage * res;
- char * matched_msg, *error_msg;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ Slapi_Entry *e;
+ cb_backend_instance *cb;
+ LDAPControl **serverctrls = NULL;
+ LDAPControl **ctrls = NULL;
+ LDAPMod **mods;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( (rc=cb_forward_operation(pb)) != LDAP_SUCCESS ) {
cb_send_ldap_result( pb, rc, NULL, "Remote data access disabled", 0, NULL );
@@ -85,7 +84,7 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Check wether the chaining BE is available or not */
if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
+ return -1;
}
slapi_pblock_get( pb, SLAPI_ADD_TARGET_SDN, &sdn );
@@ -108,8 +107,8 @@ chaining_back_add ( Slapi_PBlock *pb )
cb_eliminate_illegal_attributes(cb,e);
if ((rc = slapi_entry2mods ((const Slapi_Entry *)e, NULL, &mods)) != LDAP_SUCCESS) {
- cb_send_ldap_result( pb, rc,NULL,NULL, 0, NULL);
- return -1;
+ cb_send_ldap_result( pb, rc,NULL,NULL, 0, NULL);
+ return -1;
}
/* Grab a connection handle */
@@ -118,12 +117,11 @@ chaining_back_add ( Slapi_PBlock *pb )
static int warned_get_conn = 0;
if (!warned_get_conn) {
slapi_log_error(SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "cb_get_connection failed (%d) %s\n",
- rc, ldap_err2string(rc));
+ "cb_get_connection failed (%d) %s\n",
+ rc, ldap_err2string(rc));
warned_get_conn = 1;
}
- cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL,
- cnxerrbuf, 0, NULL);
+ cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL, cnxerrbuf, 0, NULL);
ldap_mods_free(mods, 1);
slapi_ch_free_string(&cnxerrbuf);
/* ping the farm.
@@ -135,23 +133,23 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Control management */
if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH)) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
- return -1;
+ return -1;
}
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
ldap_mods_free(mods,1);
if ( NULL != ctrls)
ldap_controls_free(ctrls);
- return -1;
- }
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/* Send LDAP operation to the remote host */
rc = ldap_add_ext( ld, dn, mods, ctrls, NULL, &msgid );
@@ -161,10 +159,9 @@ chaining_back_add ( Slapi_PBlock *pb )
if ( rc != LDAP_SUCCESS ) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "ldap_add_ext failed -- %s\n", ldap_err2string(rc) );
+ "ldap_add_ext failed -- %s\n", ldap_err2string(rc) );
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
return -1;
@@ -183,31 +180,31 @@ chaining_back_add ( Slapi_PBlock *pb )
return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /*
+ * does not respond. give up and return a
+ * error to the client.
+ */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
ldap_mods_free(mods,1);
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
DS_Sleep(PR_INTERVAL_NO_WAIT);
@@ -219,20 +216,19 @@ chaining_back_add ( Slapi_PBlock *pb )
referrals=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc));
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc));
warned_parse_rc = 1;
}
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(parse_rc));
ldap_mods_free(mods,1);
slapi_ch_free((void **)&matched_msg);
@@ -250,10 +246,10 @@ chaining_back_add ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -276,22 +272,20 @@ chaining_back_add ( Slapi_PBlock *pb )
/* Add control response sent by the farm server */
for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
if (serverctrls)
- ldap_controls_free(serverctrls);
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
-
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
slapi_entry_free(e);
- slapi_pblock_set( pb, SLAPI_ADD_ENTRY, NULL );
+ slapi_pblock_set( pb, SLAPI_ADD_ENTRY, NULL );
return 0;
}
}
-
/* Never reached */
}
diff --git a/ldap/servers/plugins/chainingdb/cb_delete.c b/ldap/servers/plugins/chainingdb/cb_delete.c
index 09972b2..97807ef 100644
--- a/ldap/servers/plugins/chainingdb/cb_delete.c
+++ b/ldap/servers/plugins/chainingdb/cb_delete.c
@@ -54,20 +54,19 @@
int
chaining_back_delete ( Slapi_PBlock *pb )
{
-
- Slapi_Backend * be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMessage * res;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *matched_msg, *error_msg;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
@@ -94,6 +93,7 @@ chaining_back_delete ( Slapi_PBlock *pb )
if (cb->local_acl && !cb->associated_be_is_disabled) {
char * errbuf=NULL;
Slapi_Entry *te = slapi_entry_alloc();
+
slapi_entry_set_sdn(te, sdn); /* sdn: copied */
rc = cb_access_allowed (pb, te, NULL, NULL, SLAPI_ACL_DELETE,&errbuf);
slapi_entry_free(te);
@@ -127,25 +127,24 @@ chaining_back_delete ( Slapi_PBlock *pb )
}
/*
- * Control management
- */
-
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
- }
+ * Control management
+ */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ return -1;
+ }
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/*
* Send LDAP operation to the remote host
@@ -153,43 +152,39 @@ chaining_back_delete ( Slapi_PBlock *pb )
rc = ldap_delete_ext( ld, dn, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
-
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
- return -1;
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,"FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
DS_Sleep(PR_INTERVAL_NO_WAIT);
@@ -198,15 +193,15 @@ chaining_back_delete ( Slapi_PBlock *pb )
default:
matched_msg=error_msg=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc) );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc) );
warned_parse_rc = 1;
}
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
@@ -227,10 +222,10 @@ chaining_back_delete ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -248,18 +243,18 @@ chaining_back_delete ( Slapi_PBlock *pb )
cb_release_op_connection(cb->pool,ld,0);
- /* Add control response sent by the farm server */
-
- for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
- if (serverctrls)
- ldap_controls_free(serverctrls);
+ /* Add control response sent by the farm server */
+ for (i=0; serverctrls && serverctrls[i];i++)
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_modify.c b/ldap/servers/plugins/chainingdb/cb_modify.c
index 65acb58..12d36da 100644
--- a/ldap/servers/plugins/chainingdb/cb_modify.c
+++ b/ldap/servers/plugins/chainingdb/cb_modify.c
@@ -56,21 +56,20 @@ static void cb_remove_illegal_mods(cb_backend_instance * inst, LDAPMod **mods);
int
chaining_back_modify ( Slapi_PBlock *pb )
{
-
- Slapi_Backend *be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMod ** mods;
- LDAPMessage * res;
- const char *dn = NULL;
- Slapi_DN *sdn = NULL;
- char *matched_msg, *error_msg;
- char *cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMod ** mods;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *sdn = NULL;
+ const char *dn = NULL;
+ char **referrals=NULL;
+ char *matched_msg, *error_msg;
+ char *cnxerrbuf=NULL;
+ time_t endtime = 0;
+ int rc, parse_rc, msgid, i;
if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
@@ -79,7 +78,6 @@ chaining_back_modify ( Slapi_PBlock *pb )
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
cb = cb_get_instance(be);
-
cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODIFY);
/* Check wether the chaining BE is available or not */
@@ -94,13 +92,11 @@ chaining_back_modify ( Slapi_PBlock *pb )
slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,"modify: target:<%s>\n",dn);
}
-
- ctrls=serverctrls=NULL;
+ ctrls = serverctrls = NULL;
slapi_pblock_get( pb, SLAPI_MODIFY_MODS, &mods );
slapi_pblock_get( pb, SLAPI_REQCONTROLS, &ctrls );
/* Check acls */
-
if ( cb->local_acl && !cb->associated_be_is_disabled ) {
char * errbuf=NULL;
Slapi_Entry *te = slapi_entry_alloc();
@@ -126,8 +122,7 @@ chaining_back_modify ( Slapi_PBlock *pb )
rc, ldap_err2string(rc));
warned_get_conn = 1;
}
- cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL,
- cnxerrbuf, 0, NULL);
+ cb_send_ldap_result(pb, LDAP_OPERATIONS_ERROR, NULL, cnxerrbuf, 0, NULL);
slapi_ch_free_string(&cnxerrbuf);
/* ping the farm.
* If the farm is unreachable, we increment the counter */
@@ -136,91 +131,88 @@ chaining_back_modify ( Slapi_PBlock *pb )
}
/* Control management */
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- /* Don't free mods here: are freed at the do_modify level */
- return -1;
- }
-
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- /* Don't free mods here: are freed at the do_modify level */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ /* Don't free mods here: are freed at the do_modify level */
+ return -1;
+ }
+
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ /* Don't free mods here: are freed at the do_modify level */
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* Remove illegal attributes from the mods */
cb_remove_illegal_mods(cb,mods);
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/* Send LDAP operation to the remote host */
rc = ldap_modify_ext( ld, dn, mods, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
/* connection handle released */
- return -1;
+ return -1;
}
- rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
- switch ( rc ) {
- case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
+ switch ( rc ) {
+ case -1:
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
- break;
- default:
+ break;
+ default:
matched_msg=error_msg=NULL;
serverctrls=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
if (!warned_parse_rc) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- ldap_err2string(parse_rc));
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ ldap_err2string(parse_rc));
warned_parse_rc = 1;
}
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ENDUSERMSG, 0, NULL );
+ ENDUSERMSG, 0, NULL );
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(parse_rc));
slapi_ch_free((void **)&matched_msg);
slapi_ch_free((void **)&error_msg);
@@ -237,10 +229,10 @@ chaining_back_modify ( Slapi_PBlock *pb )
static int warned_rc = 0;
if (!warned_rc && error_msg) {
slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
warned_rc = 1;
}
cb_send_ldap_result( pb, rc, matched_msg, ENDUSERMSG, 0, refs);
@@ -261,20 +253,20 @@ chaining_back_modify ( Slapi_PBlock *pb )
/* Add control response sent by the farm server */
for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
/* SLAPI_ADD_RESCONTROL dups controls */
if (serverctrls)
- ldap_controls_free(serverctrls);
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
-
/* Never reached */
/* return 0; */
}
@@ -283,30 +275,28 @@ chaining_back_modify ( Slapi_PBlock *pb )
static void
cb_remove_illegal_mods(cb_backend_instance *inst, LDAPMod **mods)
{
- int i, j;
- LDAPMod *tmp;
+ int i, j;
+ LDAPMod *tmp;
if ( inst->illegal_attributes != NULL ) { /* Unlikely to happen */
-
- slapi_rwlock_wrlock(inst->rwl_config_lock);
+ slapi_rwlock_wrlock(inst->rwl_config_lock);
for (j=0; inst->illegal_attributes[j]; j++) {
- for ( i = 0; mods && mods[i] != NULL; i++ ) {
+ for ( i = 0; mods && mods[i] != NULL; i++ ) {
if (slapi_attr_types_equivalent(inst->illegal_attributes[j],mods[i]->mod_type)) {
- tmp = mods[i];
- for ( j = i; mods[j] != NULL; j++ ) {
- mods[j] = mods[j + 1];
- }
- slapi_ch_free( (void**)&(tmp->mod_type) );
- if ( tmp->mod_bvalues != NULL ) {
- ber_bvecfree( tmp->mod_bvalues );
- }
- slapi_ch_free( (void**)&tmp );
- i--;
+ tmp = mods[i];
+ for ( j = i; mods[j] != NULL; j++ ) {
+ mods[j] = mods[j + 1];
+ }
+ slapi_ch_free( (void**)&(tmp->mod_type) );
+ if ( tmp->mod_bvalues != NULL ) {
+ ber_bvecfree( tmp->mod_bvalues );
+ }
+ slapi_ch_free( (void**)&tmp );
+ i--;
}
}
}
-
- slapi_rwlock_unlock(inst->rwl_config_lock);
+ slapi_rwlock_unlock(inst->rwl_config_lock);
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_modrdn.c b/ldap/servers/plugins/chainingdb/cb_modrdn.c
index 1ce6c60..21903f7 100644
--- a/ldap/servers/plugins/chainingdb/cb_modrdn.c
+++ b/ldap/servers/plugins/chainingdb/cb_modrdn.c
@@ -54,46 +54,47 @@
int
chaining_back_modrdn ( Slapi_PBlock *pb )
{
- Slapi_Backend * be;
- cb_backend_instance *cb;
- LDAPControl **ctrls, **serverctrls;
- int rc,parse_rc,msgid,i;
- LDAP *ld=NULL;
- char **referrals=NULL;
- LDAPMessage *res;
- char *matched_msg, *error_msg;
- char *ndn = NULL;
- Slapi_DN *sdn = NULL;
- int deleteoldrdn = 0;
- Slapi_DN *newsuperior = NULL;
- char *newrdn = NULL;
- char * cnxerrbuf=NULL;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
-
- if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
- cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
- return -1;
- }
+ cb_outgoing_conn *cnx;
+ Slapi_Backend *be;
+ cb_backend_instance *cb;
+ LDAPControl **ctrls, **serverctrls;
+ LDAPMessage *res;
+ LDAP *ld = NULL;
+ Slapi_DN *newsuperior = NULL;
+ Slapi_DN *sdn = NULL;
+ char **referrals = NULL;
+ char *matched_msg, *error_msg;
+ char *ndn = NULL;
+ char *newrdn = NULL;
+ char *cnxerrbuf = NULL;
+ time_t endtime = 0;
+ int deleteoldrdn = 0;
+ int rc, parse_rc, msgid, i;
+
+
+ if ( LDAP_SUCCESS != (rc=cb_forward_operation(pb) )) {
+ cb_send_ldap_result( pb, rc, NULL, "Chaining forbidden", 0, NULL );
+ return -1;
+ }
- slapi_pblock_get( pb, SLAPI_BACKEND, &be );
- cb = cb_get_instance(be);
+ slapi_pblock_get( pb, SLAPI_BACKEND, &be );
+ cb = cb_get_instance(be);
- cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODRDN);
+ cb_update_monitor_info(pb,cb,SLAPI_OPERATION_MODRDN);
- /* Check wether the chaining BE is available or not */
- if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
- }
+ /* Check wether the chaining BE is available or not */
+ if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
+ return -1;
+ }
- slapi_pblock_get( pb, SLAPI_MODRDN_TARGET_SDN, &sdn );
- /* newrdn is passed to ldap_rename, which does not require case-ignored
- * newrdn. */
- slapi_pblock_get( pb, SLAPI_MODRDN_NEWRDN, &newrdn );
- slapi_pblock_get( pb, SLAPI_MODRDN_NEWSUPERIOR_SDN, &newsuperior );
- slapi_pblock_get( pb, SLAPI_MODRDN_DELOLDRDN, &deleteoldrdn );
+ slapi_pblock_get( pb, SLAPI_MODRDN_TARGET_SDN, &sdn );
+ /* newrdn is passed to ldap_rename, which does not require case-ignored
+ * newrdn. */
+ slapi_pblock_get( pb, SLAPI_MODRDN_NEWRDN, &newrdn );
+ slapi_pblock_get( pb, SLAPI_MODRDN_NEWSUPERIOR_SDN, &newsuperior );
+ slapi_pblock_get( pb, SLAPI_MODRDN_DELOLDRDN, &deleteoldrdn );
- ndn = (char *)slapi_sdn_get_ndn(sdn);
+ ndn = (char *)slapi_sdn_get_ndn(sdn);
if (cb->local_acl && !cb->associated_be_is_disabled) {
/*
* Check local acls
@@ -111,7 +112,7 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
slapi_ch_free((void **)&errbuf);
return -1;
}
- }
+ }
/*
* Grab a connection handle
@@ -135,80 +136,77 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
}
/*
- * Control management
- */
-
- if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
- }
+ * Control management
+ */
+ if ( (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH )) != LDAP_SUCCESS ) {
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ return -1;
+ }
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return -1;
- }
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return -1;
+ }
/* heart-beat management */
if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ endtime=current_time() + cb->max_idle_time;
/*
* Send LDAP operation to the remote host
*/
-
rc = ldap_rename ( ld, ndn, newrdn, slapi_sdn_get_dn(newsuperior),
deleteoldrdn, ctrls, NULL, &msgid );
if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ ldap_controls_free(ctrls);
if ( rc != LDAP_SUCCESS ) {
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- return -1;
+ return -1;
}
while ( 1 ) {
-
- if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
- return -1;
+ if (cb_check_forward_abandon(cb,pb,ld,msgid)) {
+ return -1;
}
rc = ldap_result( ld, msgid, 0, &cb->abandon_timeout, &res );
switch ( rc ) {
case -1:
- cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
+ cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
+
case 0:
if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ /* does not respond. give up and return a error to the client. */
- /* does not respond. give up and return a*/
- /* error to the client. */
-
- /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ /*cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
ldap_err2string(rc), 0, NULL);*/
cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL, "FARM SERVER TEMPORARY UNAVAILABLE", 0, NULL);
cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
if (res)
ldap_msgfree(res);
- return -1;
+ return -1;
}
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
break;
+
default:
matched_msg=error_msg=NULL;
parse_rc = ldap_parse_result( ld, res, &rc, &matched_msg,
- &error_msg, &referrals, &serverctrls, 1 );
+ &error_msg, &referrals, &serverctrls, 1 );
if ( parse_rc != LDAP_SUCCESS ) {
static int warned_parse_rc = 0;
@@ -259,18 +257,18 @@ chaining_back_modrdn ( Slapi_PBlock *pb )
cb_release_op_connection(cb->pool,ld,0);
- /* Add control response sent by the farm server */
-
- for (i=0; serverctrls && serverctrls[i];i++)
- slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
- if (serverctrls)
- ldap_controls_free(serverctrls);
+ /* Add control response sent by the farm server */
+ for (i=0; serverctrls && serverctrls[i]; i++)
+ slapi_pblock_set( pb, SLAPI_ADD_RESCONTROL, serverctrls[i]);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
/* jarnou: free matched_msg, error_msg, and referrals if necessary */
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (referrals)
- charray_free(referrals);
- cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (referrals)
+ charray_free(referrals);
+ cb_send_ldap_result( pb, LDAP_SUCCESS, NULL, NULL, 0, NULL );
+
return 0;
}
}
diff --git a/ldap/servers/plugins/chainingdb/cb_search.c b/ldap/servers/plugins/chainingdb/cb_search.c
index a27e767..faca2e3 100644
--- a/ldap/servers/plugins/chainingdb/cb_search.c
+++ b/ldap/servers/plugins/chainingdb/cb_search.c
@@ -54,31 +54,30 @@
int
chainingdb_build_candidate_list ( Slapi_PBlock *pb )
-{
-
- Slapi_Backend * be;
- Slapi_Operation * op;
- char *filter;
- const char *target = NULL;
- Slapi_DN *target_sdn = NULL;
- int scope,attrsonly,sizelimit,timelimit,rc,searchreferral;
- char **attrs=NULL;
- LDAPControl **controls=NULL;
- LDAPControl **ctrls=NULL;
- LDAP *ld=NULL;
- cb_backend_instance *cb = NULL;
- cb_searchContext *ctx=NULL;
- struct timeval timeout;
- time_t optime;
- int doit,parse_rc;
- LDAPMessage *res=NULL;
- char *matched_msg,*error_msg;
- LDAPControl **serverctrls=NULL;
- char **referrals=NULL;
- char *cnxerrbuf=NULL;
- time_t endbefore=0;
- time_t endtime = 0;
- cb_outgoing_conn *cnx;
+{
+ cb_backend_instance *cb = NULL;
+ cb_outgoing_conn *cnx;
+ cb_searchContext *ctx = NULL;
+ Slapi_Backend *be;
+ Slapi_Operation *op;
+ LDAPControl **serverctrls = NULL;
+ LDAPControl **controls = NULL;
+ LDAPControl **ctrls = NULL;
+ LDAPMessage *res = NULL;
+ LDAP *ld = NULL;
+ Slapi_DN *target_sdn = NULL;
+ const char *target = NULL;
+ char *filter;
+ char **attrs = NULL;
+ struct timeval timeout;
+ time_t optime;
+ time_t endbefore = 0;
+ time_t endtime = 0;
+ char *matched_msg, *error_msg;
+ char **referrals = NULL;
+ char *cnxerrbuf = NULL;
+ int scope, attrsonly, sizelimit, timelimit, searchreferral;
+ int rc, parse_rc, doit;
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
cb = cb_get_instance(be);
@@ -92,53 +91,50 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
target = slapi_sdn_get_dn(target_sdn);
if ( LDAP_SUCCESS != (parse_rc=cb_forward_operation(pb) )) {
-
/* Don't return errors */
-
if (cb_debug_on()) {
slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
"local search: base:<%s> scope:<%s> filter:<%s>\n",target,
scope==LDAP_SCOPE_SUBTREE?"SUBTREE":scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE" , filter);
}
- ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
- ctx->type = CB_SEARCHCONTEXT_ENTRY;
- ctx->data=NULL;
-
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- return 0;
- }
+ ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
+ ctx->type = CB_SEARCHCONTEXT_ENTRY;
+ ctx->data=NULL;
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
+
+ return 0;
+ }
- cb_update_monitor_info(pb,cb,SLAPI_OPERATION_SEARCH);
+ cb_update_monitor_info(pb,cb,SLAPI_OPERATION_SEARCH);
/* Check wether the chaining BE is available or not */
- if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
- return -1;
- }
+ if ( cb_check_availability( cb, pb ) == FARMSERVER_UNAVAILABLE ){
+ return -1;
+ }
if (cb_debug_on()) {
- slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
- "chained search: base:<%s> scope:<%s> filter:<%s>\n",target,
- scope==LDAP_SCOPE_SUBTREE?"SUBTREE":scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE" , filter);
+ slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
+ "chained search: base:<%s> scope:<%s> filter:<%s>\n",target,
+ scope==LDAP_SCOPE_SUBTREE ? "SUBTREE": scope==LDAP_SCOPE_ONELEVEL ? "ONE-LEVEL" : "BASE",
+ filter);
}
- slapi_pblock_get( pb, SLAPI_SEARCH_ATTRS, &attrs );
- slapi_pblock_get( pb, SLAPI_SEARCH_ATTRSONLY, &attrsonly );
- slapi_pblock_get( pb, SLAPI_REQCONTROLS, &controls );
- slapi_pblock_get( pb, SLAPI_SEARCH_TIMELIMIT, &timelimit );
- slapi_pblock_get( pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit );
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,NULL);
-
+ slapi_pblock_get( pb, SLAPI_SEARCH_ATTRS, &attrs );
+ slapi_pblock_get( pb, SLAPI_SEARCH_ATTRSONLY, &attrsonly );
+ slapi_pblock_get( pb, SLAPI_REQCONTROLS, &controls );
+ slapi_pblock_get( pb, SLAPI_SEARCH_TIMELIMIT, &timelimit );
+ slapi_pblock_get( pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit );
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,NULL);
if ((scope != LDAP_SCOPE_BASE) && (scope != LDAP_SCOPE_ONELEVEL) && (scope != LDAP_SCOPE_SUBTREE)) {
- cb_send_ldap_result( pb, LDAP_PROTOCOL_ERROR, NULL, "Bad scope", 0, NULL );
+ cb_send_ldap_result( pb, LDAP_PROTOCOL_ERROR, NULL, "Bad scope", 0, NULL );
return 1;
}
searchreferral=cb->searchreferral;
if (( scope != LDAP_SCOPE_BASE ) && ( searchreferral )) {
-
int i;
struct berval bv,*bvals[2];
Slapi_Entry ** aciArray=(Slapi_Entry **) slapi_ch_malloc(2*sizeof(Slapi_Entry *));
@@ -168,9 +164,8 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
ctx = (cb_searchContext *)slapi_ch_calloc(1,sizeof(cb_searchContext));
ctx->type = CB_SEARCHCONTEXT_ENTRY;
ctx->data=aciArray;
-
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- return 0;
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
+ return 0;
}
/*
@@ -184,9 +179,9 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
time_t now=current_time();
endbefore=optime + timelimit;
if (now >= endbefore) {
- cb_send_ldap_result( pb, LDAP_TIMELIMIT_EXCEEDED, NULL,NULL, 0, NULL);
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_ENTRY, NULL );
- return 1;
+ cb_send_ldap_result( pb, LDAP_TIMELIMIT_EXCEEDED, NULL,NULL, 0, NULL);
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_ENTRY, NULL );
+ return 1;
}
timeout.tv_sec=(time_t)timelimit-(now-optime);
timeout.tv_usec=0;
@@ -200,20 +195,15 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
if ( (attrs == NULL) && operation_is_flag_set(op, OP_FLAG_INTERNAL) ) {
attrs = cb->every_attribute;
-
- }
- else
- {
+ } else {
int i;
- if ( attrs != NULL )
- {
+ if ( attrs != NULL ) {
for ( i = 0; attrs[i] != NULL; i++ ) {
- if ( strcasecmp( "nsrole", attrs[i] ) == 0 )
- {
+ if ( strcasecmp( "nsrole", attrs[i] ) == 0 ){
attrs = cb->every_attribute;
break;
}
- }
+ }
}
}
@@ -245,19 +235,19 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
*/
if ( LDAP_SUCCESS != (rc = cb_update_controls( pb,ld,&ctrls,CB_UPDATE_CONTROLS_ADDAUTH ))) {
- cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
- cb_release_op_connection(cb->pool,ld,0);
- return 1;
- }
-
- if ( slapi_op_abandoned( pb )) {
- cb_release_op_connection(cb->pool,ld,0);
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
- return 1;
+ cb_send_ldap_result( pb, rc, NULL,NULL, 0, NULL);
+ cb_release_op_connection(cb->pool,ld,0);
+ return 1;
+ }
+
+ if ( slapi_op_abandoned( pb )) {
+ cb_release_op_connection(cb->pool,ld,0);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
+ return 1;
}
- ctx = (cb_searchContext *) slapi_ch_calloc(1,sizeof(cb_searchContext));
+ ctx = (cb_searchContext *) slapi_ch_calloc(1,sizeof(cb_searchContext));
/*
** We need to store the connection handle in the search context
@@ -276,14 +266,14 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
timeout.tv_sec=timeout.tv_usec=-1;
/* heart-beat management */
- if (cb->max_idle_time>0)
- endtime=current_time() + cb->max_idle_time;
+ if (cb->max_idle_time>0)
+ endtime=current_time() + cb->max_idle_time;
- rc=ldap_search_ext(ld ,target,scope,filter,attrs,attrsonly,
- ctrls, NULL, &timeout,sizelimit, &(ctx->msgid) );
+ rc = ldap_search_ext(ld ,target,scope,filter,attrs,attrsonly,
+ ctrls, NULL, &timeout,sizelimit, &(ctx->msgid) );
- if ( NULL != ctrls)
- ldap_controls_free(ctrls);
+ if ( NULL != ctrls)
+ ldap_controls_free(ctrls);
if ( LDAP_SUCCESS != rc ) {
cb_send_ldap_result( pb, LDAP_OPERATIONS_ERROR, NULL, ldap_err2string(rc), 0, NULL);
@@ -299,136 +289,131 @@ chainingdb_build_candidate_list ( Slapi_PBlock *pb )
doit=1;
while (doit) {
+ if (cb_check_forward_abandon(cb,pb,ctx->ld,ctx->msgid)) {
+ slapi_ch_free((void **) &ctx);
+ return 1;
+ }
- if (cb_check_forward_abandon(cb,pb,ctx->ld,ctx->msgid)) {
- slapi_ch_free((void **) &ctx);
- return 1;
- }
+ rc = ldap_result(ld,ctx->msgid,LDAP_MSG_ONE,&cb->abandon_timeout,&res);
+ switch ( rc ) {
+ case -1:
+ /* An error occurred. return now */
+ rc = slapi_ldap_get_lderrno(ld,NULL,NULL);
+ /* tuck away some errors in a OPERATION_ERROR */
+ if (CB_LDAP_CONN_ERROR(rc)) {
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string( rc ), 0, NULL);
+ } else {
+ cb_send_ldap_result(pb,rc, NULL, NULL,0,NULL);
+ }
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
- rc=ldap_result(ld,ctx->msgid,LDAP_MSG_ONE,&cb->abandon_timeout,&res);
- switch ( rc ) {
- case -1:
- /* An error occurred. return now */
- rc = slapi_ldap_get_lderrno(ld,NULL,NULL);
- /* tuck away some errors in a OPERATION_ERROR */
- if (CB_LDAP_CONN_ERROR(rc)) {
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string( rc ), 0, NULL);
- } else {
- cb_send_ldap_result(pb,rc, NULL, NULL,0,NULL);
- }
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
- case 0:
-
- /* Local timeout management */
- if (timelimit != -1) {
- if (current_time() > endbefore) {
-
- slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
- "Local timeout expiration\n");
-
- cb_send_ldap_result(pb,LDAP_TIMELIMIT_EXCEEDED,
- NULL,NULL, 0, NULL);
- /* Force connection close */
- cb_release_op_connection(cb->pool,ld,1);
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
- }
- }
- /* heart-beat management */
- if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
- cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
- ldap_err2string(rc), 0, NULL);
- cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
- if (res)
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return 1;
+ case 0:
+ /* Local timeout management */
+ if (timelimit != -1) {
+ if (current_time() > endbefore) {
+ slapi_log_error( SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
+ "Local timeout expiration\n");
+ cb_send_ldap_result(pb,LDAP_TIMELIMIT_EXCEEDED,
+ NULL,NULL, 0, NULL);
+ /* Force connection close */
+ cb_release_op_connection(cb->pool,ld,1);
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
}
+ }
+ /* heart-beat management */
+ if ((rc=cb_ping_farm(cb,cnx,endtime)) != LDAP_SUCCESS) {
+ cb_send_ldap_result(pb,LDAP_OPERATIONS_ERROR, NULL,
+ ldap_err2string(rc), 0, NULL);
+ cb_release_op_connection(cb->pool,ld,CB_LDAP_CONN_ERROR(rc));
+ if (res)
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return 1;
+ }
#ifdef CB_YIELD
- DS_Sleep(PR_INTERVAL_NO_WAIT);
+ DS_Sleep(PR_INTERVAL_NO_WAIT);
#endif
- break;
- case LDAP_RES_SEARCH_ENTRY:
- case LDAP_RES_SEARCH_REFERENCE:
- /* Some results received */
- /* don't parse result here */
- ctx->pending_result=res;
- ctx->pending_result_type=rc;
- doit=0;
- break;
- case LDAP_RES_SEARCH_RESULT:
+ break;
+
+ case LDAP_RES_SEARCH_ENTRY:
+ case LDAP_RES_SEARCH_REFERENCE:
+ /* Some results received */
+ /* don't parse result here */
+ ctx->pending_result=res;
+ ctx->pending_result_type=rc;
+ doit = 0;
+ break;
+
+ case LDAP_RES_SEARCH_RESULT:
+ matched_msg=NULL;
+ error_msg=NULL;
+ referrals=NULL;
+ serverctrls=NULL;
+ parse_rc=ldap_parse_result(ld,res,&rc,&matched_msg,
+ &error_msg,&referrals, &serverctrls, 0 );
+ if ( parse_rc != LDAP_SUCCESS ) {
+ static int warned_parse_rc = 0;
+ if (!warned_parse_rc && error_msg) {
+ slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
+ warned_parse_rc = 1;
+ }
+ cb_send_ldap_result( pb, parse_rc, NULL, ENDUSERMSG, 0, NULL );
+ rc=-1;
+ } else if ( rc != LDAP_SUCCESS ) {
+ static int warned_rc = 0;
+ if (!warned_rc) {
+ slapi_ldap_get_lderrno( ctx->ld, &matched_msg, &error_msg );
+ slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
+ "%s%s%s\n",
+ matched_msg?matched_msg:"",
+ (matched_msg&&(*matched_msg!='\0'))?": ":"",
+ error_msg );
+ warned_rc = 1;
+ }
+ cb_send_ldap_result( pb, rc, NULL, ENDUSERMSG, 0, NULL);
+ /* BEWARE: matched_msg and error_msg points */
+ /* to ld fields. */
matched_msg=NULL;
error_msg=NULL;
- referrals=NULL;
- serverctrls=NULL;
- parse_rc=ldap_parse_result(ld,res,&rc,&matched_msg,
- &error_msg,&referrals, &serverctrls, 0 );
- if ( parse_rc != LDAP_SUCCESS ) {
- static int warned_parse_rc = 0;
- if (!warned_parse_rc && error_msg) {
- slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
- warned_parse_rc = 1;
- }
- cb_send_ldap_result( pb, parse_rc, NULL,
- ENDUSERMSG, 0, NULL );
- rc=-1;
- } else if ( rc != LDAP_SUCCESS ) {
- static int warned_rc = 0;
- if (!warned_rc) {
- slapi_ldap_get_lderrno( ctx->ld,
- &matched_msg, &error_msg );
- slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM,
- "%s%s%s\n",
- matched_msg?matched_msg:"",
- (matched_msg&&(*matched_msg!='\0'))?": ":"",
- error_msg );
- warned_rc = 1;
- }
- cb_send_ldap_result( pb, rc, NULL, ENDUSERMSG, 0, NULL);
- /* BEWARE: matched_msg and error_msg points */
- /* to ld fields. */
- matched_msg=NULL;
- error_msg=NULL;
- rc=-1;
- }
+ rc = -1;
+ }
+
+ slapi_ch_free((void **)&matched_msg);
+ slapi_ch_free((void **)&error_msg);
+ if (serverctrls)
+ ldap_controls_free(serverctrls);
+ if (referrals)
+ charray_free(referrals);
+ if (rc != LDAP_SUCCESS) {
+ cb_release_op_connection(cb->pool,ld,
+ CB_LDAP_CONN_ERROR(rc));
+ ldap_msgfree(res);
+ slapi_ch_free((void **)&ctx);
+ return -1;
+ }
- slapi_ch_free((void **)&matched_msg);
- slapi_ch_free((void **)&error_msg);
- if (serverctrls)
- ldap_controls_free(serverctrls);
- if (referrals)
- charray_free(referrals);
-
- if (rc!=LDAP_SUCCESS) {
- cb_release_op_connection(cb->pool,ld,
- CB_LDAP_CONN_ERROR(rc));
- ldap_msgfree(res);
- slapi_ch_free((void **)&ctx);
- return -1;
- }
-
- /* Store the msg in the ctx */
- /* Parsed in iterate. */
-
- ctx->pending_result=res;
- ctx->pending_result_type=LDAP_RES_SEARCH_RESULT;
- doit=0;
+ /* Store the msg in the ctx */
+ /* Parsed in iterate. */
+ ctx->pending_result = res;
+ ctx->pending_result_type = LDAP_RES_SEARCH_RESULT;
+ doit = 0;
}
}
+ slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
- slapi_pblock_set( pb, SLAPI_SEARCH_RESULT_SET,ctx);
return 0;
}
9 years, 1 month
Branch '389-ds-base-1.3.1' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/dna/dna.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
New commits:
commit f94bfa1917c95f2e93e43fb78c57a6cea96df69c
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Apr 28 11:02:14 2014 -0400
Ticket 477779 - Need to lock server list when removing list
Description: Need to hold the write lock when deleting the server list.
There is no need to lock the list in the close function,
as all active threads should be stopped. In 1.3.3, the
dynamic plugin feature will also safely handle the plugin
shutdown.
https://fedorahosted.org/389/ticket/47779
Reviewed by: tbordaz(Thanks!)
(cherry picked from commit 2b98dcaf83fba3ea4fc52c2b8cad6deea02cb0e5)
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index 5ef5713..6e0c481 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -725,11 +725,9 @@ dna_load_shared_servers()
struct dnaServer *server = NULL, *global_servers = NULL;
PRCList *server_list = NULL;
PRCList *config_list = NULL;
+ int freed_servers = 0;
int ret = 0;
- /* First free the existing list. */
- dna_delete_global_servers();
-
/* Now build the new list. */
dna_write_lock();
if (!PR_CLIST_IS_EMPTY(dna_global_config)) {
@@ -747,6 +745,10 @@ dna_load_shared_servers()
}
dna_server_write_lock();
+ if(!freed_servers){
+ dna_delete_global_servers();
+ freed_servers = 1;
+ }
if (shared_list) {
server_list = PR_LIST_HEAD(shared_list);
while (server_list != shared_list) {
9 years, 1 month
Branch '389-ds-base-1.3.2' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/dna/dna.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
New commits:
commit 9cf2aa34cf74cfa8f8d161743916615bd8ffccc6
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Apr 28 11:02:14 2014 -0400
Ticket 477779 - Need to lock server list when removing list
Description: Need to hold the write lock when deleting the server list.
There is no need to lock the list in the close function,
as all active threads should be stopped. In 1.3.3, the
dynamic plugin feature will also safely handle the plugin
shutdown.
https://fedorahosted.org/389/ticket/47779
Reviewed by: tbordaz(Thanks!)
(cherry picked from commit 2b98dcaf83fba3ea4fc52c2b8cad6deea02cb0e5)
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index f8f2813..490f32b 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -725,11 +725,9 @@ dna_load_shared_servers()
struct dnaServer *server = NULL, *global_servers = NULL;
PRCList *server_list = NULL;
PRCList *config_list = NULL;
+ int freed_servers = 0;
int ret = 0;
- /* First free the existing list. */
- dna_delete_global_servers();
-
/* Now build the new list. */
dna_write_lock();
if (!PR_CLIST_IS_EMPTY(dna_global_config)) {
@@ -747,6 +745,10 @@ dna_load_shared_servers()
}
dna_server_write_lock();
+ if(!freed_servers){
+ dna_delete_global_servers();
+ freed_servers = 1;
+ }
if (shared_list) {
server_list = PR_LIST_HEAD(shared_list);
while (server_list != shared_list) {
9 years, 1 month
ldap/servers
by Mark Reynolds
ldap/servers/plugins/dna/dna.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
New commits:
commit 2b98dcaf83fba3ea4fc52c2b8cad6deea02cb0e5
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Apr 28 11:02:14 2014 -0400
Ticket 477779 - Need to lock server list when removing list
Description: Need to hold the write lock when deleting the server list.
There is no need to lock the list in the close function,
as all active threads should be stopped. In 1.3.3, the
dynamic plugin feature will also safely handle the plugin
shutdown.
https://fedorahosted.org/389/ticket/47779
Reviewed by: tbordaz(Thanks!)
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index e9453a4..d7049f9 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -700,11 +700,9 @@ dna_load_shared_servers()
struct dnaServer *server = NULL, *global_servers = NULL;
PRCList *server_list = NULL;
PRCList *config_list = NULL;
+ int freed_servers = 0;
int ret = 0;
- /* First free the existing list. */
- dna_delete_global_servers();
-
/* Now build the new list. */
dna_write_lock();
if (!PR_CLIST_IS_EMPTY(dna_global_config)) {
@@ -722,6 +720,10 @@ dna_load_shared_servers()
}
dna_server_write_lock();
+ if(!freed_servers){
+ dna_delete_global_servers();
+ freed_servers = 1;
+ }
if (shared_list) {
server_list = PR_LIST_HEAD(shared_list);
while (server_list != shared_list) {
9 years, 1 month