svn commit: samba r12087 - in
branches/SAMBA_4_0/source/librpc/rpc: .
Stefan (metze) Metzmacher
metze at samba.org
Tue Dec 6 09:40:32 GMT 2005
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
mimir at samba.org schrieb:
Hi Rafal,
sorry I told you something wrong in the last mail...
> +void continue_pipe_open_smb(struct composite_context *ctx)
> +{
> + struct composite_context *c = talloc_get_type(ctx->async.private_data,
> + struct composite_context);
> + struct pipe_np_smb_state *s = talloc_get_type(c->private_data,
> + struct pipe_np_smb_state);
> +
> + c->status = dcerpc_pipe_open_smb_recv(ctx);
> + if (!NT_STATUS_IS_OK(c->status)) {
> +
> + DEBUG(0,("Failed to open pipe %s - %s\n", s->io.pipe_name, nt_errstr(c->status)));
> + composite_trigger_error(c);
this should be composite_error(), as the trigger versions are only used
in the _send() function that creates the composite_context, and where a async callback
isn't set by the caller.
> + }
> +
> + composite_done(c);
> +}
> + if (!NT_STATUS_IS_OK(c->status)) {
> +
> + DEBUG(0,("Failed to connect to %s - %s\n", s->io.binding->host, nt_errstr(c->status)));
> + composite_trigger_error(c);
same as above
> + }
> +
> + c->state = COMPOSITE_STATE_IN_PROGRESS;
> + c->private_data = s;
> + c->event_ctx = io->pipe->conn->event_ctx;
> +
> + s->io = *io;
> + conn = &s->conn;
> +
> + conn->in.dest_host = s->io.binding->host;
> + conn->in.port = 0;
> + conn->in.called_name = strupper_talloc(tmp_ctx, s->io.binding->host);
we should check this to
> + conn->in.service = "IPC$";
> + conn->in.service_type = NULL;
> + conn->in.fallback_to_anonymous = False;
> + conn->in.workgroup = lp_workgroup();
> +
> + if (s->io.binding->flags & DCERPC_SCHANNEL) {
> + struct cli_credentials *anon_creds
> + = cli_credentials_init(tmp_ctx);
> + if (composite_nomem(anon_creds, c)) return NULL;
sorry it was my fault to tell you to add this, it should be
if (!anon_creds) {
c->status = NT_STATUS_NO_MEMORY;
goto failed;
}
as we need to use the trigger version here.
> + cli_credentials_set_anonymous(anon_creds);
> + cli_credentials_guess(anon_creds);
> +
> + s->conn.in.credentials = anon_creds;
> +
> + } else {
> + s->conn.in.credentials = s->io.creds;
> + }
> +
> + conn_req = smb_composite_connect_send(conn, s->io.pipe->conn, s->io.pipe->conn->event_ctx);
here we also need to add this, because composite_continue would not cal the trigger version,
maybe we could always init the c->state with COMPOSITE_STATE_INIT, and then set
it to _IN_PROGRESS in the composite_continue_*() functions, and then let the
composite_is_ok(), composite_error(), composite_nomem(), composite_done
decide from the state if they need to act as trigger functions,
I think that would make the coding much easier, but we may need to review all current code...
if (!conn_req) {
c->status = NT_STATUS_NO_MEMORY;
goto failed;
}
> + composite_continue(c, conn_req, continue_smb_connect, c);
> +
> + return c;
> +
> +failed:
> + composite_trigger_error(c);
> + return NULL;
> +}
- --
metze
Stefan Metzmacher <metze at samba.org> www.samba.org
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFDlVyOm70gjA5TCD8RAkovAKCSsWzkHFXC0pEjUZJGz1qz2SnkPACfas29
h49FTVM7WCDruLC11J1c4hs=
=BZiR
-----END PGP SIGNATURE-----
More information about the samba-cvs
mailing list