james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From b...@apache.org
Subject svn commit: r453285 - in /james/jspf/trunk: ./ src/main/java/org/apache/james/jspf/ src/main/java/org/apache/james/jspf/impl/ src/test/java/org/apache/james/jspf/
Date Thu, 05 Oct 2006 16:43:46 GMT
Author: bago
Date: Thu Oct  5 09:43:45 2006
New Revision: 453285

URL: http://svn.apache.org/viewvc?view=rev&rev=453285
Log:
Removed unused methods constants to reach 76.5% coverage (ok this is cheating ;-) )
Moved service implementations with dependencies in the impl package (we could even move this
to a different module)

Added:
    james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/
    james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java   (with
props)
    james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java   (with props)
    james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/Log4JLogger.java   (with props)
    james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/SPFQuery.java   (with props)
Removed:
    james/jspf/trunk/src/main/java/org/apache/james/jspf/DNSServiceXBillImpl.java
    james/jspf/trunk/src/main/java/org/apache/james/jspf/Log4JLogger.java
    james/jspf/trunk/src/main/java/org/apache/james/jspf/SPFQuery.java
Modified:
    james/jspf/trunk/pom.xml
    james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java
    james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF1Utils.java
    james/jspf/trunk/src/test/java/org/apache/james/jspf/LoggingDNSService.java

Modified: james/jspf/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/jspf/trunk/pom.xml?view=diff&rev=453285&r1=453284&r2=453285
==============================================================================
--- james/jspf/trunk/pom.xml (original)
+++ james/jspf/trunk/pom.xml Thu Oct  5 09:43:45 2006
@@ -223,7 +223,7 @@
         <configuration>
           <archive>
             <manifest>
-              <mainClass>org.apache.james.jspf.SPFQuery</mainClass>
+              <mainClass>org.apache.james.jspf.impl.SPFQuery</mainClass>
               <packageName>org.apache.james.jspf</packageName>
               <addClasspath>true</addClasspath>
             </manifest>

Modified: james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java?view=diff&rev=453285&r1=453284&r2=453285
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java (original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java Thu Oct  5 09:43:45 2006
@@ -77,22 +77,6 @@
     private FallbackPolicy fallBack;
     
     private boolean useTrustedForwarder = false;
-    
-    /**
-     * Uses default Log4JLogger and DNSJava based dns resolver
-     */
-    public SPF() {
-        this(new Log4JLogger(org.apache.log4j.Logger.getLogger(SPF.class)));
-    }
-    
-    /**
-     * Uses passed logger and DNSJava based dns resolver
-     * 
-     * @param logger the logger to use
-     */
-    public SPF(Logger logger) {
-        this(new DNSServiceXBillImpl(logger), logger);
-    }
 
     /**
      * Uses passed logger and passed dnsServicer

Modified: james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF1Utils.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF1Utils.java?view=diff&rev=453285&r1=453284&r2=453285
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF1Utils.java (original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF1Utils.java Thu Oct  5 09:43:45
2006
@@ -65,42 +65,8 @@
             return NEUTRAL_CONV;
         } else if (result.equals(SPF1Constants.SOFTFAIL)) {
             return SOFTFAIL_CONV;
-        } else if (result.equals(PERM_ERROR_CONV)) {
-            return PERM_ERROR_CONV;
-        } else if (result.equals(TEMP_ERROR_CONV)) {
-            return TEMP_ERROR_CONV;
-        } else if (result.equals(NONE_CONV)) {
-            return NONE_CONV;
         } else {
             return NEUTRAL_CONV;
-        }
-
-    }
-
-    /**
-     * Covert SPF names to raw SPF results
-     * 
-     * @param result The result which should converted
-     * @return coverted result
-     */
-    protected static String nameToResult(String result) {
-
-        if (result.equals(PASS_CONV)) {
-            return SPF1Constants.PASS;
-        } else if (result.equals(FAIL_CONV)) {
-            return SPF1Constants.FAIL;
-        } else if (result.equals(NEUTRAL_CONV)) {
-            return SPF1Constants.NEUTRAL;
-        } else if (result.equals(SOFTFAIL_CONV)) {
-            return SPF1Constants.SOFTFAIL;
-        } else if (result.equals(PERM_ERROR_CONV)) {
-            return PERM_ERROR_CONV;
-        } else if (result.equals(TEMP_ERROR_CONV)) {
-            return TEMP_ERROR_CONV;
-        } else if (result.equals(NONE_CONV)) {
-            return NONE_CONV;
-        } else {
-            return SPF1Constants.NEUTRAL;
         }
 
     }

Added: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java?view=auto&rev=453285
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java (added)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java Thu
Oct  5 09:43:45 2006
@@ -0,0 +1,187 @@
+/****************************************************************
+ * 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.jspf.impl;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.james.jspf.core.DNSService;
+import org.apache.james.jspf.core.IPAddr;
+import org.apache.james.jspf.core.Logger;
+import org.xbill.DNS.AAAARecord;
+import org.xbill.DNS.ARecord;
+import org.xbill.DNS.Lookup;
+import org.xbill.DNS.MXRecord;
+import org.xbill.DNS.PTRRecord;
+import org.xbill.DNS.Record;
+import org.xbill.DNS.TXTRecord;
+import org.xbill.DNS.TextParseException;
+import org.xbill.DNS.Type;
+
+/**
+ * This class contains helper to get all neccassary DNS infos that are needed
+ * for SPF
+ */
+public class DNSServiceXBillImpl implements DNSService {
+
+    // Set seconds after which we return and TempError
+    private static int timeOut = 20;
+
+    // The logger
+    private Logger log;
+    
+    // The record limit for lookups
+    private int recordLimit;
+    
+    /**
+     * Default Constructor
+     */
+    public DNSServiceXBillImpl(Logger logger) {
+        this.log = logger;
+        // Default record limit is 10
+        this.recordLimit = 10;
+    }
+
+    /**
+     * @see org.apache.james.jspf.core.DNSService#setTimeOut(int)
+     */
+    public synchronized void setTimeOut(int timeOut) {
+        DNSServiceXBillImpl.timeOut = timeOut;
+    }
+
+    /**
+     * @see org.apache.james.jspf.core.DNSService#getLocalDomainNames();
+     */
+    public List getLocalDomainNames() {
+        List names = new ArrayList();
+
+        log.debug("Start Local ipaddress lookup");
+        try {
+            InetAddress ia[] = InetAddress.getAllByName(InetAddress
+                    .getLocalHost().getHostName());
+
+            for (int i = 0; i < ia.length; i++) {
+                String host = ia[i].getHostName();
+                names.add(host);
+
+                log.debug("Add hostname " + host + " to list");
+            }
+        } catch (UnknownHostException e) {
+            // just ignore this..
+        }
+        return names;
+
+    }
+
+    /**
+     * @return the current record limit
+     */
+    public int getRecordLimit() {
+        return recordLimit;
+    }
+
+    /**
+     * Set a new limit for the number of records for MX and PTR lookups.
+     * @param recordLimit
+     */
+    public void setRecordLimit(int recordLimit) {
+        this.recordLimit = recordLimit;
+    }
+    
+    /**
+     * @see org.apache.james.jspf.core.DNSService#getRecords(java.lang.String, int)
+     */
+    public List getRecords(String hostname, int recordType)
+            throws TimeoutException {
+        String recordTypeDescription;
+        int dnsJavaType;
+        int recordCount = 0;
+        switch (recordType) {
+            case A: recordTypeDescription = "A"; dnsJavaType = Type.A; break;
+            case AAAA: recordTypeDescription = "AAAA"; dnsJavaType = Type.AAAA; break;
+            case MX: recordTypeDescription = "MX"; dnsJavaType = Type.MX; break;
+            case PTR: recordTypeDescription = "PTR"; dnsJavaType = Type.PTR; break;
+            case TXT: recordTypeDescription = "TXT"; dnsJavaType = Type.TXT; break;
+            // case SPF: recordTypeDescString = "SPF"; dnsJavaType = Type.SPF; break;
+            default: // TODO fail!
+                return null;
+        }
+        List records;
+        try {
+
+            log.debug("Start "+recordTypeDescription+"-Record lookup for : " + hostname);
+
+            Lookup.getDefaultResolver().setTimeout(timeOut);
+            Lookup query = new Lookup(hostname, dnsJavaType);
+
+            Record[] rr = query.run();
+            int queryResult = query.getResult();
+
+            if (queryResult == Lookup.TRY_AGAIN) {
+                throw new TimeoutException();
+            }
+            
+            if (rr != null && rr.length > 0) {
+                records = new ArrayList();
+                for (int i = 0; i < rr.length; i++) {
+                    String res;
+                    switch (recordType) {
+                        case A:
+                            ARecord a = (ARecord) rr[i];
+                            res = a.getAddress().getHostAddress();
+                            break;
+                        case AAAA:
+                            AAAARecord aaaa = (AAAARecord) rr[i];
+                            res = aaaa.getAddress().getHostAddress();
+                            break;
+                        case MX:
+                            MXRecord mx = (MXRecord) rr[i];
+                            res = mx.getTarget().toString();
+                            break;
+                        case PTR:
+                            PTRRecord ptr = (PTRRecord) rr[i];
+                            res = IPAddr.stripDot(ptr.getTarget().toString());
+                            break;
+                        case TXT:
+                            TXTRecord txt = (TXTRecord) rr[i];
+                            res = txt.rdataToString();
+                            break;
+                        default:
+                            return null;
+                    }
+                    records.add(res);
+                }
+                recordCount = rr.length;
+            } else {
+                records = null;
+            }
+            
+            log.debug("Found " + recordCount + " "+recordTypeDescription+"-Records");
+        } catch (TextParseException e) {
+            // i think this is the best we could do
+            log.debug("No "+recordTypeDescription+" Record found for host: " + hostname);
+            records = null;
+        }
+        return records;
+    }
+
+}

Propchange: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DNSServiceXBillImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java?view=auto&rev=453285
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java (added)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java Thu Oct  5 09:43:45
2006
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.jspf.impl;
+
+import org.apache.james.jspf.SPF;
+import org.apache.james.jspf.core.Logger;
+
+public class DefaultSPF extends SPF {
+
+    
+    /**
+     * Uses default Log4JLogger and DNSJava based dns resolver
+     */
+    public DefaultSPF() {
+        this(new Log4JLogger(org.apache.log4j.Logger.getLogger(SPF.class)));
+    }
+    
+    /**
+     * Uses passed logger and DNSJava based dns resolver
+     * 
+     * @param logger the logger to use
+     */
+    public DefaultSPF(Logger logger) {
+        super(new DNSServiceXBillImpl(logger), logger);
+    }
+
+}

Propchange: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/Log4JLogger.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/Log4JLogger.java?view=auto&rev=453285
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/Log4JLogger.java (added)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/Log4JLogger.java Thu Oct  5
09:43:45 2006
@@ -0,0 +1,207 @@
+/****************************************************************
+ * 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.jspf.impl;
+
+import org.apache.james.jspf.core.Logger;
+import org.apache.log4j.Level;
+
+/**
+ * Implementation of the Logger interface using the Log4J implementation
+ * strategy.
+ */
+public class Log4JLogger implements Logger {
+    private org.apache.log4j.Logger m_Logger;
+
+    public Log4JLogger(org.apache.log4j.Logger log4jLogger) {
+        m_Logger = log4jLogger;
+    }
+
+    /**
+     * Log a debug message.
+     * 
+     * @param message
+     *            the message
+     */
+    public void debug(String message) {
+        m_Logger.debug(message);
+    }
+
+    /**
+     * Log a debug message.
+     * 
+     * @param message
+     *            the message
+     * @param throwable
+     *            the throwable
+     */
+    public void debug(String message, Throwable throwable) {
+        m_Logger.debug(message, throwable);
+    }
+
+    /**
+     * Determine if messages of priority "debug" will be logged.
+     * 
+     * @return true if "debug" messages will be logged
+     */
+    public boolean isDebugEnabled() {
+        return m_Logger.isDebugEnabled();
+    }
+
+    /**
+     * Log a info message.
+     * 
+     * @param message
+     *            the message
+     */
+    public void info(String message) {
+        m_Logger.info(message);
+    }
+
+    /**
+     * Log a info message.
+     * 
+     * @param message
+     *            the message
+     * @param throwable
+     *            the throwable
+     */
+    public void info(String message, Throwable throwable) {
+        m_Logger.info(message, throwable);
+    }
+
+    /**
+     * Determine if messages of priority "info" will be logged.
+     * 
+     * @return true if "info" messages will be logged
+     */
+    public boolean isInfoEnabled() {
+        return m_Logger.isInfoEnabled();
+    }
+
+    /**
+     * Log a warn message.
+     * 
+     * @param message
+     *            the message
+     */
+    public void warn(String message) {
+        m_Logger.warn(message);
+    }
+
+    /**
+     * Log a warn message.
+     * 
+     * @param message
+     *            the message
+     * @param throwable
+     *            the throwable
+     */
+    public void warn(String message, Throwable throwable) {
+        m_Logger.warn(message, throwable);
+    }
+
+    /**
+     * Determine if messages of priority "warn" will be logged.
+     * 
+     * @return true if "warn" messages will be logged
+     */
+    public boolean isWarnEnabled() {
+        return m_Logger.isEnabledFor(Level.WARN);
+    }
+
+    /**
+     * Log a error message.
+     * 
+     * @param message
+     *            the message
+     */
+    public void error(String message) {
+        m_Logger.error(message);
+    }
+
+    /**
+     * Log a error message.
+     * 
+     * @param message
+     *            the message
+     * @param throwable
+     *            the throwable
+     */
+    public void error(String message, Throwable throwable) {
+        m_Logger.error(message, throwable);
+    }
+
+    /**
+     * Determine if messages of priority "error" will be logged.
+     * 
+     * @return true if "error" messages will be logged
+     */
+    public boolean isErrorEnabled() {
+        return m_Logger.isEnabledFor(Level.ERROR);
+    }
+
+    /**
+     * Log a fatalError message.
+     * 
+     * @param message
+     *            the message
+     */
+    public void fatalError(String message) {
+        m_Logger.fatal(message);
+    }
+
+    /**
+     * Log a fatalError message.
+     * 
+     * @param message
+     *            the message
+     * @param throwable
+     *            the throwable
+     */
+    public void fatalError(String message, Throwable throwable) {
+        m_Logger.fatal(message, throwable);
+    }
+
+    /**
+     * Determine if messages of priority "fatalError" will be logged.
+     * 
+     * @return true if "fatalError" messages will be logged
+     */
+    public boolean isFatalErrorEnabled() {
+        return m_Logger.isEnabledFor(Level.FATAL);
+    }
+
+    /**
+     * Create a new child logger. The name of the child logger is
+     * [current-loggers-name].[passed-in-name] Throws
+     * <code>IllegalArgumentException</code> if name has an empty element name
+     * 
+     * @param name
+     *            the subname of this logger
+     * @return the new logger
+     */
+    public Logger getChildLogger(String name) {
+        String newName = m_Logger.getName() + "." + name;
+        org.apache.log4j.Logger childLog4JLogger = org.apache.log4j.Logger
+                .getLogger(newName);
+        Log4JLogger child = new Log4JLogger(childLog4JLogger);
+        return child;
+    }
+}

Propchange: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/Log4JLogger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/SPFQuery.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/SPFQuery.java?view=auto&rev=453285
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/SPFQuery.java (added)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/SPFQuery.java Thu Oct  5 09:43:45
2006
@@ -0,0 +1,207 @@
+/****************************************************************
+ * 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.jspf.impl;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+import org.apache.james.jspf.SPF;
+import org.apache.james.jspf.SPF1Utils;
+import org.apache.james.jspf.SPFResult;
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.SimpleLayout;
+
+/**
+ * This class is used for commandline usage of JSPF
+ * 
+ */
+public class SPFQuery {
+
+    private final static int PASS_RCODE = 0;
+
+    private final static int FAIL_RCODE = 1;
+
+    private final static int SOFTFAIL_RCODE = 2;
+
+    private final static int NEUTRAL_RCODE = 3;
+
+    private final static int TEMP_ERROR_RCODE = 4;
+
+    private final static int PERM_ERROR_RCODE = 5;
+
+    private final static int NONE_RCODE = 6;
+
+    private final static int UNKNOWN_RCODE = 255;
+
+    private final static String CMD_IP = "ip";
+
+    private final static String CMD_SENDER = "sender";
+
+    private final static String CMD_HELO = "helo";
+
+    private final static String CMD_DEBUG = "debug";
+
+    private final static String CMD_VERBOSE = "verbose";
+
+    private final static String CMD_DEFAULT_EXP = "defaultexplanation";
+
+    private final static String CMD_BEST_GUESS = "usebestguess";
+    
+    private final static String CMD_TRUSTED_FORWARDER = "usetrusted";
+
+    private static Logger logger = Logger.getRootLogger();
+
+    /**
+     * @param args
+     *            The commandline arguments to parse
+     */
+    public static void main(String[] args) {
+
+        String ip = null;
+        String sender = null;
+        String helo = null;
+        String defaultExplanation = null;
+        boolean useBestGuess = false;
+        boolean useTrustedForwarder = false;
+
+        SimpleLayout layout = new SimpleLayout();
+        ConsoleAppender consoleAppender = new ConsoleAppender(layout);
+        logger.addAppender(consoleAppender);
+
+        logger.setLevel(Level.ERROR);
+
+        Options options = generateOptions();
+        CommandLineParser parser = new PosixParser();
+
+        try {
+            CommandLine line = parser.parse(options, args);
+
+            ip = line.getOptionValue(CMD_IP);
+            sender = line.getOptionValue(CMD_SENDER);
+            helo = line.getOptionValue(CMD_HELO);
+            defaultExplanation = line.getOptionValue(CMD_DEFAULT_EXP);
+            useBestGuess = line.hasOption(CMD_BEST_GUESS);
+            useTrustedForwarder = line.hasOption(CMD_TRUSTED_FORWARDER);
+            // check if all needed values was set
+            if (ip != null && sender != null && helo != null) {
+
+                if (line.hasOption(CMD_DEBUG))
+                    logger.setLevel(Level.DEBUG);
+                if (line.hasOption(CMD_VERBOSE))
+                    logger.setLevel(Level.TRACE);
+
+                SPF spf = new DefaultSPF(new Log4JLogger(logger));
+
+                // Check if we should set a costum default explanation
+                if (defaultExplanation != null) {
+                    spf.setDefaultExplanation(defaultExplanation);
+                }
+
+                // Check if we should use best guess
+                if (useBestGuess == true) {
+                    spf.setUseBestGuess(true);
+                }
+                
+                if (useTrustedForwarder == true) {
+                    spf.setUseTrustedForwarder(true);
+                }
+
+                SPFResult result = spf.checkSPF(ip, sender, helo);
+                System.out.println(result.getResult());
+                System.out.println(result.getHeader());
+                System.exit(getReturnCode(result.getResult()));
+
+            } else {
+                usage();
+            }
+        } catch (ParseException e) {
+            usage();
+        }
+    }
+
+    /**
+     * Return the generated Options
+     * 
+     * @return options
+     */
+    private static Options generateOptions() {
+        Options options = new Options();
+        options.addOption(OptionBuilder.withLongOpt(CMD_IP).withValueSeparator(
+                '=').hasArg().create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_SENDER)
+                .withValueSeparator('=').hasArg().create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_HELO)
+                .withValueSeparator('=').hasArg().create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_DEFAULT_EXP)
+                .withValueSeparator('=').hasArg().create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_BEST_GUESS).create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_TRUSTED_FORWARDER).create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_DEBUG).create());
+        options.addOption(OptionBuilder.withLongOpt(CMD_VERBOSE).create());
+        return options;
+    }
+
+    /**
+     * Print out the usage
+     */
+    private static void usage() {
+        // TODO: Use HelpFormatter for printing usage
+        System.out.println("Usage: java -jar jspf-x.jar --" + CMD_IP
+                + "=192.168.100.1 --" + CMD_SENDER + "=postmaster@foo.bar --"
+                + CMD_HELO + "=foo.bar [--" + CMD_DEFAULT_EXP
+                + "=\"explanation String\"] [--" + CMD_BEST_GUESS + "] [--"+ CMD_TRUSTED_FORWARDER
+"]"
+                + CMD_DEBUG + "] [--" + CMD_VERBOSE + "]");
+        System.exit(UNKNOWN_RCODE);
+    }
+
+    /**
+     * Return the return code for the result
+     * 
+     * @param result
+     *            The result
+     * @return returnCode
+     */
+    private static int getReturnCode(String result) {
+
+        if (result.equals(SPF1Utils.PASS_CONV)) {
+            return PASS_RCODE;
+        } else if (result.equals(SPF1Utils.FAIL_CONV)) {
+            return FAIL_RCODE;
+        } else if (result.equals(SPF1Utils.SOFTFAIL_CONV)) {
+            return SOFTFAIL_RCODE;
+        } else if (result.equals(SPF1Utils.NEUTRAL_CONV)) {
+            return NEUTRAL_RCODE;
+        } else if (result.equals(SPF1Utils.TEMP_ERROR_CONV)) {
+            return TEMP_ERROR_RCODE;
+        } else if (result.equals(SPF1Utils.PERM_ERROR_CONV)) {
+            return PERM_ERROR_RCODE;
+        } else if (result.equals(SPF1Utils.NONE_CONV)) {
+            return NONE_RCODE;
+        }
+
+        return UNKNOWN_RCODE;
+    }
+
+}

Propchange: james/jspf/trunk/src/main/java/org/apache/james/jspf/impl/SPFQuery.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: james/jspf/trunk/src/test/java/org/apache/james/jspf/LoggingDNSService.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/src/test/java/org/apache/james/jspf/LoggingDNSService.java?view=diff&rev=453285&r1=453284&r2=453285
==============================================================================
--- james/jspf/trunk/src/test/java/org/apache/james/jspf/LoggingDNSService.java (original)
+++ james/jspf/trunk/src/test/java/org/apache/james/jspf/LoggingDNSService.java Thu Oct  5
09:43:45 2006
@@ -20,6 +20,7 @@
 package org.apache.james.jspf;
 
 import org.apache.james.jspf.core.DNSService;
+import org.apache.james.jspf.impl.DNSServiceXBillImpl;
 
 import java.util.List;
 



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


Mime
View raw message