Haraka 3.0.3 → 3.0.5

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 (239) hide show
  1. package/.eslintrc.yaml +4 -9
  2. package/CONTRIBUTORS.md +11 -0
  3. package/Changes.md +1397 -1213
  4. package/Plugins.md +117 -105
  5. package/README.md +4 -13
  6. package/bin/haraka +198 -298
  7. package/config/auth_flat_file.ini +1 -0
  8. package/config/dhparams.pem +8 -0
  9. package/config/mail_from.is_resolvable.ini +4 -2
  10. package/config/me +1 -0
  11. package/config/outbound.ini +0 -2
  12. package/config/plugins +35 -36
  13. package/config/smtp.ini +1 -1
  14. package/config/smtp.json +17 -0
  15. package/config/tls.ini +2 -0
  16. package/config/tls_cert.pem +23 -0
  17. package/config/tls_key.pem +28 -0
  18. package/connection.js +46 -73
  19. package/contrib/bsd-rc.d/haraka +3 -1
  20. package/contrib/plugin2npm.sh +6 -36
  21. package/docs/CoreConfig.md +2 -2
  22. package/docs/Logging.md +7 -21
  23. package/docs/Outbound.md +104 -201
  24. package/docs/Plugins.md +2 -2
  25. package/docs/Transaction.md +59 -82
  26. package/docs/plugins/queue/smtp_proxy.md +5 -10
  27. package/docs/plugins/tls.md +37 -9
  28. package/endpoint.js +16 -13
  29. package/haraka.js +10 -14
  30. package/host_pool.js +5 -5
  31. package/http/html/index.html +6 -5
  32. package/line_socket.js +3 -4
  33. package/logger.js +44 -28
  34. package/outbound/client_pool.js +27 -23
  35. package/outbound/config.js +4 -6
  36. package/outbound/fsync_writestream.js +1 -1
  37. package/outbound/hmail.js +178 -218
  38. package/outbound/index.js +86 -99
  39. package/outbound/qfile.js +1 -1
  40. package/outbound/queue.js +51 -44
  41. package/outbound/timer_queue.js +3 -2
  42. package/outbound/tls.js +19 -7
  43. package/package.json +60 -51
  44. package/plugins/.eslintrc.yaml +0 -6
  45. package/plugins/auth/auth_base.js +4 -2
  46. package/plugins/auth/auth_proxy.js +14 -12
  47. package/plugins/auth/auth_vpopmaild.js +1 -1
  48. package/plugins/block_me.js +1 -1
  49. package/plugins/data.signatures.js +2 -4
  50. package/plugins/early_talker.js +2 -1
  51. package/plugins/mail_from.is_resolvable.js +65 -135
  52. package/plugins/queue/deliver.js +4 -5
  53. package/plugins/queue/lmtp.js +11 -12
  54. package/plugins/queue/qmail-queue.js +2 -2
  55. package/plugins/queue/quarantine.js +2 -2
  56. package/plugins/queue/rabbitmq.js +16 -17
  57. package/plugins/queue/smtp_forward.js +3 -3
  58. package/plugins/queue/smtp_proxy.js +10 -1
  59. package/plugins/queue/test.js +2 -2
  60. package/plugins/rcpt_to.host_list_base.js +5 -5
  61. package/plugins/rcpt_to.in_host_list.js +2 -2
  62. package/plugins/relay.js +6 -7
  63. package/plugins/reseed_rng.js +1 -1
  64. package/plugins/status.js +37 -33
  65. package/plugins/tls.js +2 -2
  66. package/plugins/xclient.js +3 -2
  67. package/plugins.js +50 -54
  68. package/run_tests +3 -30
  69. package/server.js +190 -190
  70. package/smtp_client.js +30 -23
  71. package/{tests → test}/config/plugins +0 -2
  72. package/{tests → test}/config/smtp.ini +3 -1
  73. package/test/config/tls/example.com/_.example.com.key +28 -0
  74. package/test/config/tls/example.com/example.com.crt +25 -0
  75. package/{tests/loud → test}/config/tls.ini +4 -2
  76. package/test/connection.js +302 -0
  77. package/test/endpoint.js +94 -0
  78. package/{tests → test}/fixtures/line_socket.js +1 -1
  79. package/{tests → test}/fixtures/util_hmailitem.js +19 -25
  80. package/{tests → test}/host_pool.js +42 -57
  81. package/test/logger.js +258 -0
  82. package/test/outbound/hmail.js +141 -0
  83. package/test/outbound/index.js +220 -0
  84. package/test/outbound/qfile.js +126 -0
  85. package/test/outbound_bounce_net_errors.js +142 -0
  86. package/{tests → test}/outbound_bounce_rfc3464.js +110 -122
  87. package/test/plugins/auth/auth_base.js +484 -0
  88. package/test/plugins/auth/auth_vpopmaild.js +83 -0
  89. package/test/plugins/early_talker.js +104 -0
  90. package/test/plugins/mail_from.is_resolvable.js +35 -0
  91. package/test/plugins/queue/smtp_forward.js +206 -0
  92. package/test/plugins/rcpt_to.host_list_base.js +122 -0
  93. package/test/plugins/rcpt_to.in_host_list.js +193 -0
  94. package/test/plugins/relay.js +303 -0
  95. package/test/plugins/status.js +130 -0
  96. package/test/plugins/tls.js +70 -0
  97. package/test/plugins.js +228 -0
  98. package/test/rfc1869.js +73 -0
  99. package/test/server.js +491 -0
  100. package/test/smtp_client.js +299 -0
  101. package/test/tls_socket.js +277 -0
  102. package/test/transaction.js +270 -0
  103. package/tls_socket.js +202 -252
  104. package/transaction.js +8 -23
  105. package/CONTRIBUTING.md +0 -1
  106. package/bin/dkimverify +0 -40
  107. package/config/access.domains +0 -13
  108. package/config/attachment.ctype.regex +0 -2
  109. package/config/attachment.filename.regex +0 -1
  110. package/config/avg.ini +0 -5
  111. package/config/bounce.ini +0 -15
  112. package/config/data.headers.ini +0 -61
  113. package/config/dkim/dkim_key_gen.sh +0 -78
  114. package/config/dkim_sign.ini +0 -4
  115. package/config/dkim_verify.ini +0 -7
  116. package/config/dnsbl.ini +0 -23
  117. package/config/greylist.ini +0 -43
  118. package/config/helo.checks.ini +0 -52
  119. package/config/messagesniffer.ini +0 -18
  120. package/config/spamassassin.ini +0 -56
  121. package/dkim.js +0 -614
  122. package/docs/plugins/avg.md +0 -35
  123. package/docs/plugins/bounce.md +0 -69
  124. package/docs/plugins/clamd.md +0 -147
  125. package/docs/plugins/esets.md +0 -8
  126. package/docs/plugins/greylist.md +0 -90
  127. package/docs/plugins/helo.checks.md +0 -135
  128. package/docs/plugins/messagesniffer.md +0 -163
  129. package/docs/plugins/spamassassin.md +0 -180
  130. package/outbound/mx_lookup.js +0 -70
  131. package/plugins/auth/auth_ldap.js +0 -3
  132. package/plugins/avg.js +0 -162
  133. package/plugins/backscatterer.js +0 -25
  134. package/plugins/bounce.js +0 -381
  135. package/plugins/clamd.js +0 -382
  136. package/plugins/data.uribl.js +0 -4
  137. package/plugins/dkim_sign.js +0 -395
  138. package/plugins/dkim_verify.js +0 -62
  139. package/plugins/dns_list_base.js +0 -221
  140. package/plugins/dnsbl.js +0 -146
  141. package/plugins/dnswl.js +0 -58
  142. package/plugins/esets.js +0 -71
  143. package/plugins/graph.js +0 -5
  144. package/plugins/greylist.js +0 -645
  145. package/plugins/helo.checks.js +0 -533
  146. package/plugins/messagesniffer.js +0 -381
  147. package/plugins/rcpt_to.ldap.js +0 -3
  148. package/plugins/rcpt_to.max_count.js +0 -24
  149. package/plugins/spamassassin.js +0 -384
  150. package/tests/config/dkim/example.com/dns +0 -29
  151. package/tests/config/dkim/example.com/private +0 -6
  152. package/tests/config/dkim/example.com/public +0 -4
  153. package/tests/config/dkim/example.com/selector +0 -1
  154. package/tests/config/dkim.private.key +0 -6
  155. package/tests/config/dkim_sign.ini +0 -4
  156. package/tests/config/helo.checks.ini +0 -52
  157. package/tests/connection.js +0 -327
  158. package/tests/endpoint.js +0 -128
  159. package/tests/fixtures/vm_harness.js +0 -59
  160. package/tests/logger.js +0 -327
  161. package/tests/outbound/hmail.js +0 -112
  162. package/tests/outbound/index.js +0 -324
  163. package/tests/outbound/qfile.js +0 -67
  164. package/tests/outbound_bounce_net_errors.js +0 -173
  165. package/tests/plugins/auth/auth_base.js +0 -463
  166. package/tests/plugins/auth/auth_vpopmaild.js +0 -91
  167. package/tests/plugins/bounce.js +0 -307
  168. package/tests/plugins/clamd.js +0 -224
  169. package/tests/plugins/deprecated/relay_acl.js +0 -140
  170. package/tests/plugins/deprecated/relay_all.js +0 -59
  171. package/tests/plugins/dkim_sign.js +0 -315
  172. package/tests/plugins/dkim_signer.js +0 -108
  173. package/tests/plugins/dns_list_base.js +0 -259
  174. package/tests/plugins/dnsbl.js +0 -101
  175. package/tests/plugins/early_talker.js +0 -115
  176. package/tests/plugins/greylist.js +0 -58
  177. package/tests/plugins/helo.checks.js +0 -525
  178. package/tests/plugins/mail_from.is_resolvable.js +0 -116
  179. package/tests/plugins/queue/smtp_forward.js +0 -221
  180. package/tests/plugins/rcpt_to.host_list_base.js +0 -132
  181. package/tests/plugins/rcpt_to.in_host_list.js +0 -218
  182. package/tests/plugins/relay.js +0 -339
  183. package/tests/plugins/spamassassin.js +0 -171
  184. package/tests/plugins/status.js +0 -138
  185. package/tests/plugins/tls.js +0 -84
  186. package/tests/plugins.js +0 -247
  187. package/tests/rfc1869.js +0 -61
  188. package/tests/server.js +0 -510
  189. package/tests/smtp_client/auth.js +0 -105
  190. package/tests/smtp_client/basic.js +0 -101
  191. package/tests/smtp_client.js +0 -80
  192. package/tests/tls_socket.js +0 -333
  193. package/tests/transaction.js +0 -284
  194. /package/docs/{plugins → deprecated}/dkim_sign.md +0 -0
  195. /package/docs/{plugins → deprecated}/dkim_verify.md +0 -0
  196. /package/docs/{plugins → deprecated}/dnsbl.md +0 -0
  197. /package/docs/{plugins → deprecated}/dnswl.md +0 -0
  198. /package/{tests → test}/.eslintrc.yaml +0 -0
  199. /package/{tests → test}/config/auth_flat_file.ini +0 -0
  200. /package/{tests → test}/config/dhparams.pem +0 -0
  201. /package/{tests → test}/config/host_list +0 -0
  202. /package/{tests → test}/config/outbound_tls_cert.pem +0 -0
  203. /package/{tests → test}/config/outbound_tls_key.pem +0 -0
  204. /package/{tests → test}/config/smtp_forward.ini +0 -0
  205. /package/{tests → test}/config/tls/ec.pem +0 -0
  206. /package/{tests → test}/config/tls/haraka.local.pem +0 -0
  207. /package/{tests → test}/config/tls/mismatched.pem +0 -0
  208. /package/{tests → test}/config/tls_cert.pem +0 -0
  209. /package/{tests → test}/config/tls_key.pem +0 -0
  210. /package/{tests → test}/fixtures/todo_qfile.txt +0 -0
  211. /package/{tests → test}/installation/config/test-plugin-flat +0 -0
  212. /package/{tests → test}/installation/config/test-plugin.ini +0 -0
  213. /package/{tests → test}/installation/config/tls.ini +0 -0
  214. /package/{tests → test}/installation/node_modules/load_first/index.js +0 -0
  215. /package/{tests → test}/installation/node_modules/load_first/package.json +0 -0
  216. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin-flat +0 -0
  217. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin.ini +0 -0
  218. /package/{tests → test}/installation/node_modules/test-plugin/package.json +0 -0
  219. /package/{tests → test}/installation/node_modules/test-plugin/test-plugin.js +0 -0
  220. /package/{tests → test}/installation/plugins/base_plugin.js +0 -0
  221. /package/{tests → test}/installation/plugins/folder_plugin/index.js +0 -0
  222. /package/{tests → test}/installation/plugins/folder_plugin/package.json +0 -0
  223. /package/{tests → test}/installation/plugins/inherits.js +0 -0
  224. /package/{tests → test}/installation/plugins/load_first.js +0 -0
  225. /package/{tests → test}/installation/plugins/plugin.js +0 -0
  226. /package/{tests → test}/installation/plugins/tls.js +0 -0
  227. /package/{tests → test}/loud/config/dhparams.pem +0 -0
  228. /package/{tests → test}/loud/config/tls/goobered.pem +0 -0
  229. /package/{tests → test/loud}/config/tls.ini +0 -0
  230. /package/{tests → test}/mail_specimen/base64-root-part.txt +0 -0
  231. /package/{tests → test}/mail_specimen/varied-fold-lengths-preserve-data.txt +0 -0
  232. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  233. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  234. /package/{tests → test}/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  235. /package/{tests → test}/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  236. /package/{tests → test}/queue/multibyte +0 -0
  237. /package/{tests → test}/queue/plain +0 -0
  238. /package/{tests → test}/queue/zero-length +0 -0
  239. /package/{tests → test}/test-queue/delete-me +0 -0
@@ -1,463 +0,0 @@
1
- 'use strict';
2
-
3
- const fixtures = require('haraka-test-fixtures');
4
- const utils = require('haraka-utils');
5
-
6
- function _set_up (done) {
7
-
8
- this.plugin = new fixtures.plugin('auth/auth_base');
9
-
10
- this.plugin.get_plain_passwd = (user, cb) => {
11
- if (user === 'test') return cb('testpass');
12
- return cb(null);
13
- };
14
-
15
- this.connection = fixtures.connection.createConnection();
16
- this.connection.capabilities=null;
17
-
18
- done();
19
- }
20
-
21
- function _set_up_2 (done) {
22
-
23
- this.plugin = new fixtures.plugin('auth/auth_base');
24
-
25
- this.plugin.get_plain_passwd = (user, connection, cb) => {
26
- connection.notes.auth_custom_note = 'custom_note';
27
- if (user === 'test') return cb('testpass');
28
- return cb(null);
29
- };
30
-
31
- this.connection = fixtures.connection.createConnection();
32
- this.connection.capabilities=null;
33
-
34
- done();
35
- }
36
-
37
- function _set_up_custom_pwcb_opts (done) {
38
- this.plugin = new fixtures.plugin('auth/auth_base');
39
-
40
- this.plugin.check_plain_passwd = (connection, user, passwd, pwok_cb) => {
41
- switch (user) {
42
- case 'legacyok_nomessage': return pwok_cb(true);
43
- case 'legacyfail_nomessage': return pwok_cb(false);
44
- case 'legacyok_message': return pwok_cb(true, 'GREAT SUCCESS');
45
- case 'legacyfail_message': return pwok_cb(false, 'FAIL 123');
46
- case 'newok': return pwok_cb(true, {message: 'KOKOKO', code: 215});
47
- case 'newfail': return pwok_cb(false, {message: 'OHOHOH', code: 555});
48
- default: throw 'what?!';
49
- }
50
- };
51
-
52
- this.connection = fixtures.connection.createConnection();
53
- this.connection.capabilities=null;
54
- this.connection.notes.resp_strings = [];
55
- this.connection.respond = (code, msg, cb) => {
56
- this.connection.notes.resp_strings.push([code, msg]);
57
- return cb();
58
- }
59
-
60
- done();
61
- }
62
-
63
- exports.hook_capabilities = {
64
- setUp : _set_up,
65
- 'no TLS, no auth' (test) {
66
- this.plugin.hook_capabilities((rc, msg) => {
67
- test.expect(3);
68
- test.equal(undefined, rc);
69
- test.equal(undefined, msg);
70
- test.equal(null, this.connection.capabilities);
71
- test.done();
72
- }, this.connection);
73
- },
74
- 'with TLS, auth is offered' (test) {
75
- this.connection.tls.enabled=true;
76
- this.connection.capabilities=[];
77
- this.plugin.hook_capabilities((rc, msg) => {
78
- test.expect(4);
79
- test.equal(undefined, rc);
80
- test.equal(undefined, msg);
81
- test.ok(this.connection.capabilities.length);
82
- test.ok(this.connection.capabilities[0] === 'AUTH PLAIN LOGIN CRAM-MD5');
83
- // console.log(this.connection.capabilities);
84
- test.done();
85
- }, this.connection);
86
- },
87
- }
88
-
89
- exports.get_plain_passwd = {
90
- setUp : _set_up,
91
- 'get_plain_passwd, no result' (test) {
92
- this.plugin.get_plain_passwd('user', pass => {
93
- test.expect(1);
94
- test.equal(pass, null);
95
- test.done();
96
- });
97
- },
98
- 'get_plain_passwd, test user' (test) {
99
- this.plugin.get_plain_passwd('test', pass => {
100
- test.expect(1);
101
- test.equal(pass, 'testpass');
102
- test.done();
103
- });
104
- },
105
- }
106
-
107
- exports.check_plain_passwd = {
108
- setUp : _set_up,
109
- 'valid password' (test) {
110
- this.plugin.check_plain_passwd(this.connection, 'test', 'testpass', pass => {
111
- test.expect(1);
112
- test.equal(pass, true);
113
- test.done();
114
- });
115
- },
116
- 'wrong password' (test) {
117
- this.plugin.check_plain_passwd(this.connection, 'test', 'test1pass', pass => {
118
- test.expect(1);
119
- test.equal(pass, false);
120
- test.done();
121
- });
122
- },
123
- 'null password' (test) {
124
- this.plugin.check_plain_passwd(this.connection, 'test', null, pass => {
125
- test.expect(1);
126
- test.equal(pass, false);
127
- test.done();
128
- });
129
- },
130
- }
131
-
132
- exports.select_auth_method = {
133
- setUp : _set_up,
134
- 'no auth methods yield no result' (test) {
135
- this.plugin.select_auth_method((code) => {
136
- test.equal(code, null);
137
- test.equal(false, this.connection.relaying);
138
- test.done();
139
- }, this.connection, 'AUTH PLAIN');
140
- },
141
- 'invalid AUTH method, no result' (test) {
142
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN','CRAM-MD5'];
143
- this.plugin.select_auth_method((code) => {
144
- test.expect(2);
145
- test.equal(code, null);
146
- test.equal(false, this.connection.relaying);
147
- test.done();
148
- }, this.connection, 'AUTH FOO');
149
- },
150
- 'valid AUTH method, valid attempt' (test) {
151
- const method = `PLAIN ${utils.base64('discard\0test\0testpass')}`;
152
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
153
- this.plugin.select_auth_method((code) => {
154
- test.expect(2);
155
- test.equal(code, OK);
156
- test.ok(this.connection.relaying);
157
- test.done();
158
- }, this.connection, method);
159
- },
160
- }
161
-
162
- exports.auth_plain = {
163
- setUp : _set_up,
164
- 'params type=string returns OK' (test) {
165
- test.expect(2);
166
- const next = function () {
167
- test.equal(arguments[0], OK);
168
- test.equal(false, this.connection.relaying);
169
- test.done();
170
- }.bind(this);
171
- this.plugin.auth_plain(next, this.connection, 'AUTH FOO');
172
- },
173
- 'params type=empty array, returns OK' (test) {
174
- const next = function () {
175
- test.expect(2);
176
- test.equal(arguments[0], OK);
177
- test.equal(false, this.connection.relaying);
178
- test.done();
179
- }.bind(this);
180
- this.plugin.auth_plain(next, this.connection, []);
181
- },
182
- 'params type=array, successful auth' (test) {
183
- test.expect(2);
184
- const method = utils.base64('discard\0test\0testpass');
185
- const next = function () {
186
- test.equal(arguments[0], OK);
187
- test.ok(this.connection.relaying);
188
- test.done();
189
- }.bind(this);
190
- this.plugin.auth_plain(next, this.connection, [method]);
191
- },
192
- 'params type=with two line login' (test) {
193
- const next = function () {
194
- test.expect(2);
195
- test.equal(this.connection.notes.auth_plain_asked_login, true);
196
- test.equal(arguments[0], OK);
197
- test.done();
198
- }.bind(this);
199
- this.plugin.auth_plain(next, this.connection, '');
200
- },
201
- }
202
-
203
- exports.check_user = {
204
- setUp : _set_up_2,
205
- 'bad auth' (test) {
206
- const credentials = ['matt','ttam'];
207
- this.plugin.check_user((code) => {
208
- test.expect(3);
209
- test.equal(code, OK);
210
- test.equal(this.connection.relaying, false);
211
- test.equal(this.connection.notes.auth_custom_note, 'custom_note');
212
- test.done();
213
- }, this.connection, credentials, 'PLAIN');
214
- },
215
- 'good auth' (test) {
216
- const credentials = ['test','testpass'];
217
- this.plugin.check_user((code) => {
218
- test.expect(3);
219
- test.equal(code, OK);
220
- test.ok(this.connection.relaying);
221
- test.equal(this.connection.notes.auth_custom_note, 'custom_note');
222
- test.done();
223
- }, this.connection, credentials, 'PLAIN');
224
- },
225
- }
226
-
227
- exports.check_user_custom_opts = {
228
- setUp: _set_up_custom_pwcb_opts,
229
- 'legacyok_nomessage' (test) {
230
- this.plugin.check_user((code, msg) => {
231
- test.equal(code, OK);
232
- test.equal(this.connection.relaying, true);
233
- test.deepEqual(this.connection.notes.resp_strings, [[ 235, '2.7.0 Authentication successful' ]]);
234
- test.done();
235
- }, this.connection, ['legacyok_nomessage', 'any'], 'PLAIN');
236
- },
237
- 'legacyfail_nomessage' (test) {
238
- this.plugin.check_user((code, msg) => {
239
- test.equal(code, OK);
240
- test.equal(this.connection.relaying, false);
241
- test.deepEqual(this.connection.notes.resp_strings, [ [ 535, '5.7.8 Authentication failed' ] ]);
242
- test.done();
243
- }, this.connection, ['legacyfail_nomessage', 'any'], 'PLAIN');
244
- },
245
- 'legacyok_message' (test) {
246
- this.plugin.check_user((code, msg) => {
247
- test.equal(code, OK);
248
- test.equal(this.connection.relaying, true);
249
- test.deepEqual(this.connection.notes.resp_strings, [[ 235, 'GREAT SUCCESS' ]]);
250
- test.done();
251
- }, this.connection, ['legacyok_message', 'any'], 'PLAIN');
252
- },
253
- 'legacyfail_message' (test) {
254
- this.plugin.check_user((code, msg) => {
255
- test.equal(code, OK);
256
- test.equal(this.connection.relaying, false);
257
- test.deepEqual(this.connection.notes.resp_strings, [[ 535, 'FAIL 123' ]]);
258
- test.done();
259
- }, this.connection, ['legacyfail_message', 'any'], 'PLAIN');
260
- },
261
- 'newok' (test) {
262
- this.plugin.check_user((code, msg) => {
263
- test.equal(code, OK);
264
- test.equal(this.connection.relaying, true);
265
- test.deepEqual(this.connection.notes.resp_strings, [[ 215, 'KOKOKO' ]]);
266
- test.done();
267
- }, this.connection, ['newok', 'any'], 'PLAIN');
268
- },
269
- 'newfail' (test) {
270
- this.plugin.check_user((code, msg) => {
271
- test.equal(code, OK);
272
- test.equal(this.connection.relaying, false);
273
- test.deepEqual(this.connection.notes.resp_strings, [[ 555, 'OHOHOH' ]]);
274
- test.done();
275
- }, this.connection, ['newfail', 'any'], 'PLAIN');
276
- },
277
- }
278
-
279
- exports.auth_notes_are_set = {
280
- setUp : _set_up_2,
281
- 'bad auth: no notes should be set' (test) {
282
- const credentials = ['matt','ttam'];
283
- this.plugin.check_user((code) => {
284
- test.equal(this.connection.notes.auth_user, undefined);
285
- test.equal(this.connection.notes.auth_passwd, undefined);
286
- test.done();
287
- }, this.connection, credentials, 'PLAIN');
288
- },
289
- 'good auth: dont store password' (test) {
290
- const creds = ['test','testpass'];
291
- this.plugin.blankout_password = true;
292
- this.plugin.check_user((code) => {
293
- test.equal(this.connection.notes.auth_user, creds[0]);
294
- test.equal(this.connection.notes.auth_passwd, undefined);
295
- test.done();
296
- }, this.connection, creds, 'PLAIN');
297
- },
298
- 'good auth: store password (default)' (test) {
299
- const creds = ['test','testpass'];
300
- this.plugin.check_user((code) => {
301
- test.equal(this.connection.notes.auth_user, creds[0]);
302
- test.equal(this.connection.notes.auth_passwd, creds[1]);
303
- test.done();
304
- }, this.connection, creds, 'PLAIN');
305
- },
306
- }
307
-
308
- exports.hook_unrecognized_command = {
309
- setUp : _set_up,
310
- 'AUTH type FOO' (test) {
311
- const params = ['AUTH','FOO'];
312
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
313
- this.plugin.hook_unrecognized_command((code) => {
314
- test.expect(2);
315
- test.equal(code, null);
316
- test.equal(this.connection.relaying, false);
317
- test.done();
318
- }, this.connection, params);
319
- },
320
- 'AUTH PLAIN' (test) {
321
- const params = ['AUTH','PLAIN', utils.base64('discard\0test\0testpass')];
322
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
323
- this.plugin.hook_unrecognized_command((code) => {
324
- test.expect(2);
325
- test.equal(code, OK);
326
- test.ok(this.connection.relaying);
327
- test.done();
328
- }, this.connection, params);
329
- },
330
- 'AUTH PLAIN, authenticating' (test) {
331
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
332
- this.connection.notes.authenticating=true;
333
- this.connection.notes.auth_method='PLAIN';
334
- this.plugin.hook_unrecognized_command((code) => {
335
- test.expect(2);
336
- test.equal(code, OK);
337
- test.ok(this.connection.relaying);
338
- test.done();
339
- }, this.connection, [utils.base64('discard\0test\0testpass')]);
340
- }
341
- }
342
-
343
- exports.auth_login = {
344
- setUp : _set_up,
345
- 'AUTH LOGIN' (test) {
346
- test.expect(8);
347
-
348
- const next3 = function (code) {
349
- test.equal(code, OK);
350
- test.equal(this.connection.relaying, true);
351
- test.done();
352
- }.bind(this);
353
-
354
- const next2 = function (code) {
355
- test.equal(code, OK);
356
- test.equal(this.connection.notes.auth_login_userlogin, 'test');
357
- test.equal(this.connection.relaying, false);
358
- this.plugin.hook_unrecognized_command(next3, this.connection, [utils.base64('testpass')]);
359
- }.bind(this);
360
-
361
- const next = function (code) {
362
- test.equal(code, OK);
363
- test.equal(this.connection.relaying, false);
364
- test.equal(this.connection.notes.auth_login_asked_login , true);
365
-
366
- this.plugin.hook_unrecognized_command(next2, this.connection, [utils.base64('test')]);
367
- }.bind(this);
368
-
369
- const params = ['AUTH','LOGIN'];
370
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
371
- this.plugin.hook_unrecognized_command(next, this.connection, params);
372
- },
373
-
374
- 'AUTH LOGIN <username>' (test) {
375
- test.expect(6);
376
-
377
- const next2 = function (code) {
378
- test.equal(code, OK);
379
- test.equal(this.connection.relaying, true);
380
- test.done();
381
- }.bind(this);
382
-
383
- const next = function (code) {
384
- test.equal(code, OK);
385
- test.equal(this.connection.relaying, false);
386
- test.equal(this.connection.notes.auth_login_userlogin, 'test');
387
- test.equal(this.connection.notes.auth_login_asked_login , true);
388
-
389
- this.plugin.hook_unrecognized_command(next2, this.connection, [utils.base64('testpass')]);
390
- }.bind(this);
391
-
392
- const params = ['AUTH','LOGIN', utils.base64('test')];
393
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
394
- this.plugin.hook_unrecognized_command(next, this.connection, params);
395
- },
396
-
397
- 'AUTH LOGIN <username>, bad protocol' (test) {
398
- test.expect(7);
399
-
400
- const next2 = function (code, msg) {
401
- test.equal(code, DENYDISCONNECT);
402
- test.equal(msg, 'bad protocol');
403
- test.equal(this.connection.relaying, false);
404
- test.done();
405
- }.bind(this);
406
-
407
- const next = function (code) {
408
- test.equal(code, OK);
409
- test.equal(this.connection.relaying, false);
410
- test.equal(this.connection.notes.auth_login_userlogin, 'test');
411
- test.equal(this.connection.notes.auth_login_asked_login , true);
412
-
413
- this.plugin.hook_unrecognized_command(next2, this.connection, ['AUTH', 'LOGIN']);
414
- }.bind(this);
415
-
416
- const params = ['AUTH','LOGIN', utils.base64('test')];
417
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
418
- this.plugin.hook_unrecognized_command(next, this.connection, params);
419
- },
420
-
421
-
422
- 'AUTH LOGIN, reauthentication' (test) {
423
- test.expect(9);
424
-
425
- function next3 (code) {
426
- test.equal(code, OK);
427
-
428
- test.done();
429
- }
430
-
431
- const next2 = function (code) {
432
- test.equal(code, OK);
433
- test.equal(this.connection.relaying, true);
434
- test.equal(this.connection.notes.auth_login_userlogin, null);
435
- test.equal(this.connection.notes.auth_login_asked_login , false);
436
-
437
- this.plugin.hook_unrecognized_command(next3, this.connection, ['AUTH','LOGIN']);
438
- }.bind(this);
439
-
440
- const next = function (code) {
441
- test.equal(code, OK);
442
- test.equal(this.connection.relaying, false);
443
- test.equal(this.connection.notes.auth_login_userlogin, 'test');
444
- test.equal(this.connection.notes.auth_login_asked_login , true);
445
-
446
- this.plugin.hook_unrecognized_command(next2, this.connection, [utils.base64('testpass')]);
447
- }.bind(this);
448
-
449
- const params = ['AUTH','LOGIN', utils.base64('test')];
450
- this.connection.notes.allowed_auth_methods = ['PLAIN','LOGIN'];
451
- this.plugin.hook_unrecognized_command(next, this.connection, params);
452
- }
453
- }
454
-
455
- exports.hexi = {
456
- setUp : _set_up,
457
- 'hexi' (test) {
458
- test.expect(2);
459
- test.equal(this.plugin.hexi(512), 200);
460
- test.equal(this.plugin.hexi(8), 8);
461
- test.done();
462
- },
463
- }
@@ -1,91 +0,0 @@
1
- 'use strict';
2
-
3
- const path = require('path');
4
-
5
- const fixtures = require('haraka-test-fixtures');
6
-
7
- function _set_up (done) {
8
- this.backup = {};
9
-
10
- // needed for tests
11
- this.plugin = new fixtures.plugin('auth/auth_vpopmaild');
12
- this.plugin.inherits('auth/auth_base');
13
- // reset the config/root_path
14
- this.plugin.config.root_path = path.resolve(__dirname, '../../../config');
15
- this.plugin.cfg = this.plugin.config.get('auth_vpopmaild.ini');
16
-
17
- this.connection = fixtures.connection.createConnection();
18
- this.connection.capabilities=null;
19
-
20
- done();
21
- }
22
-
23
- exports.hook_capabilities = {
24
- setUp : _set_up,
25
- 'no TLS' (test) {
26
- const cb = function (rc, msg) {
27
- test.expect(3);
28
- test.equal(undefined, rc);
29
- test.equal(undefined, msg);
30
- test.equal(null, this.connection.capabilities);
31
- test.done();
32
- }.bind(this);
33
- this.plugin.hook_capabilities(cb, this.connection);
34
- },
35
- 'with TLS' (test) {
36
- const cb = function (rc, msg) {
37
- test.expect(3);
38
- test.equal(undefined, rc);
39
- test.equal(undefined, msg);
40
- test.ok(this.connection.capabilities.length);
41
- // console.log(this.connection.capabilities);
42
- test.done();
43
- }.bind(this);
44
- this.connection.tls.enabled=true;
45
- this.connection.capabilities=[];
46
- this.plugin.hook_capabilities(cb, this.connection);
47
- },
48
- 'with TLS, sysadmin' (test) {
49
- const cb = function (rc, msg) {
50
- test.expect(3);
51
- test.equal(undefined, rc);
52
- test.equal(undefined, msg);
53
- test.ok(this.connection.capabilities.length);
54
- // console.log(this.connection.capabilities);
55
- test.done();
56
- }.bind(this);
57
- this.connection.tls.enabled=true;
58
- this.connection.capabilities=[];
59
- this.plugin.hook_capabilities(cb, this.connection);
60
- },
61
- }
62
-
63
- exports.get_vpopmaild_socket = {
64
- setUp : _set_up,
65
- 'any' (test) {
66
- test.expect(1);
67
- const socket = this.plugin.get_vpopmaild_socket('foo@localhost.com');
68
- // console.log(socket);
69
- test.ok(socket);
70
- socket.end();
71
- test.done();
72
- }
73
- }
74
-
75
- exports.get_plain_passwd = {
76
- setUp : _set_up,
77
- 'matt@example.com' (test) {
78
- function cb (pass) {
79
- test.expect(1);
80
- test.ok(pass);
81
- test.done();
82
- }
83
- if (this.plugin.cfg['example.com'].sysadmin) {
84
- this.plugin.get_plain_passwd('matt@example.com', cb);
85
- }
86
- else {
87
- test.expect(0);
88
- test.done();
89
- }
90
- }
91
- }