summaryrefslogtreecommitdiffstats
path: root/ldap/servers/plugins/replication/windows_tot_protocol.c
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2010-09-22 15:56:14 -0600
committerRich Megginson <rmeggins@redhat.com>2010-09-23 15:06:09 -0600
commit3561044171c4905659a2680658d9208eab5bd35e (patch)
treee167bf8b5f060045541d5561de806711b48d9c58 /ldap/servers/plugins/replication/windows_tot_protocol.c
parentf980ff61da122b39d33bf83bc20f2b7a81b6be24 (diff)
downloadds-3561044171c4905659a2680658d9208eab5bd35e.tar.gz
ds-3561044171c4905659a2680658d9208eab5bd35e.tar.xz
ds-3561044171c4905659a2680658d9208eab5bd35e.zip
Bug 634561 - Server crushes when using Windows Sync Agreement
https://bugzilla.redhat.com/show_bug.cgi?id=634561 Resolves: bug 634561 Bug Description: Server crushes when using Windows Sync Agreement Reviewed by: ??? Branch: master Fix Description: The regular replication protocol and the windows sync protocol have two completely different struct repl_connection. They are almost the same, almost identical fields, but they are different. When additional fields were added to the struct repl_connection, not at the end of the structure, and identical changes were not made to the struct repl_connection in windows_connection.c, the structures got out of sync. The authors tried to anticipate this condition by providing windows_ versions of all of the conn_ functions. We were not using the windows_ versions of these functions in all places in the winsync code. The fix is to use the windows_ versions of these functions throughout the winsync code, and to make the struct repl_connection the same size up through the char *plain field. If additional fields are added to either structure at the end, this problem should not occur in the future. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no (cherry picked from commit 4bd78323d0bb1299a19e0ed1feebc79ff997c92f)
Diffstat (limited to 'ldap/servers/plugins/replication/windows_tot_protocol.c')
-rw-r--r--ldap/servers/plugins/replication/windows_tot_protocol.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/ldap/servers/plugins/replication/windows_tot_protocol.c b/ldap/servers/plugins/replication/windows_tot_protocol.c
index cb2987b9..1390e8f6 100644
--- a/ldap/servers/plugins/replication/windows_tot_protocol.c
+++ b/ldap/servers/plugins/replication/windows_tot_protocol.c
@@ -120,7 +120,7 @@ windows_tot_run(Private_Repl_Protocol *prp)
goto done;
}
- conn_set_timeout(prp->conn, agmt_get_timeout(prp->agmt));
+ windows_conn_set_timeout(prp->conn, agmt_get_timeout(prp->agmt));
/* acquire remote replica */
agmt_set_last_init_start(prp->agmt, current_time());
@@ -132,14 +132,14 @@ windows_tot_run(Private_Repl_Protocol *prp)
if (rc != ACQUIRE_SUCCESS)
{
int optype, ldaprc;
- conn_get_error(prp->conn, &optype, &ldaprc);
+ windows_conn_get_error(prp->conn, &optype, &ldaprc);
agmt_set_last_init_status(prp->agmt, ldaprc,
prp->last_acquire_response_code, NULL);
goto done;
}
else if (prp->terminate)
{
- conn_disconnect(prp->conn);
+ windows_conn_disconnect(prp->conn);
prp->stopped = 1;
goto done;
}
@@ -273,7 +273,7 @@ windows_tot_stop(Private_Repl_Protocol *prp)
"protocol not stopped after waiting for %d seconds "
"for agreement %s\n", PR_IntervalToSeconds(now-start),
agmt_get_long_name(prp->agmt));
- conn_disconnect(prp->conn);
+ windows_conn_disconnect(prp->conn);
return_value = -1;
}
else
@@ -402,7 +402,7 @@ int send_entry (Slapi_Entry *e, void *cb_data)
if (prp->terminate)
{
- conn_disconnect(prp->conn);
+ windows_conn_disconnect(prp->conn);
prp->stopped = 1;
((callback_data*)cb_data)->rc = -1;
LDAPDebug0Args( LDAP_DEBUG_TRACE, "<= send_entry\n" );