1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.james.smtpserver.core.filter.fastfail;
21
22 import org.apache.james.dsn.DSNStatus;
23 import org.apache.james.smtpserver.SMTPSession;
24
25
26 import java.net.UnknownHostException;
27
28
29 public class ReverseEqualsEhloHeloHandler extends ResolvableEhloHeloHandler {
30
31
32
33
34
35
36
37 protected void checkEhloHelo(SMTPSession session, String argument) {
38
39
40
41
42 if (!session.isRelayingAllowed() || checkAuthNetworks) {
43 boolean badHelo = false;
44 try {
45
46 String reverse = dnsServer.getHostName(dnsServer.getByName(
47 session.getRemoteIPAddress()));
48 if (!argument.equals(reverse)) {
49 badHelo = true;
50 }
51 } catch (UnknownHostException e) {
52 badHelo = true;
53 }
54
55
56 if (badHelo)
57 session.getState().put(BAD_EHLO_HELO, "true");
58 }
59 }
60
61
62
63
64 protected String getJunkScoreLogString(SMTPSession session) {
65 return "Provided EHLO/HELO " + session.getState().get(SMTPSession.CURRENT_HELO_NAME) + " not equal reverse of "
66 + session.getRemoteIPAddress() + ". Add junkScore: " + getScore();
67 }
68
69
70
71
72 protected String getRejectLogString(SMTPSession session) {
73 return getResponseString(session);
74 }
75
76
77
78
79 protected String getResponseString(SMTPSession session) {
80 String responseString = "501 "
81 + DSNStatus.getStatus(DSNStatus.PERMANENT,
82 DSNStatus.DELIVERY_INVALID_ARG)
83 + " Provided EHLO/HELO " + session.getState().get(SMTPSession.CURRENT_HELO_NAME) + " not equal reverse of "
84 + session.getRemoteIPAddress();
85 return responseString;
86 }
87
88
89
90
91 protected String getScoreName() {
92 return "ReverseEqualsEhloHeloCheck";
93 }
94 }