Haraka 3.0.3 → 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 (238) hide show
  1. package/.eslintrc.yaml +5 -9
  2. package/.prettierrc.yml +1 -0
  3. package/CONTRIBUTORS.md +11 -0
  4. package/Changes.md +1365 -1214
  5. package/Plugins.md +117 -105
  6. package/README.md +4 -13
  7. package/bin/haraka +197 -298
  8. package/config/auth_flat_file.ini +1 -0
  9. package/config/dhparams.pem +8 -0
  10. package/config/mail_from.is_resolvable.ini +4 -2
  11. package/config/me +1 -0
  12. package/config/outbound.ini +0 -2
  13. package/config/plugins +36 -35
  14. package/config/smtp.ini +0 -1
  15. package/config/smtp.json +17 -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 +29 -9
  28. package/endpoint.js +16 -13
  29. package/haraka.js +10 -14
  30. package/host_pool.js +5 -5
  31. package/line_socket.js +3 -4
  32. package/logger.js +44 -28
  33. package/outbound/client_pool.js +27 -23
  34. package/outbound/config.js +4 -6
  35. package/outbound/fsync_writestream.js +1 -1
  36. package/outbound/hmail.js +178 -218
  37. package/outbound/index.js +86 -99
  38. package/outbound/qfile.js +1 -1
  39. package/outbound/queue.js +51 -44
  40. package/outbound/timer_queue.js +3 -2
  41. package/outbound/tls.js +19 -7
  42. package/package.json +59 -48
  43. package/plugins/.eslintrc.yaml +0 -6
  44. package/plugins/auth/auth_base.js +4 -2
  45. package/plugins/auth/auth_proxy.js +14 -12
  46. package/plugins/auth/auth_vpopmaild.js +1 -1
  47. package/plugins/block_me.js +1 -1
  48. package/plugins/data.signatures.js +2 -4
  49. package/plugins/early_talker.js +2 -1
  50. package/plugins/mail_from.is_resolvable.js +65 -135
  51. package/plugins/queue/deliver.js +4 -5
  52. package/plugins/queue/lmtp.js +11 -14
  53. package/plugins/queue/qmail-queue.js +2 -2
  54. package/plugins/queue/quarantine.js +2 -2
  55. package/plugins/queue/rabbitmq.js +16 -17
  56. package/plugins/queue/smtp_forward.js +3 -3
  57. package/plugins/queue/smtp_proxy.js +10 -1
  58. package/plugins/queue/test.js +2 -2
  59. package/plugins/rcpt_to.host_list_base.js +5 -5
  60. package/plugins/rcpt_to.in_host_list.js +2 -2
  61. package/plugins/relay.js +6 -7
  62. package/plugins/reseed_rng.js +1 -1
  63. package/plugins/status.js +37 -33
  64. package/plugins/tls.js +2 -2
  65. package/plugins/xclient.js +3 -2
  66. package/plugins.js +50 -54
  67. package/run_tests +3 -30
  68. package/server.js +190 -190
  69. package/smtp_client.js +30 -23
  70. package/{tests → test}/config/plugins +0 -2
  71. package/{tests → test}/config/smtp.ini +1 -1
  72. package/test/config/tls/example.com/_.example.com.key +28 -0
  73. package/test/config/tls/example.com/example.com.crt +25 -0
  74. package/test/connection.js +302 -0
  75. package/test/endpoint.js +94 -0
  76. package/{tests → test}/fixtures/line_socket.js +1 -1
  77. package/{tests → test}/fixtures/util_hmailitem.js +19 -25
  78. package/{tests → test}/host_pool.js +42 -57
  79. package/test/logger.js +258 -0
  80. package/test/outbound/hmail.js +141 -0
  81. package/test/outbound/index.js +220 -0
  82. package/test/outbound/qfile.js +126 -0
  83. package/test/outbound_bounce_net_errors.js +142 -0
  84. package/{tests → test}/outbound_bounce_rfc3464.js +110 -122
  85. package/test/plugins/auth/auth_base.js +484 -0
  86. package/test/plugins/auth/auth_vpopmaild.js +83 -0
  87. package/test/plugins/early_talker.js +104 -0
  88. package/test/plugins/mail_from.is_resolvable.js +35 -0
  89. package/test/plugins/queue/smtp_forward.js +206 -0
  90. package/test/plugins/rcpt_to.host_list_base.js +122 -0
  91. package/test/plugins/rcpt_to.in_host_list.js +193 -0
  92. package/test/plugins/relay.js +303 -0
  93. package/test/plugins/status.js +130 -0
  94. package/test/plugins/tls.js +70 -0
  95. package/test/plugins.js +228 -0
  96. package/test/rfc1869.js +73 -0
  97. package/test/server.js +491 -0
  98. package/test/smtp_client.js +299 -0
  99. package/test/tls_socket.js +273 -0
  100. package/test/transaction.js +270 -0
  101. package/tls_socket.js +202 -252
  102. package/transaction.js +8 -23
  103. package/CONTRIBUTING.md +0 -1
  104. package/bin/dkimverify +0 -40
  105. package/config/access.domains +0 -13
  106. package/config/attachment.ctype.regex +0 -2
  107. package/config/attachment.filename.regex +0 -1
  108. package/config/avg.ini +0 -5
  109. package/config/bounce.ini +0 -15
  110. package/config/data.headers.ini +0 -61
  111. package/config/dkim/dkim_key_gen.sh +0 -78
  112. package/config/dkim_sign.ini +0 -4
  113. package/config/dkim_verify.ini +0 -7
  114. package/config/dnsbl.ini +0 -23
  115. package/config/greylist.ini +0 -43
  116. package/config/helo.checks.ini +0 -52
  117. package/config/messagesniffer.ini +0 -18
  118. package/config/spamassassin.ini +0 -56
  119. package/dkim.js +0 -614
  120. package/docs/plugins/avg.md +0 -35
  121. package/docs/plugins/bounce.md +0 -69
  122. package/docs/plugins/clamd.md +0 -147
  123. package/docs/plugins/esets.md +0 -8
  124. package/docs/plugins/greylist.md +0 -90
  125. package/docs/plugins/helo.checks.md +0 -135
  126. package/docs/plugins/messagesniffer.md +0 -163
  127. package/docs/plugins/spamassassin.md +0 -180
  128. package/outbound/mx_lookup.js +0 -70
  129. package/plugins/auth/auth_ldap.js +0 -3
  130. package/plugins/avg.js +0 -162
  131. package/plugins/backscatterer.js +0 -25
  132. package/plugins/bounce.js +0 -381
  133. package/plugins/clamd.js +0 -382
  134. package/plugins/data.uribl.js +0 -4
  135. package/plugins/dkim_sign.js +0 -395
  136. package/plugins/dkim_verify.js +0 -62
  137. package/plugins/dns_list_base.js +0 -221
  138. package/plugins/dnsbl.js +0 -146
  139. package/plugins/dnswl.js +0 -58
  140. package/plugins/esets.js +0 -71
  141. package/plugins/graph.js +0 -5
  142. package/plugins/greylist.js +0 -645
  143. package/plugins/helo.checks.js +0 -533
  144. package/plugins/messagesniffer.js +0 -381
  145. package/plugins/rcpt_to.ldap.js +0 -3
  146. package/plugins/rcpt_to.max_count.js +0 -24
  147. package/plugins/spamassassin.js +0 -384
  148. package/tests/config/dkim/example.com/dns +0 -29
  149. package/tests/config/dkim/example.com/private +0 -6
  150. package/tests/config/dkim/example.com/public +0 -4
  151. package/tests/config/dkim/example.com/selector +0 -1
  152. package/tests/config/dkim.private.key +0 -6
  153. package/tests/config/dkim_sign.ini +0 -4
  154. package/tests/config/helo.checks.ini +0 -52
  155. package/tests/connection.js +0 -327
  156. package/tests/endpoint.js +0 -128
  157. package/tests/fixtures/vm_harness.js +0 -59
  158. package/tests/logger.js +0 -327
  159. package/tests/outbound/hmail.js +0 -112
  160. package/tests/outbound/index.js +0 -324
  161. package/tests/outbound/qfile.js +0 -67
  162. package/tests/outbound_bounce_net_errors.js +0 -173
  163. package/tests/plugins/auth/auth_base.js +0 -463
  164. package/tests/plugins/auth/auth_vpopmaild.js +0 -91
  165. package/tests/plugins/bounce.js +0 -307
  166. package/tests/plugins/clamd.js +0 -224
  167. package/tests/plugins/deprecated/relay_acl.js +0 -140
  168. package/tests/plugins/deprecated/relay_all.js +0 -59
  169. package/tests/plugins/dkim_sign.js +0 -315
  170. package/tests/plugins/dkim_signer.js +0 -108
  171. package/tests/plugins/dns_list_base.js +0 -259
  172. package/tests/plugins/dnsbl.js +0 -101
  173. package/tests/plugins/early_talker.js +0 -115
  174. package/tests/plugins/greylist.js +0 -58
  175. package/tests/plugins/helo.checks.js +0 -525
  176. package/tests/plugins/mail_from.is_resolvable.js +0 -116
  177. package/tests/plugins/queue/smtp_forward.js +0 -221
  178. package/tests/plugins/rcpt_to.host_list_base.js +0 -132
  179. package/tests/plugins/rcpt_to.in_host_list.js +0 -218
  180. package/tests/plugins/relay.js +0 -339
  181. package/tests/plugins/spamassassin.js +0 -171
  182. package/tests/plugins/status.js +0 -138
  183. package/tests/plugins/tls.js +0 -84
  184. package/tests/plugins.js +0 -247
  185. package/tests/rfc1869.js +0 -61
  186. package/tests/server.js +0 -510
  187. package/tests/smtp_client/auth.js +0 -105
  188. package/tests/smtp_client/basic.js +0 -101
  189. package/tests/smtp_client.js +0 -80
  190. package/tests/tls_socket.js +0 -333
  191. package/tests/transaction.js +0 -284
  192. /package/docs/{plugins → deprecated}/dkim_sign.md +0 -0
  193. /package/docs/{plugins → deprecated}/dkim_verify.md +0 -0
  194. /package/docs/{plugins → deprecated}/dnsbl.md +0 -0
  195. /package/docs/{plugins → deprecated}/dnswl.md +0 -0
  196. /package/{tests → test}/.eslintrc.yaml +0 -0
  197. /package/{tests → test}/config/auth_flat_file.ini +0 -0
  198. /package/{tests → test}/config/dhparams.pem +0 -0
  199. /package/{tests → test}/config/host_list +0 -0
  200. /package/{tests → test}/config/outbound_tls_cert.pem +0 -0
  201. /package/{tests → test}/config/outbound_tls_key.pem +0 -0
  202. /package/{tests → test}/config/smtp_forward.ini +0 -0
  203. /package/{tests → test}/config/tls/ec.pem +0 -0
  204. /package/{tests → test}/config/tls/haraka.local.pem +0 -0
  205. /package/{tests → test}/config/tls/mismatched.pem +0 -0
  206. /package/{tests → test}/config/tls.ini +0 -0
  207. /package/{tests → test}/config/tls_cert.pem +0 -0
  208. /package/{tests → test}/config/tls_key.pem +0 -0
  209. /package/{tests → test}/fixtures/todo_qfile.txt +0 -0
  210. /package/{tests → test}/installation/config/test-plugin-flat +0 -0
  211. /package/{tests → test}/installation/config/test-plugin.ini +0 -0
  212. /package/{tests → test}/installation/config/tls.ini +0 -0
  213. /package/{tests → test}/installation/node_modules/load_first/index.js +0 -0
  214. /package/{tests → test}/installation/node_modules/load_first/package.json +0 -0
  215. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin-flat +0 -0
  216. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin.ini +0 -0
  217. /package/{tests → test}/installation/node_modules/test-plugin/package.json +0 -0
  218. /package/{tests → test}/installation/node_modules/test-plugin/test-plugin.js +0 -0
  219. /package/{tests → test}/installation/plugins/base_plugin.js +0 -0
  220. /package/{tests → test}/installation/plugins/folder_plugin/index.js +0 -0
  221. /package/{tests → test}/installation/plugins/folder_plugin/package.json +0 -0
  222. /package/{tests → test}/installation/plugins/inherits.js +0 -0
  223. /package/{tests → test}/installation/plugins/load_first.js +0 -0
  224. /package/{tests → test}/installation/plugins/plugin.js +0 -0
  225. /package/{tests → test}/installation/plugins/tls.js +0 -0
  226. /package/{tests → test}/loud/config/dhparams.pem +0 -0
  227. /package/{tests → test}/loud/config/tls/goobered.pem +0 -0
  228. /package/{tests → test}/loud/config/tls.ini +0 -0
  229. /package/{tests → test}/mail_specimen/base64-root-part.txt +0 -0
  230. /package/{tests → test}/mail_specimen/varied-fold-lengths-preserve-data.txt +0 -0
  231. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  232. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  233. /package/{tests → test}/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  234. /package/{tests → test}/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  235. /package/{tests → test}/queue/multibyte +0 -0
  236. /package/{tests → test}/queue/plain +0 -0
  237. /package/{tests → test}/queue/zero-length +0 -0
  238. /package/{tests → test}/test-queue/delete-me +0 -0
package/plugins.js CHANGED
@@ -2,9 +2,9 @@
2
2
  // load all defined plugins
3
3
 
4
4
  // node built-ins
5
- const fs = require('fs');
6
- const path = require('path');
7
- const vm = require('vm');
5
+ const fs = require('node:fs');
6
+ const path = require('node:path');
7
+ const vm = require('node:vm');
8
8
 
9
9
  // npm modules
10
10
  exports.config = require('haraka-config');
@@ -74,8 +74,8 @@ class Plugin {
74
74
 
75
75
  // development mode
76
76
  paths = paths.concat(plugin_search_paths(__dirname, name));
77
- paths.forEach(pp => {
78
- if (this.plugin_path) return;
77
+ for (const pp of paths) {
78
+ if (this.plugin_path) continue;
79
79
  try {
80
80
  fs.statSync(pp);
81
81
  this.plugin_path = pp;
@@ -84,7 +84,7 @@ class Plugin {
84
84
  }
85
85
  }
86
86
  catch (ignore) {}
87
- });
87
+ }
88
88
  }
89
89
 
90
90
  _get_config () {
@@ -128,8 +128,7 @@ class Plugin {
128
128
  this.hooks[hook_name] = this.hooks[hook_name] || [];
129
129
  this.hooks[hook_name].push(method_name);
130
130
 
131
- logger.logdebug(`registered hook ${hook_name} to ${this.name}.` +
132
- `${method_name} priority ${priority}`);
131
+ plugins.logdebug(`registered hook ${hook_name} to ${this.name}.${method_name} priority ${priority}`);
133
132
  }
134
133
 
135
134
  register () {} // noop
@@ -140,12 +139,6 @@ class Plugin {
140
139
  if (!this[method]) {
141
140
  this[method] = parent_plugin[method];
142
141
  }
143
- // else if (method == 'shutdown') {
144
- // Method is in this module, so it exists in the plugin
145
- // if (!this.hasOwnProperty('shutdown')) {
146
- // this[method] = parent_plugin[method];
147
- // }
148
- // }
149
142
  }
150
143
  if (parent_plugin.register) {
151
144
  parent_plugin.register.call(this);
@@ -195,7 +188,7 @@ class Plugin {
195
188
  }
196
189
  catch (err) {
197
190
  if (exports.config.get('smtp.ini').main.ignore_bad_plugins) {
198
- logger.logcrit(`Loading plugin ${this.name} failed: ${err}`);
191
+ plugins.logcrit(`Loading ${this.name} failed: ${err}`);
199
192
  return;
200
193
  }
201
194
  throw `Loading plugin ${this.name} failed: ${err}`;
@@ -231,16 +224,13 @@ class Plugin {
231
224
  vm.runInNewContext(code, sandbox, pp);
232
225
  }
233
226
  catch (err) {
234
- logger.logcrit(`Compiling plugin: ${this.name} failed`);
227
+ plugins.logcrit(`compiling '${this.name}' failed`);
235
228
  if (exports.config.get('smtp.ini').main.ignore_bad_plugins) {
236
- logger.logcrit(`Loading plugin ${this.name} failed: `,
237
- `${err.message} - will skip this plugin and continue`);
229
+ plugins.logcrit(`Loading '${this.name}' failed: ${err.message} - skipping`);
238
230
  return;
239
231
  }
240
232
  throw err; // default is to re-throw and stop Haraka
241
233
  }
242
-
243
- return this;
244
234
  }
245
235
  }
246
236
 
@@ -254,7 +244,7 @@ exports.shutdown_plugins = () => {
254
244
 
255
245
  process.on('message', msg => {
256
246
  if (msg.event && msg.event == 'plugins.shutdown') {
257
- logger.loginfo("[plugins] Shutting down plugins");
247
+ plugins.loginfo("Shutting down");
258
248
  exports.shutdown_plugins();
259
249
  }
260
250
  });
@@ -270,39 +260,28 @@ function plugin_search_paths (prefix, name) {
270
260
  function get_timeout (name) {
271
261
  let timeout = parseFloat((exports.config.get(`${name}.timeout`)));
272
262
  if (isNaN(timeout)) {
273
- logger.logdebug(`no timeout in ${name}.timeout`);
263
+ plugins.logdebug(`no timeout in ${name}.timeout`);
274
264
  timeout = parseFloat(exports.config.get('plugin_timeout'));
275
265
  }
276
266
  if (isNaN(timeout)) {
277
- logger.logdebug('no timeout in plugin_timeout');
267
+ plugins.logdebug('no timeout in plugin_timeout');
278
268
  timeout = 30;
279
269
  }
280
270
 
281
- logger.logdebug(`plugin ${name} timeout is: ${timeout}s`);
271
+ plugins.logdebug(`plugin ${name} timeout is: ${timeout}s`);
282
272
  return timeout;
283
273
  }
284
274
 
285
- // copy logger methods into Plugin:
286
- for (const key in logger) {
287
- if (!/^log\w/.test(key)) continue;
288
- // console.log(`adding Plugin.${key} method`);
289
- Plugin.prototype[key] = (function (lev) {
290
- return function () {
291
- const args = [this];
292
- for (let i=0, l=arguments.length; i<l; i++) {
293
- args.push(arguments[i]);
294
- }
295
- logger[lev].apply(logger, args);
296
- };
297
- })(key);
298
- }
275
+ logger.add_log_methods(Plugin)
299
276
 
300
277
  const plugins = exports;
301
278
 
279
+ logger.add_log_methods(plugins, 'plugins')
280
+
302
281
  plugins.Plugin = Plugin;
303
282
 
304
283
  plugins.load_plugins = override => {
305
- logger.loginfo('Loading plugins');
284
+ plugins.logdebug('Loading');
306
285
  let plugin_list;
307
286
  if (override) {
308
287
  if (!Array.isArray(override)) override = [ override ];
@@ -312,22 +291,21 @@ plugins.load_plugins = override => {
312
291
  plugin_list = exports.config.get('plugins', 'list');
313
292
  }
314
293
 
315
- plugin_list.forEach(plugin => {
294
+ for (let plugin of plugin_list) {
316
295
  if (plugin.startsWith('haraka-plugin-')) plugin = plugin.substr(14)
317
296
  if (plugins.deprecated[plugin]) {
318
- logger.lognotice(`the plugin ${plugin} has been replaced by '${plugins.deprecated[plugin]}'. Please update config/plugins`)
297
+ plugins.lognotice(`${plugin} has been replaced by '${plugins.deprecated[plugin]}'. Please update config/plugins`)
319
298
  plugins.load_plugin(plugins.deprecated[plugin]);
320
299
  }
321
300
  else {
322
301
  plugins.load_plugin(plugin);
323
302
  }
324
- });
303
+ }
325
304
 
326
305
  plugins.plugin_list = Object.keys(plugins.registered_plugins);
327
306
 
328
307
  // Sort registered_hooks by priority
329
- const hooks = Object.keys(plugins.registered_hooks);
330
- for (const hook of hooks) {
308
+ for (const hook of Object.keys(plugins.registered_hooks)) {
331
309
  plugins.registered_hooks[hook].sort((a, b) => {
332
310
  if (a.priority < b.priority) return -1;
333
311
  if (a.priority > b.priority) return 1;
@@ -343,6 +321,8 @@ plugins.load_plugins = override => {
343
321
  }
344
322
 
345
323
  plugins.deprecated = {
324
+ 'auth/auth_ldap' : 'auth-ldap',
325
+ 'backscatterer' : 'dns-list',
346
326
  'connect.asn' : 'asn',
347
327
  'connect.fcrdns' : 'fcrdns',
348
328
  'connect.geoip' : 'geoip',
@@ -352,6 +332,11 @@ plugins.deprecated = {
352
332
  'data.noreceived' : 'headers',
353
333
  'data.rfc5322_header_checks': 'headers',
354
334
  'data.headers' : 'headers',
335
+ 'dkim_sign' : 'dkim',
336
+ 'dkim_verify' : 'dkim',
337
+ 'data.uribl' : 'uribl',
338
+ 'dnsbl' : 'dns-list',
339
+ 'dnswl' : 'dns-list',
355
340
  'log.syslog' : 'syslog',
356
341
  'mail_from.access' : 'access',
357
342
  'mail_from.blocklist' : 'access',
@@ -360,6 +345,8 @@ plugins.deprecated = {
360
345
  'rate_limit' : 'limit',
361
346
  'rcpt_to.access' : 'access',
362
347
  'rcpt_to.blocklist' : 'access',
348
+ 'rcpt_to.ldap' : 'rcpt-ldap',
349
+ 'rcpt_to.max_count' : 'limit',
363
350
  'rcpt_to.qmail_deliverable' : 'qmail-deliverable',
364
351
  'rdns.regexp' : 'access',
365
352
  'relay_acl' : 'relay',
@@ -368,7 +355,7 @@ plugins.deprecated = {
368
355
  }
369
356
 
370
357
  plugins.load_plugin = name => {
371
- logger.loginfo(`Loading plugin: ${name}`);
358
+ plugins.loginfo(`loading ${name}`);
372
359
 
373
360
  const plugin = plugins._load_and_compile_plugin(name);
374
361
  if (plugin) {
@@ -376,7 +363,6 @@ plugins.load_plugin = name => {
376
363
  }
377
364
 
378
365
  plugins.registered_plugins[name] = plugin;
379
- return plugin;
380
366
  }
381
367
 
382
368
  // Set in server.js; initialized to empty object
@@ -388,7 +374,7 @@ plugins._load_and_compile_plugin = name => {
388
374
  if (!plugin.plugin_path) {
389
375
  const err = `Loading plugin ${plugin.name} failed: No plugin with this name found`;
390
376
  if (exports.config.get('smtp.ini').main.ignore_bad_plugins) {
391
- logger.logcrit(err);
377
+ plugins.logcrit(err);
392
378
  return;
393
379
  }
394
380
  throw err;
@@ -407,8 +393,6 @@ plugins._register_plugin = plugin => {
407
393
  plugin.register_hook(result[1], method);
408
394
  }
409
395
  }
410
-
411
- return plugin;
412
396
  }
413
397
 
414
398
  plugins.run_hooks = (hook, object, params) => {
@@ -496,10 +480,8 @@ plugins.run_next_hook = (hook, object, params) => {
496
480
 
497
481
  const respond_method = `${hook}_respond`;
498
482
  if (item && is_deny_retval(retval) && hook.substr(0,5) !== 'init_') {
499
- object.deny_respond =
500
- get_denyfn(object, hook, params, retval, msg, respond_method);
501
- plugins.run_hooks('deny', object,
502
- [retval, msg, item[0].name, item[1], params, hook]);
483
+ object.deny_respond = get_denyfn(object, hook, params, retval, msg, respond_method);
484
+ plugins.run_hooks('deny', object, [retval, msg, item[0].name, item[1], params, hook]);
503
485
  }
504
486
  else {
505
487
  object.hooks_to_run = [];
@@ -579,11 +561,25 @@ function log_run_item (item, hook, retval, object, params, msg) {
579
561
  'function' : item[1],
580
562
  'params' : ((params) ? ((typeof params === 'string') ? params : params[0]) : ''),
581
563
  'retval' : constants.translate(retval),
582
- 'msg' : ((msg) ? msg : ''),
564
+ 'msg' : sanitize(msg),
583
565
  });
584
566
  }
585
567
  }
586
568
 
569
+ function sanitize (msg) {
570
+ if (!msg) return ''
571
+ if (typeof msg === 'string') return msg
572
+ if (typeof msg === 'object') {
573
+ if (msg.constructor.name === 'DSN') return msg.reply
574
+ const sanitized = { ...msg }; // copy the message
575
+ for (const priv of ['password','auth_pass']) {
576
+ delete sanitized[priv]
577
+ }
578
+ return JSON.stringify(sanitized)
579
+ }
580
+ logger.logerror(`what is ${msg} (typeof ${typeof msg})?`)
581
+ }
582
+
587
583
  function is_deny_retval (val) {
588
584
  switch (val) {
589
585
  case constants.deny:
package/run_tests CHANGED
@@ -1,32 +1,5 @@
1
- #!/usr/bin/env node
1
+ #!/bin/sh
2
2
 
3
- 'use strict';
3
+ TESTS=${1:-"test test/outbound test/plugins/auth test/plugins/queue test/plugins"}
4
4
 
5
- let reporter;
6
- try {
7
- reporter = require('nodeunit-x').reporters.default;
8
- }
9
- catch (e) {
10
- console.log(`Error: ${e.message}
11
-
12
- Cannot find nodeunit module. Please run the following:
13
-
14
- npm install\n`);
15
-
16
- process.exit();
17
- }
18
-
19
- process.chdir(__dirname);
20
-
21
- let tests = [
22
- 'tests', 'tests/outbound', 'tests/plugins',
23
- 'tests/plugins/auth', 'tests/plugins/queue'
24
- ];
25
-
26
- if (process.argv[2]) {
27
- console.log("Running tests: ", process.argv.slice(2));
28
- tests = process.argv.slice(2);
29
- }
30
- reporter.run(tests, undefined, function (err) {
31
- process.exit(((err) ? 1 : 0));
32
- });
5
+ npx mocha --exit $TESTS