r6320: some minor netlogon datagram fixes - NT4 can now join a Samba4 domain without
authorAndrew Tridgell <tridge@samba.org>
Wed, 13 Apr 2005 03:43:17 +0000 (03:43 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:11:31 +0000 (13:11 -0500)
Samba3 nmbd

source/libcli/dgram/mailslot.c
source/libcli/dgram/netlogon.c
source/librpc/idl/nbt.idl
source/nbt_server/dgram/netlogon.c

index 10358532406822d33591f035bc1ad5713900e5c3..ca9a66a729d94294d7dada0b36d1e19d4f8a3941 100644 (file)
@@ -159,7 +159,7 @@ NTSTATUS dgram_mailslot_send(struct nbt_dgram_socket *dgmsock,
 
        ZERO_STRUCT(packet);
        packet.msg_type = msg_type;
-       packet.flags = DGRAM_FLAG_FIRST;
+       packet.flags = DGRAM_FLAG_FIRST | DGRAM_NODE_NBDD;
        packet.dgram_id = generate_random() % UINT16_MAX;
        packet.source = socket_get_my_addr(dgmsock->sock, tmp_ctx);
        packet.src_port = socket_get_my_port(dgmsock->sock);
@@ -179,7 +179,7 @@ NTSTATUS dgram_mailslot_send(struct nbt_dgram_socket *dgmsock,
 
        trans = &smb->body.trans;
        trans->total_data_count = request->length;
-       trans->timeout     = (uint32_t)-1;
+       trans->timeout     = 1000;
        trans->data_count  = request->length;
        trans->data_offset = 70 + strlen(mailslot_name);
        trans->opcode      = 1; /* write mail slot */
index 138cc0d4844df06d44b3499a45364c00898eb5d8..a030ca73c28f20e0250f0792c9d5076c38c1fd0c 100644 (file)
@@ -70,6 +70,7 @@ NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock,
        NTSTATUS status;
        DATA_BLOB blob;
        TALLOC_CTX *tmp_ctx = talloc_new(dgmsock);
+       struct nbt_name myname;
 
        status = ndr_push_struct_blob(&blob, tmp_ctx, reply, 
                                      (ndr_push_flags_fn_t)ndr_push_nbt_netlogon_packet);
@@ -78,11 +79,15 @@ NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock,
                return status;
        }
 
+       myname.name = lp_netbios_name();
+       myname.type = NBT_NAME_CLIENT;
+       myname.scope = NULL;
+
        status = dgram_mailslot_send(dgmsock, DGRAM_DIRECT_UNIQUE, 
                                     mailslot_name,
                                     &request->data.msg.source_name,
                                     request->source, request->src_port,
-                                    &request->data.msg.dest_name, &blob);
+                                    &myname, &blob);
        talloc_free(tmp_ctx);
        return status;
 }
index 5876eb77ca68d498a29cc21a6ecb621174918149..c03f30333efd0fbfd471c174c72b400f8e3e2837 100644 (file)
 
 
        /* \MAILSLOT\NET\NETLOGON mailslot requests */
-       typedef [enum8bit] enum {
+       typedef enum {
                NETLOGON_QUERY_FOR_PDC     = 0x7,       
                NETLOGON_ANNOUNCE_UAS      = 0xa,
                NETLOGON_RESPONSE_FROM_PDC = 0xc
 
        typedef [flag(NDR_NOALIGN),public] struct {
                nbt_netlogon_command command;
-               [value(0)] uint8     pad;
                [switch_is(command)] nbt_netlogon_request req;
        } nbt_netlogon_packet;
 }
index e013742f0a929d37580022b96475f1e82fe4fd86..91da11299a79ade5e0803d463fcef82cf832a5e2 100644 (file)
@@ -44,6 +44,7 @@ static void nbtd_netlogon_getdc(struct dgram_mailslot_handler *dgmslot,
        }
 
        /* setup a GETDC reply */
+       ZERO_STRUCT(reply);
        reply.command = NETLOGON_RESPONSE_FROM_PDC;
        pdc = &reply.req.response;