*********************************************************************/
static NTSTATUS ads_dns_lookup_srv( TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *name,
struct dns_rr_srv **dclist,
int *numdcs)
int rrnum;
int idx = 0;
NTSTATUS status;
- const char *dns_hosts_file;
if ( !ctx || !name || !dclist ) {
return NT_STATUS_INVALID_PARAMETER;
}
- dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
if (dns_hosts_file) {
return resolve_dns_hosts_file_as_dns_rr(dns_hosts_file,
name, true, ctx,
*********************************************************************/
NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dnsdomain,
struct dns_rr_ns **nslist,
int *numns)
int rrnum;
int idx = 0;
NTSTATUS status;
- const char *dns_hosts_file;
if ( !ctx || !dnsdomain || !nslist ) {
return NT_STATUS_INVALID_PARAMETER;
}
- dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
if (dns_hosts_file) {
DEBUG(1, ("NO 'NS' lookup available when using resolv:host file"));
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
********************************************************************/
static NTSTATUS ads_dns_query_internal(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *servicename,
const char *dc_pdc_gc_domains,
const char *realm,
if (!name) {
return NT_STATUS_NO_MEMORY;
}
- return ads_dns_lookup_srv( ctx, name, dclist, numdcs );
+ return ads_dns_lookup_srv(ctx, dns_hosts_file, name, dclist, numdcs);
}
/********************************************************************
********************************************************************/
NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *realm,
const char *sitename,
struct dns_rr_srv **dclist,
{
NTSTATUS status;
- status = ads_dns_query_internal(ctx, "_ldap", "dc", realm, sitename,
- dclist, numdcs);
+ status = ads_dns_query_internal(ctx, dns_hosts_file, "_ldap", "dc",
+ realm, sitename, dclist, numdcs);
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT) ||
NT_STATUS_EQUAL(status, NT_STATUS_CONNECTION_REFUSED)) {
((!NT_STATUS_IS_OK(status)) ||
(NT_STATUS_IS_OK(status) && (numdcs == 0)))) {
/* Sitename DNS query may have failed. Try without. */
- status = ads_dns_query_internal(ctx, "_ldap", "dc", realm,
+ status = ads_dns_query_internal(ctx, dns_hosts_file,
+ "_ldap", "dc", realm,
NULL, dclist, numdcs);
}
return status;
********************************************************************/
NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *realm,
const char *sitename,
struct dns_rr_srv **dclist,
{
NTSTATUS status;
- status = ads_dns_query_internal(ctx, "_ldap", "gc", realm, sitename,
- dclist, numdcs);
+ status = ads_dns_query_internal(ctx, dns_hosts_file, "_ldap", "gc",
+ realm, sitename, dclist, numdcs);
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT) ||
NT_STATUS_EQUAL(status, NT_STATUS_CONNECTION_REFUSED)) {
((!NT_STATUS_IS_OK(status)) ||
(NT_STATUS_IS_OK(status) && (numdcs == 0)))) {
/* Sitename DNS query may have failed. Try without. */
- status = ads_dns_query_internal(ctx, "_ldap", "gc", realm,
+ status = ads_dns_query_internal(ctx, dns_hosts_file,
+ "_ldap", "gc", realm,
NULL, dclist, numdcs);
}
return status;
********************************************************************/
NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dns_forest_name,
const char *sitename,
struct dns_rr_srv **dclist,
{
NTSTATUS status;
- status = ads_dns_query_internal(ctx, "_kerberos", "dc",
+ status = ads_dns_query_internal(ctx, dns_hosts_file, "_kerberos", "dc",
dns_forest_name, sitename, dclist,
numdcs);
((!NT_STATUS_IS_OK(status)) ||
(NT_STATUS_IS_OK(status) && (numdcs == 0)))) {
/* Sitename DNS query may have failed. Try without. */
- status = ads_dns_query_internal(ctx, "_kerberos", "dc",
+ status = ads_dns_query_internal(ctx, dns_hosts_file,
+ "_kerberos", "dc",
dns_forest_name, NULL,
dclist, numdcs);
}
********************************************************************/
NTSTATUS ads_dns_query_pdc(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dns_domain_name,
struct dns_rr_srv **dclist,
int *numdcs )
{
- return ads_dns_query_internal(ctx, "_ldap", "pdc", dns_domain_name,
- NULL, dclist, numdcs);
+ return ads_dns_query_internal(ctx, dns_hosts_file, "_ldap", "pdc",
+ dns_domain_name, NULL, dclist, numdcs);
}
/********************************************************************
********************************************************************/
NTSTATUS ads_dns_query_dcs_guid(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dns_forest_name,
const struct GUID *domain_guid,
struct dns_rr_srv **dclist,
}
TALLOC_FREE(guid_string);
- return ads_dns_query_internal(ctx, "_ldap", domains, dns_forest_name,
- NULL, dclist, numdcs);
+ return ads_dns_query_internal(ctx, dns_hosts_file, "_ldap", domains,
+ dns_forest_name, NULL, dclist, numdcs);
}
/* The following definitions come from libads/dns.c */
NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dnsdomain,
struct dns_rr_ns **nslist,
int *numns);
NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *realm,
const char *sitename,
struct dns_rr_srv **dclist,
int *numdcs );
NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *realm,
const char *sitename,
struct dns_rr_srv **dclist,
int *numdcs );
NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dns_forest_name,
const char *sitename,
struct dns_rr_srv **dclist,
int *numdcs );
NTSTATUS ads_dns_query_pdc(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dns_domain_name,
struct dns_rr_srv **dclist,
int *numdcs );
NTSTATUS ads_dns_query_dcs_guid(TALLOC_CTX *ctx,
+ const char *dns_hosts_file,
const char *dns_forest_name,
const struct GUID *domain_guid,
struct dns_rr_srv **dclist,
int i;
bool done = false;
char *sitename = NULL;
+ const char *dns_hosts_file;
if (!realm)
realm = lp_realm();
sitename = sitename_fetch(realm);
}
+ dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
do {
/* We try once with a sitename and once without
(unless we don't have a sitename and then we're
if (sitename == NULL)
done = true;
- nt_status = ads_dns_query_gcs(frame, realm, sitename,
+ nt_status = ads_dns_query_gcs(frame, dns_hosts_file,
+ realm, sitename,
&gcs_list, &num_gcs);
SAFE_FREE(sitename);
int numaddrs = 0;
struct ip_service_name *dclist = NULL;
int count = 0;
+ const char *dns_hosts_file;
+ dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
if (flags & DS_PDC_REQUIRED) {
- status = ads_dns_query_pdc(mem_ctx, domain_name,
- &dcs, &numdcs);
+ status = ads_dns_query_pdc(mem_ctx, dns_hosts_file,
+ domain_name, &dcs, &numdcs);
} else if (flags & DS_GC_SERVER_REQUIRED) {
- status = ads_dns_query_gcs(mem_ctx, domain_name, site_name,
+ status = ads_dns_query_gcs(mem_ctx, dns_hosts_file,
+ domain_name, site_name,
&dcs, &numdcs);
} else if (flags & DS_KDC_REQUIRED) {
- status = ads_dns_query_kdcs(mem_ctx, domain_name, site_name,
+ status = ads_dns_query_kdcs(mem_ctx, dns_hosts_file,
+ domain_name, site_name,
&dcs, &numdcs);
} else if (flags & DS_DIRECTORY_SERVICE_REQUIRED) {
- status = ads_dns_query_dcs(mem_ctx, domain_name, site_name,
+ status = ads_dns_query_dcs(mem_ctx, dns_hosts_file,
+ domain_name, site_name,
&dcs, &numdcs);
} else if (domain_guid) {
- status = ads_dns_query_dcs_guid(mem_ctx, domain_name,
- domain_guid, &dcs, &numdcs);
+ status = ads_dns_query_dcs_guid(mem_ctx, dns_hosts_file,
+ domain_name, domain_guid,
+ &dcs, &numdcs);
} else {
- status = ads_dns_query_dcs(mem_ctx, domain_name, site_name,
+ status = ads_dns_query_dcs(mem_ctx, dns_hosts_file,
+ domain_name, site_name,
&dcs, &numdcs);
}
struct dns_rr_srv *dcs = NULL;
int numdcs = 0;
int numaddrs = 0;
+ const char *dns_hosts_file;
if ((name_type != 0x1c) && (name_type != KDC_NAME_TYPE) &&
(name_type != 0x1b)) {
/* The DNS code needs fixing to find IPv6 addresses... JRA. */
+ dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
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);
+ status = ads_dns_query_pdc(ctx, dns_hosts_file,
+ name, &dcs, &numdcs);
break;
case 0x1c:
DEBUG(5,("resolve_ads: Attempting to resolve "
"DCs for %s using DNS\n", name));
- status = ads_dns_query_dcs(ctx, name, sitename, &dcs,
+ status = ads_dns_query_dcs(ctx, dns_hosts_file,
+ name, sitename, &dcs,
&numdcs);
break;
case KDC_NAME_TYPE:
DEBUG(5,("resolve_ads: Attempting to resolve "
"KDCs for %s using DNS\n", name));
- status = ads_dns_query_kdcs(ctx, name, sitename, &dcs,
+ status = ads_dns_query_kdcs(ctx, dns_hosts_file,
+ name, sitename, &dcs,
&numdcs);
break;
default:
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
DNS_ERROR dns_err;
fstring dns_server;
+ const char *dns_hosts_file;
const char *dnsdomain = NULL;
char *root_domain = NULL;
}
dnsdomain++;
- status = ads_dns_lookup_ns( ctx, dnsdomain, &nameservers, &ns_count );
+ dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
+ status = ads_dns_lookup_ns(ctx, dns_hosts_file,
+ dnsdomain, &nameservers, &ns_count);
if ( !NT_STATUS_IS_OK(status) || (ns_count == 0)) {
/* Child domains often do not have NS records. Look
for the NS record for the forest root domain
/* try again for NS servers */
- status = ads_dns_lookup_ns( ctx, root_domain, &nameservers, &ns_count );
+ status = ads_dns_lookup_ns(ctx, dns_hosts_file, root_domain,
+ &nameservers, &ns_count);
if ( !NT_STATUS_IS_OK(status) || (ns_count == 0)) {
DEBUG(3,("net_ads_join: Failed to find name server for the %s "
NTSTATUS status;
int ret;
char h_name[MAX_DNS_NAME_LENGTH];
+ const char *dns_hosts_file;
if (argc > 0)
domain = argv[0];
DEBUG(9, ("Lookup up ldap for domain %s\n", domain));
- status = ads_dns_query_dcs( ctx, domain, sitename, &dcs, &numdcs );
+ dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
+ status = ads_dns_query_dcs(ctx, dns_hosts_file, domain, sitename,
+ &dcs, &numdcs);
if ( NT_STATUS_IS_OK(status) && numdcs ) {
print_ldap_srvlist(dcs, numdcs);
TALLOC_FREE( ctx );
DEBUG(9, ("Looking up ldap for domain %s\n", domain));
- status = ads_dns_query_dcs( ctx, domain, sitename, &dcs, &numdcs );
+ status = ads_dns_query_dcs(ctx, dns_hosts_file, domain, sitename,
+ &dcs, &numdcs);
if ( NT_STATUS_IS_OK(status) && numdcs ) {
print_ldap_srvlist(dcs, numdcs);
TALLOC_FREE( ctx );