s4:libcli: add smbcli_transport_raw_init()
authorStefan Metzmacher <metze@samba.org>
Wed, 18 Jul 2018 13:36:52 +0000 (15:36 +0200)
committerAlexander Bokovoy <ab@samba.org>
Tue, 24 Jul 2018 04:55:23 +0000 (06:55 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13308

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
source4/libcli/raw/clitransport.c

index d0dd1f9dee6a987f9d545e7b7daf95f9902db948..47b8dbf3ae7f3a43dd7a3fc78365878e6df993de 100644 (file)
@@ -113,6 +113,50 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
        return transport;
 }
 
+/*
+  create a transport structure based on an established socket
+*/
+NTSTATUS smbcli_transport_raw_init(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct smbXcli_conn **_conn,
+                                  const struct smbcli_options *options,
+                                  struct smbcli_transport **_transport)
+{
+       struct smbcli_transport *transport = NULL;
+       NTSTATUS status;
+
+       if (*_conn == NULL) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
+       transport = talloc_zero(mem_ctx, struct smbcli_transport);
+       if (transport == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       transport->ev = ev;
+       transport->options = *options;
+
+       /*
+        * First only set the pointer without move.
+        */
+       transport->conn = *_conn;
+       status = smb_raw_negotiate_fill_transport(transport);
+       if (!NT_STATUS_IS_OK(status)) {
+               TALLOC_FREE(transport);
+               return status;
+       }
+
+       talloc_set_destructor(transport, transport_destructor);
+
+       /*
+        * Now move it away from the caller...
+        */
+       transport->conn = talloc_move(transport, _conn);
+       *_transport = transport;
+       return NT_STATUS_OK;
+}
+
 /*
   mark the transport as dead
 */