diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-04-10 23:09:38 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:11:29 -0500 |
commit | b708e87a63947bc963d17592ac88022b708816c3 (patch) | |
tree | 5d48fc3384ab53abd4639b842de2ac9e8d1001e8 /source4/libcli/dgram | |
parent | e7dd6a12913464fd752ddb94bd2f553f14007c74 (diff) | |
download | samba-b708e87a63947bc963d17592ac88022b708816c3.tar.gz |
r6288: the nbt dgram server now responds to GETDC requests. It works with our
test suite, but doesn't yet seem to satisfy a nt4 client. I'm
investigating.
(This used to be commit 406217262dff5adb5d0cb0028198e08f66cc85f4)
Diffstat (limited to 'source4/libcli/dgram')
-rw-r--r-- | source4/libcli/dgram/libdgram.h | 6 | ||||
-rw-r--r-- | source4/libcli/dgram/mailslot.c | 7 | ||||
-rw-r--r-- | source4/libcli/dgram/netlogon.c | 33 |
3 files changed, 44 insertions, 2 deletions
diff --git a/source4/libcli/dgram/libdgram.h b/source4/libcli/dgram/libdgram.h index 0b8157f0c6b..163cb1e37de 100644 --- a/source4/libcli/dgram/libdgram.h +++ b/source4/libcli/dgram/libdgram.h @@ -116,14 +116,20 @@ NTSTATUS dgram_mailslot_send(struct nbt_dgram_socket *dgmsock, const char *mailslot_name, struct nbt_name *dest_name, const char *dest_address, + int dest_port, struct nbt_name *src_name, DATA_BLOB *request); NTSTATUS dgram_mailslot_netlogon_send(struct nbt_dgram_socket *dgmsock, struct nbt_name *dest_name, const char *dest_address, + int dest_port, struct nbt_name *src_name, struct nbt_netlogon_packet *request); +NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock, + struct nbt_dgram_packet *request, + const char *mailslot_name, + struct nbt_netlogon_packet *reply); NTSTATUS dgram_mailslot_netlogon_parse(struct dgram_mailslot_handler *dgmslot, TALLOC_CTX *mem_ctx, struct nbt_dgram_packet *dgram, diff --git a/source4/libcli/dgram/mailslot.c b/source4/libcli/dgram/mailslot.c index 3b7fcdcd81a..10358532406 100644 --- a/source4/libcli/dgram/mailslot.c +++ b/source4/libcli/dgram/mailslot.c @@ -142,6 +142,7 @@ NTSTATUS dgram_mailslot_send(struct nbt_dgram_socket *dgmsock, const char *mailslot_name, struct nbt_name *dest_name, const char *dest_address, + int dest_port, struct nbt_name *src_name, DATA_BLOB *request) { @@ -152,6 +153,10 @@ NTSTATUS dgram_mailslot_send(struct nbt_dgram_socket *dgmsock, struct smb_trans_body *trans; NTSTATUS status; + if (dest_port == 0) { + dest_port = lp_dgram_port(); + } + ZERO_STRUCT(packet); packet.msg_type = msg_type; packet.flags = DGRAM_FLAG_FIRST; @@ -183,7 +188,7 @@ NTSTATUS dgram_mailslot_send(struct nbt_dgram_socket *dgmsock, trans->mailslot_name = mailslot_name; trans->data = *request; - status = nbt_dgram_send(dgmsock, &packet, dest_address, lp_dgram_port()); + status = nbt_dgram_send(dgmsock, &packet, dest_address, dest_port); talloc_free(tmp_ctx); diff --git a/source4/libcli/dgram/netlogon.c b/source4/libcli/dgram/netlogon.c index 869e99e2fc5..138cc0d4844 100644 --- a/source4/libcli/dgram/netlogon.c +++ b/source4/libcli/dgram/netlogon.c @@ -34,6 +34,7 @@ NTSTATUS dgram_mailslot_netlogon_send(struct nbt_dgram_socket *dgmsock, struct nbt_name *dest_name, const char *dest_address, + int dest_port, struct nbt_name *src_name, struct nbt_netlogon_packet *request) { @@ -51,7 +52,37 @@ NTSTATUS dgram_mailslot_netlogon_send(struct nbt_dgram_socket *dgmsock, status = dgram_mailslot_send(dgmsock, DGRAM_DIRECT_UNIQUE, NBT_MAILSLOT_NETLOGON, - dest_name, dest_address, src_name, &blob); + dest_name, dest_address, dest_port, + src_name, &blob); + talloc_free(tmp_ctx); + return status; +} + + +/* + send a netlogon mailslot reply +*/ +NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock, + struct nbt_dgram_packet *request, + const char *mailslot_name, + struct nbt_netlogon_packet *reply) +{ + NTSTATUS status; + DATA_BLOB blob; + TALLOC_CTX *tmp_ctx = talloc_new(dgmsock); + + status = ndr_push_struct_blob(&blob, tmp_ctx, reply, + (ndr_push_flags_fn_t)ndr_push_nbt_netlogon_packet); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(tmp_ctx); + return status; + } + + 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); talloc_free(tmp_ctx); return status; } |