You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2006/11/09 10:11:17 UTC

svn commit: r472819 - /james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java

Author: bago
Date: Thu Nov  9 01:11:16 2006
New Revision: 472819

URL: http://svn.apache.org/viewvc?view=rev&rev=472819
Log:
made it optional for DNSServer to override static Resolver/Cache for dnsjava Lookup object using the setAsDNSJavaDefault configuration (JAMES-676)
Added searchdomains configurability to DNSServer, automatically discovered when autodiscovery is enabled (JAMES-675)

Modified:
    james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java

Modified: james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java?view=diff&rev=472819&r1=472818&r2=472819
==============================================================================
--- james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java (original)
+++ james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java Thu Nov  9 01:11:16 2006
@@ -89,6 +89,11 @@
      * The DNS servers to be used by this service
      */
     private List dnsServers = new ArrayList();
+    
+    /**
+     * The search paths to be used
+     */
+    private Name[] searchPaths = null;
 
     /**
      * The MX Comparator used in the MX sort.
@@ -100,6 +105,12 @@
      * when looking up SMTPServers
      */
     private boolean singleIPPerMX;
+    
+    /**
+     * If true register this service as the default resolver/cache for DNSJava static
+     * calls
+     */
+    private boolean setAsDNSJavaDefault;
 
     /**
      * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
@@ -110,6 +121,7 @@
         final boolean autodiscover =
             configuration.getChild( "autodiscover" ).getValueAsBoolean( true );
 
+        List sPaths = new ArrayList();
         if (autodiscover) {
             getLogger().info("Autodiscovery is enabled - trying to discover your system's DNS Servers");
             String[] serversArray = ResolverConfig.getCurrentConfig().servers();
@@ -119,9 +131,21 @@
                     getLogger().info("Adding autodiscovered server " + serversArray[i]);
                 }
             }
+            Name[] systemSearchPath = ResolverConfig.getCurrentConfig().searchPath();
+            if (systemSearchPath != null && systemSearchPath.length > 0) {
+                sPaths.addAll(Arrays.asList(systemSearchPath));
+            }
+            if (getLogger().isInfoEnabled()) {
+                for (Iterator i = sPaths.iterator(); i.hasNext();) {
+                    Name searchPath = (Name) i.next();
+                    getLogger().info("Adding autodiscovered search path " + searchPath.toString());
+                }
+            }
         }
 
         singleIPPerMX = configuration.getChild( "singleIPperMX" ).getValueAsBoolean( false ); 
+
+        setAsDNSJavaDefault = configuration.getChild( "setAsDNSJavaDefault" ).getValueAsBoolean( true );
         
         // Get the DNS servers that this service will use for lookups
         final Configuration serversConfiguration = configuration.getChild( "servers" );
@@ -132,6 +156,21 @@
             dnsServers.add( serverConfigurations[ i ].getValue() );
         }
 
+        // Get the DNS servers that this service will use for lookups
+        final Configuration searchPathsConfiguration = configuration.getChild( "searchpaths" );
+        final Configuration[] searchPathsConfigurations =
+            searchPathsConfiguration.getChildren( "searchpath" );
+
+        for ( int i = 0; i < searchPathsConfigurations.length; i++ ) {
+            try {
+                sPaths.add( Name.fromString(searchPathsConfigurations[ i ].getValue()) );
+            } catch (TextParseException e) {
+                throw new ConfigurationException("Unable to parse searchpath host: "+searchPathsConfigurations[ i ].getValue(),e);
+            }
+        }
+        
+        searchPaths = (Name[]) sPaths.toArray(new Name[0]);
+
         if (dnsServers.isEmpty()) {
             getLogger().info("No DNS servers have been specified or found by autodiscovery - adding 127.0.0.1");
             dnsServers.add("127.0.0.1");
@@ -174,7 +213,6 @@
 
         try {
             resolver = new ExtendedResolver( serversArray );
-            Lookup.setDefaultResolver(resolver);
         } catch (UnknownHostException uhe) {
             getLogger().fatalError("DNS service could not be initialized.  The DNS servers specified are not recognized hosts.", uhe);
             throw uhe;
@@ -182,7 +220,13 @@
 
         cache = new Cache (DClass.IN);
         cache.setMaxEntries(maxCacheSize);
-        Lookup.setDefaultCache(cache, DClass.IN);
+        
+        if (setAsDNSJavaDefault) {
+            Lookup.setDefaultResolver(resolver);
+            Lookup.setDefaultCache(cache, DClass.IN);
+            Lookup.setDefaultSearchPath(searchPaths);
+            getLogger().info("Registered cache, resolver and search paths as DNSJava defaults");
+        }
         
         getLogger().debug("DNSServer ...init end");
     }
@@ -196,6 +240,15 @@
         return (String[])dnsServers.toArray(new String[0]);
     }
 
+    /**
+     * <p>Return the list of DNS servers in use by this service</p>
+     *
+     * @return an array of DNS server names
+     */
+    public Name[] getSearchPaths() {
+        return searchPaths;
+    }
+
     
     /**
      * <p>Return a prioritized unmodifiable list of MX records
@@ -279,6 +332,7 @@
             l.setCache(cache);
             l.setResolver(resolver);
             l.setCredibility(dnsCredibility);
+            l.setSearchPath(searchPaths);
             return l.run();
             // return rawDNSLookup(name, false, type, typeDesc);
         } catch (TextParseException tpe) {



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org