s4:librpc/rpc: try to get the smbXcli_* pointers from the given dcerpc_binding options
authorStefan Metzmacher <metze@samba.org>
Wed, 15 Jan 2014 15:05:26 +0000 (16:05 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 10:43:20 +0000 (12:43 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
source4/librpc/rpc/dcerpc_connect.c

index 6468180947fe33c09c71e3a0346510634fb84dd2..064e012ac283a7b7070bfdaa23dbbf0ddda336b7 100644 (file)
@@ -1006,6 +1006,7 @@ static void continue_connect(struct composite_context *c, struct pipe_connect_st
        struct composite_context *ncacn_unix_req;
        struct composite_context *ncalrpc_req;
        enum dcerpc_transport_t transport;
+       const char *endpoint = NULL;
 
        /* dcerpc pipe connect input parameters */
        ZERO_STRUCT(pc);
@@ -1023,6 +1024,26 @@ static void continue_connect(struct composite_context *c, struct pipe_connect_st
                /*
                 * SMB1/2/3...
                 */
+
+               endpoint = dcerpc_binding_get_string_option(pc.binding,
+                                                           "endpoint");
+               if (endpoint != NULL) {
+                       pc.smb.conn = dcerpc_binding_get_pointer_option(pc.binding,
+                                                       "connection",
+                                                       struct smbXcli_conn);
+                       pc.smb.session = dcerpc_binding_get_pointer_option(pc.binding,
+                                                       "connection",
+                                                       struct smbXcli_session);
+                       pc.smb.tcon = dcerpc_binding_get_pointer_option(pc.binding,
+                                                       "connection",
+                                                       struct smbXcli_tcon);
+                       pc.smb.pipe_name = endpoint;
+               }
+
+               if (!smbXcli_conn_is_connected(pc.smb.conn)) {
+                       ZERO_STRUCT(pc.smb);
+               }
+
                ncacn_np_smb_req = dcerpc_pipe_connect_ncacn_np_smb_send(c, &pc, s->lp_ctx);
                composite_continue(c, ncacn_np_smb_req, continue_pipe_connect_ncacn_np_smb, c);
                return;