Haraka 3.0.2 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/.eslintrc.yaml +5 -9
  2. package/.prettierrc.yml +1 -0
  3. package/CONTRIBUTORS.md +11 -0
  4. package/Changes.md +1393 -1211
  5. package/Dockerfile +3 -3
  6. package/Plugins.md +119 -106
  7. package/README.md +7 -16
  8. package/TODO +1 -24
  9. package/bin/haraka +197 -298
  10. package/config/auth_flat_file.ini +2 -0
  11. package/config/auth_vpopmaild.ini +4 -2
  12. package/config/dhparams.pem +8 -0
  13. package/config/mail_from.is_resolvable.ini +4 -2
  14. package/config/me +1 -0
  15. package/config/outbound.ini +0 -2
  16. package/config/plugins +36 -35
  17. package/config/rabbitmq_amqplib.ini +8 -1
  18. package/config/smtp.ini +0 -1
  19. package/config/smtp.json +17 -0
  20. package/config/tls_cert.pem +23 -0
  21. package/config/tls_key.pem +28 -0
  22. package/connection.js +46 -73
  23. package/contrib/bsd-rc.d/haraka +3 -1
  24. package/contrib/plugin2npm.sh +6 -36
  25. package/docs/Connection.md +1 -1
  26. package/docs/CoreConfig.md +2 -2
  27. package/docs/Logging.md +7 -21
  28. package/docs/Outbound.md +104 -210
  29. package/docs/Plugins.md +47 -40
  30. package/docs/Transaction.md +59 -82
  31. package/docs/{plugins → deprecated}/connect.rdns_access.md +1 -1
  32. package/docs/{plugins → deprecated}/mail_from.access.md +1 -1
  33. package/docs/{plugins → deprecated}/rcpt_to.access.md +1 -1
  34. package/docs/plugins/auth/auth_vpopmaild.md +15 -19
  35. package/docs/plugins/auth/flat_file.md +23 -30
  36. package/docs/plugins/queue/rabbitmq_amqplib.md +7 -0
  37. package/docs/plugins/queue/smtp_forward.md +1 -1
  38. package/docs/plugins/queue/smtp_proxy.md +5 -10
  39. package/docs/plugins/relay.md +2 -2
  40. package/docs/plugins/tls.md +29 -9
  41. package/endpoint.js +16 -13
  42. package/haraka.js +10 -14
  43. package/host_pool.js +5 -5
  44. package/line_socket.js +3 -4
  45. package/logger.js +44 -28
  46. package/outbound/client_pool.js +27 -23
  47. package/outbound/config.js +4 -6
  48. package/outbound/fsync_writestream.js +1 -1
  49. package/outbound/hmail.js +180 -220
  50. package/outbound/index.js +86 -99
  51. package/outbound/qfile.js +1 -1
  52. package/outbound/queue.js +55 -43
  53. package/outbound/timer_queue.js +3 -2
  54. package/outbound/tls.js +19 -7
  55. package/package.json +66 -55
  56. package/plugins/.eslintrc.yaml +0 -6
  57. package/plugins/auth/auth_base.js +30 -12
  58. package/plugins/auth/auth_proxy.js +14 -12
  59. package/plugins/auth/auth_vpopmaild.js +30 -20
  60. package/plugins/auth/flat_file.js +17 -12
  61. package/plugins/block_me.js +1 -1
  62. package/plugins/data.signatures.js +2 -4
  63. package/plugins/early_talker.js +2 -1
  64. package/plugins/mail_from.is_resolvable.js +65 -135
  65. package/plugins/queue/deliver.js +4 -5
  66. package/plugins/queue/lmtp.js +11 -14
  67. package/plugins/queue/qmail-queue.js +2 -2
  68. package/plugins/queue/quarantine.js +2 -2
  69. package/plugins/queue/rabbitmq.js +16 -17
  70. package/plugins/queue/rabbitmq_amqplib.js +1 -1
  71. package/plugins/queue/smtp_forward.js +6 -6
  72. package/plugins/queue/smtp_proxy.js +10 -1
  73. package/plugins/queue/test.js +2 -2
  74. package/plugins/rcpt_to.host_list_base.js +5 -5
  75. package/plugins/rcpt_to.in_host_list.js +2 -2
  76. package/plugins/relay.js +6 -7
  77. package/plugins/reseed_rng.js +1 -1
  78. package/plugins/status.js +37 -33
  79. package/plugins/tls.js +2 -2
  80. package/plugins/xclient.js +3 -2
  81. package/plugins.js +51 -54
  82. package/run_tests +3 -30
  83. package/server.js +190 -190
  84. package/smtp_client.js +30 -23
  85. package/{tests → test}/config/plugins +0 -2
  86. package/{tests → test}/config/smtp.ini +1 -1
  87. package/test/config/tls/example.com/_.example.com.key +28 -0
  88. package/test/config/tls/example.com/example.com.crt +25 -0
  89. package/test/connection.js +302 -0
  90. package/test/endpoint.js +94 -0
  91. package/{tests → test}/fixtures/line_socket.js +1 -1
  92. package/{tests → test}/fixtures/util_hmailitem.js +19 -25
  93. package/{tests → test}/host_pool.js +42 -57
  94. package/test/logger.js +258 -0
  95. package/test/outbound/hmail.js +141 -0
  96. package/test/outbound/index.js +220 -0
  97. package/test/outbound/qfile.js +126 -0
  98. package/test/outbound_bounce_net_errors.js +142 -0
  99. package/{tests → test}/outbound_bounce_rfc3464.js +110 -122
  100. package/test/plugins/auth/auth_base.js +484 -0
  101. package/test/plugins/auth/auth_vpopmaild.js +83 -0
  102. package/test/plugins/early_talker.js +104 -0
  103. package/test/plugins/mail_from.is_resolvable.js +35 -0
  104. package/test/plugins/queue/smtp_forward.js +206 -0
  105. package/test/plugins/rcpt_to.host_list_base.js +122 -0
  106. package/test/plugins/rcpt_to.in_host_list.js +193 -0
  107. package/test/plugins/relay.js +303 -0
  108. package/test/plugins/status.js +130 -0
  109. package/test/plugins/tls.js +70 -0
  110. package/test/plugins.js +228 -0
  111. package/{tests → test}/queue/multibyte +0 -0
  112. package/{tests → test}/queue/plain +0 -0
  113. package/test/rfc1869.js +73 -0
  114. package/test/server.js +491 -0
  115. package/test/smtp_client.js +299 -0
  116. package/test/tls_socket.js +273 -0
  117. package/test/transaction.js +270 -0
  118. package/tls_socket.js +202 -252
  119. package/transaction.js +9 -24
  120. package/CONTRIBUTING.md +0 -1
  121. package/bin/dkimverify +0 -40
  122. package/config/access.domains +0 -13
  123. package/config/attachment.ctype.regex +0 -2
  124. package/config/attachment.filename.regex +0 -1
  125. package/config/avg.ini +0 -5
  126. package/config/bounce.ini +0 -15
  127. package/config/data.headers.ini +0 -61
  128. package/config/dkim/dkim_key_gen.sh +0 -78
  129. package/config/dkim_sign.ini +0 -4
  130. package/config/dkim_verify.ini +0 -7
  131. package/config/dnsbl.ini +0 -23
  132. package/config/greylist.ini +0 -43
  133. package/config/helo.checks.ini +0 -52
  134. package/config/lookup_rdns.strict.ini +0 -12
  135. package/config/lookup_rdns.strict.timeout +0 -1
  136. package/config/lookup_rdns.strict.whitelist +0 -1
  137. package/config/lookup_rdns.strict.whitelist_regex +0 -5
  138. package/config/messagesniffer.ini +0 -18
  139. package/config/rcpt_to.blocklist +0 -1
  140. package/config/rdns.allow_regexps +0 -0
  141. package/config/rdns.deny_regexps +0 -0
  142. package/config/spamassassin.ini +0 -56
  143. package/config.js +0 -6
  144. package/dkim.js +0 -614
  145. package/docs/plugins/avg.md +0 -35
  146. package/docs/plugins/bounce.md +0 -69
  147. package/docs/plugins/clamd.md +0 -147
  148. package/docs/plugins/esets.md +0 -8
  149. package/docs/plugins/greylist.md +0 -90
  150. package/docs/plugins/helo.checks.md +0 -135
  151. package/docs/plugins/messagesniffer.md +0 -163
  152. package/docs/plugins/relay_acl.md +0 -29
  153. package/docs/plugins/relay_all.md +0 -15
  154. package/docs/plugins/relay_force_routing.md +0 -33
  155. package/docs/plugins/spamassassin.md +0 -180
  156. package/outbound/mx_lookup.js +0 -70
  157. package/plugins/auth/auth_ldap.js +0 -3
  158. package/plugins/avg.js +0 -162
  159. package/plugins/backscatterer.js +0 -25
  160. package/plugins/bounce.js +0 -381
  161. package/plugins/clamd.js +0 -381
  162. package/plugins/data.headers.js +0 -4
  163. package/plugins/data.uribl.js +0 -4
  164. package/plugins/dkim_sign.js +0 -395
  165. package/plugins/dkim_verify.js +0 -62
  166. package/plugins/dns_list_base.js +0 -221
  167. package/plugins/dnsbl.js +0 -146
  168. package/plugins/dnswl.js +0 -58
  169. package/plugins/esets.js +0 -71
  170. package/plugins/graph.js +0 -5
  171. package/plugins/greylist.js +0 -645
  172. package/plugins/helo.checks.js +0 -533
  173. package/plugins/messagesniffer.js +0 -381
  174. package/plugins/rcpt_to.ldap.js +0 -3
  175. package/plugins/rcpt_to.max_count.js +0 -24
  176. package/plugins/relay_all.js +0 -13
  177. package/plugins/spamassassin.js +0 -384
  178. package/tests/config/dkim/example.com/dns +0 -29
  179. package/tests/config/dkim/example.com/private +0 -6
  180. package/tests/config/dkim/example.com/public +0 -4
  181. package/tests/config/dkim/example.com/selector +0 -1
  182. package/tests/config/dkim.private.key +0 -6
  183. package/tests/config/dkim_sign.ini +0 -4
  184. package/tests/config/helo.checks.ini +0 -52
  185. package/tests/connection.js +0 -327
  186. package/tests/endpoint.js +0 -128
  187. package/tests/fixtures/vm_harness.js +0 -59
  188. package/tests/logger.js +0 -327
  189. package/tests/outbound/hmail.js +0 -112
  190. package/tests/outbound/index.js +0 -324
  191. package/tests/outbound/qfile.js +0 -67
  192. package/tests/outbound_bounce_net_errors.js +0 -173
  193. package/tests/plugins/auth/auth_base.js +0 -463
  194. package/tests/plugins/auth/auth_vpopmaild.js +0 -91
  195. package/tests/plugins/bounce.js +0 -307
  196. package/tests/plugins/clamd.js +0 -224
  197. package/tests/plugins/deprecated/relay_acl.js +0 -140
  198. package/tests/plugins/deprecated/relay_all.js +0 -59
  199. package/tests/plugins/dkim_sign.js +0 -315
  200. package/tests/plugins/dkim_signer.js +0 -108
  201. package/tests/plugins/dns_list_base.js +0 -259
  202. package/tests/plugins/dnsbl.js +0 -101
  203. package/tests/plugins/early_talker.js +0 -115
  204. package/tests/plugins/greylist.js +0 -58
  205. package/tests/plugins/helo.checks.js +0 -525
  206. package/tests/plugins/mail_from.is_resolvable.js +0 -116
  207. package/tests/plugins/queue/smtp_forward.js +0 -221
  208. package/tests/plugins/rcpt_to.host_list_base.js +0 -132
  209. package/tests/plugins/rcpt_to.in_host_list.js +0 -218
  210. package/tests/plugins/relay.js +0 -339
  211. package/tests/plugins/spamassassin.js +0 -171
  212. package/tests/plugins/status.js +0 -138
  213. package/tests/plugins/tls.js +0 -84
  214. package/tests/plugins.js +0 -247
  215. package/tests/rfc1869.js +0 -61
  216. package/tests/server.js +0 -510
  217. package/tests/smtp_client/auth.js +0 -105
  218. package/tests/smtp_client/basic.js +0 -101
  219. package/tests/smtp_client.js +0 -80
  220. package/tests/tls_socket.js +0 -333
  221. package/tests/transaction.js +0 -284
  222. /package/docs/{plugins → deprecated}/dkim_sign.md +0 -0
  223. /package/docs/{plugins → deprecated}/dkim_verify.md +0 -0
  224. /package/docs/{plugins → deprecated}/dnsbl.md +0 -0
  225. /package/docs/{plugins → deprecated}/dnswl.md +0 -0
  226. /package/docs/{plugins → deprecated}/rcpt_to.routes.md +0 -0
  227. /package/{tests → test}/.eslintrc.yaml +0 -0
  228. /package/{tests → test}/config/auth_flat_file.ini +0 -0
  229. /package/{tests → test}/config/dhparams.pem +0 -0
  230. /package/{tests → test}/config/host_list +0 -0
  231. /package/{tests → test}/config/outbound_tls_cert.pem +0 -0
  232. /package/{tests → test}/config/outbound_tls_key.pem +0 -0
  233. /package/{tests → test}/config/smtp_forward.ini +0 -0
  234. /package/{tests → test}/config/tls/ec.pem +0 -0
  235. /package/{tests → test}/config/tls/haraka.local.pem +0 -0
  236. /package/{tests → test}/config/tls/mismatched.pem +0 -0
  237. /package/{tests → test}/config/tls.ini +0 -0
  238. /package/{tests → test}/config/tls_cert.pem +0 -0
  239. /package/{tests → test}/config/tls_key.pem +0 -0
  240. /package/{tests → test}/fixtures/todo_qfile.txt +0 -0
  241. /package/{tests → test}/installation/config/test-plugin-flat +0 -0
  242. /package/{tests → test}/installation/config/test-plugin.ini +0 -0
  243. /package/{tests → test}/installation/config/tls.ini +0 -0
  244. /package/{tests → test}/installation/node_modules/load_first/index.js +0 -0
  245. /package/{tests → test}/installation/node_modules/load_first/package.json +0 -0
  246. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin-flat +0 -0
  247. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin.ini +0 -0
  248. /package/{tests → test}/installation/node_modules/test-plugin/package.json +0 -0
  249. /package/{tests → test}/installation/node_modules/test-plugin/test-plugin.js +0 -0
  250. /package/{tests → test}/installation/plugins/base_plugin.js +0 -0
  251. /package/{tests → test}/installation/plugins/folder_plugin/index.js +0 -0
  252. /package/{tests → test}/installation/plugins/folder_plugin/package.json +0 -0
  253. /package/{tests → test}/installation/plugins/inherits.js +0 -0
  254. /package/{tests → test}/installation/plugins/load_first.js +0 -0
  255. /package/{tests → test}/installation/plugins/plugin.js +0 -0
  256. /package/{tests → test}/installation/plugins/tls.js +0 -0
  257. /package/{tests → test}/loud/config/dhparams.pem +0 -0
  258. /package/{tests → test}/loud/config/tls/goobered.pem +0 -0
  259. /package/{tests → test}/loud/config/tls.ini +0 -0
  260. /package/{tests → test}/mail_specimen/base64-root-part.txt +0 -0
  261. /package/{tests → test}/mail_specimen/varied-fold-lengths-preserve-data.txt +0 -0
  262. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  263. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  264. /package/{tests → test}/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  265. /package/{tests → test}/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  266. /package/{tests → test}/queue/zero-length +0 -0
  267. /package/{tests → test}/test-queue/delete-me +0 -0
@@ -1,221 +0,0 @@
1
- 'use strict';
2
-
3
- const path = require('path');
4
-
5
- const { Address } = require('address-rfc2821');
6
- const fixtures = require('haraka-test-fixtures');
7
- const Notes = require('haraka-notes')
8
-
9
- const OK = 906;
10
-
11
- function _setup (done) {
12
- this.plugin = new fixtures.plugin('queue/smtp_forward');
13
-
14
- // switch config directory to 'tests/config'
15
- this.plugin.config = this.plugin.config.module_config(path.resolve('tests'));
16
-
17
- this.plugin.register();
18
- this.hmail = { todo: { notes: new Notes() } };
19
-
20
- this.connection = new fixtures.connection.createConnection();
21
- this.connection.transaction = new fixtures.transaction.createTransaction();
22
-
23
- done();
24
- }
25
-
26
- exports.loadingTLSConfig = {
27
- 'TLS enabled but no outbound config in tls.ini': test => {
28
- const plugin = new fixtures.plugin('queue/smtp_forward');
29
- test.expect(2);
30
-
31
- plugin.register();
32
-
33
- test.equal(plugin.tls_options, undefined);
34
- test.equal(plugin.register_hook.called, true);
35
-
36
- test.done();
37
- },
38
- }
39
-
40
- exports.register = {
41
- setUp : _setup,
42
- 'register' (test) {
43
- test.expect(1);
44
- this.plugin.register();
45
- test.ok(this.plugin.cfg.main);
46
- test.done();
47
- },
48
- }
49
-
50
- exports.get_config = {
51
- setUp : _setup,
52
- 'no recipient' (test) {
53
- test.expect(3);
54
- const cfg = this.plugin.get_config(this.connection);
55
- test.equal(cfg.host, 'localhost');
56
- test.equal(cfg.enable_tls, true);
57
- test.equal(cfg.one_message_per_rcpt, true);
58
- test.done();
59
- },
60
- 'null recipient' (test) {
61
- test.expect(3);
62
- this.connection.transaction.rcpt_to.push(new Address('<>'));
63
- const cfg = this.plugin.get_config(this.connection);
64
- test.equal(cfg.host, 'localhost');
65
- test.equal(cfg.enable_tls, true);
66
- test.equal(cfg.one_message_per_rcpt, true);
67
- test.done();
68
- },
69
- 'valid recipient' (test) {
70
- test.expect(3);
71
- this.connection.transaction.rcpt_to.push(
72
- new Address('<matt@example.com>')
73
- );
74
- const cfg = this.plugin.get_config(this.connection);
75
- test.equal(cfg.enable_tls, true);
76
- test.equal(cfg.one_message_per_rcpt, true);
77
- test.equal(cfg.host, 'localhost');
78
- test.done();
79
- },
80
- 'valid recipient with route' (test) {
81
- test.expect(1);
82
- this.connection.transaction.rcpt_to.push(
83
- new Address('<matt@test.com>')
84
- );
85
- test.deepEqual(this.plugin.get_config(this.connection), {
86
- host: '1.2.3.4',
87
- enable_tls: true,
88
- auth_user: 'postmaster@test.com',
89
- auth_pass: 'superDuperSecret',
90
- });
91
- test.done();
92
- },
93
- 'valid recipient with route & diff config' (test) {
94
- test.expect(1);
95
- this.connection.transaction.rcpt_to.push(
96
- new Address('<matt@test1.com>')
97
- );
98
- const cfg = this.plugin.get_config(this.connection);
99
- test.deepEqual(cfg, {
100
- host: '1.2.3.4',
101
- enable_tls: false
102
- });
103
- test.done();
104
- },
105
- 'valid 2 recipients with same route' (test) {
106
- test.expect(1);
107
- this.connection.transaction.rcpt_to.push(
108
- new Address('<matt@test.com>'),
109
- new Address('<matt@test.com>')
110
- );
111
- const cfg = this.plugin.get_config(this.connection);
112
- test.deepEqual(cfg.host, '1.2.3.4' );
113
- test.done();
114
- },
115
- 'null sender' (test) {
116
- test.expect(3);
117
- this.plugin.cfg.main.domain_selector = 'mail_from';
118
- this.connection.transaction.mail_from = new Address('<>');
119
- const cfg = this.plugin.get_config(this.connection);
120
- test.equal(cfg.host, 'localhost');
121
- test.equal(cfg.enable_tls, true);
122
- test.equal(cfg.one_message_per_rcpt, true);
123
- test.done();
124
- },
125
- 'return mail_from domain configuration' (test) {
126
- test.expect(1);
127
- this.connection.transaction.mail_from = new Address('<matt@test2.com>');
128
- this.plugin.cfg.main.domain_selector = 'mail_from';
129
- const cfg = this.plugin.get_config(this.connection);
130
- test.deepEqual(cfg.host, '2.3.4.5');
131
- delete this.plugin.cfg.main.domain_selector; // clear this for future tests
132
- test.done();
133
- }
134
- }
135
-
136
- exports.get_mx = {
137
- setUp : _setup,
138
- 'returns no outbound route for undefined domains' (test) {
139
- test.expect(2);
140
- this.plugin.get_mx((code, mx) => {
141
- test.equal(code, undefined);
142
- test.deepEqual(mx, undefined);
143
- test.done();
144
- }, this.hmail, 'undefined.com');
145
- },
146
- 'returns no outbound route when queue.wants !== smtp_forward' (test) {
147
- test.expect(2);
148
- this.hmail.todo.notes.set('queue.wants', 'outbound')
149
- this.hmail.todo.notes.set('queue.next_hop', 'smtp://5.4.3.2:26')
150
- this.plugin.get_mx((code, mx) => {
151
- test.equal(code, undefined);
152
- test.deepEqual(mx, undefined);
153
- test.done();
154
- }, this.hmail, 'undefined.com');
155
- },
156
- 'returns an outbound route for defined domains' (test) {
157
- test.expect(2);
158
- this.plugin.get_mx((code, mx) => {
159
- test.equal(code, OK);
160
- test.deepEqual(mx, {
161
- priority: 0, exchange: '1.2.3.4', port: 2555,
162
- auth_user: 'postmaster@test.com',
163
- auth_pass: 'superDuperSecret'
164
- });
165
- test.done();
166
- }, this.hmail, 'test.com');
167
- },
168
- 'is enabled when queue.wants is set' (test) {
169
- test.expect(2);
170
- this.hmail.todo.notes.set('queue.wants', 'smtp_forward')
171
- this.hmail.todo.notes.set('queue.next_hop', 'smtp://4.3.2.1:465')
172
- this.plugin.get_mx((code, mx) => {
173
- test.equal(code, OK);
174
- test.deepEqual(mx, { priority: 0, port: 465, exchange: '4.3.2.1' });
175
- test.done();
176
- }, this.hmail, 'undefined.com');
177
- },
178
- 'sets using_lmtp when next_hop URL is lmtp' (test) {
179
- test.expect(2);
180
- this.hmail.todo.notes.set('queue.wants', 'smtp_forward')
181
- this.hmail.todo.notes.set('queue.next_hop', 'lmtp://4.3.2.1')
182
- this.plugin.get_mx((code, mx) => {
183
- test.equal(code, OK);
184
- test.deepEqual(mx, { priority: 0, port: 24, using_lmtp: true, exchange: '4.3.2.1' });
185
- test.done();
186
- }, this.hmail, 'undefined.com');
187
- },
188
- }
189
-
190
- exports.is_outbound_enabled = {
191
- setUp : _setup,
192
- 'enable_outbound is false by default' (test) {
193
- test.expect(1);
194
- test.equal(this.plugin.is_outbound_enabled(this.plugin.cfg), false);
195
- test.done();
196
- },
197
- 'per-domain enable_outbound is false by default' (test) {
198
- test.expect(1);
199
- this.connection.transaction.rcpt_to = [ new Address('<postmaster@test.com>') ];
200
- const cfg = this.plugin.get_config(this.connection);
201
- test.equal(this.plugin.is_outbound_enabled(cfg), false);
202
- test.done();
203
- },
204
- 'per-domain enable_outbound can be set to true' (test) {
205
- test.expect(1);
206
- this.plugin.cfg['test.com'].enable_outbound = true;
207
- this.connection.transaction.rcpt_to = [ new Address('<postmaster@test.com>') ];
208
- const cfg = this.plugin.get_config(this.connection);
209
- test.equal(this.plugin.is_outbound_enabled(cfg), true);
210
- test.done();
211
- },
212
- 'per-domain enable_outbound is false even if top level is false' (test) {
213
- test.expect(1);
214
- this.plugin.cfg.main.enable_outbound = false; // this will be ignored
215
- this.plugin.cfg['test.com'].enable_outbound = false;
216
- this.connection.transaction.rcpt_to = [ new Address('<postmaster@test.com>') ];
217
- const cfg = this.plugin.get_config(this.connection);
218
- test.equal(this.plugin.is_outbound_enabled(cfg), false);
219
- test.done();
220
- }
221
- }
@@ -1,132 +0,0 @@
1
- 'use strict';
2
-
3
- const { Address } = require('address-rfc2821');
4
- const fixtures = require('haraka-test-fixtures');
5
-
6
- function _set_up (done) {
7
-
8
- this.plugin = new fixtures.plugin('rcpt_to.host_list_base');
9
- this.plugin.cfg = {};
10
- this.plugin.host_list = {};
11
-
12
- this.connection = fixtures.connection.createConnection();
13
- this.connection.transaction = {
14
- results: new fixtures.results(this.connection),
15
- notes: {},
16
- };
17
-
18
- done();
19
- }
20
-
21
- exports.in_host_list = {
22
- setUp : _set_up,
23
- 'miss' (test) {
24
- test.expect(1);
25
- test.equal(false, this.plugin.in_host_list('test.com'));
26
- test.done();
27
- },
28
- 'hit' (test) {
29
- test.expect(1);
30
- this.plugin.host_list['test.com'] = true;
31
- test.equal(true, this.plugin.in_host_list('test.com'));
32
- test.done();
33
- },
34
- }
35
-
36
- exports.in_host_regex = {
37
- setUp : _set_up,
38
- 'undef' (test) {
39
- test.expect(1);
40
- const r = this.plugin.in_host_regex('test.com');
41
- test.equal(false, r);
42
- test.done();
43
- },
44
- 'miss' (test) {
45
- test.expect(1);
46
- this.plugin.host_list_regex=['miss.com'];
47
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
48
- const r = this.plugin.in_host_regex('test.com');
49
- test.equal(false, r);
50
- test.done();
51
- },
52
- 'exact hit' (test) {
53
- test.expect(1);
54
- this.plugin.host_list_regex=['test.com'];
55
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
56
- const r = this.plugin.in_host_regex('test.com');
57
- test.equal(true, r);
58
- test.done();
59
- },
60
- 're hit' (test) {
61
- test.expect(1);
62
- this.plugin.host_list_regex=['.*est.com'];
63
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
64
- const r = this.plugin.in_host_regex('test.com');
65
- test.equal(true, r);
66
- test.done();
67
- },
68
- }
69
-
70
- exports.hook_mail = {
71
- setUp : _set_up,
72
- 'null sender' (test) {
73
- test.expect(2);
74
- function next (rc, msg) {
75
- test.equal(undefined, rc);
76
- test.equal(undefined, msg);
77
- test.done();
78
- }
79
- this.connection.relaying=true;
80
- this.plugin.hook_mail(next, this.connection, [new Address('<>')]);
81
- },
82
- 'miss' (test) {
83
- test.expect(3);
84
- const next = function (rc, msg) {
85
- test.equal(undefined, rc);
86
- test.equal(undefined, msg);
87
- const res = this.connection.transaction.results.get('rcpt_to.host_list_base');
88
- test.notEqual(-1, res.msg.indexOf('mail_from!local'));
89
- test.done();
90
- }.bind(this);
91
- this.plugin.host_list = { 'miss.com': true };
92
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
93
- },
94
- 'hit' (test) {
95
- test.expect(3);
96
- const next = function (rc, msg) {
97
- test.equal(undefined, rc);
98
- test.equal(undefined, msg);
99
- const res = this.connection.transaction.results.get('rcpt_to.host_list_base');
100
- test.notEqual(-1, res.pass.indexOf('mail_from'));
101
- test.done();
102
- }.bind(this);
103
- this.plugin.host_list = { 'example.com': true };
104
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
105
- },
106
- 'hit, regex, exact' (test) {
107
- test.expect(3);
108
- const next = function (rc, msg) {
109
- test.equal(undefined, rc);
110
- test.equal(undefined, msg);
111
- const res = this.connection.transaction.results.get('rcpt_to.host_list_base');
112
- test.notEqual(-1, res.pass.indexOf('mail_from'));
113
- test.done();
114
- }.bind(this);
115
- this.plugin.host_list_regex = ['example.com'];
116
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
117
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
118
- },
119
- 'hit, regex, pattern' (test) {
120
- test.expect(3);
121
- const next = function (rc, msg) {
122
- test.equal(undefined, rc);
123
- test.equal(undefined, msg);
124
- const res = this.connection.transaction.results.get('rcpt_to.host_list_base');
125
- test.notEqual(-1, res.pass.indexOf('mail_from'));
126
- test.done();
127
- }.bind(this);
128
- this.plugin.host_list_regex = ['.*mple.com'];
129
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
130
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
131
- },
132
- }
@@ -1,218 +0,0 @@
1
- 'use strict';
2
-
3
- const { Address } = require('address-rfc2821');
4
- const fixtures = require('haraka-test-fixtures');
5
-
6
- function _set_up (done) {
7
-
8
- this.plugin = new fixtures.plugin('rcpt_to.in_host_list');
9
- this.plugin.inherits('rcpt_to.host_list_base');
10
- this.plugin.cfg = {};
11
- this.plugin.host_list = {};
12
-
13
- this.connection = fixtures.connection.createConnection();
14
- this.connection.transaction = {
15
- results: new fixtures.results(this.connection),
16
- notes: {},
17
- };
18
-
19
- done();
20
- }
21
-
22
- exports.in_host_list = {
23
- setUp : _set_up,
24
- 'miss' (test) {
25
- test.expect(1);
26
- const r = this.plugin.in_host_list('test.com');
27
- test.equal(false, r);
28
- test.done();
29
- },
30
- 'hit' (test) {
31
- test.expect(1);
32
- this.plugin.host_list['test.com'] = true;
33
- const r = this.plugin.in_host_list('test.com');
34
- test.equal(true, r);
35
- test.done();
36
- },
37
- }
38
-
39
- exports.in_host_regex = {
40
- setUp : _set_up,
41
- 'undef' (test) {
42
- test.expect(1);
43
- const r = this.plugin.in_host_regex('test.com');
44
- test.equal(false, r);
45
- test.done();
46
- },
47
- 'miss' (test) {
48
- test.expect(1);
49
- this.plugin.host_list_regex=['miss.com'];
50
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
51
- const r = this.plugin.in_host_regex('test.com');
52
- test.equal(false, r);
53
- test.done();
54
- },
55
- 'exact hit' (test) {
56
- test.expect(1);
57
- this.plugin.host_list_regex=['test.com'];
58
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
59
- const r = this.plugin.in_host_regex('test.com');
60
- test.equal(true, r);
61
- test.done();
62
- },
63
- 're hit' (test) {
64
- test.expect(1);
65
- this.plugin.host_list_regex=['.*est.com'];
66
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
67
- const r = this.plugin.in_host_regex('test.com');
68
- test.equal(true, r);
69
- test.done();
70
- },
71
- }
72
-
73
- exports.hook_mail = {
74
- setUp : _set_up,
75
- 'null sender' (test) {
76
- test.expect(2);
77
- function next (rc, msg) {
78
- test.equal(undefined, rc);
79
- test.equal(undefined, msg);
80
- test.done();
81
- }
82
- this.connection.relaying=true;
83
- this.plugin.hook_mail(next, this.connection, [new Address('<>')]);
84
- },
85
- 'miss' (test) {
86
- test.expect(3);
87
- const next = function (rc, msg) {
88
- test.equal(undefined, rc);
89
- test.equal(undefined, msg);
90
- const res = this.connection.transaction.results.get('rcpt_to.in_host_list');
91
- test.notEqual(-1, res.msg.indexOf('mail_from!local'));
92
- test.done();
93
- }.bind(this);
94
- this.plugin.host_list = { 'miss.com': true };
95
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
96
- },
97
- 'hit' (test) {
98
- test.expect(3);
99
- const next = function (rc, msg) {
100
- test.equal(undefined, rc);
101
- test.equal(undefined, msg);
102
- const res = this.connection.transaction.results.get('rcpt_to.in_host_list');
103
- // console.log(res);
104
- test.notEqual(-1, res.pass.indexOf('mail_from'));
105
- test.done();
106
- }.bind(this);
107
- this.plugin.host_list = { 'example.com': true };
108
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
109
- },
110
- 'hit, regex, exact' (test) {
111
- test.expect(3);
112
- const next = function (rc, msg) {
113
- test.equal(undefined, rc);
114
- test.equal(undefined, msg);
115
- const res = this.connection.transaction.results.get('rcpt_to.in_host_list');
116
- // console.log(res);
117
- test.notEqual(-1, res.pass.indexOf('mail_from'));
118
- test.done();
119
- }.bind(this);
120
- this.plugin.host_list_regex = ['example.com'];
121
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
122
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
123
- },
124
- 'hit, regex, pattern' (test) {
125
- test.expect(3);
126
- const next = function (rc, msg) {
127
- test.equal(undefined, rc);
128
- test.equal(undefined, msg);
129
- const res = this.connection.transaction.results.get('rcpt_to.in_host_list');
130
- // console.log(res);
131
- test.notEqual(-1, res.pass.indexOf('mail_from'));
132
- test.done();
133
- }.bind(this);
134
- this.plugin.host_list_regex = ['.*mple.com'];
135
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
136
- this.plugin.hook_mail(next, this.connection, [new Address('<user@example.com>')]);
137
- },
138
- }
139
-
140
- exports.hook_rcpt = {
141
- setUp : _set_up,
142
- 'missing txn' (test) {
143
- test.expect(1);
144
- // sometimes txn goes away, make sure it's handled
145
- function next (rc, msg) {
146
- test.equal(undefined, rc);
147
- test.equal(undefined, msg);
148
- }
149
- delete this.connection.transaction;
150
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
151
- test.ok(true);
152
- test.done();
153
- },
154
- 'hit list' (test) {
155
- test.expect(2);
156
- function next (rc, msg) {
157
- test.equal(OK, rc);
158
- test.equal(undefined, msg);
159
- test.done();
160
- }
161
- this.plugin.host_list = { 'test.com': true };
162
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
163
- },
164
- 'miss list' (test) {
165
- test.expect(2);
166
- function next (rc, msg) {
167
- test.equal(undefined, rc);
168
- test.equal(undefined, msg);
169
- test.done();
170
- }
171
- this.plugin.host_list = { 'miss.com': true };
172
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
173
- },
174
- 'hit regex, exact' (test) {
175
- test.expect(2);
176
- function next (rc, msg) {
177
- test.equal(OK, rc);
178
- test.equal(undefined, msg);
179
- test.done();
180
- }
181
- this.plugin.host_list_regex=['test.com'];
182
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
183
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
184
- },
185
- 'hit regex, pattern' (test) {
186
- test.expect(2);
187
- function next (rc, msg) {
188
- test.equal(OK, rc);
189
- test.equal(undefined, msg);
190
- test.done();
191
- }
192
- this.plugin.host_list_regex=['.est.com'];
193
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
194
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
195
- },
196
- 'miss regex, pattern' (test) {
197
- test.expect(2);
198
- function next (rc, msg) {
199
- test.equal(undefined, rc);
200
- test.equal(undefined, msg);
201
- test.done();
202
- }
203
- this.plugin.host_list_regex=['a.est.com'];
204
- this.plugin.hl_re = new RegExp (`^(?:${this.plugin.host_list_regex.join('|')})$`, 'i');
205
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
206
- },
207
- 'rcpt miss, relaying to local sender' (test) {
208
- test.expect(2);
209
- function next (rc, msg) {
210
- test.equal(OK, rc);
211
- test.equal(undefined, msg);
212
- test.done();
213
- }
214
- this.connection.relaying=true;
215
- this.connection.transaction.notes = { local_sender: true };
216
- this.plugin.hook_rcpt(next, this.connection, [new Address('test@test.com')]);
217
- },
218
- }