s4:libcli/dgram: add nbt_dgram_send_raw() to send raw blobs
authorStefan Metzmacher <metze@samba.org>
Wed, 14 Feb 2024 12:49:21 +0000 (13:49 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 5 Apr 2024 12:24:42 +0000 (12:24 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15620

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/libcli/dgram/dgramsocket.c
source4/libcli/dgram/libdgram.h

index cd0628ac834969f505e427ac35bc8bea098273ba..2a98792ab37e09a9040726ef6395f0cd71e75b81 100644 (file)
@@ -209,6 +209,38 @@ NTSTATUS dgram_set_incoming_handler(struct nbt_dgram_socket *dgmsock,
        return NT_STATUS_OK;
 }
 
+NTSTATUS nbt_dgram_send_raw(struct nbt_dgram_socket *dgmsock,
+                           struct socket_address *dest,
+                           const DATA_BLOB pkt_blob)
+{
+       struct nbt_dgram_request *req;
+       NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+       req = talloc(dgmsock, struct nbt_dgram_request);
+       if (req == NULL) {
+               goto failed;
+       }
+
+       req->dest = socket_address_copy(req, dest);
+       if (req->dest == NULL) {
+               goto failed;
+       }
+
+       req->encoded = data_blob_dup_talloc(req, pkt_blob);
+       if (req->encoded.length != pkt_blob.length) {
+               goto failed;
+       }
+
+       DLIST_ADD_END(dgmsock->send_queue, req);
+
+       TEVENT_FD_WRITEABLE(dgmsock->fde);
+
+       return NT_STATUS_OK;
+
+failed:
+       talloc_free(req);
+       return status;
+}
 
 /*
   queue a datagram for send
index 0f313a67cf5679f621bf620446408a77b38d6c1a..7e57a944a9773715babda8b657b636d9d079a2c2 100644 (file)
@@ -83,6 +83,9 @@ struct dgram_mailslot_handler {
 
 
 /* prototypes */
+NTSTATUS nbt_dgram_send_raw(struct nbt_dgram_socket *dgmsock,
+                           struct socket_address *dest,
+                           const DATA_BLOB pkt_blob);
 NTSTATUS nbt_dgram_send(struct nbt_dgram_socket *dgmsock,
                        struct nbt_dgram_packet *packet,
                        struct socket_address *dest);