diff options
author | Rafal Szczesniak <mimir@samba.org> | 2005-06-18 22:10:32 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:18:27 -0500 |
commit | 204722b86859da5e2addce51054323b6ad49a658 (patch) | |
tree | 862fa64ea1b6a7916a0cd0a4aed9aa114edb81f1 /source4/libnet/libnet_lookup.c | |
parent | d52ce8ff0c0546b681f3787728f739c1bb6a71e2 (diff) | |
download | samba-204722b86859da5e2addce51054323b6ad49a658.tar.gz samba-204722b86859da5e2addce51054323b6ad49a658.tar.bz2 samba-204722b86859da5e2addce51054323b6ad49a658.zip |
r7732: Implementation of very basic lookup function (to be used in more
specific routines like resolving a pdc).
Also, couple of formatting fixes.
rafal
(This used to be commit b9deaa995da3a732514d5ceab0010adb58be5fe0)
Diffstat (limited to 'source4/libnet/libnet_lookup.c')
-rw-r--r-- | source4/libnet/libnet_lookup.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/source4/libnet/libnet_lookup.c b/source4/libnet/libnet_lookup.c new file mode 100644 index 0000000000..05923ce177 --- /dev/null +++ b/source4/libnet/libnet_lookup.c @@ -0,0 +1,95 @@ +/* + Unix SMB/CIFS implementation. + + Copyright (C) Rafal Szczesniak 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + a composite function for name resolving +*/ + +#include "includes.h" +#include "libcli/raw/libcliraw.h" +#include "lib/events/events.h" +#include "libcli/composite/composite.h" +#include "libcli/composite/monitor.h" +#include "libnet/composite.h" +#include "librpc/gen_ndr/ndr_nbt.h" + + +struct lookup_state { + struct composite_context *resolve_ctx; + struct nbt_name hostname; + char address[16]; +}; + + +struct composite_context *libnet_Lookup_send(struct libnet_lookup *io) +{ + struct composite_context *c; + struct lookup_state *s; + + if (!io) return NULL; + + /* allocate context and state structures */ + c = talloc_zero(NULL, struct composite_context); + if (c == NULL) goto failed; + + s = talloc_zero(c, struct lookup_state); + if (s == NULL) goto failed; + + /* prepare event context */ + c->event_ctx = event_context_init(c); + if (c->event_ctx == NULL) goto failed; + + /* parameters */ + s->hostname.name = talloc_strdup(s, io->in.hostname); + s->hostname.type = io->in.type; + s->hostname.scope = NULL; + + c->private = s; + c->state = SMBCLI_REQUEST_SEND; + + /* send resolve request */ + s->resolve_ctx = resolve_name_send(&s->hostname, c->event_ctx, io->in.methods); + + return c; + +failed: + talloc_free(c); + return NULL; +} + + +NTSTATUS libnet_Lookup_recv(struct composite_context *c, TALLOC_CTX *mem_ctx, + struct libnet_lookup *io) +{ + NTSTATUS status; + struct lookup_state *s; + + s = talloc_get_type(c->private, struct lookup_state); + + status = resolve_name_recv(s->resolve_ctx, mem_ctx, io->out.address); + return status; +} + + +NTSTATUS libnet_Lookup(TALLOC_CTX *mem_ctx, struct libnet_lookup *io) +{ + struct composite_context *c = libnet_Lookup_send(io); + return libnet_Lookup_recv(c, mem_ctx, io); +} |