#include "lib/events/events.h"
#include "librpc/rpc/dcerpc.h"
#include "librpc/rpc/dcerpc_proto.h"
+#include "libcli/smb/smbXcli_base.h"
#include "auth/credentials/credentials.h"
#include "param/param.h"
#include "libcli/resolve/resolve.h"
struct dcerpc_pipe *pipe;
struct dcerpc_pipe *pipe2;
struct dcerpc_binding *binding;
+ struct {
+ struct smbXcli_conn *conn;
+ struct smbXcli_session *session;
+ struct smbXcli_tcon *tcon;
+ } smb;
};
/* open second dcerpc pipe using the same transport as for primary pipe */
switch (s->pipe->conn->transport.transport) {
case NCACN_NP:
- pipe_smb_req = dcerpc_secondary_smb_send(s->pipe->conn,
- s->pipe2->conn,
+ s->smb.conn = dcerpc_binding_get_pointer_option(s->pipe->binding,
+ "connection",
+ struct smbXcli_conn);
+ s->smb.session = dcerpc_binding_get_pointer_option(s->pipe->binding,
+ "connection",
+ struct smbXcli_session);
+ s->smb.tcon = dcerpc_binding_get_pointer_option(s->pipe->binding,
+ "connection",
+ struct smbXcli_tcon);
+
+ if (!smbXcli_conn_is_connected(s->smb.conn)) {
+ composite_error(c, NT_STATUS_INVALID_PARAMETER_MIX);
+ return c;
+ }
+
+ pipe_smb_req = dcerpc_pipe_open_smb_send(s->pipe2->conn,
+ s->smb.conn,
+ s->smb.session,
+ s->smb.tcon,
+ DCERPC_REQUEST_TIMEOUT * 1000,
endpoint);
composite_continue(c, pipe_smb_req, continue_open_smb, c);
return c;
{
struct composite_context *c = talloc_get_type(ctx->async.private_data,
struct composite_context);
-
- c->status = dcerpc_secondary_smb_recv(ctx);
+ struct sec_conn_state *s = talloc_get_type_abort(c->private_data,
+ struct sec_conn_state);
+
+ c->status = dcerpc_pipe_open_smb_recv(ctx);
+ if (!composite_is_ok(c)) return;
+
+ c->status = dcerpc_binding_set_pointer_option(s->binding,
+ "connection",
+ struct smbXcli_conn,
+ s->smb.conn);
+ if (!composite_is_ok(c)) return;
+
+ c->status = dcerpc_binding_set_pointer_option(s->binding,
+ "connection",
+ struct smbXcli_session,
+ s->smb.session);
+ if (!composite_is_ok(c)) return;
+
+ c->status = dcerpc_binding_set_pointer_option(s->binding,
+ "connection",
+ struct smbXcli_tcon,
+ s->smb.tcon);
if (!composite_is_ok(c)) return;
continue_pipe_open(c);