r13345: let us replicate with NT4sp6a
authorStefan Metzmacher <metze@samba.org>
Sat, 4 Feb 2006 13:54:30 +0000 (13:54 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:51:47 +0000 (13:51 -0500)
I don't yet know what the extra data in the start_association call mean...

This also let w2k use WREPL_REPL_INFORM messages to us, but w2k3 doesn't
it do it yet...

metze
(This used to be commit 02d6dfa1da754857c28125392a561cfde0087c48)

source4/libcli/wrepl/winsrepl.c
source4/wrepl_server/wrepl_in_call.c

index 909bedf5302c37f952829e03f95ab3caef39a985..ba7203c33aa74cd52b11432ddb8aff031f7b3a0b 100644 (file)
@@ -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);
index 8ce88db6a9cd1a151347616b44c4461d2ec573ac..09ea2c15b48e3fac33a0c772e84d8e5cd6a90ce4 100644 (file)
@@ -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;
 }