summaryrefslogtreecommitdiff
path: root/source4/libnet
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-01-21 11:18:56 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:09:03 -0500
commit2383787f199c51cdc202a3cef5822a9fe6b8774c (patch)
tree52419b4e736f5ae1727561a3c9831e899edb35c5 /source4/libnet
parentf1aaef3015864f9323711127a4964a8eceff6a52 (diff)
downloadsamba-2383787f199c51cdc202a3cef5822a9fe6b8774c.tar.gz
samba-2383787f199c51cdc202a3cef5822a9fe6b8774c.tar.bz2
samba-2383787f199c51cdc202a3cef5822a9fe6b8774c.zip
r4891: - added a generic resolve_name() async interface in libcli/resolve/,
which will eventually try all resolution methods setup in smb.conf - only resolution backend at the moment is bcast, which does a parallel broadcast to all configured network interfaces, and takes the first reply that comes in (this nicely demonstrates how to do parallel requests using the async APIs) - converted all the existing code to use the new resolve_name() api - removed all the old nmb code (yay!) (This used to be commit 239c310f255e43dd2d1c2433f666c9faaacbdce3)
Diffstat (limited to 'source4/libnet')
-rw-r--r--source4/libnet/libnet_rpc.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/source4/libnet/libnet_rpc.c b/source4/libnet/libnet_rpc.c
index b4b33bf4c0..1f546d89a4 100644
--- a/source4/libnet/libnet_rpc.c
+++ b/source4/libnet/libnet_rpc.c
@@ -19,29 +19,34 @@
*/
#include "includes.h"
+#include "libcli/nbt/libnbt.h"
#include "libnet/libnet.h"
/* find a domain pdc generic */
-static NTSTATUS libnet_find_pdc_generic(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_find_pdc *r)
+static NTSTATUS libnet_find_pdc_generic(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
+ union libnet_find_pdc *r)
{
- BOOL ret;
- struct ipv4_addr ip;
+ const char *address;
+ NTSTATUS status;
+ struct nbt_name name;
if (is_ipaddress(r->generic.in.domain_name)) {
r->generic.out.pdc_name = r->generic.in.domain_name;
return NT_STATUS_OK;
}
- ret = get_pdc_ip(mem_ctx, r->generic.in.domain_name, &ip);
- if (!ret) {
- /* fallback to a workstation name */
- ret = resolve_name(mem_ctx, r->generic.in.domain_name, &ip, 0x20);
- if (!ret) {
- return NT_STATUS_NO_LOGON_SERVERS;
- }
+ name.name = r->generic.in.domain_name;
+ name.type = NBT_NAME_PDC;
+ name.scope = NULL;
+
+ status = resolve_name(&name, mem_ctx, &address);
+ if (!NT_STATUS_IS_OK(status)) {
+ name.type = NBT_NAME_SERVER;
+ status = resolve_name(&name, mem_ctx, &address);
}
+ NT_STATUS_NOT_OK_RETURN(status);
- r->generic.out.pdc_name = talloc_strdup(mem_ctx, sys_inet_ntoa(ip));
+ r->generic.out.pdc_name = talloc_strdup(mem_ctx, address);
return NT_STATUS_OK;
}