diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/libcli/wrepl/winsrepl.c | 15 | ||||
-rw-r--r-- | source4/wrepl_server/wrepl_in_call.c | 20 |
2 files changed, 35 insertions, 0 deletions
diff --git a/source4/libcli/wrepl/winsrepl.c b/source4/libcli/wrepl/winsrepl.c index 909bedf530..ba7203c33a 100644 --- a/source4/libcli/wrepl/winsrepl.c +++ b/source4/libcli/wrepl/winsrepl.c @@ -563,6 +563,21 @@ struct wrepl_request *wrepl_associate_send(struct wrepl_socket *wrepl_socket, packet->message.start.minor_version = 2; packet->message.start.major_version = 5; + /* + * nt4 uses 41 bytes for the start_association call + * so do it the same and as we don't know th emeanings of this bytes + * we just send zeros and nt4, w2k and w2k3 seems to be happy with this + * + * if we don't do this nt4 uses an old version of the wins replication protocol + * and that would break nt4 <-> samba replication + */ + packet->padding = data_blob_talloc(packet, NULL, 21); + if (packet->padding.data == NULL) { + talloc_free(packet); + return NULL; + } + memset(packet->padding.data, 0, packet->padding.length); + req = wrepl_request_send(wrepl_socket, packet, NULL); talloc_free(packet); diff --git a/source4/wrepl_server/wrepl_in_call.c b/source4/wrepl_server/wrepl_in_call.c index 8ce88db6a9..09ea2c15b4 100644 --- a/source4/wrepl_server/wrepl_in_call.c +++ b/source4/wrepl_server/wrepl_in_call.c @@ -50,10 +50,17 @@ static NTSTATUS wreplsrv_in_start_association(struct wreplsrv_in_call *call) return NT_STATUS_OK; } +/* + * it seems that we don't know all details about the start_association + * to support replication with NT4 (it sends 1.1 instead of 5.2) + * we ignore the version numbers until we know all details + */ +#if 0 if (start->minor_version != 2 || start->major_version != 5) { /* w2k terminate the connection if the versions doesn't match */ return NT_STATUS_UNKNOWN_REVISION; } +#endif call->wreplconn->assoc_ctx.stopped = False; call->wreplconn->assoc_ctx.our_ctx = WREPLSRV_VALID_ASSOC_CTX; @@ -64,6 +71,19 @@ static NTSTATUS wreplsrv_in_start_association(struct wreplsrv_in_call *call) start_reply->minor_version = 2; start_reply->major_version = 5; + /* + * nt4 uses 41 bytes for the start_association call + * so do it the same and as we don't know th emeanings of this bytes + * we just send zeros and nt4, w2k and w2k3 seems to be happy with this + * + * if we don't do this nt4 uses an old version of the wins replication protocol + * and that would break nt4 <-> samba replication + */ + call->rep_packet.padding = data_blob_talloc(call, NULL, 21); + NT_STATUS_HAVE_NO_MEMORY(call->rep_packet.padding.data); + + memset(call->rep_packet.padding.data, 0, call->rep_packet.padding.length); + return NT_STATUS_OK; } |