File: DONE

package info (click to toggle)
prayer 1.3.5-dfsg1-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,596 kB
  • sloc: ansic: 43,163; makefile: 817; sh: 445; perl: 166
file content (2072 lines) | stat: -rw-r--r-- 58,094 bytes parent folder | download | duplicates (4)
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
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
`$Cambridge: hermes/src/prayer/docs/DONE,v 1.70 2012/07/05 09:42:36 dpc22 Exp $

05/07/2012
==========

Release: Prayer 1.3.5

01/07/2012
==========

Add ssl_cipher_list and ssl_server_preference config options.
 ssl_cipher_list now defaults to:
  ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!EXP
   
Fix problem forwarding messages with complex MIME structure.

  Previously we looked for text in section 1, attachments from sections 2.
  If no text parts are found at top level of section 1 we displayed "Message
  body was not text: suppressed" and discarded that part. Better to include
  part 1 as attachment if we can't find text at the top level there. This
  is what PINE does in the same circumstances.
 
Sieve filtering fixes:
 account_mail_check() didn't clear out any existing lists of filters and
 blocks. Normally protected by:
  
      if (account->mail_checked)
          return (T);
  
 However that gets reset by "Update" on the Advanced filtering page.
 
 Need to disable Sieve script before deleting with Cyrus 2.4. 

 Old template set was missing <form> at start of Sieve upload.

09/11/2011
==========

Addressbook display needs to wrap long lines of addresses without spaces:
   "dpc22,dpc22,dpc22,...". Otherwise layout breaks.

27/06/2010
==========

Release: Prayer 1.3.4

22/06/2011
==========

draft.c fixes:
 Fold long lines of addresses before the entry which reaches 78 characters
 when possible, rather than after the first entry which crosses that
 boundary. Long standing bug bear of mine but several support functions
 needed to be rewritten to use scratch string in place of output buffer.

 Long subject lines which are not RFC1522 encoded need to be folded.
 separately. Reported by Andrey N. Oktyabrski <ano@bestmx.ru>.

 RFC1522 is not allowed to fold lines in the middle of a UTF-8 multibyte
 character. Reported by Andrey N. Oktyabrski <ano@bestmx.ru>.

Tidy library:
  Add support for tidyp fork of (apparently abandoned) tidy library.

Fix cross site scripting problem:
  MSIE and Chrome think that <!---> is a complete comment. Allows people to
  hide scripts inside <!---><script>...<!--->. Strip all comments (which is
  something that the old sanitiser had been doing already)

Sieve blocks should check "From: " address in body as well as
envelope sender address. Check "Sender: " as well for completeness.

Linux needs IPV6_V6ONLY to bind to '0.0.0.0' and '::' 

01/11/2010
==========

Mike Brudenell <mike.brudenell@york.ac.uk> reported problem with RFC
2183/RFC 2231 quoting with vey long filenames, or filenames with strange
characters from ASCII range.

20/07/2010
==========

Release: Prayer 1.3.3

08/07/2010
==========

Better handling of complex multipart messages:

 Rather than just displaying the first text/plain or text/html that we can
 find in the top, (leaving people to access sections for the other parts),
 display the entire tree: multipart/alternative are handled as before, but
 with other multipart messages, recurse into the subtrees and repeat. Given:

   1   (Nested multipart)
   1.1 text/html
   1.2 text/plain
   2   text/plain

 we display sections 1.1 and 2. Previously we would display section 2,
 which is a bit of a disaster if section (1) was the original message and
 a listserver has helpfully tagged on a message footer as a separate bodypart

Combine os_*.c back into a single file (which is where I started off
many years back). Eliminates lots of repeated code.

07/07/2010
==========

Bugs
====

os_bind_inet_socket(unsigned long port, char *interface)

  If interface resolves to multiple IP addresses then only binds to the
  first. Should really walk along ai->ai_next and bind to each IP address
  in turn. Unfortuanetly this means that os_bind_inet_socket() needs to
  return an array of sockfds rather than a single int. Parent routines
  probably aren't going to play ball either.

  Most likely cause will be a hostname which generates both IPv4 and IPv6
  addresses. Unfortanately it is a probably that we are going to have
  to solve eventually.


05/07/2010
==========

Fix XSS problems reported by:
  Jacob H. Hilton <jhh40@cam.ac.uk>
  Dr Andrew C Aitchison <A.C.Aitchison@dpmms.cam.ac.uk>

  Rather than trying to spot dangerous tags by simple substring matching in C,
  I now feed the html through Tidy library (http://tidy.sourceforge.net/),
  and then prune unwanted nodes from the parse tree before setting it to
  the pretty printer. The only problem is that the Tidy library doesn't
  provide any public API for manipulating the parse tree (although it does
  provide a public API for walking the tree!?), so I had to dig around to
  find the private functions required to remove and manipulate nodes.

  Javascript embedded into CSS is also a problem: I need to strip off CSS
  character entities before looking for dangerous expressions. The final
  part is still a simple string match: I hope that I don't end up having to
  generate parse trees for CSS as well as the HTML.

  Now passes full test suite at:

  https://secure.grepular.com/email_privacy_tester/

Better vacation screen
  Subject line
  Phrasing

Coping with multiple logins as single user from single browser:
  SessionID stored in HTTP Cookie: second login blats first
    Can store SessionID in URL (Prayer does this if no cookies available)
    Not secure: leaks in HTTP "Referrer" header with links from HTML email.
  Solution: Use HTTP Cookie keyed by PID of login session.

Smaller cleanups:
  Improve gap between words in spell check (Cambridge house style)
  Remove extra blank lines after postpone, restore cycle.

02/09/2009
==========

1.3.2 release

28/08/2009
==========

Switch to using BSD PTY code on Linux platforms as more reliable
  - Only actually relevant to accountd
  - Requires -lutil on modern Linux platforms (e.g: Fedora 10, Ubuntu 8.04)

Fix various bugs reported by Jon Peatfield <J.S.Peatfield@damtp.cam.ac.uk>
  Folderlist and maildir handling
  IP adddress list parsing
  Add RAVEN_ENABLE flag to Config file, depends on SSL_ENABLE
  Set ACCOUNTD_ENABLE=false by default
  Disable gzip compression when client is MSIE
  
09/04/2009
==========

Given text/plain which has <http://link.to.something> should create link,
as per RFC 2396:

 "The angle-bracket "<" and ">" and double-quote (") characters are 
 excluded because they are often used as the delimiters around URI in text 
 documents and protocol fields."

UTF-8 -> ISO-8859-1 conversion doesn't convert filenames.
  Fixed in source: 03/03/2009.
  Oh no it isn't.
    Either need to apply RFC 2231 encoding and decoding [correct, obscure]
    or RFC2047 encoding, decoding [incorrect, simpler, used elsewhere]

Junk email page. Centre whitelist.

Tab expansion (message from jw35, 05/02/2008)

19/03/2009
==========

Change the names used for CFLAGS and LDFLAGS in subsiduary Makefiles.
  
  BASELDFLAGS = $(LDFLAGS)
   . . .
  LDFLAGS = $(BASELDFLAGS)
  
doesn't mean quite what I though it did, although it seems to work quite
happily for me on both Linux and FreeBSD. I guess that I shouldn't be
surprised given the ability to type 'make LDFLAGS=foo' at a random piece of
open source software.

Alternative fix would have been to use:
  
  LDFLAGS := $(BASELDFLAGS)
  
That would seem to have more potential for future grief. Better to use
MYCFLAGS/MYLDFLAGS at the bottom.

31/10/2008
==========

Release: 1.3.1

By 29/10/2008
=============

Add some config backstops and automatic disable on outgoing email to counter
current phishing attacks:
  recips_max_msg
  recips_max_session (links to sending_block_dir if enabled)
  sending_block_dir
  sending_allow_dir  (whitelist to counter sending_block_dir)

Replace one instance of strcasecmp() with strcmp() in folderlist code:
  Previously mailboxes might be in wrong order if IMAP server lists
  mailboxes out of order. (Doesn't seem to be a problem with Cyrus/UW IMAP).

Replace X-Originating-IP with:
           "Received: from [%s] by %s" CRLF
           "   with HTTP (Prayer-%s); %s" CRLF,
           ipaddr_text(session->ipaddr),
           config->hostname,
           VERSION_PRAYER, date);

Virtual domain [user@domain login] fixes:
   Fix "Click to login again" links.
   Fix -f option given to sendmail when sending messages.

Subjects not being rfc1522_decode()ed correctly on display screen.

08/10/2008
==========

Release: 1.3.0

Add Raven (Ucam Web single signon) authentication. No interest to anyone else.

New template tree based on new Cambridge University house style
  Template tree now user preference ("old"/"cam").
  Three levels of status message, with different styles:
      default  :: "Reminder: logout" message
      info     :: Informational updates
      alert    :: Errors: things not expected in normal operation.

  Instead of truncating Sender/Recipient and Subject on the list screen,
  send the whole thing and leave the browser to truncate using following:
  class="altrows truncate"

Various small improvements:
  "Mark All" without persistent mark mode.
  Paperclip to indicate attachment on the list screen
  Upload/Download for Sieve 
  Printable Version of messages.
  Space use in mailboxes
  favicon.ico
  Clean up addressbook transfer screen.

Small uses of Javascript:
  Javascript on login page to select Login box.
  Add submitenter handler to a number of pages which would
  otherwise to odd or inconsistent things.
     Search page
     list/abook_list page select

Reflector for /session//compose
  - if can't connect to login session, frontend should bounce back a
    page so that people can cut and paste text.

Login screen replaced with frontend template. RSS -> HTML converter.

Bugfix: URL encode entries in the roles_select screen correctly.

Updates based on patches from c.d.wakelin@reading.ac.uk.
  HTML display:
    Show text/html in preference:
      29/09/2008: reverted until I can think of something more sensible
      to do involving messages with text/html attachments. Need to
      pay much closer attention to multipart/alternative tags?

    "Show remote images button" (unless prefs->show_remote_images set).
  Show full date/time
  Expunge on exit
  First unread option
  Show attachment in list (needed to work around c-client overview bug.  In
  fact all of the overview stuff seems to be redundant with imap-2007).

  Fix IFEQ template expansion bug where left or right hand expression
  was a quoted string involving spaces (too many levels of unquoting).

Updates from Magnus Holmgren <holmgren@debian.org>
  Manual pages

  Only include lookup options on the abook_list page if appropriate
  backends defined.

  Redundant config options: is_netscape4, use_embed_http and http_icon_embed

Fix lots of missing spaces in xhtml_strict tree, e.g: "alt="Next
  Infer that I had a problem with a script removing border="0" from
  xhtml_transitional. Little suprised that that Firefox HTML validater
  doesn't pick this up. Problem pointed out by Peter Benie (pjb1008@cam.ac.uk)

Improve PINE <-> Prayer postponed-msgs compatibility.
  Looks like PINE 4.30 started to add the following headers without warning:
    X-Our-ReplyTo: Full
    X-Our-Headers: Reply-To

Don't add default_domain if username supplied (and validated by the
IMAP server) is a full email address: probably incomplete.

01/07/2008
==========

Release: 1.2.3

30/06/2008
==========

Stop users from marking every mail in their inbox and then trying to
generate a GByte size message when forwarding offsite.
  - this was running into the limit_vm backstop, but better to just block
    when we reach config->draft_att_total_max (which should probably
    be renamed to be something like config->max_message_size).

24/06/2008
==========

Fix wrapping for long lines on abook_list screen

Some bug fixes from Magnus Holmgren <holmgren@debian.org>:
  Archive and remove session cache logs in prayer-ssl-prune using DB4
  log_archive() call rather than separate prayer-db-prune utility. Only
  appears to work with recent Berkeley DB libraries (specifically: it
  works fine with DB 4.6 on my Ubuntu 8.04 Hardy Heron desktop, but not on
  our main Webmail service which is still using a private DB 4.2 library).
  I can't see an obvious reason from the two log_archive() manual pages.
  People using old DB libraries can continue to use prayer-db-prune.

  welcome.html file now obsolete: replaced by welcome template.

  config->template_set: html4 template tree no longer exists.
    xhtml_strict should be the current default.
    If the config file refers to an obsolete or missing template tree return
    error rather than falling off the end of the template_map_index[] array.

  Session cache: Use DB_RECOVER on DB_VERSION_MISMATCH

12/06/2008
==========

Fix unquoted field on /login/xxx page.
  (Potential cross site scripting attack picked up by robot, don't think
   that it is actually a concern).

09/06/2008
==========

Release: 1.2.2.1
  Fix two silly bugs with public build
  reported by Joel Reicher <joel@panacea.null.org>
    - templates/xhtml_strict tries to copy (nonexistent) CVS directory
    - Public prayer.cf didn't have a static_dir definition.

05/06/2008
==========

Bugfixes:
 display_hdrs.t needs a non nowrap style (t_wbanner) for recipient list
 "Show Hdrs" should become "Hide Hdrs" when active.

03/06/2008
==========

Release: 1.2.2
  Has been running as our live Webmail service for a few days now

By 02/06/2008
=============

Fix assorted Makefile problems from the great 1.2.x reorganisation,
courtesy of Magnus Holmgren <holmgren@debian.org>

Merge devel stream onto CVS HEAD:
  Add XHTML strict template tree.
  xhtml has been replaced by xhtml_transitional and xhtml_strict:
    config option template_set selects active template tree.
  
29/05/2008
==========

Release: 1.2.1
  Has been running as our live Webmail service for a few days now

By 26/05/2008
=============

XHTML templates (currently XHTML 1.0 Transitional, but most of the way to
XTML 1.0 Strict: just need some style sheets for stuff like <tr bgcolor=)

Some more template bugs, picked up while translating everything to XHTML.
  spell screen had a stray/missing table
  filter screen had $target_mailbox rather than $mailbox
  Remove </li> from display_mime tree.
  </ol> in the wrong place on empty filter page
  compose: Not preparing line_wrap and copy_outgoing checkboxes correctly
  Attachment screen not listing offsets correctly
  display_hdrs: couple of <tr> in the wrong places
  search_date: Spurious <td>

1.2.0 reorganisation bugs:
  user_agent->use_icons not overriding prefs->use_icons correctly when
  Lynx/w3m in use

  Missing $g_use_icons paths for logout, rm, delete screens.

Other, long standing bugs:
 upload_xfer wasn't canon_decoding its argument for Append links

21/05/2008
==========

Release: 1.2.0
  Add template language: See ./TEMPLATES and ../templates
  Factor out common code used by Prayer and Accountd.
  Search: Default to search on recipient if looking at sent-mail mailbox
  Persistent mark mode:
   Don't switch "Change to:" dialogue to "Copy" dialogue: consistency.

  Lots of structural change (hence 1.2.0), very little user visible change.
  We have been running this for a few weeks now, the trickle of bugs
  created by the new template system seems to have dried up.

Couple of new mailing lists, as it ain't dead yet:
  https://lists.cam.ac.uk/mailman/listinfo/prayer-announce
  https://lists.cam.ac.uk/mailman/listinfo/prayer-users

10/04/2008
==========

Release: 1.1.0

Summary (more detail below, and in local CVS repository):
  Supports multilingual email with a decent iconv library (e.g: GNU iconv)
    All interaction with Web browser is now UTF-8
    (messages still send as ISO-8859-1 when possible, for simplicity)

  Supports different hierachy seperators (e.g: '.', '/') and personal
  hierarchy under INBOX. Configuration picked up automatically using
  server NAMESPACE response unless prayer.cf overrides.

  Supports dual use mailboxes. dual_use option in prayer.cf provides hint
  for new mailboxes (otherwise we need to force a folderlist cache refresh
  every time a new mailbox is added).

NB: If you need to downgrade from 1.1.0 for any reason, use 1.0.20. This
will automatically downgrade the UTF-8 preferences mailbox.

09/04/2008
==========

IPv6 support, courtesy of Magnus Holmgren <holmgren@lysator.liu.se>
and Antonio Querubin <tony@lava.net>

Release: 1.0.20
  Downgrades UTF-8 preferences file created by Prayer 1.1.0 and above
  back to Latin-1.

08/04/2008
==========

Back to using 'LIST "" %'. Slightly less efficient with my Cyrus backends,
but a lot faster for people using maildir etc. Also the code is cleaner as
I don't build a list of results and then transform it into a tree.

By 11/03/2008
=============

Present mailboxes as expandable tree of folders/
  Works with dual use mailboxes
  Runs 'LIST "" *' on initial login. This breaks Mark Crispin's tenth
  commandment for IMAP clients. However:

  1) Squirrelmail, IMP and Roundcube all do this.
  2) On my Cyrus server, LIST "" * is as fast as LIST "" %, so this is
     actually more efficient than paging in the directory hierarchy in stages.

  If someone cares, they are welcome to replace the folderlist class
  with one which runs 'LIST "" %' as required.

New config options:
  use_namespace       :: Get personal_hierarchy and hiersep from server
  personal_hierarchy  } in case no namespaces defined or incorrect
  hiersep             }
  dualuse:
    Hint to Prayer that new mailboxes are dual use. Things will mostly work
    if dualuse set to NIL (the default) on a server which supports it, but
    people will be unable to create children of newly created mailboxes
    without a "Refresh"

By 26/02/2008
=============

Check for postponed messages on compose rather than login (requires
additional IMAP connection, which is why we currently check on login).
Can just use STATUS command.
  - or just always open the draft_stream when someone click on Compose.

By 22/02/2008
=============

Add UTF-8 support. Based on patches from:
  Magnus Holmgren <magnus@kibibyte.se>, <holmgren@lysator.liu.se>.

but with a number of changes to:
  Add support for enctype="multipart/form-data" POST forms. In theory
  better for mixed character set environment as each key/value pair
  should include a charset parameter. In practice Mozilla doesn't
  seem to do this. application/x-www-form-urlencoded probably better as
  less verbose for simple ASCII text.

  Use ISO-8859-1 where possible when sending and saving messages (Windows
  1252 smartquote characters are transliterated to " and ').

  Handle multibyte characters correctly in line wrap and spell checking.
  Also handle UTF-8 characters which have double and zero display width.

  Not try to translate raw binary data into UTF-8 on attachment download.
  
  Fix UTF-7 mailbox handling [Surrogate pairs were decoded incorrectly by
  utf8_to_imaputf7(). It also incorrectly added UNI_REPLACEMENT_CHAR_UTF8
  to 6 byte and 12 byte sequences

  Fix a number of places where 8859-1 and undecoded UTF-7 mailbox names
  were still in use.

  Upgrade the existing version 2.0 preferences information (ISO-8859-1) to
  version 3.0 (UTF-8).

  No longer downgrade LDAP lookups from UTF-8 to 8859-1

  Use ACSII in Sieve files as the useful subset of UTF-8 and Latin-1.

By 01/02/2008
=============

Release: Prayer 1.0.19

Add .pid to PID filenames (and the various rc scripts which used these files)

Fix References handling to match RFC 2822, section 3.6.4 where a message
contains In-Reply-To, but no References header. Add sensible formatting for
References header using continuation lines, one Message-ID per line.

Don't call session_streams_check() if the cmd is restart. If it fails
the browser is redirected to "restart". Instant redirect loop.

Stripped out old session_direct experimental nonsense.

Copy the https check from the login page to the session page handler,
so that user's can't switch from https to http after login and expose
their session cookie to spammers.

Move prctl(PR_SET_DUMPABLE, 1) into os_linux.c as it is Linux specific.

Assorted trivial bugfixes, documented properly in local CVS.

04/09/2006
==========

Release: Prayer 1.0.18

Important Security fix:
  os_connect_unix() had a strcpy() which should have been strncpy() to
  prevent buffer overrun. Prayer 1.0.17 was mostly safe.

By 28/06/2006
=============

Release: Prayer 1.0.17

Fix small foulup wuth gethostbyname() calculations when binding Prayer
to specific interfaces.

Cleanups to stop char vs unsigned char warnings with latest c-client.

Make sure that all internal draft messages consistently use CRLF.

Security audit for Prayer frontend following attack:
  Optional Chroot environment (See chroot options in config file).
  Stripped out debugging code.

04/11/2005
==========

Fix small foulups with abook_lookup:
  Couldn't add last address to existing draft.
  Block LDAP metacharacters from search.

By 13/06/2005
=============

Release: Prayer 1.0.16

Fix silly bug when replying to multipart messages where the main message
and the text/plain subpart have different encoding (missing mail_body
call).

Add a limit_vm backstop to stop single runaway process from taking
over the system.

By 10/06/2005
=============

Release: Prayer 1.0.15 (1.0.13 and 14 internal releases only).

list screen doesn't set "current" message to middle of range. Means that
switching between various sort modes works more consistently.

Go fishing for text/plain or failing that text/html bodypart within top
level of multipart/mixed or multipart/alternate message when replying to a
message. Behaviour should now be consistent with cmd_forward and
cmd_display.

Include LDAP and local finger database lookups (latter for Cambridge use only)

Addressbook screen:
  Addressbook sort (can be set on Manage => Preferences => Display)
  Addressbook bulk removal
  Import and Export CSV (Outlook) format address screen

Spellcheck:
  Support native aspell as well as ispell, aspell in ispell compatibility mode.
  Means that Quoted text is not checked if the following is set:
      Manage => Preferences => Extra Compose =>
      Skip quoted text on spell check

By 09/08/2005
=============

Spam whitelist

Test the Referer header on login. Two independant prayer.cf options:
referer_block_invalid and referer_log_invalid

Test the Referer: header before performing a /redirect/ action in
order to protect against URL redirector abuse
  Doesn't work with "Save Target As". Remove entirely

Confirm on expunge.

Cleanup up account_message error reporting so consistent.

Fix format=flowed quoting problems.

Fix memory leak in mailbox download (2 x size of mail folder) until
next transfer or idle shutdown.

25/01/2005
==========

line_wrap_on_send preference not used by draft_init().

Fixed problems with multipart/alternate display and forwarding

06/01/2005
==========

Release: Prayer 1.0.12

Apparently "mutex" is already claimed by a system header on Solaris.

26/11/2004
==========

Release: Prayer 1.0.11

File locking on Linux (probably other operating systems) is pretty dumb
when lots of processes are trying to lock a single file for serialisation:
all of the processes are woken each time that the file is unlocked. Most of
the process will simply loop inside the kernel and attempt to lock
again. Presumably this approach makes nonblocking locks and EINTR easier to
do, but it does mean that you can get occasional load average spikes.  Add
MUTEX_SEMAPHORE to implement System V semaphore based lock, which does not
have this problem in Linux. Warning: System V semaphores are a finite
resource, and they are not released automatically. See: prayer-sem-prune.

Quotas now reported in MBytes rather than KBytes.

Add download links for text/html and text/plain attachments

Fix bug with body->type TYPEMESSAGE: c-client API very poorly documented :(

Strip out common HTML entity encodings that might be used in HREFs
with text/html attachments.

Fix mydb_db3.c to work with DB4.

Integrate into Tony's funky packaging system for Hermes and PPSW.

Add interface to automatic spam folder pruning utility that I wrote for
Cyrus (controlled through special Sieve files).

Fix uploads where mailboxes contain NUL characters (translate to space?)

Assorted minor bugfixes

22/04/2004
==========

Release: Prayer 1.0.10

Fix nasty /redirect bug that I managed to introduce by switching from
url_encode to canon_encode to work around bug in Opera. Missing a
url_encode: infinite loop from dumb UAs :(. Otherwise identical to 1.0.9.

21/04/2004
==========

Release: Prayer 1.0.9

Few minor bug fixes, covered in CVS history.

30/03/2004
==========

Prayer oddity with lots of disp_delete actions (not Cyrus specific?)
  Not reproducible.

cmd_spam:
  Invalid test on empty list for directory list when deciding whether
  spam folder exists.

Message dated 24 Sep 2003:
  I use pine with remote settings stored on hermes. If I postpone a message
  from pine and then send it subsequently from webmail it gets copied to a
  new folder: "mail/{imap.hermes.cam.ac.uk/user=jdb1003/tls}mail/sent-mail"

"Status: Browser history disabled as unsafe: use Webmail navigation icons
and links" appearing erratically?
 FIXED: typo in session sequence number encoding.

29/03/2004
==========

list_insert_sorted broken? No tail updates.
  Looks fine to me: not sure how I came to this conclusion.

Handle In-Reply-To: and Received: headers correctly when replying to a
message, for interoperability with threaded MUAs. (RFC 2822 sect. 3.6.4)

26/03/2004
==========

Opera 7.23: daft things with '/' quoting.

Timeout on sieve screen.

Better/more consistent address checking.  Typo caused abook lookup failures
when we tried to install this in October 2003.

Preserve System abd User flags when uploading/downloading mail folders

Remove SIGCHLD handler in prayer-session: this was confusing waitpid()
on FreeBSD and Solaris.

Assorted fixes for clean compilation under SuSE.

Assorted small fixes (typos etc) which will be recorded in CVS history.

14/07/2003
==========

:days option on vacation screen for Sieve vacation.

29/05/2003
==========

Release: Prayer 1.0.8

The only really significant change from 1.0.7 is support for spam filtering
based on X-Cam-SpamScore headers and support for a sieve backend for mail
filtering, currently undocumented. This will be of limited use to anyone
who isn't us.

Small bugfix:
  Added "SSL_INCLUDE= -I/usr/kerberos/include" to work around rather
  peculiar header dependancy in Redhat 9. We don't actually link against
  any Kerboros libary.

Think that's everything significant of late. Afraid that the detailed
comments are going into our (private) CVS repository these days.

12/05/2003
==========

Switch to using SSL_CTX_use_certificate_file(): appears to give us
certificate chain support without complications?

Initial (and very rough!) Sieve support for testing purposes.

CVS
===

Fed Prayer through: indent -kr --no-tabs before checking into CVS.

16/04/2003
==========

Fixed ctype.h.

Incorporate session_banner_path patch from Clive McDowell.

Fixed 2002 --> 2003 on recent timestamps in this file (I'm just so
observant)

07/04/2003
==========

Release: Prayer 1.0.7

Additional Configuration options:
  msgs_per_page_max.  msgs_per_page_min.
  abook_per_page_max. abook_per_page_min

  Need to add to master cf file.

05/04/2003
==========

Fix session_server() ping interval logic.

28/03/2003
==========

Added message download link for Message/RFC822 sections.

27/03/2003
==========

MHT nonsense.
  Fixed: Message/822 shouldn't be encoded as BASE64 or QUOTED

Fixed abook_list boundary condition when current entry is last on page.
(Same fix that we had to apply to cmd_list long time back: sigh).

Attachment download/display esp: IE6
  - Better use of Content-Disposition: inline
  - Use '.' in filenames: quoting arrangments changed.

26/03/2003
==========

Slow process leak in iostream_getchar()
   Looks like SSL_read can block even after SELECT
   - need proper timeout here somehow.
   - need to use non blocking I/O method: will need some testing.

  - Fixed (I hope!) by putting underlying socket into non blocking mode
    and more careful use of select/retry and error testing around ssl_read.

  - Cleaned up code in process. Nee

Make sure cmd_restart robust e.g: browser buttons.
  - Seems to be reasonably robust, though hard to trap error conditions
    on every ml_ call reliably.

Delete open folder
  => close, bounce to inbox if required

IP address off by one error:
  I also tried a different IP address and it acts the same way, i.e., i
  had to specify 193.160.13.2:80 to make it use 192.160.13.2:80.
    - Looks like SCO/Unixware bug: no success duplicating this.

Additional Configuration options:
  msgs_per_page_max.  msgs_per_page_min.
  abook_per_page_max. abook_per_page_min

Missing /usr/lib/sendmail ==> mail dropped.

24/03/2003
==========

Manage with single "\n" in .forward file => splat. End up with a
    redirect
      address <nothing>

Fixed at accountd end, but also made an effort to catch invalid cases at
accountd client side.

Spelling correction should use <em> rather than <b>
  - Disagree: <b> clearer, at least when defined.

13/02/2003
==========

Typo: "MSshell :: subject" --> "MSshell :: redirect"

06/02/2003
==========

Fixed config->prayer_user expansion.

fatal() shouldn't dump core if root.

31/01/2003
==========

Release: Prayer 1.0.6

27/01/2003
==========

Add initial support for getpwnam(), getspnam() for accountd authentication.

Use c-client address parsing code to split pattern into localpart & domain
components.

24/01/2003
==========

Apply sanity checks to email dialogue on filter screen:
  either simple name which matches Hermes account name or legit email address

21/01/2003
==========

Fix mydb_db3.c to work with DB 4.1

Disable gzip for Opera attachment download.

session cookies:
  No expiry date => disappear when browser closed down.

Quote username in argv:
  Just want to stop Prayer interpretuing funny usernames e.g: fred@xxx
  Simple string_url_decode in prayer_server.c, session_exchange.c

03/12/2002
==========

Remove "Feel free to send more messages" text from vacation messages.

18/11/2002
==========

Release: Prayer 1.0.5

11/11/2002
==========

Better handling of quota errors
 (UW server may generate list of quota warnings followed by "OK" response,
  even though operation has failed. Even worse c-client quietly ignores the
  warnings and takes the final OK as definitive).

cmd_abook_list: Fix "Added 1 addresses to draft"

06/11/2002
==========

Fixed inconsistent DB_RECOVER stuff.
  - transcient nature of data means
    Best to run without recover, remove Dbase on startup

Add allow_changing_from config option.

Catch (session->upload_file == NIL) in cmd_upload_xfer
  (People playing silly buggers with browser history).


30/10/2002
==========

Small amount of juggling to get rpmbuild working correctly on Redhat 8.0a

Release: Prayer 1.0.4

28/10/2002
==========

Berkeley db libraries still leaking 12 Mbytes on DB create:
  close, reopen should fix the problem.

Add DB_RECOVER mode to mydb startup at first attempt.

Remove invalid NIL argument to log_panic() call in mm_fatal()

22/10/2002
==========

Missing argument in cmd_expunge reporting message count

socket_split_spool
  - '.' was a bad choice of character in session sequence ID:
    mkdir('.') anyone? Switch to + which should be safe.

  - DONE

15/10/2002
==========

Appear to have a good stable version

Release: Prayer 1.0.3

09/10/2002
==========

socket_split_dir as safe guard
  (64 way split on sockets directory based on first character of sessionID)
  DONE, including backwards and forwards compatibility

08/10/2002
==========

Reverse alarm(0) and os_signal_alarm_clear() in ssl.c: tiny race condition.

Refresh doesn't do "New mail" correctly.
  - msgmap_check() should have been msgmap_update() to get accurate count
    immediately.
  - Added safety check so that folder onto gets checkpointed once every
    5 seconds.


07/10/2002
==========

Nasty SSL_accept bug
  - Appears to have actually been problem with deadlock inside SSL
    session cache. Side effect of ssl_prune job hanging? 

/robots.txt
  - DONE

Links in message should use: /redirect to avoid Referrer attack.
  -DONE

http_max_servers spin: sleep(0) is NOOP. Replace with sleep(1).
 - DONE.
 
06/10/2002
==========

Added login_prefix_path and login_suffix_path.
  - DONE (still need to verify output pages)

Added support for /static/ URLS and .css files, just in case we need them
  - DONE

Spell check:
  Fixed at least one, possible two bugs in interaction between spell
  checker and browser history. Safest to bail out if we see people playing
  silly buggers with browser history there: very stateful.
  - DONE

Fix /icons - /opts lost!
  - DONE

Fix /icons and /static namespace.
  - DONE

30/09/2002
==========

msgmap_find_deleted():
  Fix zm_offset initialisation if zm changed size

23/09/2002
==========

SESSION_CACHE_ENABLE
  - managed to break this when upgrading to latest Cyrus session cache.

06/09/2002
==========

Release: 1.0.2

05/09/2002
==========

Fix off by one bug in cmd_abook_list form processing.

cmd_reply2: do stream_check_uid to stop out of range effects.

16/08/2002
==========

Release: 1.0.1

15/08/2002
==========

Fix bug handling empty prefs esp: maildir

13/08/2002
==========

Add vacation aliases list
  - DONE

Check password changing via accountd
  - Need way of skipping "Warning: " text from passwd program
     e.g: 8 character passwords.
     Added "warning" clause. Need to test quietly.
  - Test.

Remove stray upload tmp files.
  - DONE

Need to integrate latest session cache into prayer
  - DONE

Port back iostream changes...
  - DONE

Abook list is missing first entry in each range. Doh!
  - DONE
  - Added # numbers to code and documentation.

http:// links: Remove final '.' from link.
  - Fixed

Source link in RPM incorrect!
  - FIXED

06/08/2002
==========

Released code had 3 x fprintf(stderr) left installed for debugging.
Silly boy!

29/07/2002
==========

Made hash function used by assoc keys a bit better distributed.

23/07/2002
==========

Release: Prayer v1.0

Set up RPM build environment:
  "make RPM_BUILD=true" sets up build parameters using Config-RPM.
  prayer.spec file written.

Make sure that account has a default configuration file.

22/07/2002
==========

Couple of minor tidyups inspired by Tony looking at FreeBSD install

21/07/2002
==========

Check documentation briefly.

Only initialise SSL subsystem if HTTPS ports defined

Add Copyright line/disclaimer to all source files ready for source release.
  (making sure that the session cache stuff is correctly attributed).

local_domain_list problems when prayer_session running --foreground for
debugging purposes: Problem was that session_free() was calling
config_free() when it didn't own the config => config go bye-bye
  - FIXED

Catch message number out of range on postponed message list screen
(combination of browser history + Outlook silly caching behaviour meant
that it is possible to end up on invalid postponed msg list).
  - DONE

19/07/2002
==========

Bug:
  Select unseen, read/delete, then expunge when still in the subset 
  returned from the search.
    Mailbox access error: mail/IN/incidents
    Status: Lost connection to IMAP server (possible concurrent access?)

  FIXED: Needed to integrate msgmap_recalculate() into msgmap_update()
  as expunge events can change number of marked messages
    => must force full recalculation of sorted and subset ranges.

Make http://... in body of mail a 'clickable' link:
  Should be possible to subvert line wrap system

Download <-> Show full headers.

Fixed "<html>" markup bug in cmd_prefs.

prefs->html_inline_auto set
  => Display docs starting <DOCTYPE inline

Apply "Back to Options Screen" consistently.
  - DONE

17/07/2002
==========

Fixed markup bugs on transfer, favourite and upload_select screens.
  - DONE

Reverse sort:
  cmd_display(): delete --> move to "previous" message rather than "next".
    DONE

cmd_display(): 'Copy' should move to "next" message like delete
  - DONE

24/06/2002
==========

Remove trailing \012 from request->request. These started to appear when I
fixed a bug parsing the method lines (it was translating CRLF to LF on the
quiet). Bug fix was causing CR characters to turn up in log files.

No longer log invalid requests in accesslog
  - silly idea as unparsed requests were already reported in prayer log
    and parsed request contains little useful content.
  
22/06/2002
==========

Added bounds check to chunked transfer encoding. (Prayer isn't vulnerable
to the buffer overrun exploits seen in Apache < 1.3.26, but it wasn't
counting bytes correctly, which could lead to a denial of service attack)

Removed a few redundant config parameters from request_* methods.

Fixed (safe but slightly confusing) overloaded use of request->body_size
by introducing request->chunked_body_size and friends.

21/06/2002
==========

Verify install works okay on Redhat Linux (using Redhat RPMs + own install
for c-client), FreeBSD and Solaris.

20/06/2002
==========

Tidied up include files for clean install. Make sure that accountd compiles
cleanly on Redhat Linux, FreeBSD and Solaris. (Interaction with the Linux
/usr/bin/passwd is still proving temperamental).

19/06/2002
==========

Added is_netscape4 clause into user_agent (+prefs +config)
  - enables broken HTML to keep Netscape 4 happy.
    (border=0 in image submit clauses, wrap="virtual" in <TEXTAREA>s)

18/06/2002
==========

Accountd:
  Added simple scripting language to try and make it more general.
  Added (currently optional) second argument to fullname command
    - fullname NewName          OR
    - fullname password NewName

  So that we can quitely migrate to the second form.

16/06/2002
==========

Replaced atoi(assoc_lookup(request->form, "page")) in:
  cmd_abook_list(), cmd_aggregate.c() cmd_aggregate_tmp()
  - possible to end up with atoi(NIL) --> bang with invalid form input

15/06/2002
==========

Fixed silly HTML markup bugs on cmd_dictinary and cmd_roles_list screens.

Check whether speller checker actually active in cmd_spell. Also check for
active draft message => can spot people playing silly buggers with the
browser back button.

Added line wrap on spell:
  config->line_wrap_on_spell
  prefs->line_wrap_on_spell
  + option on preferences screen (page revalidated at w3c).

Move manual line wrap preference down a bit for Stella.

Check line_wrap_on_reply + line_wrap_on_send defaults: was bug in the code.
Looks okay: may have a few redundant "line_wrap_on_reply: true" and
"line_wrap_on_send: true" lines appears in user .prayer files, but not
the end of the world.

Flush preferences on the cmd_abook_list() screen

Need to add line_wrap_on_spell to all cf files.

12/06/2002
==========

Fixed silly "No messages to expunge" counting bug which followed from
zm changes yesterday.

Added a couple of msgmap_update() calls to make sure that cmd_expunge()
has correct msgmap before and after ml_expunge.

11/06/2002
==========

Fixed silly crash bug caused by async notification of new mail by mail_sort
  - fixed all instances of stream->nmsgs which should be zm->nmsgs

09/06/2002
==========

Testing against proxy server:
  Translate silly error message from imap_login() back into English inside
  ml_open(). Rationalised session_server() and session_login() a little bit
  to remove duplicate error reporting.

Select last message in msgmap as session->current when changing folder:
  This way things work properly with sort orders != ARRIVAL

08/06/2002
==========

Expunge on empty folder => bang.
  - Silly bug caused by new msgmap_find_undeleted() stuff

cmd_copy_msg: didn't check session->other_stream live before ping
  - Factor out code to session_streams.c, rationalise + checked all.

Move session_save_options and session_close_streams to session_streams
for consistency & to put all stream unpleasantness in single place.

cmd_compose():
  Failed to check that session->draft_stream still valid when postponed
  message selected (concievable that it had timed out).

04/06/2002
==========

Fixed silly If-Modified-Since crash bug.
  (Amazed nothing triggered this up to now)

Put Delete links back onto list pages
  (removes need for nested tables => Lynx works better)

02/06/2002
==========

Cleaned up build process and documentation of build process a bit.

Updated default prayer.cf to match prayer-debug.cf

Cleaned out some of the old icons.

prayer_main:
  Close STDIN, STDOUT and STDERR if we are running in the background
  Means that we can shut down controlling terminal without any messing around

01/06/2002
==========

Check new expunge <-> sort interaction.
  - Think that its right, need to clean up in harsh light of day.

Sorting => bang?
  - msgmap out of sync with stream somehow
  - next page calculation wasn't correct in cmd_list: contrib factor?

ml_elt vs mail_elt?
  Both should generate core dumps!
  macro: ml_elt --> mail_elt for time being

29/05/2002
==========

Catch msgno out of range in cmd_reply

Bugs:
  If you forward an email to an invalid address (e.g. 'mark victory') you get 
  the expected error message. If you then go to Mailbox, open the message and 
  try to forward it again then the error reappears *before* the usual compose 
  window (i.e. before you can enter a valid address)

  FIXED (give sensible error message and bounce back to compose screen)

28/05/2002
=========

Sorting => bang?
  - Not repeatable
     => either uninitialised variable or off by one error

  - _believed_ fixed:

      if ((stream->nmsgs != z->nmsgs) || (stream->uid_last == z->uid_last))
        z->valid = NIL;

    changed to be:

      if ((stream->nmsgs != z->nmsgs) || (stream->uid_last != z->uid_last))
        z->valid = NIL;

Puzzled why this wasn't caught up to now...

27/05/2002
=========

Filter bug:
  Need to test fix, retrofit space into MSshell filter expansion.
  Use foranyaddress in recip stuff?
     - DONE

Fixed free on unassigned "value" in filter_test_addr()

session_streams_change()
  --> bang if other_stream timed out.

cmd_change():
  badly nested parenthasise --> logic bug

Delete Marked messages with no marked messages
  => silly uncaught exception

Character sets.
  - Have a brief think about just what is involved.

accountd hangs occasionally when changing password?
  - add alarm timeout into code. DONE: Test.
  - Try to work out why its hanging!

23/05/2002
=========

Possible bug with attachments and MSIE
  need to disable HTTP/1.1 and persist again
  Actual problem was with gzip encoding in response_raw
    - silly mistake involving headers.

Reverted to using lower case in MIME multipart headers
  - upper case just looked ghastly.

22/05/2002
==========

Fixed session_message format bug in cmd_forward1.c

20/05/2002
==========

prayer-ssl-prune
  - Shouldn't need to worry about hostname stuff.

18/05/2002
==========

Removed indentation for threading modes: appears to be broken.

Fixed help text macros. Added __STATUS_NONE__.

Strange attachment bugs?
  - Display top level message/RFC822 fails
      - Fixed: need to rationalise, test structure
  - Forward MIME torture test breaks loses a few parts of msg.
  - Mulberry doesn't always interpret messages sent by Prayer correctly?
      - Check RFCs, follow PINE MIME structure precisely?
  - Believe that all of these are fixed now. Need to check.
      - Appeared to do the trick!

Check html_secure stuff: code is close, but not quite there: DONE
  - thought: replace illegal targets with <cleaned_tag> like IMP: DONE
  - Need Referrer trap: DONE

15/05/2002
==========

Postponed folder doesn't appear, disappear correctly any more?
  - FIXED

Download message ==> display.

11/05/2002
==========

Fixed page offsets in abook listing

05/05/2002
==========

gzip compression: flush buffer in pages...
  - DONE

Implement ETag (could be reason that some UserAgents refetch)
  - What does Apache do?
  - Answer: combines mtime, size and file inode
  - we now to same (using decimal rather than hex because I'm lazy).


03/05/2002
==========

Allow folded lines in config file:
  Use string_get_lws_line, then check for CRLF sequences, escaped by \

Fixed abook_list/role_list bugs
  - & should be &amp; in prefiled GET form

hmtl_quote was converting ' ' to '&nbsp;'. Yuck!

Some browsers sending character 0xa0 instead of ASCII space 
  - &nbsp; in ISO-8859-1
  - draft_update_body quitely translates back now...

Need abook_entries per page preference.

01/05/2002
==========

Addressbook:
  Split into pages
  Abook search <--> Compose link

21/04/2002
==========

Added HTML checkboxes as option on list screen:
  Added use_mark_persist option to control this behaviour.

Rename outdated procedures: global search and replace.
  zoommap                --> msgmap 
  buffer_puts_quote_html --> html_quote_string

Push all ->spare and ->spare2 references into msgmap.c

Checkboxes on abook screen?

20/04/2002
==========

Enable gzip encoding selectively:
  Check for Accept-Context-Encoding: gzip or x-gzip header headers.
  Add user-agent field for gzip
  gzip_write in blocks (need block access mechanism)
  Enable gzip for certain IP ranges only, sepcifically

  gzip_enable  = "131.111.99.0/24"
  gzip_disable = "131.111.0.0/16 : + friends "

Reverse lookup on client IP address (for local IP ranges only?)

Need some routines to compare ipaddr to strings.

Fix themes/colours.

Added interface to use_http[s]_port

19/04/2002
==========

Line wrap:
  Discard short lines stuff
  "  " at start of line ==> new paragraph.

Warn if _non-empty_ draft active on exit

15/04/2002
==========

Content-Encoding: gzip.

14/04/2002
==========

Cleanup up zoommap code.
  - propose: sort/thread all messages, _then_ apply zoom.
     => intermediate step not invalidated by search/mark operations
         - should be more efficient.

Zoomap:
  SORT/THREAD all, _then_ subset marked surely more efficient + simpler

Address Book Take:
  find existing alias.

Delete postponed_folder on exit if empty, active.

Reply, Postpone, Resume doesn't record which message we are replying
to => answered flag set incorrectly.

Related:
  If we reply to a message and then change session->folder, answered flag
  will be set on wrong message
    - need to record current folder, open special stream if != current

accesslog: session record frontend process involved
  - done. A little involved because of log structure

Accountd:
  Partition out SSL better!

13/04/2002
==========

Add thread mode
  DONE.

12/04/2002
==========

Filters broken a little: need to remove '^.*', '.*$' and or add '(?s)' as
appropriate.

07/04/2002
==========

Have a brief go at history mechanism for back button
  - don't think that its actually all that involved.
  - need to record active mail folder. What else?

Move postponed stuff to draft.c

Check for postponed_name which should be draft_foldername...

Move session stream manipulation stuff to own file (session_streams.o?)

06/04/2002
==========

Add From address to role (matches IMP).
  - easy little task.

Better handling of postponed-msgs STREAM:
  - need to be first class object rather than have
    other_stream fight for possesion of stream

Add "Resume draft" link on msg display for postponed-msgs
  (+ link from postponed list to show folder as full list)

05/04/2002
==========

BUG: Empty cdb lookup not handled correctly in abook_substitute_recuse
  - Fixed

04/04/2002
==========

Send messages as format=flowed. Not handling incoming messages as
format=flowed yet: fixed width seems better for our purposes.

Analysise login procedure: why so long?
  - Save options bugs certainly wasn't helping us...
  - Some work with Netscape indicates that login time actually not
    very long. Most likely problem is people hitting login button twice.
  
29/03/2002
==========

Make prefs->sent_mail_folder and prefs->postponed_folder relative to
prefs->maildir (motivation: want Fcc: line in postponed messages to be
compatible with Pine which appears to do this).

Roles state lost if you move back and forwards 
  webmail1 <--> webmail2?
  Yes: quite likely give 4 file vs 5 field stuff.
  Switched so that first four columns match => compatible
  (though Fcc information will be lost if we have to backtrack).

Need to spot
  mail/postponed-msgs
  mail/sent-mail
  in prefs file and cmd_prefs. 

Need a final decision on Line Wrap nonsense: get it over with!
  - DONE (I hope!)

Simpler abook format please!
  - Use tab separator and linear whitespace? (encode TAB, nothing else)
  - Provide backwards compatibility with existing format.
  - Already in place!

Draft management
  Store attachments in files rather than memory?
  - DON'T bother!

28/07/2002
==========

Disable MSIE compatibity for Opera in response_raw()

Attach 0 length file --> boom!
  - consequence of string_url_decode for Macs...

27/03/2002
==========

Put up on webmail2.hermes and test w, without optimisations.
  - Whats going on with these erratic SSL errors!
    Self signed certificates or something more sinister going on?
    Possible uninitased variable in iostream/SSL stuff
  - looks like Netscape 4.X (X > 0) has problems with session cache stuff?

  - Appears to have been following:
    SSL_CTX_set_options(server_ctx,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);

25/03/2002
==========

tjc34 reports:
  I don't get any error messages at all - it just appears switched back
  on again if you go back and look after switching it off.
  Ask her to check: DONE, has been fixed.

Help text macro bugs
  - FIXED

Need sanity check on Fcc field in Roles, Compose Fcc.
  - DONE

Personal Dictionary:
  Back to Options screen
   - Fixed (need to append help text)


24/03/2002
==========

Filter bug
  - FIXED (missing QMETA).
  - Check MSshell stuff: appears to be different.

Glorious memory leak in prayer frontend server (leaks into shared)
  SSL session cache: CREATE leaks 12 MBytes, first time only!
   - FIXED (close reopen dbenv after create...)


23/03/2002
==========

Added Fcc header + Fcc element to role.

Add Fcc header and case insensitive sort for dirlist
  - DONE

22/03/2002
==========

Catch attempts to import invalid abook formats.

Check Ports: Solaris. FreeBSD.

21/03/2002
==========

Core dumps from SSL_write
  - SIGPIPE: IGNORE ==> write() will fail.

Windows Netscape <-> SSL problems.

string_url_decode() attachment names

Colourise messages: different quoting levels.
  - DONE (4 levels defined in theme)

Line wrap options
  - DONE

Clean up abook lookup stuff?
  - Not quite as bad as first look
  - Actually duplication is simply so that error reporting correct:
    reports correct address causing loop. Leave it be!


19/03/2002
==========

Help text:
  Replace toolbar with link back to parent screen : DONE
  Need common link to explain master toolbar

IE6 downloads all the icons on each page refresh event.
  - why? Thought: memory cache disabled on shared workstation?

Redirect screen broken?
  Empty email address => 
    Redirection Address must be single, simple and fully qualified
    email address

  tjc34 reports:
    I don't get any error messages at all - it just appears switched back
    on again if you go back and look after switching it off.

Need theme selection on Prefs screen.

Need some more themes
  - Expand list.

14/03/2002
==========

Need ssl_prune routine.

11/03/2002
==========

download <-> back button broken:
  switch to download to local disk.

Preserve MIME type on file upload?
  - Happens already.

Upper bound on total memory use: DONE

Check for file descriptor/memory leaks

Factor out common code into library
 => easier to replace prayer-session without replacing prayer.
 - INSTEAD: separate version numbers for prayer and prayer-session
    => bumping version numbers doesn't change code.
       can run diff on Prayer to see if needs changing
       Still need separate prayer-session init script!

Rationalise config files:
  Make sure everything enabled properly.

07/03/2002
==========

Catch SIGPIPE ==> core dump  (+ other signals?)
  ==> should help us in tracking.

Download bug: (Netscape specific?)
  Redisplay --> display screen
  Propose: Download should download to local harddisk
  Fixed

Some kind of crash bug which does not cause core dumps involving
attachments? Gives no data in document error (probably just a consequence
of crash).
  - May be Netscape 4.7 on Windows
  - May relate to strange attachment names?

 Problem was sendmail/exim considering single '.' on line to be EOF:
 dropping connections before attachment sent => EPIPE
 (and this rather more common with attahments present because of QP
  encoding of text segment).

Attachments:
  Some crash problem specific to Mac

Assorted restart bugs?
  - believe existing bugs fixed

Crash bug involving attachment upload (lost core dumps? Silly bugger).
  - may be related to above?

05/03/2002
==========

SSL certificate cache.
  Need some way of sharing state between processes? Have a look at just
  what Apache mod_ssl does. Conceivable that we need a multithreaded prayer
  frontend process which works a bit like stunnel.

Themes.
  - Try white/gray (#FFFFFF, #EEEEEE) mix if nothing else!
  - Add to add option.

Jon noticed:
  I've just noticed that, when I'm looking at the last message in a folder,
  the text toolbar reads (for me at least):

  Previous | Previous | Copy | Delete | Mark | Reply | Forward


"Error: Checksum mismatch: manually manually .forward file?

list: limit of 42 messages

quota problems on Send ==> leave on compose screen.
  DONE: !!!TEST!!!

Timeout on compose screen should be two hours.

iostream:
  Need to protect read/write clause against EINTR better: DONE in prayer
  Need alarm() based signal for write path?
    Does write() ever block on output?
       - timeout in OS?

31/01/2002
==========

Force user name to lower case (possible this should be config option?)

Check whether Apache optimises socket layer.
  - Borrowed obvious options, need some side by side comparisons.

Sanity check preferences file to catch malicious users.

29/01/2002
==========

Reply to all doesn't handle To and Cc list properly!
  Also stray comma on display...

cmd_reply from zoomed list, then cancel => return to wrong message
  - Problem was incorrect range test in cmd_display, now fixed.

Working on correct display for single part msg != TEXTTEXT

25/01/2002
==========

Fixed a number of small bugs:
  . Reply to All where To addr contained a Hidden; group bombed because
    of strcmp on addr->mailbox && addr->host without validity test

  . Core dump if session_idle() after cmd_restart()

  . Core dump if browser back button used when session idle
     (was failing to call session_check_streams() in time).

21/01/2002
==========

Check MSIE: caching for downloads required?
  (As part of put up on plum, then maroon tomorrow)
  - Answer, yes it does (dopey program!)

Tested with MSIE: _appears_ to be working fine now...

Fixed up various session_messages and session_logs
  - run diffs carefully, then install as 0.9.3!

Folders screens cleaned up:
  Fixed width of various fields to stop things wandering around
  Added &nbsp; as placeholders where needed.

20/01/2002
==========

Catch /etc and ~/ escape sequences in maildir, sent-mail and postponed-msgs
  - Dialogues, preferences and prefs files.

Added session parameter to options_parse and subsiduaries for logging

Record target IMAP machine in User login line (optional), useful for
debugging?

Need to catch delete failures.
  - was doing this correctly in 1/2 cases.

prayer.rpt:
  Couple of minor markup/comment bugs

Pound signs.
  - Missing ';' from '&#xxx;". Sigh!

MSIE "application/octet-stream" downloads.
  - Fixed by looking at what SquirrelMail does
  - Short answer is to use Content-Disposition; inline; filename=whatever
  - Still unsure whether IE needs caching switched on

Strip leading path from attachment uploads and downloads:
  present last part only (whether "/" or "\" characters used).

Clear session->dircache if supress_dotfiles triggered!

Move HTML for welcome page out to welcome_path
  - Provided __TIMEOUT__ and __CONTACT__ macros

Report correct message count for mark/aggregate and unmark/aggregate

Fixed supress_dotfiles in master toolbar change dialogue

Use config->login_service_name when generating cmd_abook_xfer screen. 

15/01/2002
==========

Cleanup up release version.

Empty list screen => Still need refresh button
  - have simple version!

Change to inbox => select first unread message.

14/01/2002
==========

Test import/export: Need functional accountd.

Record user_interface level in prefs => can transfer back and forth.
  - just steal code back from 0.8.6!

13/01/2002
==========

Address Book Take: suggest subscreen off message display.
  - DONE

Import/Export Addressbook <-> Hermes .addressbook file.
  - DONE: Still need to test this!

Check XXX comments.
  - DONE. Small number still to be dealt with.

11/01/2002
==========

Prefs etc no longer saved properly.
  - Add save call to start of cmd_list, cmd_display, cmd_compose?
    Should be able to reuse existing code.

Possible to factor our common code from various folder list displays?
  - Looks like it will involve more work than it saves.

Clean up cmd_list and cmd_compose:
  Split out functionalilty into subsiduary modules.

10/01/2002
==========

Remove user_level stuff. Disable help screens. Check cmd_welcome.

Clean up empty screens.

Rename:
  cmd_save      --> cmd_copy
  cmd_save_msg  --> cmd_copy_msg

Clear out redundant icons.

Split html_banner_toolbar into component functions rather than overloading
single function with hacks.

Front page:
  Discourage non-SSL logins.
  Put text only vs text and icons links dialogue on front page?