diff options
author | Günther Deschner <gd@samba.org> | 2007-08-28 14:27:48 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:30:16 -0500 |
commit | 22cf5a3f8086b8f823fa5c45bce4432df825b92c (patch) | |
tree | 581b844de5185a1692a127e7e16a566cf4769995 /source3/libsmb | |
parent | c7489a5d96b20c0d9437560978de03e8ff38abd7 (diff) | |
download | samba-22cf5a3f8086b8f823fa5c45bce4432df825b92c.tar.gz samba-22cf5a3f8086b8f823fa5c45bce4432df825b92c.tar.bz2 samba-22cf5a3f8086b8f823fa5c45bce4432df825b92c.zip |
r24739: With resolve_ads() allow to query for PDCs as well.
Also add dns query functions to find GCs and DCs by GUID.
Guenther
(This used to be commit cc469157f6684ec507bf1c3a659fc36a53d304a1)
Diffstat (limited to 'source3/libsmb')
-rw-r--r-- | source3/libsmb/namequery.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 77d259cfa6..49e3375f50 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -1059,7 +1059,8 @@ NTSTATUS resolve_ads(const char *name, int name_type, int numdcs = 0; int numaddrs = 0; - if ((name_type != 0x1c) && (name_type != KDC_NAME_TYPE)) { + if ((name_type != 0x1c) && (name_type != KDC_NAME_TYPE) && + (name_type != 0x1b)) { return NT_STATUS_INVALID_PARAMETER; } @@ -1069,6 +1070,12 @@ NTSTATUS resolve_ads(const char *name, int name_type, } switch (name_type) { + case 0x1b: + DEBUG(5,("resolve_ads: Attempting to resolve " + "PDC for %s using DNS\n", name)); + status = ads_dns_query_pdc(ctx, name, &dcs, &numdcs); + break; + case 0x1c: DEBUG(5,("resolve_ads: Attempting to resolve " "DCs for %s using DNS\n", name)); @@ -1419,11 +1426,18 @@ BOOL get_pdc_ip(const char *domain, struct in_addr *ip) /* Look up #1B name */ - status = internal_resolve_name(domain, 0x1b, NULL, &ip_list, - &count, - lp_name_resolve_order()); - if (!NT_STATUS_IS_OK(status)) { - return False; + if (lp_security() == SEC_ADS) { + status = internal_resolve_name(domain, 0x1b, NULL, &ip_list, + &count, "ads"); + } + + if (!NT_STATUS_IS_OK(status) || count == 0) { + status = internal_resolve_name(domain, 0x1b, NULL, &ip_list, + &count, + lp_name_resolve_order()); + if (!NT_STATUS_IS_OK(status)) { + return False; + } } /* if we get more than 1 IP back we have to assume it is a |