Put back the old netlogn parsing code - for the request only
authorAndrew Bartlett <abartlet@samba.org>
Sat, 17 May 2008 02:38:58 +0000 (12:38 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Sat, 17 May 2008 02:38:58 +0000 (12:38 +1000)
This gives us seperate parsing functions for requests and replies.

Andrew Bartlett
(This used to be commit d2d3d15a8edd58cda7543feebdeb52178400615b)

source4/libcli/dgram/libdgram.h
source4/libcli/dgram/netlogon.c

index 3eac78f5e8f6c06848aefa8471103a3707d75390..e1209e7a546f40eba7c5a71e269907a259beab05 100644 (file)
@@ -128,11 +128,16 @@ NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock,
                                       struct nbt_dgram_packet *request,
                                       const char *my_netbios_name,
                                       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,
-                                      struct nbt_netlogon_response *netlogon);
+                                      struct nbt_netlogon_response *reply);
+NTSTATUS dgram_mailslot_netlogon_parse_request(struct dgram_mailslot_handler *dgmslot,
+                                              TALLOC_CTX *mem_ctx,
+                                              struct nbt_dgram_packet *dgram,
+                                              struct nbt_netlogon_packet *netlogon);
+
+NTSTATUS dgram_mailslot_netlogon_parse_response(struct dgram_mailslot_handler *dgmslot,
+                                               TALLOC_CTX *mem_ctx,
+                                               struct nbt_dgram_packet *dgram,
+                                               struct nbt_netlogon_response *netlogon);
 
 NTSTATUS dgram_mailslot_browse_send(struct nbt_dgram_socket *dgmsock,
                                    struct nbt_name *dest_name,
index c0971270836403abe3b123f6a8632cf16b8131f5..b37d4a2ee6ce97eb9113e0c7ffe06099b6126ae2 100644 (file)
@@ -67,22 +67,18 @@ NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock,
                                       struct nbt_dgram_packet *request,
                                       const char *my_netbios_name,
                                       const char *mailslot_name,
-                                      struct nbt_netlogon_packet *reply)
+                                      struct nbt_netlogon_response *reply)
 {
        NTSTATUS status;
-       enum ndr_err_code ndr_err;
        DATA_BLOB blob;
        TALLOC_CTX *tmp_ctx = talloc_new(dgmsock);
        struct nbt_name myname;
        struct socket_address *dest;
 
-       ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, 
-                                      dgmsock->iconv_convenience,
-                                      reply,
-                                     (ndr_push_flags_fn_t)ndr_push_nbt_netlogon_packet);
-       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-               talloc_free(tmp_ctx);
-               return ndr_map_error2ntstatus(ndr_err);
+       status = push_nbt_netlogon_response(&blob, tmp_ctx, dgmsock->iconv_convenience,
+                                           reply);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
        }
 
        make_nbt_name_client(&myname, my_netbios_name);
@@ -107,7 +103,32 @@ NTSTATUS dgram_mailslot_netlogon_reply(struct nbt_dgram_socket *dgmsock,
 /*
   parse a netlogon response. The packet must be a valid mailslot packet
 */
-NTSTATUS dgram_mailslot_netlogon_parse(struct dgram_mailslot_handler *dgmslot,
+NTSTATUS dgram_mailslot_netlogon_parse_request(struct dgram_mailslot_handler *dgmslot,
+                                              TALLOC_CTX *mem_ctx,
+                                              struct nbt_dgram_packet *dgram,
+                                              struct nbt_netlogon_packet *netlogon)
+{
+       DATA_BLOB data = dgram_mailslot_data(dgram);
+       enum ndr_err_code ndr_err;
+
+       ndr_err = ndr_pull_struct_blob(&data, mem_ctx, dgmslot->dgmsock->iconv_convenience, netlogon,
+                                     (ndr_pull_flags_fn_t)ndr_pull_nbt_netlogon_packet);
+       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+               NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
+               DEBUG(0,("Failed to parse netlogon packet of length %d: %s\n",
+                        (int)data.length, nt_errstr(status)));
+               if (DEBUGLVL(10)) {
+                       file_save("netlogon.dat", data.data, data.length);
+               }
+               return status;
+       }
+       return NT_STATUS_OK;
+}
+
+/*
+  parse a netlogon response. The packet must be a valid mailslot packet
+*/
+NTSTATUS dgram_mailslot_netlogon_parse_response(struct dgram_mailslot_handler *dgmslot,
                                       TALLOC_CTX *mem_ctx,
                                       struct nbt_dgram_packet *dgram,
                                       struct nbt_netlogon_response *netlogon)