mirror of
https://github.com/samba-team/samba.git
synced 2025-01-10 01:18:15 +03:00
b9bb7f596d
- change the iface_n_*() functions to return a "const char *" instead of a "struct ipv4_addr"
I think that in general we should move towards "const char *" for
all IP addresses, as this makes IPv6 much easier, and is also easier
to debug. Andrew, when you get a chance, could you fix some of the
auth code to use strings for IPs ?
- return a NTSTATUS error on bad name queries and node status instead
of using rcode. This makes the calling code simpler.
- added low level name release code in libcli/nbt/
- use a real IP in the register and wins nbt torture tests, as w2k3
WINS server silently rejects some operations that don't come from the
IP being used (eg. it says "yes" to a release, but does not in fact
release the name)
(This used to be commit bb1ab11d8e
)
77 lines
2.1 KiB
C
77 lines
2.1 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
|
|
broadcast name resolution module
|
|
|
|
Copyright (C) Andrew Tridgell 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.
|
|
*/
|
|
|
|
#include "includes.h"
|
|
#include "system/network.h"
|
|
#include "libcli/raw/libcliraw.h"
|
|
#include "libcli/composite/composite.h"
|
|
|
|
/*
|
|
broadcast name resolution method - async send
|
|
*/
|
|
struct composite_context *resolve_name_bcast_send(struct nbt_name *name,
|
|
struct event_context *event_ctx)
|
|
{
|
|
int num_interfaces = iface_count();
|
|
const char **address_list;
|
|
struct composite_context *c;
|
|
int i;
|
|
|
|
address_list = talloc_array(NULL, const char *, num_interfaces+1);
|
|
if (address_list == NULL) return NULL;
|
|
|
|
for (i=0;i<num_interfaces;i++) {
|
|
address_list[i] = talloc_strdup(address_list, iface_n_bcast(i));
|
|
if (address_list[i] == NULL) {
|
|
talloc_free(address_list);
|
|
return NULL;
|
|
}
|
|
}
|
|
address_list[i] = NULL;
|
|
|
|
c = resolve_name_nbtlist_send(name, event_ctx, address_list, True, False);
|
|
talloc_free(address_list);
|
|
|
|
return c;
|
|
}
|
|
|
|
/*
|
|
broadcast name resolution method - recv side
|
|
*/
|
|
NTSTATUS resolve_name_bcast_recv(struct composite_context *c,
|
|
TALLOC_CTX *mem_ctx, const char **reply_addr)
|
|
{
|
|
return resolve_name_nbtlist_recv(c, mem_ctx, reply_addr);
|
|
}
|
|
|
|
/*
|
|
broadcast name resolution method - sync call
|
|
*/
|
|
NTSTATUS resolve_name_bcast(struct nbt_name *name,
|
|
TALLOC_CTX *mem_ctx,
|
|
const char **reply_addr)
|
|
{
|
|
struct composite_context *c = resolve_name_bcast_send(name, NULL);
|
|
return resolve_name_bcast_recv(c, mem_ctx, reply_addr);
|
|
}
|
|
|