#include "auth/credentials/credentials.h"
#include "librpc/gen_ndr/ndr_nbt.h"
#include "param/param.h"
+#include "lib/util/util_net.h"
/* the stages of this call */
-enum connect_stage {CONNECT_RESOLVE,
- CONNECT_SOCKET,
+enum connect_stage {CONNECT_SOCKET,
CONNECT_SESSION_REQUEST,
CONNECT_NEGPROT,
CONNECT_SESSION_SETUP,
}
state->req->async.fn = request_handler;
- state->req->async.private = c;
+ state->req->async.private_data = c;
state->stage = CONNECT_TCON;
return NT_STATUS_OK;
}
state->req->async.fn = request_handler;
- state->req->async.private = c;
+ state->req->async.private_data = c;
state->stage = CONNECT_TCON;
return NT_STATUS_OK;
NT_STATUS_NOT_OK_RETURN(status);
/* next step is a session setup */
- state->session = smbcli_session_init(state->transport, state, true);
+ state->session = smbcli_session_init(state->transport, state, true, io->in.session_options);
NT_STATUS_HAVE_NO_MEMORY(state->session);
/* setup for a tconx (or at least have the structure ready to
state->io_setup->in.capabilities = state->transport->negotiate.capabilities;
state->io_setup->in.credentials = io->in.credentials;
state->io_setup->in.workgroup = io->in.workgroup;
+ state->io_setup->in.gensec_settings = io->in.gensec_settings;
state->creq = smb_composite_sesssetup_send(state->session, state->io_setup);
NT_STATUS_HAVE_NO_MEMORY(state->creq);
NT_STATUS_HAVE_NO_MEMORY(state->req);
state->req->async.fn = request_handler;
- state->req->async.private = c;
+ state->req->async.private_data = c;
state->stage = CONNECT_NEGPROT;
return NT_STATUS_OK;
/* the socket is up - we can initialise the smbcli transport layer */
state->transport = smbcli_transport_init(state->sock, state, true,
- &io->in.options);
+ &io->in.options, io->in.iconv_convenience);
NT_STATUS_HAVE_NO_MEMORY(state->transport);
if (is_ipaddress(state->sock->hostname) &&
NT_STATUS_HAVE_NO_MEMORY(state->req);
state->req->async.fn = request_handler;
- state->req->async.private = c;
+ state->req->async.private_data = c;
state->stage = CONNECT_SESSION_REQUEST;
return NT_STATUS_OK;
}
-/*
- called when name resolution is finished
-*/
-static NTSTATUS connect_resolve(struct composite_context *c,
- struct smb_composite_connect *io)
-{
- struct connect_state *state = talloc_get_type(c->private_data, struct connect_state);
- NTSTATUS status;
- const char *address;
-
- status = resolve_name_recv(state->creq, state, &address);
- NT_STATUS_NOT_OK_RETURN(status);
-
- state->creq = smbcli_sock_connect_send(state, address,
- io->in.dest_ports,
- io->in.dest_host,
- NULL, c->event_ctx);
- NT_STATUS_HAVE_NO_MEMORY(state->creq);
-
- state->stage = CONNECT_SOCKET;
- state->creq->async.private_data = c;
- state->creq->async.fn = composite_handler;
-
- return NT_STATUS_OK;
-}
-
-
/*
handle and dispatch state transitions
*/
struct connect_state *state = talloc_get_type(c->private_data, struct connect_state);
switch (state->stage) {
- case CONNECT_RESOLVE:
- c->status = connect_resolve(c, state->io);
- break;
case CONNECT_SOCKET:
c->status = connect_socket(c, state->io);
break;
case CONNECT_TCON:
c->status = connect_tcon(c, state->io);
break;
+ case CONNECT_DONE:
+ break;
}
if (state->stage == CONNECT_DONE) {
*/
static void request_handler(struct smbcli_request *req)
{
- struct composite_context *c = talloc_get_type(req->async.private,
+ struct composite_context *c = talloc_get_type(req->async.private_data,
struct composite_context);
state_handler(c);
}
struct composite_context *smb_composite_connect_send(struct smb_composite_connect *io,
TALLOC_CTX *mem_ctx,
struct resolve_context *resolve_ctx,
- struct event_context *event_ctx)
+ struct tevent_context *event_ctx)
{
struct composite_context *c;
struct connect_state *state;
- struct nbt_name name;
c = talloc_zero(mem_ctx, struct composite_context);
if (c == NULL) goto failed;
- c->event_ctx = talloc_reference(c, event_ctx);
+ c->event_ctx = event_ctx;
if (c->event_ctx == NULL) goto failed;
state = talloc_zero(c, struct connect_state);
if (state == NULL) goto failed;
+ if (io->in.gensec_settings == NULL) goto failed;
state->io = io;
c->state = COMPOSITE_STATE_IN_PROGRESS;
c->private_data = state;
- state->stage = CONNECT_RESOLVE;
- make_nbt_name_server(&name, io->in.dest_host);
- state->creq = resolve_name_send(resolve_ctx, &name, c->event_ctx);
-
+ state->creq = smbcli_sock_connect_send(state,
+ NULL,
+ io->in.dest_ports,
+ io->in.dest_host,
+ resolve_ctx, c->event_ctx,
+ io->in.socket_options);
if (state->creq == NULL) goto failed;
+
+ state->stage = CONNECT_SOCKET;
state->creq->async.private_data = c;
state->creq->async.fn = composite_handler;
*/
NTSTATUS smb_composite_connect(struct smb_composite_connect *io, TALLOC_CTX *mem_ctx,
struct resolve_context *resolve_ctx,
- struct event_context *ev)
+ struct tevent_context *ev)
{
struct composite_context *c = smb_composite_connect_send(io, mem_ctx, resolve_ctx, ev);
return smb_composite_connect_recv(c, mem_ctx);