s3-ads-dns: Break dependency on lp_parm
authorSimo Sorce <idra@samba.org>
Fri, 4 May 2012 21:27:36 +0000 (17:27 -0400)
committerAlexander Bokovoy <ab@samba.org>
Wed, 23 May 2012 14:51:48 +0000 (17:51 +0300)
In preparation of making this code common to s3 and s4

source3/libads/dns.c
source3/libads/dns.h
source3/libads/ldap.c
source3/libsmb/dsgetdcname.c
source3/libsmb/namequery.c
source3/utils/net_ads.c
source3/utils/net_lookup.c

index ae9c914e22d97c3f2759fde22149e8f1ba9a2b1a..f62837e0fece6fccfc2e04b8dcc07a4b8ea6684d 100644 (file)
@@ -389,6 +389,7 @@ static NTSTATUS dns_send_req( TALLOC_CTX *ctx, const char *name, int q_type,
 *********************************************************************/
 
 static NTSTATUS ads_dns_lookup_srv( TALLOC_CTX *ctx,
+                               const char *dns_hosts_file,
                                const char *name,
                                struct dns_rr_srv **dclist,
                                int *numdcs)
@@ -401,13 +402,11 @@ static NTSTATUS ads_dns_lookup_srv( TALLOC_CTX *ctx,
        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,
@@ -586,6 +585,7 @@ static NTSTATUS ads_dns_lookup_srv( TALLOC_CTX *ctx,
 *********************************************************************/
 
 NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
+                               const char *dns_hosts_file,
                                const char *dnsdomain,
                                struct dns_rr_ns **nslist,
                                int *numns)
@@ -598,13 +598,11 @@ NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
        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;
@@ -748,6 +746,7 @@ NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
 ********************************************************************/
 
 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,
@@ -767,7 +766,7 @@ static NTSTATUS ads_dns_query_internal(TALLOC_CTX *ctx,
        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);
 }
 
 /********************************************************************
@@ -775,6 +774,7 @@ static NTSTATUS ads_dns_query_internal(TALLOC_CTX *ctx,
 ********************************************************************/
 
 NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
+                          const char *dns_hosts_file,
                           const char *realm,
                           const char *sitename,
                           struct dns_rr_srv **dclist,
@@ -782,8 +782,8 @@ NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
 {
        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)) {
@@ -794,7 +794,8 @@ NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
            ((!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;
@@ -805,6 +806,7 @@ NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
 ********************************************************************/
 
 NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
+                          const char *dns_hosts_file,
                           const char *realm,
                           const char *sitename,
                           struct dns_rr_srv **dclist,
@@ -812,8 +814,8 @@ NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
 {
        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)) {
@@ -824,7 +826,8 @@ NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
            ((!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;
@@ -837,6 +840,7 @@ NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
 ********************************************************************/
 
 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,
@@ -844,7 +848,7 @@ NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
 {
        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);
 
@@ -857,7 +861,8 @@ NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
            ((!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);
        }
@@ -869,12 +874,13 @@ NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
 ********************************************************************/
 
 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);
 }
 
 /********************************************************************
@@ -882,6 +888,7 @@ NTSTATUS ads_dns_query_pdc(TALLOC_CTX *ctx,
 ********************************************************************/
 
 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,
@@ -904,6 +911,6 @@ NTSTATUS ads_dns_query_dcs_guid(TALLOC_CTX *ctx,
        }
        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);
 }
index f53153ba263642478b0d8c9d2cf18f951afd9361..d57239d20cb99a297bffc090b502edc55de9d5b0 100644 (file)
 /* 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,
index 70dad2f4968062d5aba17b498ea1fb9ad52764c8..23b655f4013e5be4fefe37bcd5cf7ba1060fe80e 100644 (file)
@@ -553,6 +553,7 @@ ADS_STATUS ads_connect_gc(ADS_STRUCT *ads)
        int i;
        bool done = false;
        char *sitename = NULL;
+       const char *dns_hosts_file;
 
        if (!realm)
                realm = lp_realm();
@@ -562,6 +563,7 @@ ADS_STATUS ads_connect_gc(ADS_STRUCT *ads)
                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
@@ -570,7 +572,8 @@ ADS_STATUS ads_connect_gc(ADS_STRUCT *ads)
                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);
index 05be272450210739bf76bf9a425f523543029482..a690ab49c1bb856933cd4a07dee4d1a9a511df76 100644 (file)
@@ -546,24 +546,31 @@ static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
        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);
        }
 
index 8934d8524371d8a97a9c17eff04532d666bea6de..417464c17ef3941fe097dd16861a8bd83727bfb6 100644 (file)
@@ -2424,6 +2424,7 @@ static NTSTATUS resolve_ads(const char *name,
        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)) {
@@ -2437,23 +2438,27 @@ static NTSTATUS resolve_ads(const char *name,
 
        /* 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:
index 0ccb328527659fb7810d5d12647ba9d3bedd35b8..22f235f05952c85f5cd21afc213bfb1b26028746 100644 (file)
@@ -1137,6 +1137,7 @@ static NTSTATUS net_update_dns_internal(TALLOC_CTX *ctx, ADS_STRUCT *ads,
        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;
 
@@ -1148,7 +1149,9 @@ static NTSTATUS net_update_dns_internal(TALLOC_CTX *ctx, ADS_STRUCT *ads,
        }
        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
@@ -1186,7 +1189,8 @@ static NTSTATUS net_update_dns_internal(TALLOC_CTX *ctx, ADS_STRUCT *ads,
 
                /* 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 "
index 7b2a2145754ddc23a7cae4cd0fcfdafe7d3c7b7e..7f204745b19cc1361c57990a15a2e1c1fff68be3 100644 (file)
@@ -106,6 +106,7 @@ static int net_lookup_ldap(struct net_context *c, int argc, const char **argv)
        NTSTATUS status;
        int ret;
        char h_name[MAX_DNS_NAME_LENGTH];
+       const char *dns_hosts_file;
 
        if (argc > 0)
                domain = argv[0];
@@ -123,7 +124,9 @@ static int net_lookup_ldap(struct net_context *c, int argc, const char **argv)
 
        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 );
@@ -161,7 +164,8 @@ static int net_lookup_ldap(struct net_context *c, int argc, const char **argv)
 
        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 );