What about backporting the changes ?

bye
Norman

[EMAIL PROTECTED] schrieb:
> Author: norman
> Date: Thu Nov 23 06:36:43 2006
> New Revision: 478589
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=478589
> Log:
> Get sure we throw a TemporaryResolutionException on a network error. So we 
> can dedicide what todo in this case. See JAMES-715 and JAMES-31
>
> Added:
>     
> james/server/trunk/src/java/org/apache/james/dnsserver/TemporaryResolutionException.java
>    (with props)
> Modified:
>     james/server/trunk/src/java/org/apache/james/James.java
>     james/server/trunk/src/java/org/apache/james/dnsserver/DNSServer.java
>     james/server/trunk/src/java/org/apache/james/services/DNSServer.java
>     
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptMX.java
>     
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidSenderDomainHandler.java
>     
> james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
>
> Modified: james/server/trunk/src/java/org/apache/james/James.java
> URL: 
> http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/James.java?view=diff&rev=478589&r1=478588&r2=478589
> ==============================================================================
> --- james/server/trunk/src/java/org/apache/james/James.java (original)
> +++ james/server/trunk/src/java/org/apache/james/James.java Thu Nov 23 
> 06:36:43 2006
> @@ -39,6 +39,7 @@
>  import org.apache.james.core.MailHeaders;
>  import org.apache.james.core.MailImpl;
>  import org.apache.james.core.MailetConfigImpl;
> +import org.apache.james.dnsserver.TemporaryResolutionException;
>  import org.apache.james.services.DNSServer;
>  import org.apache.james.services.DomainList;
>  import org.apache.james.services.FileSystem;
> @@ -66,7 +67,9 @@
>  import java.io.ByteArrayInputStream;
>  import java.io.InputStream;
>  import java.io.SequenceInputStream;
> +import java.util.ArrayList;
>  import java.util.Collection;
> +import java.util.Collections;
>  import java.util.Date;
>  import java.util.Enumeration;
>  import java.util.HashSet;
> @@ -579,7 +582,12 @@
>       * @see org.apache.mailet.MailetContext#getMailServers(String)
>       */
>      public Collection getMailServers(String host) {
> -        return lookupDNSServer().findMXRecords(host);
> +        try {
> +            return lookupDNSServer().findMXRecords(host);
> +        } catch (TemporaryResolutionException e) {
> +            //TODO: We only do this to not break backward compatiblity. 
> Should fixed later
> +            return Collections.unmodifiableCollection(new ArrayList(0));
> +        }
>      }
>  
>      /**
> @@ -834,7 +842,12 @@
>       * @return an Iterator over HostAddress instances, sorted by priority
>       */
>      public Iterator getSMTPHostAddresses(String domainName) {
> -        return lookupDNSServer().getSMTPHostAddresses(domainName);
> +        try {
> +            return lookupDNSServer().getSMTPHostAddresses(domainName);
> +        } catch (TemporaryResolutionException e) {
> +            //TODO: We only do this to not break backward compatiblity. 
> Should fixed later
> +            return Collections.unmodifiableCollection(new 
> ArrayList(0)).iterator();
> +        }
>      }
>  
>      protected DNSServer lookupDNSServer() {
>
> 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=478589&r1=478588&r2=478589
> ==============================================================================
> --- 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 23 06:36:43 2006
> @@ -257,8 +257,9 @@
>       * @param hostname domain name to look up
>       *
>       * @return a list of MX records corresponding to this mail domain
> +     * @throws TemporaryResolutionException get thrown on temporary problems
>       */
> -    private List findMXRecordsRaw(String hostname) {
> +    private List findMXRecordsRaw(String hostname) throws 
> TemporaryResolutionException {
>          Record answers[] = lookup(hostname, Type.MX, "MX");
>          List servers = new ArrayList();
>          if (answers == null) {
> @@ -282,7 +283,7 @@
>      /**
>       * @see org.apache.james.services.DNSServer#findMXRecords(String)
>       */
> -    public Collection findMXRecords(String hostname) {
> +    public Collection findMXRecords(String hostname) throws 
> TemporaryResolutionException {
>          List servers = new ArrayList();
>          try {
>              servers = findMXRecordsRaw(hostname);
> @@ -324,16 +325,24 @@
>       * @param type the type of record desired
>       * @param typeDesc the description of the record type, for debugging 
> purpose
>       */
> -    protected Record[] lookup(String namestr, int type, String typeDesc) {
> +    protected Record[] lookup(String namestr, int type, String typeDesc) 
> throws TemporaryResolutionException {
>          // Name name = null;
>          try {
>              // name = Name.fromString(namestr, Name.root);
>              Lookup l = new Lookup(namestr, type);
> +            
>              l.setCache(cache);
>              l.setResolver(resolver);
>              l.setCredibility(dnsCredibility);
>              l.setSearchPath(searchPaths);
> -            return l.run();
> +            Record[] r = l.run();
> +            
> +            if (l.getResult() == Lookup.TRY_AGAIN) {
> +                throw new TemporaryResolutionException("DNSServer is 
> temporary not reachable");
> +            } else {
> +                return r;
> +            }
> +            
>              // return rawDNSLookup(name, false, type, typeDesc);
>          } catch (TextParseException tpe) {
>              // TODO: Figure out how to handle this correctly.
> @@ -342,6 +351,14 @@
>          }
>      }
>      
> +    protected Record[] lookupNoException(String namestr, int type, String 
> typeDesc) {
> +        try {
> +            return lookup(namestr, type, typeDesc);
> +        } catch (TemporaryResolutionException e) {
> +            return null;
> +        }
> +    }
> +    
>      /* RFC 2821 section 5 requires that we sort the MX records by their
>       * preference, and introduce a randomization.  This Comparator does
>       * comparisons as normal unless the values are equal, in which case
> @@ -371,7 +388,7 @@
>      /**
>       * @see org.apache.james.services.DNSServer#getSMTPHostAddresses(String)
>       */
> -    public Iterator getSMTPHostAddresses(final String domainName) {
> +    public Iterator getSMTPHostAddresses(final String domainName) throws 
> TemporaryResolutionException {
>          return new Iterator() {
>              private Iterator mxHosts = findMXRecords(domainName).iterator();
>              private Iterator addresses = null;
> @@ -469,7 +486,8 @@
>          try {
>              return org.xbill.DNS.Address.getByAddress(name);
>          } catch (UnknownHostException e) {
> -            Record [] records = lookup(name, Type.A, "A");
> +            Record[] records = lookupNoException(name, Type.A, "A");
> +
>              if (records != null && records.length >= 1) {
>                  ARecord a = (ARecord) records[0];
>                  return InetAddress.getByAddress(name, 
> a.getAddress().getAddress());
> @@ -486,7 +504,8 @@
>              InetAddress addr = org.xbill.DNS.Address.getByAddress(name);
>              return new InetAddress[] {addr};
>          } catch (UnknownHostException e) {
> -            Record [] records = lookup(name, Type.A, "A");
> +            Record[] records = lookupNoException(name, Type.A, "A");
> +            
>              if (records != null && records.length >= 1) {
>                  InetAddress [] addrs = new InetAddress[records.length];
>                  for (int i = 0; i < records.length; i++) {
> @@ -503,9 +522,7 @@
>       */
>      public Collection findTXTRecords(String hostname){
>          List txtR = new ArrayList();
> -        Record[] records;
> -        
> -        records = lookup(hostname, Type.TXT, "TXT");
> +        Record[] records = lookupNoException(hostname, Type.TXT, "TXT");
>      
>          if (records != null) {
>             for (int i = 0; i < records.length; i++) {
> @@ -523,7 +540,8 @@
>      public String getHostName(InetAddress addr){
>          String result = null;
>          Name name = ReverseMap.fromAddress(addr);
> -        Record [] records = lookup(name.toString(), Type.PTR, "PTR");
> +        Record[] records = lookupNoException(name.toString(), Type.PTR, 
> "PTR");
> +
>          if (records == null) {
>              result = addr.getHostAddress();
>          } else {
>
> Added: 
> james/server/trunk/src/java/org/apache/james/dnsserver/TemporaryResolutionException.java
> URL: 
> http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/dnsserver/TemporaryResolutionException.java?view=auto&rev=478589
> ==============================================================================
> --- 
> james/server/trunk/src/java/org/apache/james/dnsserver/TemporaryResolutionException.java
>  (added)
> +++ 
> james/server/trunk/src/java/org/apache/james/dnsserver/TemporaryResolutionException.java
>  Thu Nov 23 06:36:43 2006
> @@ -0,0 +1,36 @@
> +/****************************************************************
> + * Licensed to the Apache Software Foundation (ASF) under one   *
> + * or more contributor license agreements.  See the NOTICE file *
> + * distributed with this work for additional information        *
> + * regarding copyright ownership.  The ASF licenses this file   *
> + * to you under the Apache License, Version 2.0 (the            *
> + * "License"); you may not use this file except in compliance   *
> + * with the License.  You may obtain a copy of the License at   *
> + *                                                              *
> + *   http://www.apache.org/licenses/LICENSE-2.0                 *
> + *                                                              *
> + * Unless required by applicable law or agreed to in writing,   *
> + * software distributed under the License is distributed on an  *
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
> + * KIND, either express or implied.  See the License for the    *
> + * specific language governing permissions and limitations      *
> + * under the License.                                           *
> + ****************************************************************/
> +
> +
> +
> +
> +package org.apache.james.dnsserver;
> +
> +import java.io.IOException;
> +
> +public class TemporaryResolutionException extends IOException {
> +
> +    public TemporaryResolutionException() {
> +        super();
> +    }
> +
> +    public TemporaryResolutionException(String message) {
> +        super(message);
> +    }
> +}
>
> Propchange: 
> james/server/trunk/src/java/org/apache/james/dnsserver/TemporaryResolutionException.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Modified: james/server/trunk/src/java/org/apache/james/services/DNSServer.java
> URL: 
> http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/DNSServer.java?view=diff&rev=478589&r1=478588&r2=478589
> ==============================================================================
> --- james/server/trunk/src/java/org/apache/james/services/DNSServer.java 
> (original)
> +++ james/server/trunk/src/java/org/apache/james/services/DNSServer.java Thu 
> Nov 23 06:36:43 2006
> @@ -26,6 +26,8 @@
>  import java.util.Collection;
>  import java.util.Iterator;
>  
> +import org.apache.james.dnsserver.TemporaryResolutionException;
> +
>  /**
>   * Provides abstraction for DNS resolutions. The interface is Mail specific.
>   * It may be a good idea to make the interface more generic or expose 
> @@ -50,8 +52,9 @@
>       *
>       * @return a unmodifiable list of handling servers corresponding to
>       *         this mail domain name
> +     * @throws TemporaryResolutionException get thrown on temporary problems 
>       */
> -    Collection findMXRecords(String hostname);
> +    Collection findMXRecords(String hostname) throws 
> TemporaryResolutionException;
>  
>      /**
>       * Get a collection of DNS TXT Records
> @@ -78,8 +81,9 @@
>       * @since v2.2.0a16-unstable
>       * @param domainName - the domain for which to find mail servers
>       * @return an Iterator over HostAddress instances, sorted by priority
> +     * @throws TemporaryResolutionException get thrown on temporary problems
>       */
> -    Iterator getSMTPHostAddresses(String domainName);
> +    Iterator getSMTPHostAddresses(String domainName) throws 
> TemporaryResolutionException;
>      
>      /**
>       * @see java.net.InetAddress#getAllByName(String)
>
> Modified: 
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptMX.java
> URL: 
> http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptMX.java?view=diff&rev=478589&r1=478588&r2=478589
> ==============================================================================
> --- 
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptMX.java
>  (original)
> +++ 
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidRcptMX.java
>  Thu Nov 23 06:36:43 2006
> @@ -30,6 +30,7 @@
>  import org.apache.avalon.framework.service.ServiceException;
>  import org.apache.avalon.framework.service.ServiceManager;
>  import org.apache.avalon.framework.service.Serviceable;
> +import org.apache.james.dnsserver.TemporaryResolutionException;
>  import org.apache.james.services.DNSServer;
>  import org.apache.james.smtpserver.CommandHandler;
>  import org.apache.james.smtpserver.SMTPSession;
> @@ -140,9 +141,14 @@
>          // Email should be deliver local
>          if (domain.equals(LOCALHOST)) return false;
>   
> -        Iterator mx = dnsServer.findMXRecords(domain).iterator();
> +        Iterator mx = null;
> +        try {
> +            mx = dnsServer.findMXRecords(domain).iterator();
> +        } catch (TemporaryResolutionException e1) {
> +            //  TODO: Should we reject temporary ?
> +        }
>  
> -        if (mx.hasNext()) {
> +        if (mx != null && mx.hasNext()) {
>              while (mx.hasNext()) {
>                  String mxRec = mx.next().toString();
>  
>
> Modified: 
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidSenderDomainHandler.java
> URL: 
> http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidSenderDomainHandler.java?view=diff&rev=478589&r1=478588&r2=478589
> ==============================================================================
> --- 
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidSenderDomainHandler.java
>  (original)
> +++ 
> james/server/trunk/src/java/org/apache/james/smtpserver/core/filter/fastfail/ValidSenderDomainHandler.java
>  Thu Nov 23 06:36:43 2006
> @@ -30,6 +30,7 @@
>  import org.apache.avalon.framework.service.ServiceException;
>  import org.apache.avalon.framework.service.ServiceManager;
>  import org.apache.avalon.framework.service.Serviceable;
> +import org.apache.james.dnsserver.TemporaryResolutionException;
>  import org.apache.james.services.DNSServer;
>  import org.apache.james.smtpserver.CommandHandler;
>  import org.apache.james.smtpserver.SMTPSession;
> @@ -103,11 +104,16 @@
>           * don't check if the ip address is allowed to relay. Only check if 
> it is set in the config. 
>           */
>          if (checkAuthClients || !session.isRelayingAllowed()) {
> -            Collection records;
> +            Collection records = null;
>              
>                  
>              // try to resolv the provided domain in the senderaddress. If it 
> can not resolved do not accept it.
> -            records = dnsServer.findMXRecords(senderAddress.getHost());
> +            try {
> +                records = dnsServer.findMXRecords(senderAddress.getHost());
> +            } catch (TemporaryResolutionException e) {
> +                // TODO: Should we reject temporary ?
> +            }
> +        
>              if (records == null || records.size() == 0) {
>                  return true;
>              }
>
> Modified: 
> james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
> URL: 
> http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java?view=diff&rev=478589&r1=478588&r2=478589
> ==============================================================================
> --- 
> james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
>  (original)
> +++ 
> james/server/trunk/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
>  Thu Nov 23 06:36:43 2006
> @@ -27,6 +27,7 @@
>  import org.apache.avalon.framework.service.ServiceException;
>  import org.apache.avalon.framework.service.ServiceManager;
>  import org.apache.james.Constants;
> +import org.apache.james.dnsserver.TemporaryResolutionException;
>  import org.apache.james.services.DNSServer;
>  import org.apache.james.services.SpoolRepository;
>  import org.apache.james.util.TimeConverter;
> @@ -458,7 +459,19 @@
>                  String host = rcpt.getHost();
>  
>                  //Lookup the possible targets
> -                targetServers = 
> getMailetContext().getSMTPHostAddresses(host);
> +                try {
> +                    targetServers = dnsServer.getSMTPHostAddresses(host);
> +                } catch (TemporaryResolutionException e) {
> +                    log("Temporary problem looking up mail server for host: 
> " + host);
> +                    StringBuffer exceptionBuffer =
> +                        new StringBuffer(128)
> +                        .append("Temporary problem looking up mail server 
> for host: ")
> +                        .append(host)
> +                        .append(".  I cannot determine where to send this 
> message.");
> +                    
> +                    // temporary problems
> +                    return failMessage(mail, new 
> MessagingException(exceptionBuffer.toString()), false);
> +                }
>                  if (!targetServers.hasNext()) {
>                      log("No mail server found for: " + host);
>                      StringBuffer exceptionBuffer =
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> !EXCUBATOR:1,4565b22a53077467620893!
>   



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to