The branch, master has been updated via a610ce4 libcli/nbt: we don't need LIBCLI_COMPOSITE anymore via 820ae3d libcli/nbt: convert nbt_name_register_bcast_send/recv to tevent_req via 0b8056d libcli/nbt: s/name_register_bcast_handler/nbt_name_register_bcast_handler via c654a6c libcli/nbt: s/register_bcast_state/nbt_name_register_bcast_state/ via 77d82fe libcli/nbt: move nbt_name_register_bcast_send to the top of nbt_name_register_bcast_* via 6f2d94b s4:nbt_server/register: add a nbtd_register_name_state via e3a0463 libcli/nbt: convert nbt_name_register_wins_send/recv to tevent_req via 4f233c7 libcli/nbt: s/name_register_wins_handler/nbt_name_register_wins_handler via b166813 libcli/nbt: s/register_wins_state/nbt_name_register_wins_state via 549b594 libcli/nbt: move nbt_name_register_wins_send() to the top of all nbt_name_register_wins_* related code via 12c3880 s4:nbt_server/winsclient: add a nbtd_wins_register_state via 43fb7f1 libcli/nbt: convert nbt_name_refresh_wins_send/recv to tevent_req via 332f261 libcli/nbt: s/name_refresh_wins_handler/nbt_name_refresh_wins_handler via 3ded1da libcli/nbt: s/refresh_wins_state/nbt_name_refresh_wins_state via e36e729 libcli/nbt: move nbt_name_refresh_wins_send() to the top of all nbt_name_refresh_wins_* related code via 5f19a24 s4:nbt_server/winsclient: add a nbtd_wins_refresh_state via 2ae3bb0 s4:nbt_server/wins: fix compiler warnings from a10b341 Include misc.idl for policy_handle in srvsvc.idl.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit a610ce4aa63b5bbe0886e510f7ccd9a6f95e266d Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 22:29:30 2010 +0200 libcli/nbt: we don't need LIBCLI_COMPOSITE anymore metze Autobuild-User: Stefan Metzmacher <me...@samba.org> Autobuild-Date: Mon Oct 18 16:18:32 UTC 2010 on sn-devel-104 commit 820ae3d9a36e031027be163d22eec468a6da8603 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 21:18:15 2010 +0200 libcli/nbt: convert nbt_name_register_bcast_send/recv to tevent_req metze commit 0b8056d580e2d2475b208c73ffb698b0bcd487eb Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 21:01:23 2010 +0200 libcli/nbt: s/name_register_bcast_handler/nbt_name_register_bcast_handler metze commit c654a6c02bbd7c7a245b2a06e405d88724c12fc7 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 20:59:35 2010 +0200 libcli/nbt: s/register_bcast_state/nbt_name_register_bcast_state/ metze commit 77d82fe944fa1f02c150cc2e0967cca654cd4dae Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 20:57:58 2010 +0200 libcli/nbt: move nbt_name_register_bcast_send to the top of nbt_name_register_bcast_* metze commit 6f2d94b960bb6d23ff8932eff2b44722cf335280 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 22:17:02 2010 +0200 s4:nbt_server/register: add a nbtd_register_name_state metze commit e3a0463414ba7759d332d5bebf6222bfa17ed037 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 21:58:29 2010 +0200 libcli/nbt: convert nbt_name_register_wins_send/recv to tevent_req metze commit 4f233c7ff8b23b0dd4797e08d7dc680598e1b844 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 21:23:58 2010 +0200 libcli/nbt: s/name_register_wins_handler/nbt_name_register_wins_handler metze commit b16681374c6c4d010a74bb2cb914ac226643c634 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 21:21:26 2010 +0200 libcli/nbt: s/register_wins_state/nbt_name_register_wins_state metze commit 549b594c5798954de056cf7e3858e94f1b965bdb Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 21:19:59 2010 +0200 libcli/nbt: move nbt_name_register_wins_send() to the top of all nbt_name_register_wins_* related code metze commit 12c38806af46da329e2f370d32a4fa964ceeb23f Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 20:49:28 2010 +0200 s4:nbt_server/winsclient: add a nbtd_wins_register_state We now keep the nbtd_wins_register_state around between nbt_name_register_wins_send() and nbt_name_register_wins_recv() metze commit 43fb7f1698c0c8aaa7f1e5d6a0f924396a9a12fe Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 08:54:27 2010 +0200 libcli/nbt: convert nbt_name_refresh_wins_send/recv to tevent_req metze commit 332f261bbf5a3179cbab6cb7aa8b490d0072b7af Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 08:33:06 2010 +0200 libcli/nbt: s/name_refresh_wins_handler/nbt_name_refresh_wins_handler metze commit 3ded1da8e99a628530d0a45256e012b7553c094c Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 08:18:16 2010 +0200 libcli/nbt: s/refresh_wins_state/nbt_name_refresh_wins_state metze commit e36e7295da42743519470f5b5c06e65071707db5 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 08:15:01 2010 +0200 libcli/nbt: move nbt_name_refresh_wins_send() to the top of all nbt_name_refresh_wins_* related code metze commit 5f19a24c500c17de9159f721c75077a162fa8bac Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 09:41:16 2010 +0200 s4:nbt_server/winsclient: add a nbtd_wins_refresh_state We now keep the nbtd_wins_refresh_state around between nbt_name_refresh_wins_send() and nbt_name_refresh_wins_recv() metze commit 2ae3bb0b160c8c1cc0f500bfdd39125292db5f59 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Oct 11 22:26:09 2010 +0200 s4:nbt_server/wins: fix compiler warnings metze ----------------------------------------------------------------------- Summary of changes: libcli/nbt/libnbt.h | 32 ++- libcli/nbt/namerefresh.c | 254 +++++++++++-------- libcli/nbt/nameregister.c | 483 +++++++++++++++++++-------------- libcli/nbt/wscript_build | 2 +- source4/nbt_server/register.c | 58 +++-- source4/nbt_server/wins/winsclient.c | 175 +++++++------ source4/nbt_server/wins/winsserver.h | 1 + 7 files changed, 586 insertions(+), 419 deletions(-) Changeset truncated at 500 lines: diff --git a/libcli/nbt/libnbt.h b/libcli/nbt/libnbt.h index 6165548..21fd859 100644 --- a/libcli/nbt/libnbt.h +++ b/libcli/nbt/libnbt.h @@ -339,19 +339,27 @@ NDR_SCALAR_PROTO(nbt_string, const char *) NDR_BUFFER_PROTO(nbt_name, struct nbt_name) NTSTATUS nbt_rcode_to_ntstatus(uint8_t rcode); -struct composite_context; -struct composite_context *nbt_name_register_bcast_send(struct nbt_name_socket *nbtsock, - struct nbt_name_register_bcast *io); -NTSTATUS nbt_name_register_bcast_recv(struct composite_context *c); -struct composite_context *nbt_name_register_wins_send(struct nbt_name_socket *nbtsock, - struct nbt_name_register_wins *io); -NTSTATUS nbt_name_refresh_wins_recv(struct composite_context *c, TALLOC_CTX *mem_ctx, - struct nbt_name_refresh_wins *io); -struct composite_context *nbt_name_refresh_wins_send(struct nbt_name_socket *nbtsock, - struct nbt_name_refresh_wins *io); -NTSTATUS nbt_name_register_wins_recv(struct composite_context *c, TALLOC_CTX *mem_ctx, +struct tevent_context; +struct tevent_req; +struct tevent_req *nbt_name_register_bcast_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct nbt_name_socket *nbtsock, + struct nbt_name_register_bcast *io); +NTSTATUS nbt_name_register_bcast_recv(struct tevent_req *req); +struct tevent_req *nbt_name_register_wins_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct nbt_name_socket *nbtsock, + struct nbt_name_register_wins *io); +NTSTATUS nbt_name_register_wins_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, struct nbt_name_register_wins *io); - +struct tevent_req *nbt_name_refresh_wins_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct nbt_name_socket *nbtsock, + struct nbt_name_refresh_wins *io); +NTSTATUS nbt_name_refresh_wins_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, + struct nbt_name_refresh_wins *io); XFILE *startlmhosts(const char *fname); bool getlmhostsent(TALLOC_CTX *ctx, XFILE *fp, char **pp_name, int *name_type, diff --git a/libcli/nbt/namerefresh.c b/libcli/nbt/namerefresh.c index ec63df9..79c6c1f 100644 --- a/libcli/nbt/namerefresh.c +++ b/libcli/nbt/namerefresh.c @@ -20,10 +20,11 @@ */ #include "includes.h" +#include <tevent.h> #include "../libcli/nbt/libnbt.h" #include "../libcli/nbt/nbt_proto.h" -#include "libcli/composite/composite.h" #include "lib/socket/socket.h" +#include "lib/util/tevent_ntstatus.h" /* send a nbt name refresh request @@ -142,104 +143,70 @@ _PUBLIC_ NTSTATUS nbt_name_refresh(struct nbt_name_socket *nbtsock, addresses to refresh. Try each WINS server in turn, until we get a reply for each address */ -struct refresh_wins_state { +struct nbt_name_refresh_wins_state { struct nbt_name_socket *nbtsock; struct nbt_name_refresh *io; - const char **wins_servers; + char **wins_servers; uint16_t wins_port; - const char **addresses; + char **addresses; int address_idx; - struct nbt_name_request *req; }; +static void nbt_name_refresh_wins_handler(struct nbt_name_request *subreq); /** - state handler for WINS multi-homed multi-server name refresh + the async send call for a multi-server WINS refresh */ -static void name_refresh_wins_handler(struct nbt_name_request *req) +_PUBLIC_ struct tevent_req *nbt_name_refresh_wins_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct nbt_name_socket *nbtsock, + struct nbt_name_refresh_wins *io) { - struct composite_context *c = talloc_get_type(req->async.private_data, - struct composite_context); - struct refresh_wins_state *state = talloc_get_type(c->private_data, - struct refresh_wins_state); - NTSTATUS status; - - status = nbt_name_refresh_recv(state->req, state, state->io); - if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) { - /* the refresh timed out - try the next WINS server */ - state->wins_servers++; - state->address_idx = 0; - if (state->wins_servers[0] == NULL) { - c->state = COMPOSITE_STATE_ERROR; - c->status = status; - goto done; - } - state->io->in.dest_addr = state->wins_servers[0]; - state->io->in.dest_port = state->wins_port; - state->io->in.address = state->addresses[0]; - state->req = nbt_name_refresh_send(state->nbtsock, state->io); - if (state->req == NULL) { - c->state = COMPOSITE_STATE_ERROR; - c->status = NT_STATUS_NO_MEMORY; - } else { - state->req->async.fn = name_refresh_wins_handler; - state->req->async.private_data = c; - } - } else if (!NT_STATUS_IS_OK(status)) { - c->state = COMPOSITE_STATE_ERROR; - c->status = status; - } else { - if (state->io->out.rcode == 0 && - state->addresses[state->address_idx+1] != NULL) { - /* refresh our next address */ - state->io->in.address = state->addresses[++(state->address_idx)]; - state->req = nbt_name_refresh_send(state->nbtsock, state->io); - if (state->req == NULL) { - c->state = COMPOSITE_STATE_ERROR; - c->status = NT_STATUS_NO_MEMORY; - } else { - state->req->async.fn = name_refresh_wins_handler; - state->req->async.private_data = c; - } - } else { - c->state = COMPOSITE_STATE_DONE; - c->status = NT_STATUS_OK; - } + struct tevent_req *req; + struct nbt_name_refresh_wins_state *state; + struct nbt_name_request *subreq; + + req = tevent_req_create(mem_ctx, &state, + struct nbt_name_refresh_wins_state); + if (req == NULL) { + return NULL; } -done: - if (c->state >= COMPOSITE_STATE_DONE && - c->async.fn) { - c->async.fn(c); + state->io = talloc(state, struct nbt_name_refresh); + if (tevent_req_nomem(state->io, req)) { + return tevent_req_post(req, ev); } -} -/** - the async send call for a multi-server WINS refresh -*/ -_PUBLIC_ struct composite_context *nbt_name_refresh_wins_send(struct nbt_name_socket *nbtsock, - struct nbt_name_refresh_wins *io) -{ - struct composite_context *c; - struct refresh_wins_state *state; + if (io->in.wins_servers == NULL) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + return tevent_req_post(req, ev); + } - c = talloc_zero(nbtsock, struct composite_context); - if (c == NULL) goto failed; + if (io->in.wins_servers[0] == NULL) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + return tevent_req_post(req, ev); + } - state = talloc(c, struct refresh_wins_state); - if (state == NULL) goto failed; + if (io->in.addresses == NULL) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + return tevent_req_post(req, ev); + } - state->io = talloc(state, struct nbt_name_refresh); - if (state->io == NULL) goto failed; + if (io->in.addresses[0] == NULL) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + return tevent_req_post(req, ev); + } state->wins_port = io->in.wins_port; - state->wins_servers = (const char **)str_list_copy(state, io->in.wins_servers); - if (state->wins_servers == NULL || - state->wins_servers[0] == NULL) goto failed; + state->wins_servers = str_list_copy(state, io->in.wins_servers); + if (tevent_req_nomem(state->wins_servers, req)) { + return tevent_req_post(req, ev); + } - state->addresses = (const char **)str_list_copy(state, io->in.addresses); - if (state->addresses == NULL || - state->addresses[0] == NULL) goto failed; + state->addresses = str_list_copy(state, io->in.addresses); + if (tevent_req_nomem(state->addresses, req)) { + return tevent_req_post(req, ev); + } state->io->in.name = io->in.name; state->io->in.dest_addr = state->wins_servers[0]; @@ -254,48 +221,127 @@ _PUBLIC_ struct composite_context *nbt_name_refresh_wins_send(struct nbt_name_so state->nbtsock = nbtsock; state->address_idx = 0; - state->req = nbt_name_refresh_send(nbtsock, state->io); - if (state->req == NULL) goto failed; + subreq = nbt_name_refresh_send(nbtsock, state->io); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } - state->req->async.fn = name_refresh_wins_handler; - state->req->async.private_data = c; + subreq->async.fn = nbt_name_refresh_wins_handler; + subreq->async.private_data = req; - c->private_data = state; - c->state = COMPOSITE_STATE_IN_PROGRESS; - c->event_ctx = nbtsock->event_ctx; + return req; +} - return c; +static void nbt_name_refresh_wins_handler(struct nbt_name_request *subreq) +{ + struct tevent_req *req = + talloc_get_type_abort(subreq->async.private_data, + struct tevent_req); + struct nbt_name_refresh_wins_state *state = + tevent_req_data(req, + struct nbt_name_refresh_wins_state); + NTSTATUS status; -failed: - talloc_free(c); - return NULL; + status = nbt_name_refresh_recv(subreq, state, state->io); + if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) { + /* the refresh timed out - try the next WINS server */ + state->wins_servers++; + if (state->wins_servers[0] == NULL) { + tevent_req_nterror(req, status); + return; + } + + state->address_idx = 0; + state->io->in.dest_addr = state->wins_servers[0]; + state->io->in.dest_port = state->wins_port; + state->io->in.address = state->addresses[0]; + + subreq = nbt_name_refresh_send(state->nbtsock, state->io); + if (tevent_req_nomem(subreq, req)) { + return; + } + subreq->async.fn = nbt_name_refresh_wins_handler; + subreq->async.private_data = req; + } else if (!NT_STATUS_IS_OK(status)) { + tevent_req_nterror(req, status); + return; + } + + if (state->io->out.rcode == 0 && + state->addresses[state->address_idx+1] != NULL) { + /* refresh our next address */ + state->io->in.address = state->addresses[++(state->address_idx)]; + subreq = nbt_name_refresh_send(state->nbtsock, state->io); + if (tevent_req_nomem(subreq, req)) { + return; + } + subreq->async.fn = nbt_name_refresh_wins_handler; + subreq->async.private_data = req; + return; + } + + tevent_req_done(req); } /* multi-homed WINS name refresh - recv side */ -_PUBLIC_ NTSTATUS nbt_name_refresh_wins_recv(struct composite_context *c, TALLOC_CTX *mem_ctx, - struct nbt_name_refresh_wins *io) +_PUBLIC_ NTSTATUS nbt_name_refresh_wins_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, + struct nbt_name_refresh_wins *io) { + struct nbt_name_refresh_wins_state *state = + tevent_req_data(req, + struct nbt_name_refresh_wins_state); NTSTATUS status; - status = composite_wait(c); - if (NT_STATUS_IS_OK(status)) { - struct refresh_wins_state *state = - talloc_get_type(c->private_data, struct refresh_wins_state); - io->out.wins_server = talloc_steal(mem_ctx, state->wins_servers[0]); - io->out.rcode = state->io->out.rcode; + + if (tevent_req_is_nterror(req, &status)) { + tevent_req_received(req); + return status; } - talloc_free(c); - return status; + + io->out.wins_server = talloc_move(mem_ctx, &state->wins_servers[0]); + io->out.rcode = state->io->out.rcode; + + tevent_req_received(req); + return NT_STATUS_OK; } /* multi-homed WINS refresh - sync interface */ _PUBLIC_ NTSTATUS nbt_name_refresh_wins(struct nbt_name_socket *nbtsock, - TALLOC_CTX *mem_ctx, - struct nbt_name_refresh_wins *io) + TALLOC_CTX *mem_ctx, + struct nbt_name_refresh_wins *io) { - struct composite_context *c = nbt_name_refresh_wins_send(nbtsock, io); - return nbt_name_refresh_wins_recv(c, mem_ctx, io); + TALLOC_CTX *frame = talloc_stackframe(); + struct tevent_context *ev; + struct tevent_req *subreq; + NTSTATUS status; + + /* + * TODO: create a temporary event context + */ + ev = nbtsock->event_ctx; + + subreq = nbt_name_refresh_wins_send(frame, ev, nbtsock, io); + if (subreq == NULL) { + talloc_free(frame); + return NT_STATUS_NO_MEMORY; + } + + if (!tevent_req_poll(subreq, ev)) { + status = map_nt_error_from_unix(errno); + talloc_free(frame); + return status; + } + + status = nbt_name_refresh_wins_recv(subreq, mem_ctx, io); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(frame); + return status; + } + + TALLOC_FREE(frame); + return NT_STATUS_OK; } diff --git a/libcli/nbt/nameregister.c b/libcli/nbt/nameregister.c index 39ef056..204fb6f 100644 --- a/libcli/nbt/nameregister.c +++ b/libcli/nbt/nameregister.c @@ -20,11 +20,12 @@ */ #include "includes.h" +#include <tevent.h> #include "../libcli/nbt/libnbt.h" #include "../libcli/nbt/nbt_proto.h" -#include "libcli/composite/composite.h" #include "lib/socket/socket.h" #include "librpc/gen_ndr/ndr_nbt.h" +#include "../lib/util/tevent_ntstatus.h" /* send a nbt name registration request @@ -148,120 +149,115 @@ _PUBLIC_ NTSTATUS nbt_name_register(struct nbt_name_socket *nbtsock, a 4 step broadcast registration. 3 lots of name registration requests, followed by a name registration demand */ -struct register_bcast_state { +struct nbt_name_register_bcast_state { struct nbt_name_socket *nbtsock; - struct nbt_name_register *io; - struct nbt_name_request *req; + struct nbt_name_register io; }; +static void nbt_name_register_bcast_handler(struct nbt_name_request *subreq); /* - state handler for 4 stage name registration + the async send call for a 4 stage name registration */ -static void name_register_bcast_handler(struct nbt_name_request *req) +_PUBLIC_ struct tevent_req *nbt_name_register_bcast_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct nbt_name_socket *nbtsock, + struct nbt_name_register_bcast *io) { - struct composite_context *c = talloc_get_type(req->async.private_data, struct composite_context); - struct register_bcast_state *state = talloc_get_type(c->private_data, struct register_bcast_state); - NTSTATUS status; + struct tevent_req *req; + struct nbt_name_register_bcast_state *state; + struct nbt_name_request *subreq; + + req = tevent_req_create(mem_ctx, &state, + struct nbt_name_register_bcast_state); + if (req == NULL) { + return NULL; + } - status = nbt_name_register_recv(state->req, state, state->io); - if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) { - if (state->io->in.register_demand == true) { - /* all done */ - c->state = COMPOSITE_STATE_DONE; - c->status = NT_STATUS_OK; - goto done; - } + state->io.in.name = io->in.name; + state->io.in.dest_addr = io->in.dest_addr; + state->io.in.dest_port = io->in.dest_port; + state->io.in.address = io->in.address; + state->io.in.nb_flags = io->in.nb_flags; + state->io.in.register_demand = false; + state->io.in.broadcast = true; + state->io.in.multi_homed = false; + state->io.in.ttl = io->in.ttl; + state->io.in.timeout = 1; + state->io.in.retries = 2; - /* the registration timed out - good, send the demand */ - state->io->in.register_demand = true; - state->io->in.retries = 0; - state->req = nbt_name_register_send(state->nbtsock, state->io); - if (state->req == NULL) { - c->state = COMPOSITE_STATE_ERROR; - c->status = NT_STATUS_NO_MEMORY; - } else { - state->req->async.fn = name_register_bcast_handler; - state->req->async.private_data = c; - } - } else if (!NT_STATUS_IS_OK(status)) { - c->state = COMPOSITE_STATE_ERROR; - c->status = status; - } else { - c->state = COMPOSITE_STATE_ERROR; - c->status = NT_STATUS_CONFLICTING_ADDRESSES; - DEBUG(3,("Name registration conflict from %s for %s with ip %s - rcode %d\n", - state->io->out.reply_from, - nbt_name_string(state, &state->io->out.name), - state->io->out.reply_addr, - state->io->out.rcode)); - } + state->nbtsock = nbtsock; -done: - if (c->state >= COMPOSITE_STATE_DONE && - c->async.fn) { - c->async.fn(c); + subreq = nbt_name_register_send(nbtsock, &state->io); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); } + + subreq->async.fn = nbt_name_register_bcast_handler; + subreq->async.private_data = req; + + return req; } -/* - the async send call for a 4 stage name registration -*/ -_PUBLIC_ struct composite_context *nbt_name_register_bcast_send(struct nbt_name_socket *nbtsock, - struct nbt_name_register_bcast *io) +static void nbt_name_register_bcast_handler(struct nbt_name_request *subreq) { - struct composite_context *c; - struct register_bcast_state *state; - - c = talloc_zero(nbtsock, struct composite_context); - if (c == NULL) goto failed; - - state = talloc(c, struct register_bcast_state); - if (state == NULL) goto failed; - - state->io = talloc(state, struct nbt_name_register); - if (state->io == NULL) goto failed; - - state->io->in.name = io->in.name; - state->io->in.dest_addr = io->in.dest_addr; - state->io->in.dest_port = io->in.dest_port; -- Samba Shared Repository