Author: bago
Date: Mon Apr 16 10:48:02 2007
New Revision: 529341
URL: http://svn.apache.org/viewvc?view=rev&rev=529341
Log:
Removed dns dependency from SPF1Data: now MacroExpand has dns dependency and
take care of managing this.
Introduced MacroExpandEnabled to declare dependency on MacroExpand services and
moved it to a singleton service (performance improvement)
Added:
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/SPF.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java
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=529341&r1=529340&r2=529341
==============================================================================
--- 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 Mon Apr 16
10:48:02 2007
@@ -32,6 +32,7 @@
import org.apache.james.jspf.exceptions.PermErrorException;
import org.apache.james.jspf.exceptions.SPFResultException;
import org.apache.james.jspf.exceptions.TempErrorException;
+import org.apache.james.jspf.macro.MacroExpand;
import org.apache.james.jspf.parser.DefaultSPF1Parser;
import org.apache.james.jspf.parser.DefaultTermsFactory;
import org.apache.james.jspf.policies.ChainPolicy;
@@ -49,6 +50,7 @@
import org.apache.james.jspf.policies.local.TrustedForwarderPolicy;
import org.apache.james.jspf.wiring.DNSServiceEnabled;
import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
import org.apache.james.jspf.wiring.SPFCheckEnabled;
import org.apache.james.jspf.wiring.WiringServiceTable;
@@ -78,6 +80,8 @@
private boolean mustEquals = false;
+ private MacroExpand macroExpand;
+
/**
* Uses passed logger and passed dnsServicer
*
@@ -91,6 +95,8 @@
WiringServiceTable wiringService = new WiringServiceTable();
wiringService.put(LogEnabled.class, this.log);
wiringService.put(DNSServiceEnabled.class, this.dnsProbe);
+ this.macroExpand = new
MacroExpand(logger.getChildLogger("macroExpand"), this.dnsProbe);
+ wiringService.put(MacroExpandEnabled.class, this.macroExpand);
this.parser = new DefaultSPF1Parser(logger.getChildLogger("parser"),
new DefaultTermsFactory(logger.getChildLogger("termsfactory"), wiringService));
// We add this after the parser creation because services cannot be
null
wiringService.put(SPFCheckEnabled.class, this.parser);
@@ -104,11 +110,12 @@
* @param parser the parser to use
* @param logger the logger to use
*/
- public SPF(DNSService dnsProbe, SPFRecordParser parser, Logger logger) {
+ public SPF(DNSService dnsProbe, SPFRecordParser parser, Logger logger,
MacroExpand macroExpand) {
super();
this.dnsProbe = dnsProbe;
this.parser = parser;
this.log = logger;
+ this.macroExpand = macroExpand;
}
/**
@@ -130,7 +137,6 @@
try {
// Setup the data
spfData = new SPF1Data(mailFrom, hostName, ipAddress);
- spfData.enableDNSService(dnsProbe);
checkSPF(spfData);
String resultChar = spfData.getCurrentResult() != null ?
spfData.getCurrentResult() : "";
result = SPF1Utils.resultToName(resultChar);
@@ -222,7 +228,7 @@
policies.add(new NeutralIfNotMatchPolicy());
- policies.add(new DefaultExplanationPolicy(log, defaultExplanation));
+ policies.add(new DefaultExplanationPolicy(log, defaultExplanation,
macroExpand));
policies.add(new InitialChecksPolicy());
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java
(original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/core/SPF1Data.java Mon
Apr 16 10:48:02 2007
@@ -20,15 +20,9 @@
package org.apache.james.jspf.core;
-import org.apache.james.jspf.SPF1Utils;
-import org.apache.james.jspf.core.DNSService.TimeoutException;
import org.apache.james.jspf.exceptions.NoneException;
import org.apache.james.jspf.exceptions.PermErrorException;
import org.apache.james.jspf.macro.MacroData;
-import org.apache.james.jspf.wiring.DNSServiceEnabled;
-
-import java.util.Iterator;
-import java.util.List;
/**
*
@@ -37,7 +31,7 @@
*
*/
-public class SPF1Data implements MacroData, DNSServiceEnabled {
+public class SPF1Data implements MacroData {
private String ipAddress = ""; // also used for (i)<sending-host>
@@ -57,7 +51,7 @@
private String readableIP = null; // (c)
- private String receivingDomain = "unknown"; // (r)
+ private String receivingDomain = null; // (r)
private int currentDepth = 0;
@@ -72,8 +66,6 @@
private boolean ignoreExplanation = false;
- private DNSService dnsProbe;
-
/**
* Build the SPF1Data from the given parameters
*
@@ -181,34 +173,16 @@
* @see org.apache.james.jspf.macro.MacroData#getClientDomain()
*/
public String getClientDomain() {
- if (clientDomain == null) {
- clientDomain = "unknown";
- try {
- boolean ip6 = IPAddr.isIPV6(ipAddress);
- List records =
dnsProbe.getRecords(IPAddr.getAddress(ipAddress).getReverseIP(),
DNSService.PTR);
-
- if (records != null && records.size() > 0) {
- String record = (String) records.get(0);
- records = dnsProbe.getRecords(record, ip6 ?
DNSService.AAAA : DNSService.A);
- if (records != null && records.size() > 0) {
- Iterator i = records.iterator();
- while (i.hasNext()) {
- String next = (String) i.next();
- if
(IPAddr.getAddress(ipAddress).toString().equals(IPAddr.getAddress(next).toString()))
{
- clientDomain = record;
- break;
- }
- }
- }
- }
- } catch (TimeoutException e) {
- // just return the default "unknown".
- } catch (PermErrorException e) {
- // just return the default "unknown".
- }
- }
return clientDomain;
}
+
+ /**
+ * Sets the calculated clientDomain
+ * @param clientDomain the new clientDomain
+ */
+ public void setClientDomain(String clientDomain) {
+ this.clientDomain = clientDomain;
+ }
/**
* @see org.apache.james.jspf.macro.MacroData#getSenderDomain()
@@ -217,7 +191,6 @@
return senderDomain;
}
-
/**
* Get the ipAddress which was used to connect
*
@@ -264,22 +237,19 @@
* @see org.apache.james.jspf.macro.MacroData#getReceivingDomain()
*/
public String getReceivingDomain() {
-
- if (receivingDomain.equals("unknown")) {
- List dNames = dnsProbe.getLocalDomainNames();
-
- for (int i = 0; i < dNames.size(); i++) {
- // check if the domainname is a FQDN
- if (SPF1Utils.checkFQDN(dNames.get(i).toString())) {
- receivingDomain = dNames.get(i).toString();
- return receivingDomain;
- }
- }
- }
return receivingDomain;
}
/**
+ * Sets the new receiving domain
+ *
+ * @param receivingDomain the new receiving domain
+ */
+ public void setReceivingDomain(String receivingDomain) {
+ this.receivingDomain = receivingDomain;
+ }
+
+ /**
* Increase the current depth:
*
* if we reach maximum calls we must throw a PermErrorException. See
@@ -356,13 +326,6 @@
*/
public boolean ignoreExplanation() {
return ignoreExplanation;
- }
-
- /**
- * @see
org.apache.james.jspf.wiring.DNSServiceEnabled#enableDNSService(org.apache.james.jspf.core.DNSService)
- */
- public void enableDNSService(DNSService service) {
- this.dnsProbe = service;
}
}
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
(original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/macro/MacroExpand.java
Mon Apr 16 10:48:02 2007
@@ -26,13 +26,20 @@
*
*/
+import org.apache.james.jspf.SPF1Utils;
+import org.apache.james.jspf.core.DNSService;
+import org.apache.james.jspf.core.IPAddr;
import org.apache.james.jspf.core.Logger;
+import org.apache.james.jspf.core.SPF1Data;
+import org.apache.james.jspf.core.DNSService.TimeoutException;
import org.apache.james.jspf.exceptions.PermErrorException;
import org.apache.james.jspf.util.SPFTermsRegexps;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -50,6 +57,8 @@
private Logger log;
+ private DNSService dnsProbe;
+
public static final boolean EXPLANATION = true;
public static final boolean DOMAIN = false;
@@ -60,7 +69,7 @@
* @param spfData the MacroData to use
* @param logger the logget to use
*/
- public MacroExpand(Logger logger) {
+ public MacroExpand(Logger logger, DNSService dnsProbe) {
// This matches 2 groups
domainSpecPattern =
Pattern.compile(SPFTermsRegexps.DOMAIN_SPEC_REGEX_R);
// The real pattern replacer
@@ -69,6 +78,7 @@
macroLettersExpPattern =
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN_EXP);
macroLettersPattern =
Pattern.compile(SPFTermsRegexps.MACRO_LETTER_PATTERN);
log = logger;
+ this.dnsProbe = dnsProbe;
}
public String expand(String input, MacroData macroData, boolean
isExplanation) throws PermErrorException {
@@ -306,10 +316,55 @@
rValue = macroData.getReadableIP();
} else if (variable.equalsIgnoreCase("p")) {
rValue = macroData.getClientDomain();
+ if (rValue == null) {
+ rValue = "unknown";
+ if (macroData instanceof SPF1Data) {
+ SPF1Data spf1data = (SPF1Data) macroData;
+ try {
+ boolean ip6 = IPAddr.isIPV6(spf1data.getIpAddress());
+ List records =
dnsProbe.getRecords(IPAddr.getAddress(spf1data.getIpAddress()).getReverseIP(),
DNSService.PTR);
+
+ if (records != null && records.size() > 0) {
+ String record = (String) records.get(0);
+ records = dnsProbe.getRecords(record, ip6 ?
DNSService.AAAA : DNSService.A);
+ if (records != null && records.size() > 0) {
+ Iterator i = records.iterator();
+ while (i.hasNext()) {
+ String next = (String) i.next();
+ if
(IPAddr.getAddress(spf1data.getIpAddress()).toString().equals(IPAddr.getAddress(next).toString()))
{
+ rValue = record;
+ break;
+ }
+ }
+ }
+ }
+ } catch (TimeoutException e) {
+ // just return the default "unknown".
+ } catch (PermErrorException e) {
+ // just return the default "unknown".
+ }
+ spf1data.setClientDomain(rValue);
+ }
+ }
} else if (variable.equalsIgnoreCase("o")) {
rValue = macroData.getSenderDomain();
} else if (variable.equalsIgnoreCase("r")) {
rValue = macroData.getReceivingDomain();
+ if (rValue == null) {
+ rValue = "unknown";
+ List dNames = dnsProbe.getLocalDomainNames();
+
+ for (int i = 0; i < dNames.size(); i++) {
+ // check if the domainname is a FQDN
+ if (SPF1Utils.checkFQDN(dNames.get(i).toString())) {
+ rValue = dNames.get(i).toString();
+ if (macroData instanceof SPF1Data) {
+ ((SPF1Data) macroData).setReceivingDomain(rValue);
+ }
+ break;
+ }
+ }
+ }
}
if (rValue == null) {
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultSPF1Parser.java
Mon Apr 16 10:48:02 2007
@@ -336,7 +336,7 @@
Configuration subres = new MatcherBasedConfiguration(res, k, c
.getMatchSize());
try {
- return termsFactory.createTerm(c, subres);
+ return termsFactory.createTerm(c.getTermDef(), subres);
} catch (InstantiationException e) {
e.printStackTrace();
// TODO is it ok to use a Runtime for this? Or should we
use a PermError here?
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/DefaultTermsFactory.java
Mon Apr 16 10:48:02 2007
@@ -130,9 +130,9 @@
/**
* @see
org.apache.james.jspf.parser.TermsFactory#createTerm(org.apache.james.jspf.parser.TermDefinition,
org.apache.james.jspf.core.MatcherBasedConfiguration)
*/
- public Object createTerm(TermDefinition termDef, Configuration subres)
throws PermErrorException, InstantiationException {
+ public Object createTerm(Class termDef, Configuration subres) throws
PermErrorException, InstantiationException {
try {
- Object term = termDef.getTermDef().newInstance();
+ Object term = termDef.newInstance();
try {
wiringService.wire(term);
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/parser/TermsFactory.java
Mon Apr 16 10:48:02 2007
@@ -33,13 +33,13 @@
/**
* Create a new term starting from the TermDefinition created by this
factory
*
- * @param termDef the TermDefinition (returned by this factory)
+ * @param class the TermDefinition.getTermDef (returned by this factory)
* @param subres (the configuration)
* @return the generated object
* @throws PermErrorException if something goes wrong
* @throws InstantiationException
*/
- public Object createTerm(TermDefinition termDef, Configuration subres)
+ public Object createTerm(Class klass, Configuration subres)
throws PermErrorException, InstantiationException;
/**
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/policies/local/DefaultExplanationPolicy.java
Mon Apr 16 10:48:02 2007
@@ -44,20 +44,24 @@
* the default explanation
*/
private String defExplanation;
+
+ private MacroExpand macroExpand;
/**
+ * @param macroExpand
* @param spf
*/
- public DefaultExplanationPolicy(Logger log, String explanation) {
+ public DefaultExplanationPolicy(Logger log, String explanation,
MacroExpand macroExpand) {
this.log = log;
this.defExplanation = explanation;
+ this.macroExpand = macroExpand;
}
/**
* @see
org.apache.james.jspf.policies.AbstractNestedPolicy#getSPFRecordPostFilter(java.lang.String,
org.apache.james.jspf.core.SPF1Record)
*/
protected SPF1Record getSPFRecordPostFilter(String currentDomain,
SPF1Record spfRecord) throws PermErrorException, TempErrorException,
NoneException, NeutralException {
- // Default explanation policy
+ // Default explanation policy.
spfRecord.getModifiers().add(new SPFChecker() {
public void checkSPF(SPF1Data spfData) throws PermErrorException,
NoneException, TempErrorException, NeutralException {
@@ -70,8 +74,7 @@
explanation = defExplanation;
}
try {
- explanation = new MacroExpand(log)
- .expand(explanation, spfData,
MacroExpand.EXPLANATION);
+ explanation = macroExpand.expand(explanation,
spfData, MacroExpand.EXPLANATION);
spfData.setExplanation(explanation);
} catch (PermErrorException e) {
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java
(original)
+++ james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/ExpModifier.java
Mon Apr 16 10:48:02 2007
@@ -28,6 +28,7 @@
import org.apache.james.jspf.macro.MacroExpand;
import org.apache.james.jspf.util.SPFTermsRegexps;
import org.apache.james.jspf.wiring.DNSServiceEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
import java.util.List;
@@ -35,7 +36,7 @@
* This class represent the exp modifier
*
*/
-public class ExpModifier extends GenericModifier implements DNSServiceEnabled {
+public class ExpModifier extends GenericModifier implements DNSServiceEnabled,
MacroExpandEnabled {
/**
* ABNF: explanation = "exp" "=" domain-spec
@@ -48,6 +49,8 @@
+ SPFTermsRegexps.DOMAIN_SPEC_REGEX+"?";
private DNSService dnsService;
+
+ private MacroExpand macroExpand;
/**
* Generate the explanation and set it in SPF1Data so it can be accessed
@@ -75,7 +78,7 @@
if (spfData.getCurrentResult()== null ||
!spfData.getCurrentResult().equals(SPF1Constants.FAIL))
return;
- host = new MacroExpand(log).expand(host, spfData, MacroExpand.DOMAIN);
+ host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
try {
try {
@@ -86,8 +89,8 @@
}
if ((exp != null) && (!exp.equals(""))) {
- spfData.setExplanation(new MacroExpand(log)
- .expand(exp, spfData, MacroExpand.EXPLANATION));
+ String expandedExplanation = macroExpand.expand(exp, spfData,
MacroExpand.EXPLANATION);
+ spfData.setExplanation(expandedExplanation);
}
} catch (PermErrorException e) {
// TODO add logging here!
@@ -146,6 +149,14 @@
*/
public void enableDNSService(DNSService service) {
this.dnsService = service;
+ }
+
+
+ /**
+ * @see
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+ */
+ public void enableMacroExpand(MacroExpand macroExpand) {
+ this.macroExpand = macroExpand;
}
}
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/GenericMechanism.java
Mon Apr 16 10:48:02 2007
@@ -28,12 +28,13 @@
import org.apache.james.jspf.exceptions.PermErrorException;
import org.apache.james.jspf.macro.MacroExpand;
import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
/**
* This abstract class represent a gerneric mechanism
*
*/
-public abstract class GenericMechanism implements Mechanism, Configurable,
LogEnabled {
+public abstract class GenericMechanism implements Mechanism, Configurable,
LogEnabled, MacroExpandEnabled {
/**
* ABNF: ip4-cidr-length = "/" 1*DIGIT
@@ -56,6 +57,8 @@
protected Logger log;
+ protected MacroExpand macroExpand;
+
/**
* Expand the hostname
*
@@ -68,7 +71,7 @@
host = spfData.getCurrentDomain();
} else {
// throws a PermErrorException that we cat pass through
- host = new MacroExpand(log).expand(host, spfData,
MacroExpand.DOMAIN);
+ host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
}
return host;
}
@@ -98,4 +101,10 @@
this.log = logger;
}
+ /**
+ * @see
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+ */
+ public void enableMacroExpand(MacroExpand macroExpand) {
+ this.macroExpand = macroExpand;
+ }
}
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java
Mon Apr 16 10:48:02 2007
@@ -34,13 +34,14 @@
import org.apache.james.jspf.macro.MacroExpand;
import org.apache.james.jspf.util.SPFTermsRegexps;
import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
import org.apache.james.jspf.wiring.SPFCheckEnabled;
/**
* This class represent the incude mechanism
*
*/
-public class IncludeMechanism implements Mechanism, Configurable, LogEnabled,
SPFCheckEnabled {
+public class IncludeMechanism implements Mechanism, Configurable, LogEnabled,
SPFCheckEnabled, MacroExpandEnabled {
/**
* ABNF: include = "include" ":" domain-spec
@@ -54,6 +55,8 @@
private SPFChecker spfChecker;
+ private MacroExpand macroExpand;
+
/**
* Set the host which should be used for include
*
@@ -72,7 +75,7 @@
spfData.increaseCurrentDepth();
// throws a PermErrorException that we can pass through
- host = new MacroExpand(log).expand(host, spfData, MacroExpand.DOMAIN);
+ host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
String prevRes = spfData.getCurrentResult();
String prevHost = spfData.getCurrentDomain();
@@ -149,5 +152,12 @@
*/
public void enableSPFChecking(SPFChecker checker) {
this.spfChecker = checker;
+ }
+
+ /**
+ * @see
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+ */
+ public void enableMacroExpand(MacroExpand macroExpand) {
+ this.macroExpand = macroExpand;
}
}
Modified:
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
(original)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java
Mon Apr 16 10:48:02 2007
@@ -28,13 +28,14 @@
import org.apache.james.jspf.exceptions.TempErrorException;
import org.apache.james.jspf.macro.MacroExpand;
import org.apache.james.jspf.util.SPFTermsRegexps;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
import org.apache.james.jspf.wiring.SPFCheckEnabled;
/**
* This class represent the redirect modifier
*
*/
-public class RedirectModifier extends GenericModifier implements
SPFCheckEnabled {
+public class RedirectModifier extends GenericModifier implements
SPFCheckEnabled, MacroExpandEnabled {
/**
* ABNF: redirect = "redirect" "=" domain-spec
@@ -44,6 +45,8 @@
private SPFChecker spfChecker;
+ private MacroExpand macroExpand;
+
/**
* Set the host which should be used for redirection and set it in SPF1Data
* so it can be accessed easy later if needed
@@ -67,7 +70,7 @@
spfData.increaseCurrentDepth();
// throws a PermErrorException that we can pass through
- host = new MacroExpand(log).expand(host, spfData,
MacroExpand.DOMAIN);
+ host = macroExpand.expand(host, spfData, MacroExpand.DOMAIN);
spfData.setCurrentDomain(host);
@@ -100,6 +103,13 @@
*/
public void enableSPFChecking(SPFChecker checker) {
this.spfChecker = checker;
+ }
+
+ /**
+ * @see
org.apache.james.jspf.wiring.MacroExpandEnabled#enableMacroExpand(org.apache.james.jspf.macro.MacroExpand)
+ */
+ public void enableMacroExpand(MacroExpand macroExpand) {
+ this.macroExpand = macroExpand;
}
}
Added:
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java?view=auto&rev=529341
==============================================================================
---
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
(added)
+++
james/jspf/trunk/src/main/java/org/apache/james/jspf/wiring/MacroExpandEnabled.java
Mon Apr 16 10:48:02 2007
@@ -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.jspf.wiring;
+
+import org.apache.james.jspf.macro.MacroExpand;
+
+/**
+ * Components that need to log can implement this interface so that
+ * the container will provide the DNSService
+ */
+public interface MacroExpandEnabled {
+ /**
+ * Provide component with a DNSService.
+ *
+ * @param service
+ * the dns service. Must not be <code>null</code>.
+ */
+ void enableMacroExpand(MacroExpand macroExpand);
+}
\ No newline at end of file
Modified:
james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
--- james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
(original)
+++ james/jspf/trunk/src/test/java/org/apache/james/jspf/AbstractYamlTest.java
Mon Apr 16 10:48:02 2007
@@ -22,10 +22,12 @@
import org.apache.james.jspf.core.DNSService;
import org.apache.james.jspf.core.Logger;
import org.apache.james.jspf.core.SPFRecordParser;
+import org.apache.james.jspf.macro.MacroExpand;
import org.apache.james.jspf.parser.DefaultSPF1Parser;
import org.apache.james.jspf.parser.DefaultTermsFactory;
import org.apache.james.jspf.wiring.DNSServiceEnabled;
import org.apache.james.jspf.wiring.LogEnabled;
+import org.apache.james.jspf.wiring.MacroExpandEnabled;
import org.apache.james.jspf.wiring.SPFCheckEnabled;
import org.apache.james.jspf.wiring.WiringService;
import org.jvyaml.Constructor;
@@ -51,6 +53,7 @@
SPFYamlTestSuite data;
String test;
protected Logger log;
+ protected static MacroExpand macroExpand;
protected static SPF spf;
protected static SPFRecordParser parser;
private static DNSService dns;
@@ -145,6 +148,9 @@
String[] path =
component.getClass().toString().split("\\.");
((LogEnabled)
component).enableLogging(log.getChildLogger("dep").getChildLogger(path[path.length-1].toLowerCase()));
}
+ if (component instanceof MacroExpandEnabled) {
+ ((MacroExpandEnabled)
component).enableMacroExpand(macroExpand);
+ }
if (component instanceof DNSServiceEnabled) {
((DNSServiceEnabled) component).enableDNSService(dns);
}
@@ -156,7 +162,8 @@
}));
}
dns = new LoggingDNSService(getDNSService(),
log.getChildLogger("dns"));
- spf = new SPF(dns, parser, log.getChildLogger("spf"));
+ macroExpand = new MacroExpand(log.getChildLogger("macroExpand"), dns);
+ spf = new SPF(dns, parser, log.getChildLogger("spf"), macroExpand);
/* PREVIOUS SLOW WAY
// we add this after the creation because it is a loop reference
enabledServices.remove(DNSServiceEnabled.class);
@@ -220,7 +227,7 @@
* @return
*/
protected DNSService getDNSService() {
- SPFYamlDNSService yamlDNSService = new SPFYamlDNSService((HashMap)
data.getZonedata());
+ SPFYamlDNSService yamlDNSService = new
SPFYamlDNSService(data.getZonedata());
return yamlDNSService;
}
@@ -300,7 +307,7 @@
Object obj = hm.get(type);
if (obj instanceof String) {
- res.add((String) obj);
+ res.add(obj);
} else if (obj instanceof ArrayList) {
ArrayList a = (ArrayList) obj;
StringBuffer sb = new StringBuffer();
Modified:
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java
URL:
http://svn.apache.org/viewvc/james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java?view=diff&rev=529341&r1=529340&r2=529341
==============================================================================
---
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java
(original)
+++
james/jspf/trunk/src/test/java/org/apache/james/jspf/macro/MacroExpandTest.java
Mon Apr 16 10:48:02 2007
@@ -103,8 +103,8 @@
protected void setUp() throws Exception {
super.setUp();
- defIp4me = new MacroExpand(new ConsoleLogger());
- defIp6me = new MacroExpand(new ConsoleLogger());
+ defIp4me = new MacroExpand(new ConsoleLogger(), null);
+ defIp6me = new MacroExpand(new ConsoleLogger(), null);
}
public void testPercS() throws PermErrorException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]