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
package/logger.js CHANGED
@@ -1,15 +1,13 @@
1
1
  'use strict';
2
2
  // Log class
3
3
 
4
- const util = require('util');
5
- const tty = require('tty');
4
+ const util = require('node:util');
5
+ const tty = require('node:tty');
6
6
 
7
7
  const config = require('haraka-config');
8
8
  const constants = require('haraka-constants');
9
9
 
10
10
  let plugins;
11
- let connection;
12
- let outbound;
13
11
 
14
12
  const regex = /(^$|[ ="\\])/;
15
13
  const escape_replace_regex = /["\\]/g;
@@ -48,6 +46,7 @@ logger.levels = {
48
46
  ALERT: 1,
49
47
  EMERG: 0,
50
48
  }
49
+ const level_names = Object.keys(logger.levels)
51
50
 
52
51
  for (const le in logger.levels) {
53
52
  logger.levels[`LOG${le}`] = logger.levels[le];
@@ -64,6 +63,7 @@ logger.loglevel = logger.levels.WARN;
64
63
  logger.format = logger.formats.DEFAULT;
65
64
  logger.timestamps = false;
66
65
  logger.deferred_logs = [];
66
+ logger.name = 'logger'
67
67
 
68
68
  logger.colors = {
69
69
  "DATA" : "green",
@@ -235,14 +235,16 @@ logger._init_timestamps = function () {
235
235
 
236
236
  logger._init();
237
237
 
238
- logger.log_if_level = (level, key, plugin) => function () {
239
- if (logger.loglevel < logger[key]) { return; }
238
+ logger.log_if_level = (level, key, origin) => function () {
239
+ if (logger.loglevel < logger[key]) return;
240
+
240
241
  let logobj = {
241
242
  level,
242
243
  uuid: '-',
243
- origin: (plugin || 'core'),
244
+ origin: (origin || 'core'),
244
245
  message: ''
245
246
  };
247
+
246
248
  for (const data of arguments) {
247
249
  if (typeof data !== 'object') {
248
250
  logobj.message += (data);
@@ -251,24 +253,17 @@ logger.log_if_level = (level, key, plugin) => function () {
251
253
  if (!data) continue;
252
254
 
253
255
  // if the object is a connection, add the connection id
254
- if (data instanceof connection.Connection) {
256
+ if (data.constructor?.name === 'Connection') {
255
257
  logobj.uuid = data.uuid;
256
258
  if (data.tran_count > 0) logobj.uuid += `.${data.tran_count}`;
257
259
  }
258
260
  else if (data instanceof plugins.Plugin) {
259
261
  logobj.origin = data.name;
260
262
  }
261
- else if (data.name) {
263
+ else if (Object.hasOwn(data, 'name')) { // outbound
262
264
  logobj.origin = data.name;
263
- }
264
- else if (data instanceof outbound.HMailItem) {
265
- logobj.origin = 'outbound';
266
- if (data.todo) {
267
- if (data.todo.uuid) logobj.uuid = data.todo.uuid;
268
- if (data.todo.client_uuid) { // dirty hack
269
- logobj.origin = `outbound] [${data.todo.client_uuid}`;
270
- }
271
- }
265
+ if (Object.hasOwn(data, 'uuid')) logobj.uuid = data.uuid;
266
+ if (data.todo?.uuid) logobj.uuid = data.todo.uuid; // outbound/hmail
272
267
  }
273
268
  else if (
274
269
  logger.format === logger.formats.LOGFMT && data.constructor === Object) {
@@ -278,7 +273,7 @@ logger.log_if_level = (level, key, plugin) => function () {
278
273
  logger.format === logger.formats.JSON && data.constructor === Object) {
279
274
  logobj = Object.assign(logobj, data);
280
275
  }
281
- else if (typeof data === 'object' && Object.prototype.hasOwnProperty.call(data, "uuid")) {
276
+ else if (Object.hasOwn(data, 'uuid')) { // outbound/client_pool
282
277
  logobj.uuid = data.uuid;
283
278
  }
284
279
  else if (data.constructor === Object) {
@@ -313,14 +308,37 @@ logger.log_if_level = (level, key, plugin) => function () {
313
308
  return true;
314
309
  }
315
310
 
316
- logger.add_log_methods = (object, plugin) => {
317
- if (!object) return;
318
- if (typeof(object) !== 'object') return;
311
+ logger.add_log_methods = (object, logName) => {
312
+ if (!object) return
319
313
 
320
- for (const level in logger.levels) {
321
- const fname = `log${level.toLowerCase()}`;
322
- if (object[fname]) continue; // already added
323
- object[fname] = logger.log_if_level(level, `LOG${level}`, plugin);
314
+ if (typeof object === 'function') {
315
+ // add logging methods to class prototypes (Connection, Plugin, etc.)
316
+
317
+ for (const level of level_names.map(l => l.toLowerCase())) {
318
+ object.prototype[`log${level}`] = (function (level) {
319
+ return function () {
320
+ logger[level].apply(logger, [ this, ...arguments ]);
321
+ };
322
+ })(`log${level}`);
323
+ }
324
+ }
325
+ else if (typeof object === 'object') {
326
+ // add logging methods to objects
327
+
328
+ for (const level of level_names) {
329
+ // objects gets log function names: loginfo, logwarn, logdebug, ...
330
+ const fnNames = [`log${level.toLowerCase()}`]
331
+
332
+ // logger also gets short names
333
+ if (Object.hasOwn(object, 'name') && object.name === 'logger') {
334
+ fnNames.push(level.toLowerCase())
335
+ }
336
+
337
+ for (const fnName of fnNames) {
338
+ if (Object.hasOwn(object, fnName)) continue; // already added
339
+ object[fnName] = logger.log_if_level(level, `LOG${level}`, logName);
340
+ }
341
+ }
324
342
  }
325
343
  }
326
344
 
@@ -328,5 +346,3 @@ logger.add_log_methods(logger);
328
346
 
329
347
  // load these down here so it sees all the logger methods compiled above
330
348
  plugins = require('./plugins');
331
- connection = require('./connection');
332
- outbound = require('./outbound');
@@ -1,48 +1,52 @@
1
1
  'use strict';
2
2
 
3
- const utils = require('haraka-utils');
3
+ const utils = require('haraka-utils');
4
+ const net_utils = require('haraka-net-utils')
4
5
 
5
- const sock = require('../line_socket');
6
- const logger = require('../logger');
6
+ const tls_socket = require('../tls_socket');
7
+ const logger = require('../logger');
8
+ const obc = require('./config');
7
9
 
8
- const obc = require('./config');
10
+ exports.name = 'outbound'
9
11
 
10
- function _create_socket (name, port, host, local_addr, is_unix_socket, callback) {
12
+ // Get a socket for the given attributes.
13
+ exports.get_client = function (mx, callback) {
14
+ const socketArgs = mx.path ? { path: mx.path } : { port: mx.port, host: mx.exchange, localAddress: mx.bind };
15
+
16
+ const socket = tls_socket.connect(socketArgs);
17
+ net_utils.add_line_processor(socket);
11
18
 
12
- const socket = is_unix_socket ? sock.connect({path: host}) : sock.connect({port, host, localAddress: local_addr});
13
- socket.name = name;
19
+ socket.name = `outbound::${JSON.stringify(socketArgs)}`;
14
20
  socket.__uuid = utils.uuid();
15
21
  socket.setTimeout(obc.cfg.connect_timeout * 1000);
16
- logger.logdebug(`[outbound] created. host: ${host} port: ${port}`, { uuid: socket.__uuid });
22
+
23
+ logger.debug(exports, `created ${socket.name}`, { uuid: socket.__uuid });
24
+
17
25
  socket.once('connect', () => {
18
26
  socket.removeAllListeners('error'); // these get added after callback
19
27
  socket.removeAllListeners('timeout');
20
28
  callback(null, socket);
21
- });
29
+ })
30
+
22
31
  socket.once('error', err => {
23
32
  socket.end();
24
33
  socket.removeAllListeners();
25
34
  socket.destroy();
26
- callback(`Outbound connection error: ${err}`, null);
27
- });
35
+ callback(err.message, null);
36
+ })
37
+
28
38
  socket.once('timeout', () => {
29
39
  socket.end();
30
40
  socket.removeAllListeners();
31
41
  socket.destroy();
32
- callback(`Outbound connection timed out to ${host}:${port}`, null);
33
- });
34
- }
35
-
36
-
37
- // Get a socket for the given attributes.
38
- exports.get_client = (port = 25, host = 'localhost', local_addr, is_unix_socket, callback) => {
39
- const name = `outbound::${port}:${host}:${local_addr}`;
40
-
41
- _create_socket(name, port, host, local_addr, is_unix_socket, callback)
42
+ callback(`connection timed out to ${socket.name}`, null);
43
+ })
42
44
  }
43
45
 
44
- exports.release_client = (socket, port, host, local_addr, error) => {
45
- logger.logdebug(`[outbound] release_client: ${socket.__uuid} ${host}:${port} to ${local_addr}`);
46
+ exports.release_client = (socket, mx) => {
47
+ let logMsg = `release_client: ${socket.name}`
48
+ if (mx.bind) logMsg += ` from ${mx.bind}`
49
+ logger.debug(exports, logMsg);
46
50
  socket.removeAllListeners();
47
51
  socket.destroy();
48
52
  }
@@ -3,13 +3,14 @@
3
3
  const config = require('haraka-config');
4
4
  const logger = require('../logger');
5
5
 
6
+ exports.name = 'outbound/config'
7
+
6
8
  function load_config () {
7
9
  const cfg = exports.cfg = config.get('outbound.ini', {
8
10
  booleans: [
9
11
  '-disabled',
10
12
  '-always_split',
11
13
  '+enable_tls',
12
- '-ipv6_enabled',
13
14
  '-local_mx_ok',
14
15
  ],
15
16
  }, () => {
@@ -35,9 +36,6 @@ function load_config () {
35
36
  if (!cfg.connect_timeout) {
36
37
  cfg.connect_timeout = 30;
37
38
  }
38
- if (!cfg.ipv6_enabled && config.get('outbound.ipv6_enabled')) {
39
- cfg.ipv6_enabled = true;
40
- }
41
39
  if (!cfg.received_header) {
42
40
  cfg.received_header = config.get('outbound.received_header') || 'Haraka outbound';
43
41
  }
@@ -64,8 +62,8 @@ exports.set_temp_fail_intervals = function () {
64
62
 
65
63
  // Helpful error function in case of parsing failure
66
64
  function error (i, msg) {
67
- logger.logerror(`outbound temp_fail_intervals syntax error parsing element ${i}: ${msg}`);
68
- logger.logwarn('Setting outbound temp_fail_intervals to old defaults because of previous error');
65
+ logger.error(exports, `temp_fail_intervals syntax error parsing element ${i}: ${msg}`);
66
+ logger.warn(exports, 'Setting outbound temp_fail_intervals to old defaults');
69
67
  set_old_defaults();
70
68
  }
71
69
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const fs = require('fs');
3
+ const fs = require('node:fs');
4
4
 
5
5
  class FsyncWriteStream extends fs.WriteStream {
6
6
  constructor (path, options) {