File: ChangeLog

package info (click to toggle)
exim 2.05-2
  • links: PTS
  • area: main
  • in suites: slink
  • size: 4,520 kB
  • ctags: 2,992
  • sloc: ansic: 42,424; perl: 1,349; sh: 843; makefile: 321
file content (752 lines) | stat: -rw-r--r-- 32,386 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
Change log file for Exim from version 1.921
-------------------------------------------


Version 2.05
------------

1. Updated calls to pcre_exec() in preparation for PCRE 2.00 by increasing the
size of the working vector that is passed.

2. Unnecessary setting of sender_local = sender_host_unknown = FALSE in
daemon.c and elsewhere removed.

3. If routing deferred on a domain which subsequently got expanded when routing
succeeded (e.g. mail to xxx@yyy routed yyy to yyy.zzz.com) then the retry item
for routing the unexpanded domain never got deleted. Consequently, if routing
to it deferred again some time later, the message could get incorrectly timed
out, or at least use an incorrect retry timing.

4. The test_host testing program was crashing if given a non-existent host name
when testing "byname".

5. The option check_dns_names should really be called dns_check_names for
uniformity. Added a synonym, leaving the old name omitted from the -bP list.

6. If sender_verify_reject is false and verification suffers a temporary error,
accept as if sender_try_verify were set.

7. When sender_verify_fixup or headers_sender_verify was set and one of the
addresses in the headers was the return path address, Exim was verifying it a
second time, unnecessarily.

8. When -bh was used to test a remote host connection, sender verification was
not happening as it should.

9. Changes to sender verification on incoming messages when a temporary error
occurs: (i) Use the reject hints database as for permanent errors so as to give
4xx errors to MAIL FROM after the first, thereby not cluttering up the logs
with the headers each time. (ii) Keep a rate of temporary rejections (per
hour); if greater than sender_reject_max_retry_rate (default 12, 0 means unset)
turn into a permanent error. Reset after 24 hour gap between incidents.

10. Changes have been made to outgoing SMTP delivery when a temporary SMTP
error occurs. Previously no error recording happened, and the message would be
tried again at the next queue run. The error is now remembered for the
recipient address as a kind of routing or directing defer. The address won't
get tried again until the appropriate time has passed. This applies to 4xx
errors given to RCPT TO, and also to 4xx errors on MAIL FROM, DATA, and ".". In
all cases other than RCPT TO, the error is deemed to apply to all recipient
addresses, and so multiple retry records get created.

11. Made some changes to the IRIX6.5 and IRIX632 makefiles on the advice of
Arthur Hagen <art@broomstick.com>.

12. Fixed crashing when verifying that a name obtained by looking up an IP
address really is that IP address, if the name has no IP address. This
double-check was introduced by change 10 of 2.03.

13. For Berkeley DB 2.4.14 it is (now?) necessary to clear the datum field as
well as the key field before doing a lookup. Otherwise crashes may occur.

14. Add log entries at level 4 for incoming messages that don't get immediate
delivery because of too many connections or too much load or too many messages
per connection.

15. The one_time options of aliasfile and forwardfile were not working owing to
a silly typo (semicolon omitted).


Version 2.04
------------

Host checking in 2.03 was accidentally turned off when the incoming call came
via inetd.


Version 2.03
------------

1. Under some circumstances, in particular, the reception of several messages
in the same SMTP connection, the contents of mainlog_name could get corrupted,
leading to crashes.

2. System filter: ignore leading whitespace at the start of the argument for
"headers add". If the resulting string is empty, ignore it. If it does not end
with a newline, add one.

3. Added smtp_accept_queue_per_connection to limit the number of delivery
processes when a client is throwing lots at a server.

4. Removed the default CFLAGS=-O setting from Makefile-Default and added it to
those OS/Makefile-<ostype> files that didn't already have a CFLAGS setting,
with the exception of FreeBSD. This allows FreeBSD's "make" default to operate
as the default.

5. For inetd input, if several messages were received in one SMTP session and
certain host-specific checks were enabled (e.g. receiver_verify_except_hosts),
the store associated with those checks could get overwritten for the second
and subsequent messages, causing either crashes, or the checks not to work.
Also tidied up the handling of sender_host_name, which might have suffered a
similar fate.

6. For -bh testing, the store wasn't getting reset between messages as it is
for actual reception, making it less useful for testing.

7. As a result of discussion on the DRUMS group about VRFY, Exim now uses the
252 return code in the case when VRFY is disabled or when the given address is
not a local one. Also, the address itself is repeated in a positive response.

8. The addresses yielded in response to EXPN are now placed in angle brackets,
as this seems to be what the new standards want.

9. The daemon used to do DNS forward lookups of all host names in hostlists
such as sender_host_reject_recipients when it started up, and remember the IP
addresses. Discussion on the list concluded that this was a Bad Thing, and
that the caching in the resolver should be relied on instead, so these advance
lookups have been removed.

10. The looking up of hostnames from IP addresses has been made more secure by
the inclusion of a subsequent forward lookup, to verify that the name really
does correspond to the IP address. (Testing this revealed that on at least 2
operating systems, gethostbyaddr() already does this double-check, so maybe
this is overkill?)

11. Updated the Makefile for IRIX 6.5 on advice from Olav Kolbu
<olav.kolbu@usit.uio.no>, and also fixed os-type to recognize `irix6.5'.

12. If a numeric SMTP listening port was set by daemon_smtp_service, it got
converted to network byte order twice, thus scrambling it on hosts where the
network byte order is different to the natural byte order.

13. Include the malformed response in the error message "malformed SMTP
response..."

14. Updated configuration for HI-OSF and added HI-UX, including hacks to
libident (same as for HP-UX). Changed statvfs and f_frsize macros to STATVFS
and F_FRSIZE so they work on systems where the originals are themselves
macros. Inserted a number of missing (uid_t) and (gid_t) casts. Made
EXIM_CHMOD not null when not required. Revised rubric at the head of
src/EDITME to make it clearer (I hope).

15. Found a missing dependency on config.h in the Makefile; I had tried to be
clever and compile only those modules that needed it after a config.h change,
but it now affects the vast majority of them, so I moved it to the general
header list, which causes everything to rebuild.

16. Merged Stuart Lynne's patches for the LDAP lookup to enable it to link
with the Netscape LDAP SDK. However, I haven't been able to test this.

17. Arrange for there not to be SHELL=$(MAKE_SHELL) at the top of the default
makefile when it is building the real makefile (even though SHELL is not used
in that case) because AIX doesn't like this when MAKE_SHELL is not defined.

18. The cache of hosts found to be unusable during a delivery run was not
recording that a retry time had expired.

19. If an expired host was tried because its retry time had passed, but then
still failed, the fact that it was expired was not remembered for the benefit
of other addresses that routed to the same host. This could lead to some
addresses timing out while others hung on for one more delivery attempt.

20. If one of a set of MX records pointed to a non-existent host, a message
never timed out except by the maximum length on queue timeout. Now it will
time out according to the retry rules for the hosts that do exist.

21. If there were multiple recipients for the same remote domain, and all its
hosts had passed the maximum retry time, only one address was timed out per
delivery attempt. They are now all timed out together.

22. It is reported that, in Solaris 2.6, a stat() of an entry in an indirect
map which is currently unmounted does not cause the mount to occur, but
instead returns dummy data. This defeats the object of the stat() in
forwardfile which attempts to check the availability of the home directory
before looking for a .forward file. I have changed the code to first try a
stat() of "<directory>/." in order to force the mount (because it has to look
inside the directory). However, this might fail (after mounting) for
permission reasons, so to be on the safe side, if it fails, the original
stat() of the home directory is still done.

23. The logic surrounding the call to write() which is used to transport a
message has been improved. There are differences between operating systems in
the way write() is handled. On certain types of error (EDQUOT, EPIPE) some
systems give an error immediately; others return a positive code which is less
than the number of bytes that were specified for writing. If you try the
write() again, you then get the error. I knew about this for EDQUOT, and I
knew you didn't always get EPIPE but didn't realize you could force it by
writing again. Furthermore, in some OS at least (see Solaris 2.6 man page),
write() can be interruped by signals and behave in the same way, or return -1
with EINTR when no bytes have been written. Exim now handles all these cases
by attempting to continue with the write(), up to 100 times (just in case). If
it gets one of these states 100 times, it generates an error. The previous
logic, where an incomplete write for a pipe was simply ignored could lead to
occasional truncation of messages if a signal happened to interrupt a write to
a pipe.

24. While sorting out 23 above, the code for writing data additional to the
message itself in the pipe transport (prefix, suffix, SMTP stuff) has been
tidied up and improved.

25. In both the pipe and appendfile transports, the SMTP commands for batch
SMTP weren't strictly correct, in that there was a space before the < that
introduces an address. (This was fixed in smtp long ago, but I obviously
forgot about bsmtp at that time.)

26. One instance of an (int *) cast should have been (uit_t *). This was in
the function called by -bP to print option values, so wouldn't affect the
running of Exim, but could cause incorrect data to be output on systems where
uid_t is not int.

27. Eximstats: if the first log line was a => line, the $thissize variable was
unset. Arrange for it to be zero in this case.

28. Some duplication in logging has been removed; during SMTP delivery, a
failure related to a specific message was always logged per host, and then
with the ** or == line for the address. If there is only one host, or if the
failure is hard, this led to duplication of information on the log. The
per-host logging is now suppressed for hard errors or if there are no further
hosts to try.

29. When creating a bounce message, Exim was putting all failed addresses
into X-Failed-Recipients: willy-nilly. This could lead to an unacceptably long
header. It has been changed to start a new header every 50 recipients.

30. If an attempt to create a bounce message fails (a "should-never-happen"
event) Exim keeps the message on the spool to try again, but if the problem is
hard you don't really want to keep trying too often. If there are no genuine
deferred addresses in the message, it now gets frozen. Also, an entry is
written to the message log, which didn't happen before.

31. The "initgroups" option was not available on routers (accidentally left
off the generic options list).

32. Implemented smtp_log_connections, and tidied up various SMTP disconnection
messages.

33. Change 8 of 1.921 was botched, and done only for batch SMTP. Made the
change for interactive SMTP (error codes for too many recipients to be 552 and
452, in line with RFC example).

34. LFLAGS wasn't present on any of the makefile lines for building the test
programs such as test_host, etc.

35. The daemon now writes its pid file as root instead of exim, for the
benefit of systems where the pid file is in a directory that can be written to
only by root.

36. There was a spurious colon after 421 in the SMTP response when the fork()
of an accepting process failed. Also changed the text to "Fork failed" from
"Connection refused".

37. If :fail: or :defer: in an alias file has a non-empty message associated
with it, this is now used in the SMTP response when verification fails
during a RCPT TO or VRFY command.

38. If exim is called by root, set the effective uid and gid to the real ones
at the start. This makes a difference if, as happens in some unusual
configurations, Exim is setuid to something other than root.

39. The regex for matching message ids was assuming that the final two
characters could only be digits.

40. If -oMa was set for a -bs non-inetd connection, the host address was not
getting treated as it is for a real SMTP connection. In particular, it wasn't
getting into the Received: line.

41. If -oMt "" is given, the sender ident field is unset.

42. Implemented the C macro SYSCTL_IP_ADDRESS for use on IRIX systems to run
the special code that is needed on them for finding the complete list of IP
addresses on the local host, including the aliases. A comment that came with
the code is: "On 6.2 you need the libc patch to get the sysctl() stub and the
networking kernel patch to get the support."

43. Minor casting tweaks to cdb.c to get rid of warning messages from Sun's C
compiler.

44. When a message was frozen by the system filter, the time of freezing wasn't
being correctly recorded, leading to auto_thaw triggering too soon.

45. In ANSI C strtod() is defined in stdlib.h, but in SunOS4 it is defined in
floatingpoint.h, which is called from math.h, which Exim doesn't include. So

  extern double strtod(const char *, char **);

has been put into OS/os.h-SunOS4.

46. Keep only a single space character at the start of a continuation line when
looking up lsearch data.



Version 2.02
------------

1. If helo_verify_except... was set, it didn't except the host from supplying a
HELO command, even though it didn't check it.

2. Setting helo_accept_junk didn't allow though no argument at all for HELO.

3. String expansions for the "mail" and "vacation" commands in filter files
were happening when the commands were read rather than when they were obeyed.
This meant that numerical variables set by "if" weren't available for the
expansions.

4. Setting smtp_banner to some string that did not actually include any
expansion items caused memory corruption and assorted chaos. Another bug
introduced by the store-handling reorganization of 1.921/18.

5. IRIX 6.5 is sufficiently different that it has proved simplest to treat it
as a different OS, with its own configuration files.

6. LFLAGS wasn't set on the linking command for eximon.bin.

7. If a file or user name in a require_files list is the empty string, ignore
it.

8. A missing double quote in a To: or Cc: or Bcc: line when -t was in force
caused Exim to write a bad address to the spool file instead of diagnosing an
error.

9. Tidied up the error reporting for headers_check_syntax; also skip the checks
for To: Cc: and Bcc: if -t is set, since that will detect malformations.

10. Add uid/gid to debugging initial message to be sure what's going on when
Exim reinvokes itself.

11. If message_id_header_text expands to an empty string, ignore it.

12. Fixed typo in error message "it appear that the DNS operator...".

13. As a result of some net.discussion, cease waiting for a response to the
QUIT command when sending out SMTP. This has the benefit of transferring the
TCP/IP TIME_WAIT state to the client.

14. The RFC specifies that, in the Received: header, the "id" item precedes
the "for" item. Exim was putting these the other way round, but eventually
somebody noticed. Pedant. :-) The default expansion string has now been
changed.

15. The message log was being closed too early, causing the writing of
"children all complete" to a closed stream in the case when a child failed,
(when the writing happens after sending a delivery error message). In some
circumstances (some OS, under gdb) this had no effect; in others it caused a
crash, thus failing to remove the message from the queue.


Version 2.01
------------

1. "make test_host" was failing to make the testing program.

2. Bug in filter processing could cause "mail" commands to try to mail to
invalid addresses. The message got deferred and often it worked OK the next
time.

3. With sender_verify set, senders received over SMTP were getting passed
through the rewriting rules twice. Luckily in many cases the second pass
wouldn't have matched anything.

4. Recognize BODY=7BIT as well as BODY=8BITMIME.

5. Include euid/egid in the error message when failing to open the log file,
for help when debugging.

7. Internal error -27 (failure to completely write a data block) was not giving
an explanatory message for appendfile or smtp transports.

8. Forbid the definition of a macro whose name contains the name of a
previously defined macro.

9. When a "To:" header was manufactured from the recipients list (for a non-
SMTP message) it was being rewritten, but since the recipients list had already
been rewritten, this caused double rewriting, which is not right.

10. If a user set up two separate autoreplies from the same filter file to the
same recipient or list of recipients, only one got delivered, because they fell
foul of the de-duplication code. Now any number are delivered.

11. Remove the paranoid check in appendfile for a / in a local part that is
used in the expansion of a file name. It is a weak check and causes problems if
the local part is used in an expansion but doesn't form part of the file name.

12. Failure to open a log tries to write to stderr if available; it isn't
available if this happens from the daemon, but the check wasn't correct. Also,
the existence of stderr wasn't being checked when Exim was re-exec'd from the
daemon; panic logging could get written to file descriptor 2, which just might
be open for something else.

13. Added patches supplied by Harald Meland for building on ULTRIX.

14. Allow spaces between the key name and the colon in lsearch data files, for
compatibility with Sendmail alias files. Exim_dbmbuild now also accepts files
in this form.


Version 2.00
------------

1. When routing, only domain and localpart were set as variables; things like
original_domain were not. This was an oversight. (Hindsight: this actually
changed the value of $domain in routers to the address domain instead of the
route_domain value it had previously. This matters only if an address has
passed through an instance of domainlist that passed on a different domain.
Thinking about it, I have decided to leave it alone - the routing domain can
be obtained in subsequent domainlist routers by $0, and it will be the address
domain that is set in any transports.)

2. Reset header list empty before leaving accept.c. Otherwise a second message
into the same process that logged sender rejection writes the previous headers
(possibly mangled) into the reject log.

3. Messages that had been on the queue more than 99 days messed up the layout
in eximon. Change to weeks after 99 days, and to years after 99 weeks (just in
case).

4. If a message was addressed to a (non-existent) domain ending in digits, the
digits got chopped off when the spool file was first read in, thereby mangling
the domain. (Bug introduced by changes 6 and 9 of 1.950.)

5. Added debug_print to all drivers to help with debugging.

6. When log_subject was set, an empty Subject: header wasn't always logged
correctly (junk characters).

7. Both appendfile and pipe forced return_path_add, envelope_to_add, and
delivery_date_add to be FALSE if bsmtp was set. Now that appendfile no longer
has these options TRUE by default, this seems an unnecessary restriction, and
has been removed.

8. If RBL warnings were on and a host that was in the RBL list subsequently
had recipients rejected for another reason, the RBL message was given rather
than the real rejection message.


Version 1.950
-------------

1. Tidied up the logging of multi-line SMTP responses so that the internal CR
characters are removed so they don't show as ^M in eximon windows.

2. Added queue_list_requires_admin, default TRUE.

3. Added temp_errors to the pipe transport.

4. Split build directory to be different for BSDI4 and BSDI3.

5. Tidies on the QNX front.

6. Added "one_time" to aliasfile and forwardfile.

7. Fix 1 of 1.928 locked out the use of quoted pairs in local parts (change 1
of 1.750). Put back the status quo ante.

8. The :defer: and :fail: feature of aliases got broken after release 1.92 by
the store pool changes. They were treated as errors in the alias file.

9. Some preliminary work for possible support of DSN, conditional upon the
definition of SUPPORT_DSN. This is not complete.

10. Added fallback_hosts as a generic router/director option, applicable when
the driver queues an address for a remote transport.

11. Made envelope_to_add, delivery_date_add, and return_path_add generic
transport options, defaulting FALSE. Changed default configuration file to turn
them on for instances of the appendfile transport.

12. Added check_secondary_mx to lookuphost.

13. Made quota work for directory deliveries in appendfile.

14. Added hosts_treat_as_local.


Version 1.929
-------------

1. Sending waiting messages down the same SMTP connection wasn't working if
split_spool_directory was set. How embarrassing!

2. If a message was sent down an existing SMTP connection to a multihomed host,
the IP address written to the log was a random choice from the host's IP
addresses rather than the actual one used.

3. Filter: if an expansion for the "headers" command is forced to fail, the
command is just ignored. Other failures cause Exim to panic.

4. Add explanatory message after "all MX records point to non-existent hosts"
when the host "name" is an IP address.

5. Added sender_{host,net}_reject_relay_except.

6. Moved the call for the -brw code later so that the originator_* variables
are set during the rewriting.

7. If a "From " line had the address "<>" then Exim tried to qualify it, which
isn't helpful.

8. Yet another store-handling bug: searches were returning a pointer to the
cached data instead of copying it, and the callers were expecting a private
copy that wouldn't get overwritten.

9. Bug introduced after 1.92: Exim was not resetting after rejecting an SMTP
sender, so a broken or malicious MTA that continued with RCPT could still get a
message through.

10. The "user", "group", and "initgroups" options are now generic, and
available on all directors and routers. They have an effect only when a driver
directs or routes an address to a transport.

11. Allow comma as a valid maildir tag character.

12. Support for QNX added.

13. Change 9 of 1.927 below wasn't correct: it was giving the "non-existent"
hosts message when it should have been giving the retry message. Hopefully it
is now correct in both cases.


Version 1.928
-------------

1. Abandoned the use of iscntrl() in favour of explicit character value
testing, since (a) all topbit characters are given as controls in Linux and (b)
locale-specific testing isn't really appropriate for international email.
Similarly for isgraph(). Macros are now used for both these functions.

2. Change the load average function for Linux from using /proc/loadavg to
getting the value from the sysinfo() call.

3. The test_dbfn compilation wasn't working.

4. Added support for cdb files, courtesy of Nigel Metheringham.

5. Added support for linking in the tcpwrappers library and calling it to do
host checks.

6. Added -Mvb, -Mvh, and -Mvl options.

7. If Exim PANIC bombed out while in the middle of reading an SMTP message, it
wasn't sucking the remainder of the message before giving an SMTP response.
This could lead to a zillion SMTP error responses. One cause of this could be
rewriting failures while syntax checking the headers.

8. Removed the restriction on the length of local part that Exim is prepared to
rewrite (was 255 characters).

9. Since 0.56, Exim has insisted there be a domain following the ':' in a
source-routed address. Removed some redundant code in rewrite.c and deliver.c
that handled cases where there wasn't a domain, since these cases now never
make it through the parser.

10. Mode values in the configuration file are now assumed to be octal.

11. Exiqsumm: message sizes listed by -bp without a K or M suffix were being
mangled by exiqsumm by losing the final digit.

12. Smartuser didn't used to create a parent address when a transport was
specified and a new address was given. It now does. This means that
$original_{domain,local_part} are now available at transport time.

13. Added maildir_tag to appendfile.

14. Added first_delivery and manually_thawed conditions to filters


Version 1.927
-------------

1. Implemented smtp_etrn_command.

2. The "mail" command in filters wasn't allowing continuations in strings set
up as headers. It now permits \n followed by whitespace in those options. This
is particularly relevant when the contents of existing headers are inserted.

3. All calls to signal(SIGALRM,handler) have been changed to calls to
os_non_restarting_signal(SIGALRM,handler) which attempts to ensure that the
handler is set up so as to interrupt system calls. Unfortunately, some OS are
different to others, and what happens in Linux depends on what library you are
using.

4. Instead of adding fallback_hosts to each individual host list at transport
time, failing addresses with fallback hosts get put on a separate queue which
is delivered after remote deliveries are complete. Thus if several domains have
the same fallback host (quite common), there is the chance of a single copy of
the message being sent.

5. If a fallback host is down for a while, messages waiting for it should now
be sent down a single SMTP connection when it comes up again and something is
delivered to it. Previously this would not have happened.

6. The temporary headers that get added for rewrites were added in the wrong
storage pool if they occurred during .forward file processing.

7. Already-delivered addresses on the spool were being read with a 256-byte
limit on their length. Extraordinary pipe commands longer than this have been
seen. The buffer into which they are read was in fact 1024 bytes long, so the
correct length is now used.

8. If the system filter directed an address to /dev/null, this got entered in
the log line as "/dev/null@domain".

9. If all hosts listed on an smtp transport have MX records pointing to
non-existent hosts, give an appropriate error message saying so. Previously the
default "retry time not reached" message happened, which was confusing.

10. The -bS option was accidentally generating the greeting header line (a bug
introduced after 1.92). Also, it was setting the protocol to local-smtp instead
of local-bsmtp.


Version 1.926
-------------

1. Yet another store-handling bug (filter). I sure did shake up the code a lot.


Version 1.925
-------------

1. Added settings to OS/os.h-AIX for determining the load average.

2. Added MAKE_SHELL to EDITME to allow for setting up a different shell for use
by the make process.

3. Add AR macro to the build-time configuration, defaulting to "ar cq", for
systems where the default doesn't work.

4. Exicyclog: (a) change the statements that try to find the user and group of
the existing mainlog so that they work in Bash as well as the Bourne and Korn
shells; also make them work when ls -l and ls -lg return the same output; (b)
some uses of mv should have been $mv.

5. When a router specifies headers_add or headers_remove, do not automatically
copy its hosts to other addresses at the same domain, but run the router for
them, because we want the headers options to get re-expanded for each address
within the routing environment.

6. Yet another bug in 921 store handling (local_interfaces).


Version 1.924
-------------

1. Close SMTP channel tidily after various failures at the start of processing
a continuing message.

2. Don't continue with a frozen message.

3. Give error message rather than crash if argv[0] == NULL.

4. Fixed bug in 921 store handling (sender_fullhost).


Version 1.922
-------------

1. "Failed to create spool file" wasn't giving the actual error.

2. Added $originator_{uid,gid}.

3. Don't change received_time for an incoming message if the clock has gone
backwards since the last message was received by this process.

4. close() rather than fclose() the smtp input streams when forking to do a
delivery for -bs and -bS input. Otherwise, if the stream is a file, the file
pointer can get disturbed.

5. Fixed bug in 921 in setting up host/helo/ip-address string.


Version 1.921
-------------

1. If expansion of a headers_add option results in an empty string, or a forced
expansion failure, nothing is added. Also, a forced expansion failure of
headers_remove on a director or router causes nothing to be removed. (Other
failures are treated as configuration errors.)

2. Added helo_accept_junk_{hosts,nets}.

3. Lines in the configuration file that are longer than 1024 characters are now
handled.

4. Added retry_include_ip_address option (default true) to smtp transport.

5. If serialization was specified for a remote host, the logic for sending
multiple messages down the same TCP/IP connection could be defeated by a race
condition. The serialization check is now skipped when delivering down an
existing connection.

6. Renamed the very old non_mx_domains options in smtp and lookuphost as
mx_domains_except, to fit with more recent naming schemes and indicate better
what they actually do. (The old names retained as hidden synonyms.)

7. Added extract_addresses_remove_arguments.

8. Changed the error codes for too many recipients to 552 and 452, which is
in line with the example in the RFC.

9. Return a 501 error if RSET, DATA, or QUIT are followed by argument data.

10. Domains in addresses that come in via SMTP commands (MAIL FROM, RCPT TO,
VRFY) are now checked according to the more restrictive RFC 821 syntax rather
than RFC 822 syntax. This syntax is that of a DNS domain.

11. Added check_dns_names to do syntax check before calling resolver, as some
give temporary errors on bad characters.

12. If called as "newaliases", set -bi option (sendmail compatibility).

13. Exim used to write each header line with a separate call to write(). Now
the entire message data gets buffered up, so for small messages only a single
write() happens. This might improved performance in that it might reduce the
number of TCP/IP packets. It might also help with writing to files. At the same
time, for SMTP output, the terminating "." line is included in the final buffer
instead of being written separately. Because of buffering at both ends of a
TCP/IP connection, there is really no gain in keeping it separate.

14. Header lines starting with "." (legal in RFC 822, believe it or not) were
not being correctly received over an SMTP connection.

15. If size_addition is set less than 0 in the smtp transport, the SIZE
parameter is never used. This provides a way of turning it off.

16. A partial search on a key string that contained a lot null components (e.g.
a.......b.c.d) could cause overwriting and various crashes. Every other null
component was missed, causing the count to get out of step.

17. Received_protocol was not being saved and restored from the spool.

18. Massive re-organization of dynamic store handling, hopefully to be more
efficient. Included removal of redundant code for header handling, and
improvements in string expansion store handling.

19. Change from a single lookup cache record to one per open file/database.

20. Buffer up the EHLO response into a single write.

21. Appendfile is now prepared to attempt to make any number of directory
levels.

22. For testing without root access, if a local delivery is unable to become
root in order to change uid/gid, carry on instead of crashing if the current
uid/gid are in fact the ones wanted.

23. Added the host_number option.

24. Added the format_mailstore option to appendfile.

[Entries for earlier versions of Exim have been archived]

****