1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.james.jspf.policies.local;
21
22 import org.apache.james.jspf.core.Logger;
23 import org.apache.james.jspf.core.SPF1Record;
24 import org.apache.james.jspf.core.exceptions.NeutralException;
25 import org.apache.james.jspf.core.exceptions.NoneException;
26 import org.apache.james.jspf.core.exceptions.PermErrorException;
27 import org.apache.james.jspf.core.exceptions.TempErrorException;
28 import org.apache.james.jspf.policies.PolicyPostFilter;
29 import org.apache.james.jspf.terms.Directive;
30 import org.apache.james.jspf.terms.IncludeMechanism;
31
32
33
34
35
36
37 public class TrustedForwarderPolicy implements PolicyPostFilter {
38
39
40
41
42 public static final String TRUSTED_FORWARDER_HOST = "spf.trusted-forwarder.org";
43
44
45 private Logger log;
46
47
48
49
50 public TrustedForwarderPolicy(Logger log) {
51 this.log = log;
52 }
53
54
55
56
57 public SPF1Record getSPFRecord(String currentDomain, SPF1Record spfRecord) throws PermErrorException, TempErrorException, NoneException, NeutralException {
58 if (spfRecord == null) return null;
59 String mechanism = ((Directive) spfRecord.getDirectives().get(spfRecord.getDirectives().size())).toString();
60 if (mechanism.equals("-all") || mechanism.equals("?all")) {
61 log.debug("Add TrustedForwarderPolicy = include:"+TRUSTED_FORWARDER_HOST);
62 try {
63 IncludeMechanism trusted = new IncludeMechanism() {
64
65
66
67
68
69 public synchronized IncludeMechanism setHost(String host) {
70 this.host = host;
71 return this;
72 }
73 }.setHost(TRUSTED_FORWARDER_HOST);
74 spfRecord.getDirectives().add(spfRecord.getDirectives().size()-1, new Directive(null, trusted, log.getChildLogger("trustedforwarder")));
75 } catch (PermErrorException e) {
76
77 }
78 }
79 return spfRecord;
80 }
81 }