1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-06 08:23:50 +03:00
Files
samba-mirror/source/libcli/resolve/bcast.c
Andrew Tridgell d004e250b6 r13505: allow servers to bind to non-broadcast interfaces. Servers now
specifically ask for iface_n_bcast() and have to check if it returns
NULL, in which case it is a non-broadcast interface
2007-10-10 13:51:56 -05:00

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"
/*
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, count=0;
address_list = talloc_array(NULL, const char *, num_interfaces+1);
if (address_list == NULL) return NULL;
for (i=0;i<num_interfaces;i++) {
const char *bcast = iface_n_bcast(i);
if (bcast == NULL) continue;
address_list[count] = talloc_strdup(address_list, bcast);
if (address_list[count] == NULL) {
talloc_free(address_list);
return NULL;
}
count++;
}
address_list[count] = 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);
}