summaryrefslogtreecommitdiff
path: root/source3/libsmb/namequery.c
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2007-08-28 14:27:48 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:30:16 -0500
commit22cf5a3f8086b8f823fa5c45bce4432df825b92c (patch)
tree581b844de5185a1692a127e7e16a566cf4769995 /source3/libsmb/namequery.c
parentc7489a5d96b20c0d9437560978de03e8ff38abd7 (diff)
downloadsamba-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/namequery.c')
-rw-r--r--source3/libsmb/namequery.c26
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