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 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144
|
=== RELEASE 1.9.31.rel ===
2002-12-23 Matthias Andree <matthias.andree@gmx.de>
--- 1.9.31.rc1 ---
* configure.ac, fetchnews.c: Portability: Only fork() if fork()
really works (AmigaOS.)
2002-12-18 Matthias Andree <matthias.andree@gmx.de>
* README-daemontools: Make a little more verbose, work out the svc
-t difference for LISTENIP vs. nntp.cdb.
2002-12-16 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog, NEWS: update
--- 1.9.31.devel2 ---
* fetchnews.c: Rename misnomed lockfile_exists to try_lock. Switch
from signal to sigaction.
* mgetaline.c, nntputil.c: Switch from signal to sigaction.
* configure.ac: bump version
* artutil.c: Only print one '..as 12345 in de.test' line per REAL
post, not when catching up because the previous run crashed before
the active file was written.
* applyfilter.c, leafnode.h, lockfile.c, texpire.c: Rename misnomed
lockfile_exists to try_lock.
* mysigact.c, Makefile.am, mysigact.h: Add mysigact library.
2002-12-15 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog, NEWS: update
--- 1.9.31.devel1 ---
* Makefile.am, configure.ac: Fix --with-included-pcre build. Note
all files now link against PCRE.
* pcre/: Makefile.in, configure.gnu: Fix VPATH build for dftables.
* configure.ac, malloc.c, realloc.c: Portability improvements; use
malloc.c and realloc.c to work around NULL==malloc(0) that may emit
bogus out of memory errors, needed among others for some AIX
versions. Finish time.h vs sys/time.h cleanup (AC_HEADER_TIME).
* CREDITS: Credit Richard van der Hoff.
* nntpd.c: Move time.h vs. sys/time.h madness into system.h
(included via leafnode.h). Resolve name clash error() vs. myerror().
* Makefile.am, checkgroups.c, configutil.c, system.h, fetchnews.c,
gmtoff.c, leafnode.h, lockfile.c, miscutil.c, mkstemp.c,
nntputil.c, texpire.c, xoverutil.c: Move time.h vs. sys/time.h
madness into system.h (included via leafnode.h).
* mgetaline.c, nntputil.c: Merge patch to switch from setjmp to
sigsetjmp, sent by Richard van der Hoff
<richard@rvanderhoff.org.uk>.
* .cvsignore: Add compile and install-sh
2002-12-04 Matthias Andree <matthias.andree@gmx.de>
=== RELEASE 1.9.30.rel ===
* Makefile.am: Do not distribute autom4te.cache (from pcre/
subdir).
2002-12-02 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am, TODO, autobootstrap.sh, configure.ac,
README-MAINTAINER: Kill autobootstrap. Use autoreconf -is (or -isf)
instead.
2002-11-26 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog: Release 1.9.30.devel4
--- 1.9.30.devel4 ---
* configure.ac: Bump version.
* Makefile.am: Print sbindir/bindir to a config.c comment.
* fetchnews.c: In verbose mode, print if we're using the STAT
command or the HEAD workaround.
* nntpd.c: Point to syslog when reading the configuration fails.
* INSTALL, README: Rework documentation.
2002-11-25 Matthias Andree <matthias.andree@gmx.de>
* NEWS, nntputil.c: Blacklist STAT for "NNTP news cache.", by
Robert Marshall.
* fetchnews.c: Avoid duplicate articles that raced from another
server against our fetchnews from ending up in failed.postings. We
assume that a server that refuses a posting with 441 435 Duplicate
can at the same time deliver it to STAT (or HEAD if the workaround
is in effect).
2002-11-21 Matthias Andree <matthias.andree@gmx.de>
* TODO: Note race in postarticles.
* ChangeLog, NEWS: Release 1.9.30.devel3.
--- 1.9.30.devel3 ---
* nntputil.c: Whitelist NewsCache 1.1.*
* configutil.c, fetchnews.c: Fix maxage = 0, reported and patch
suggested by Jonathan Larmour, <jifl@jifvik.org>
* configure.ac: Bump version.
* COPYING, CREDITS, ChangeLog, fetchnews.c, leafnode.8.in, nntpd.c:
Change Jonathan Larmour's mail address.
* activutil.c: Fix SIGSEGV. Found by William Hooper.
2002-11-20 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog, NEWS, configure.ac: Release 1.9.30.devel2.
--- 1.9.30.devel2 ---
* activutil.c: Check for duplicate newsgroups after reading, before
writing and after merging the active file. In doubt, leafnode goes
for the newsgroup name that has fewer upper case letters in it.
* grouplist.c: Fix spurious LF.
* fetchnews.c: nntpactive: cache current time, saves time() calls
and gives a consistent 'age' for the newsgroups.
* miscutil.c, nntpd.c: 0 -> NULL
2002-11-14 Matthias Andree <matthias.andree@gmx.de>
* .cvsignore, Makefile.am, leafnode.cron.daily.in,
leafnode.spec.in: Add leafnode.cron.daily, built from
leafnode.cron.daily.in, and include it in the RPM.
* Makefile.am: Add filters.example, filters and config to dist.
config and filters are marked with noreplace and are the copies of
filters.example and config.example by default. This should prevent
RPM from removing the old /etc/leafnode/config when this RPM is
"-Uhv"ed over a SuSE RPM.
* leafnode.spec.in: Add filters.example, filters and config to
dist. config and filters are marked with noreplace and are the
copies of filters.example and config.example by default. This should
prevent RPM from removing the old /etc/leafnode/config when this RPM
is -Uhved over a SuSE RPM. Reported by V. Regina Kappes
<regina.kappes@gmx.de>
* Makefile.am, filters.example: Add filters.example. Taken from
SuSE 7.3 Source RPM.
* config.example: Change example filter file path to
/etc/leafnode/filters.
2002-11-13 Matthias Andree <matthias.andree@gmx.de>
* README-FQDN.pod: Fix bug spotted by Mark Trettin: The
news.cis.dfn.de host name is ID-00000.user.dfncis.de.
2002-11-10 Matthias Andree <matthias.andree@gmx.de>
* .cvsignore: update ignore list.
* FAQ.xml: Add section on Red Hat inetd vs xinetd issue, written by
William Hooper.
2002-11-09 Matthias Andree <matthias.andree@gmx.de>
* NEWS, nntputil.c: Whitelist NewsCache 0.99.18, 0.99.19, 0.99.2?.
2002-11-08 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog: Release 1.9.30.devel1.
* Makefile.am: Fix recently introduced 'make distcheck' failures.
* NEWS, fetchnews.c: Only touch active.read if the active has been
successfully written.
* activutil.c, applyfilter.c, checkgroups.c, fetchnews.c,
texpire.c: detect groupinfo write errors.
* activutil.c, leafnode.h: Detect write errors for writeactive and
report them back.
* activutil.c, leafnode.h: Debugging help: define CHECKGROUPORDER
at compile time to check that the in-memory copy of the active file
is sorted properly and does not contain duplicates.
* nntpd.c: Fix last commit -- the p = q belongs into the while
loop, of course. This time, the commit has been tested and found
working by Jan Knutar. <jknutar@nic.fi>
2002-11-06 Matthias Andree <matthias.andree@gmx.de>
* CREDITS: Add Jan Knutar.
* nntpd.c: Fix very subtle and intricate infinite loop bug -- it
will only trigger when the first strstr call is not successful (i.
e. the current group->name is part of another group's name that is
PRIOR on the current article's XRef: header -- neat, ain't it?).
Found and reported with full stack back trace by Jan Knutar
<jknutar@nic.fi>
2002-11-05 Matthias Andree <matthias.andree@gmx.de>
* newsq.1.in: Rework newsq man page.
* newsq.1.in: Document that the output is unsorted. Requested by
Dan Jacobson <jidanni@dman.ddts.net>. Fixes Debian Bug#167837
(wishlist).
2002-10-30 Matthias Andree <matthias.andree@gmx.de>
* FAQ.xml, Makefile.am: Improve the FAQ, replace most <command> by
<userinput>, and run xmllint before xmlto.
2002-10-27 Matthias Andree <matthias.andree@gmx.de>
* NEWS: Update.
2002-10-26 Matthias Andree <matthias.andree@gmx.de>
* fetchnews.c: Fix pcre_group to group_pcre.
* configure.ac: bump version.
* fetchnews.c: Also apply only_groups_pcre when updating the
active, to avoid presenting groups that are not really fetched. If
you have multiple upstream servers and you are using
only_groups_pcre, run fetchnews -f.
2002-10-23 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog, NEWS, configure.ac: Release 1.9.29.
=== RELEASE 1.9.29.rel ===
* README: Minor updates.
* FAQ.xml: Add section on nntps.
* Makefile.am: Add --extensions to PDF generation, for bookmarks.
* fetchnews.c: Bugfix: cope with multiple upstreams that have the
same server name but different ports.
2002-10-22 Matthias Andree <matthias.andree@gmx.de>
* artutil.c: Merge patch by Ken Shan to fix SIGSEGV that happens
when the active is realloc()d. Long-standing bug. This commit fixes
Debian Bug#165835.
2002-10-21 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog, NEWS, configure.ac: Release 1.9.28.
=== RELEASE 1.9.28.rel ===
2002-10-19 Matthias Andree <matthias.andree@gmx.de>
* FAQ.xml: Make document valid. Add IDs for sect1 to allow linking.
* FAQ.xml: Add documentation about obtaining a stack backtrace.
* configutil.c: New option only_groups_pcre. Complain about
malformatted or broken config file lines.
* Makefile.am, NEWS, TODO, config.example, fetchnews.c,
groupselect.c, groupselect.h, leafnode.8.in, leafnode.h,
doc_german/leafnode.8.in: New option only_groups_pcre.
* FAQ.xml: Use sect2 rather than qandadiv.
2002-10-12 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: mark devel release version
* FAQ.xml, NEWS, PCRE_README: Update documentation.
* configure.ac: Add a new --with-included-pcre option. Useful for
testing and if the system-installed PCRE version is too old but the
user does not want to replace it.
* pcre/configure.gnu: When leafnode automatically configures pcre/,
pass it --disable-shared to speed up the build and get a smaller
library, and to avoid issues with shared libraries that we don't use
anyhow.
* configure.ac: Back out ineffective MacOS build "fix" of 1.9.25,
now that the pcre/configure fix is known to work.
* Makefile.am: Do not distribute *~ files from pcre directory.
* FAQ.xml: Add two questions about fetchnews not posting. Reindent
w/ vim.
* pcre/configure: Try to patch libtool output along the lines of
http://subversions.gnu.org/cgi-bin/cvsweb/libtool/libtool.m4.diff?r1=1.220&r2=1.221&f=h -- in the hope to really fix the MacOS 10.1.5 build woes.
2002-10-08 Matthias Andree <matthias.andree@gmx.de>
* leafnode-version: undo accidental checkin
* leafnode-version.c: Align output format to that of leafnode-2.
* Makefile.am, NEWS, leafnode-version, leafnode-version.1.in,
leafnode-version.c, leafnode.spec.in: Add leafnode-version program.
* TODO: Kill remaining old TODO, they don't really matter any more.
* configure.ac: Bump version
2002-09-25 Matthias Andree <matthias.andree@gmx.de>
* .cvsignore, Makefile.am: Now that my PassiveTeX/XMLTeX
installation works, use Tim Waugh's xmlto wrapper.
* Makefile.am: Switch from jade and dsssl to xsltproc and xsl, it's
more portable for maintainers. Use htmldoc to convert HTML -> PDF,
much nicer output, and also more portable.
http://www.easysw.com/htmldoc/
* FAQ.xml: "& -> & fix !DOCTYPE
* Makefile.am: Do not remove subst.in in distclean-local. (Reported
by Mark Brown)
2002-09-24 Matthias Andree <matthias.andree@gmx.de>
=== RELEASE 1.9.27.rel ===
* Makefile.am: FAQ swallows TROUBLESHOOTING. Fix RPM build.
* FAQ.xml, TROUBLESHOOTING.pod, leafnode.spec.in: FAQ swallows
TROUBLESHOOTING.
* leafnode.spec.in: Revamp .spec file, integrating a patch from
Andreas Muck.
* CREDITS: Add Christian Weisgerber, who sent the three time_t
alpha portability fixes.
* activutil.c, nntpd.c, texpire.c: Merge OpenBSD time_t == int
portability fixes for 64bit platforms.
* .cvsignore: Add checkpeerlocal.
* FAQ, FAQ.html, Makefile.am: drop generated files from CVS.
* FAQ.xml: Finish XML FAQ.
* FAQ.xml: The start of a FAQ rewrite in DocBook XML V4.1.
* CREDITS: Update
* checkpeerlocal.c: Merge patch by Rados-law Gancarz to fix
Non-IPV6 compile (Solaris 2.6)
2002-09-23 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: bump version
* Makefile.am: Clean some more files.
* FAQ.html: Add FAQ.html (from website) for now.
* Makefile.am: distribute FAQ.html
* checkpeerlocal.c: Fix compiler warning. Reduce default interface
configuration buffer to 2k.
* Makefile.am: Automake 1.5 should be sufficient.
* Makefile.am: Add CFLAGS to checkpeerlocal_CFLAGS.
* Makefile.am: Add checkpeerlocal to check_PROGRAMS.
2002-09-22 Matthias Andree <matthias.andree@gmx.de>
* checkpeerlocal.c: Fix infinite loop problem when interface list
is longer than 2 kB. Reported by Brian Somers.
CVSTrac: #4
* NEWS, leafnode.8.in: Documentation changes.
* nntpd.c: Robustness: if allowstrangers is set, don't call
checkpeerlocal at all.
2002-09-20 Matthias Andree <matthias.andree@gmx.de>
* ChangeLog, NEWS, configure.ac: 1.9.26 release information added.
=== RELEASE 1.9.26.rel ===
2002-09-11 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: Bump version.
* grouplist.c:
* Skip over lost+found in the top directory.
Bug reported by William Grinolds <wgrinolds@satx.rr.com>.
* Log chdir and opendir(".") errors.
2002-08-31 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: bump version
* fetchnews.c: Synchronize child and parent when handing over the
lock file. CVSTrac: #3.
* fetchnews.c: Fix reversed logic of postonly/handover_lockfile fix
(last commit).
* fetchnews.c: Do not try to fork and hand over the lockfile to
child in postonly mode. Reported by Jan Knutar <jknutar@nic.fi>.
* newsq.c: Print start banner and also print a note if the
directory is empty.
* UNINSTALL-daemontools: Fix paths.
* genlsm.sh.in: Update.
* doc_german/Makefile.am: Add LIESMICH-daemontools to tarball.
2002-08-30 Matthias Andree <matthias.andree@gmx.de>
* leafnode.spec.in: Update Source URL and format to .bz2. Reported
by William Hooper <whooper@myrealbox.com>.
=== RELEASE 1.9.25.rel ===
* run.tcpd.dist.in, run.tcpserver.dist.in: Add comments about use.
* configure.ac: bump version
* applyfilter.8.in, doc_german/leafnode.8.in: Minor corrections.
* INSTALL, Makefile.am, README-daemontools, doc_german/INSTALL_de,
doc_german/LIESMICH-daemontools: Complete daemontools-related
documentation.
CVSTrac ticket: #2
* artutil.c: Fix memory leak: empty lines were not freed.
2002-08-28 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am, setup-daemontools.sh.in, setup.sh.in: Replace
setup.sh by setup-daemontools.sh that only installs daemontools +
tcpserver w/ tcprules access control
* NEWS, setup.sh.in: Withdraw [x]inetd part of setup.sh for
portability reasons.
* .cvsignore, Makefile.am, Makefile.dist, NEWS, TODO,
UNINSTALL-daemontools, configure.ac, nntp.rules.dist,
run.tcpd.dist.in, run.tcpserver.dist.in, setup.sh.in: Tweaks for
addition of new setup.sh tool, which is to automatically set up the
leafnode daemon in inetd/xinetd or tcpserver.
* makesubst: Also add AWK to subst list.
2002-08-27 Matthias Andree <matthias.andree@gmx.de>
* makesubst: Figure AUTOSUBSTNAMES from AC_PATH_PROG as well. Strip
surrounding brackets. Trim surrounding whitespace.
* makesubst: Minor @configure_input@ tweak. Cosmetic.
--- release snapshot 20020827a ---
* Makefile.am, configure.ac: devel20020827a checkin, fixes for
Darwin 5.5 build (-flat_namespace issue, see
http://developer.apple.com/techpubs/macosx/ReleaseNotes/TwoLevelNamespaces.html
2002-08-27 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* TROUBLESHOOTING.pod, doc_german/leafnode.8.in: minor wording
tweaks.
* doc_german/INSTALL_de: Typos.
* doc_german/INSTALL_de: Translate ucspi-tcp/daemontools docs.
First version ;-)
2002-08-26 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: bump version
* INSTALL: refine the ucspi-tcp/daemontools docs more bits :-)
* INSTALL: refine the ucspi-tcp/daemontools docs a bit
* INSTALL: Add daemontools/ucspi-tcp install instructions.
2002-08-23 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* nntpd.c: Fix XOVER reply for pseudo article: inconsistent MID
given.
2002-08-22 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* doc_german/: INSTALL_de, README, README_de, fetchnews.8.in,
leafnode.8.in: Fix typos and umlaut handling in German
documentation, keep old spelling.
* FAQ, README, texpire.8.in: Fix typos in English documentation.
2002-08-22 Matthias Andree <matthias.andree@gmx.de>
* leafnode.8.in: Update
2002-08-21 Matthias Andree <matthias.andree@gmx.de>
* checkpeerlocal.c: Prefix address type in -DTEST mode. change
#ifdef TEST to TEST_LOCAL to still allow testing from tcpserver or
somesuch.
2002-08-20 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am: Manually do 'make distclean' when including PCRE.
* config.example: Fix 'expire' documentation.
* applyfilter.8.in, checkgroups.8.in, fetchnews.8.in, newsq.1.in,
texpire.8.in, doc_german/applyfilter.8.in,
doc_german/checkgroups.8.in, doc_german/fetchnews.8.in,
doc_german/leafnode.8.in, doc_german/newsq.1.in,
doc_german/texpire.8.in: Update documentation, adjust to Linux'
typographic man(1) conventions: Literal text is bold, parameters are
in italics.
* checkgroups.c: Fix usage information.
2002-08-19 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am, autobootstrap.sh, makesubst: Patch by Ralf
Wildenhues: enhance makesubst.
2002-08-17 Matthias Andree <matthias.andree@gmx.de>
* NEWS: Dedicate to the flood victims in Europe.
* configure.ac: Bump version, add Dresden tag, allow RPMSRC=mumble
./configure and automatically check for /usr/src/rpm.
2002-08-16 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: fix sed -f argument to include ${srcdir}, for build
outside source directory
* configure.ac: Fix finding RPMSRC and msysconf expansion for good.
* sanitize.sed, Makefile.am: New file for sed use in configure.ac,
you would not get this properly quoted with backslashes. I tried.
2002-08-16 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* configure.ac: revert msysconfdir handling to old form. Fix brown
paper bag from last checkin: Unconditionally AC_SUBST(RPMSRC), but
set to "" if NONE. TODO: maybe allow environment variable check?
* Makefile.am: $(srcdir)/./makesubst -> $(srcdir)/makesubst
* configure.ac: Newer autoconf versions(?) do not cause
AC_SUBST(foo) to be translated to a shell commend. work around
this. Fixes the long-standing msysconfdir non-bug.
2002-08-16 Matthias Andree <matthias.andree@gmx.de>
* makesubst: Revert last checkin, it prevented the expansion of
things.
* makesubst: Change quote character for sed from double to single
quote.
* configure.ac: Bump version. Fix msysconf expansion.
* NEWS: Get the POST + EOF fix attribution right.
* NEWS: Mention the POST + EOF fix (leafnode crashed otherwise)
2002-08-14 Matthias Andree <matthias.andree@gmx.de>
* doc_german/leafnode.8.in: document allow_8bit_headers
* leafnode.8.in: Document allow_8bit_headers option.
* configure.ac: bump version
* .cvsignore: add tarballs and release.sh
- release snapshot -
* pcre/.cvsignore: Get rid of screen clutter :-)
* fetchnews.c, texpire.c: Dependent change: Track API change
necessary to bring reading the configuration file and validating the
hostname into correct order.
Move creation of lockfile past reading the configuration file as
well.
* applyfilter.c, checkgroups.c, nntpd.c: Dependent change: Track
API change necessary to bring reading the configuration file and
validating the hostname into correct order.
* configutil.c, miscutil.c, leafnode.h: Fix bug reported by Shaul
Karl <shaulka@bezeqint.net>, that leafnode would complain about a
non-FQHN even though one was configured in the configuration file.
Mark Brown <broonie@debian.org> tracked this down to improper order
of reading the config file versus validating the "fqdn" variable.
Now readconfig() validates the fqdn, rather than initvars().
2002-08-13 Matthias Andree <matthias.andree@gmx.de>
* validatefqdn.c: Can no longer be cheated by "name.", when the dot
is the last character. Added test mode. Try make validatefqdn
CFLAGS="-DTEST", then ./validatefqdn blubb test.hick
2002-08-13 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* getline.c, mastring.c: Speed improvements for mastr_getln and
_getline, by Fabrizio Tironi.
* nntpd.c: dopost: fix possible SEGV on client EOF after POST, by
Fabrizio Tironi. Along, a couple of minor fixes (const typing,
global variable shadowing).
* xoverutil.c: Fix possible buffer overrun with long $SPOOLDIR, by
Fabrizio Tironi.
* mastring.c: Fix possible null pointer derefs in mastr_cpy,
mastr_cat. Patch by Fabrizio Tironi.
* artutil.c: fgetheader: check for bad input. As an aside, don't
calculate strlen(header) twice. Different fix suggested by
Fabrizio Tironi.
2002-08-13 Matthias Andree <matthias.andree@gmx.de>
* NEWS, config.example, configutil.c, leafnode.h, nntpd.c: Add an
option to allow clients to post unencoded 8-bit data in headers.
Requested by Peter N. M. Hansteen <peter@bgnett.no>.
* configure.ac: bump version
2002-08-13 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* README-MAINTAINER: Update.
* autobootstrap.sh: autobootstrap taken from leafnode-2 CVS and
adapted, needs makesubst call. Use to build from CVS.
* .cvsignore: ignore subst{,.in}.
* Makefile.am: Add FAQ to EXTRA_DIST. Reported by William Hopper.
2002-07-19 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: Add missing <sys/types.h> include. Bump version.
* Makefile.am, doc_german/Makefile.am: Fix build outside source
directory
* configure.ac: bump version
* checkpeerlocal.c, configure.ac: Fix checkpeerlocal() for systems
that define a sa_len for struct sockaddr and list addresses longer
than 16 bytes (IPv6) in their response to SIOCGIFCONF. (Such as
FreeBSD.) Reported by Martin Klaffenbck.
2002-07-17 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* doc_german/: applyfilter.8.in, checkgroups.8.in, fetchnews.8.in,
leafnode.8.in, newsq.1.in, texpire.8.in: Update german
documentation to reflect current english docs.
* checkgroups.8.in, leafnode.8.in, texpire.8.in: More typo fixes.
* leafnode.8.in:
(minor) separate underlined words.
* leafnode.8.in: Typo.
* makesubst: simplify somewhat.
* Makefile.am, doc_german/Makefile.am: Portability: no $< in
Makefiles.
2002-07-16 Matthias Andree <matthias.andree@gmx.de>
* fetchnews.8.in, TODO: updates
* leafnode.8.in, doc_german/Makefile.am: updates
* doc_german/Makefile.am, TODO: doc_german: regenerate subst
* configure.ac: bump version
* Makefile.am: Fix traversal order in SUBDIRS.
2002-07-16 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* Makefile.am, TODO, configure.ac, doc_german/Makefile.am:
Experimental implementation of manpage building with make. Applies
for doc_german man pages as well.
* makesubst: adjust path, add msysconfdir, spooldir.
* makesubst: makesubst: build a script that performs (nearly) the
same @variable@ substitutions as usually done by configure.
makesubst is copyright Andreas Barth, this version is taken from
unix-connect-0.94 and hacked up for leafnode. Differences from
configure-substitutions: recent autoconf version postpone
substitution of some variables (e.g. prefix) until build time to
facilitate different root package building. This script does not
take into account make Options.
2002-07-16 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am: List stamp-h to clear in distclean-local, to fix
make distcheck regression after update to automake 1.6.2.
* NEWS, nntpd.c: Fix: In [X]HDR <header> <Message-ID>, print
Message-ID in front of the header, required by RFC-2980 (but
contradictory to draft-ietf-nntpext-base-15). Fix: OVER and XOVER
syntax in HELP output. Change: When printing XOVER/XHDR syntax
after a syntax error, print HDR or OVER. Change: List XHDR and
XOVER in LIST EXTENSIONS.
* configure.ac: Quote pcre-config warning. Add note to let user
install PCRE system-wide when the included PCRE is to be used.
* configure.ac: Pull -I/usr/local/include/pcre/ into CPPFLAGS as
well. Reported by William Hooper <whooper@myrealbox.com>
2002-07-16 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* doc_german/fetchnews.8.in: missed one substitution.
* doc_german/README: Add update note.
* doc_german/: INSTALL_de, README_de, applyfilter.8.in,
checkgroups.8.in, fetchnews.8.in, leafnode.8.in, newsq.1.in,
texpire.8.in: Update german docs to mostly match current english
docs. INSTALL_de: add pointer to german Message-ID online FAQs.
Fix a few typos, replace hard-coded paths with configure
@substitutes@.
* leafnode.8.in: correctly describe texpire's non-threaded
behaviour, update somewhat.
* applyfilter.8.in, fetchnews.8.in, texpire.8.in: Fix typos.
* README: Fix typo. Replace posting.queue with out.going, fix
syslogd '-file' entry.
* INSTALL: Reformat only.
* doc_german/: INSTALL_de, README_de, applyfilter.8.in,
checkgroups.8.in, fetchnews.8.in, leafnode.8.in, newsq.1.in,
texpire.8.in: Reorganize german documentation. Rename
man/man$i/foo.$i to foo.$i.in.
2002-07-16 Matthias Andree <matthias.andree@gmx.de>
* INSTALL: drop MacOS X PCRE warning
* .cvsignore: add FAQ.html
* configure.ac: Fix spurious "test: too many arguments" warning
early in ./configure. Streamline the pcre-config tests. Save
original arguments and restore them if pcre-config is present, but
not pcre.h, to not shoot the pcre subdirectory configure. Revert
from <<- HERE left-justified files to << HERE files. Uwe Ohse said
that <<- was not too portable. Bump version.
* leafnode.8.in: update
2002-07-15 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Implement LIST ACTIVE.TIMES -- trivial (minor change to
list()). Implement HDR (XHDR was already there). Revamp HELP
format. List HDR in and remove leading space from LIST EXTENSIONS
reply. (draft 15)
* COPYING, CREDITS: update
* nntpd.c: in dopost(), when debugmode is set, log objectionable
Message-ID header. Pro-Forma merge.
* nntpd.c: Log objectionable Message-ID: header in dopost().
2002-07-14 Matthias Andree <matthias.andree@gmx.de>
* README-FQDN.pod, TROUBLESHOOTING.pod: documentation refinements.
2002-07-13 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* .cvsignore: README.FQDN* -> README-FQDN*, add
TROUBLESHOOTING{,.pod}.
* TROUBLESHOOTING.pod, leafnode.spec.in, validatefqdn.c: Change
README.FQDN to README-FQDN.
* cindent: Make weird-filenames proof. Fix test -eq buglet.
2002-07-12 Mark Brown <broonie@sirena.org.uk>
* configutil.c, leafnode.h, fetchnews.c, config.example: Add new
option noactive inhibiting updates of the active file unless -f is
supplied to fetchnews.
2002-07-12 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am, NEWS: No longer install lsort
* Makefile.am, README-FQDN.pod, README.FQDN.pod: rename README.FQDN
to README-FQDN.
* README.FQDN.pod: documentation updates.
* Makefile.am, README.FQDN.pod, TROUBLESHOOTING.pod, nntpd.c,
validatefqdn.c: documentation updates.
2002-07-11 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: bump version
* nntpd.c: Quiet splint warning.
* fetchnews.c: When updating the active file fails, restore the old
active file contents in order not to loose low/high marks.
* nntpd.c: Do not return 430 for 'header not found' in xhdr. Merge
some xhdr/xover code. Fix range checking in xhdr and properly write
420 message when the range is invalid.
* leafnode.h: Add some splint annotations.
* nntpd.c: Fix some bugs that splint showed. Includes possible zero
dereference crashes.
* fetchnews.c: Try XGTITLE only once per server, not once per new
group. Better forceactive treatment. When leafnode cannot obtain
the active from all servers in one go after -f or timeout_active
expired, it will remove the active.read file. This file will only be
created if ALL servers have been queried successfully.
* strlcpy.3: Add documentation, stolen from FreeBSD.
* nntpd.c: Change one 1024 -> PATH_MAX. Change strncpy->strlcpy.
Add two FIXME: comment tags.
* configutil.c: Replace strncpy by strlcpy. Increase core size in
debug mode to 16 MB. Increase token size to 1 kB.
* mastring.h: Drop prototypes for unimplemented mastrcpy and
mastrncpy.
2002-07-11 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* configutil.c: Fix overrun in parse_line.
2002-07-11 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: Kill cruft.
* filterutil.c: Always include <pcre.h>, not pcre/pcre.h.
* TODO: Note make distcheck not working. Other updates.
* Makefile.am, configure.ac: Revamp PCRE inclusion
autoconf/automake stuff, drop checks that leafnode does not look at
the results of.
* pcre/dftables: Drop generated file.
* nntputil.c: Use RETSIGTYPE for timer().
2002-07-10 Matthias Andree <matthias.andree@gmx.de>
* pcre/: .cvsignore, ChangeLog, Makefile.in, Tech.Notes,
chartables.c, config.guess, config.sub, configure, configure.in,
mkinstalldirs, myinput, pcre.7, pcre.c, pcre.h, pcre.mms,
pcreposix.3, pcretest.c, pgrep.1, pgrep.c, testinput, testinput2,
testinput3, testinput4, testoutput, testoutput2, testoutput3,
testoutput4, testdata/testinput1, testdata/testinput6,
testdata/testoutput1, testdata/testoutput2, testdata/testoutput3,
testdata/testoutput4, testdata/testoutput5, testdata/testoutput6:
Update to PCRE 3.9.
* pcre/: RunTest, chartables.c, dftables, pcre.h: (accidental
checkin)
2002-07-10 Mark Brown <broonie@sirena.org.uk>
* fetchnews.c: Set handler for SIGTERM.
2002-07-10 Matthias Andree <matthias.andree@gmx.de>
* README: Fix outdated leafnode home page, some typos, remove old
compile test section.
* INSTALL: Fix typo.
* TODO: Add PCRE notes.
* configure.ac: Move the --with options up the configure.ac file to
quit early in case of trouble. Bump version.
2002-07-10 Matthias Andree <matthias.andree@gmx.de>
=== RELEASE 1.9.24.rel ===
* nntpd.c: Fix compiler warning when compiled without IPv6 support.
* nntpd.c: Respect hostname in config file again. Fix IPv6 name
resolution for IPv4 addresses (using masock_sa2name).
* Makefile.am, masock.h, masock_sa2name.c: import masock_sa2name.c
from leafnode-2
2002-07-09 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c, miscutil.c: make s variable local. chdirgroup: use mastr
instead of global s.
* configutil.c: validate hostname to avoid havoc.
2002-07-09 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* nntpd.c: Fix possible overflow in doarticle. Not exploitable
because overflowing part of the string cannot be chosen.
2002-07-09 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: bump version
* newsq.c: Drop global s, use local mastr instead.
* xoverutil.c: Make s a local variable. Don't hard-code s length
for getcwd()
* activutil.c, configutil.c, fetchnews.c, leafnode.h, nntpd.c,
texpire.c: Make s a local variable.
2002-07-09 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* nntpd.c: fopenart: do not use static buffer s for implicit artno,
gets smashed by is_pseudogroup. Broke 'ARTICLE' without number.
2002-07-09 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.24.rc1 ===
* nntpd.c: remove all ihave traces.
* nntpd.c: more nogroup() merge.
* configure.ac: bump version
2002-07-09 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* applyfilter.c: Typo in log comment.
2002-07-09 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: use nogroup() in doxhdr().
2002-07-09 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* nntpd.c: Fix XOVER segfault before GROUP.
2002-07-08 Matthias Andree <matthias.andree@gmx.de>
* configure.ac: Bump version to 1.9.24.pre1 for formal reasons.
* Makefile.am: Let the lsm targets depend on genlsm.sh to ensure
that a current version of genlsm.sh is used to build the .lsm file.
* genlsm.sh.in: Revamp .lsm
* NEWS: Add release date.
=== RELEASE 1.9.23.rel ===
* configure.ac: Bump version to 1.9.23.rel.
* miscutil.c: Silence RATS.
2002-07-05 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.23.rc3 ===
* NEWS: NEWS
* nntpd.c: Recommend message-ID (ln-2 and some INN also do it).
* nntpd.c: Drop justaftergroup madness (includes dropping the
variable). Drop pseudogroup global. Make group/xovergroup globals
static. Split functionality into new parserange and is_pseudogroup
functions, fixing parsing the range in the same go (used by doxover
and doxhdr). Fix more article number madness with pseudo articles.
Fix article <mid> for pseudo articles. When marking a group
interesting, create the corresponding directory. Fix some XHDR
handling bugs -- leafnode would list at least one article even
though the given range was outside the group article number range.
* texpire.c: Do not try to delete empty directory of interesting
group.
* fetchnews.c: Cosmetic logging changes. Fix bogus 'XOVER failed,
trying XHDR' (happens with cascaded leafnodes).
* nntpd.c: Fix typo: xstrncpy->xstrlcpy.
* Makefile.am: Add strlcpy.h to EXTRA_DIST.
* miscutil.c: Silence RATS. Replace strncat by strlcpy. Add new
xstrlcpy() function that exits in case the buffer is too small.
(Ugly!)
* nntpd.c: Drop owndn. fopenpseudoart(): drop static buffer, use
mastr. Change first MID separator to - to allow tracking leafnode
"before 1.9.23" or "1.9.23 and newer". Silence RATS. Drop static
buffer to print Message-ID, use three fputs instead. Replace strncat
by strlcpy.
* fetchnews.c: Silence RATS. getmarked(): get rid of static buffer,
use mastr.
* leafnode.h: Add xstrlcpy prototype. Drop owndn declaration. Move
SKIPLWS #define within #ifdef LEAFNODE_H bounds.
* configutil.c: Drop owndn.
* checkpeerlocal.c, pcre_extract.c: Use strlcpy. Silence RATS.
* activutil.c: Change stat -> fstat.
* applyfilter.c, critmem.c, getfoldedline.c, lockfile.c, lsort.c,
mastring.c, nntputil.c, quickmkdir.c, strdup.c, texpire.c,
validatefqdn.c, wildmat.c, xoverutil.c: Silence RATS.
* strlcpy.c, strlcpy.h, Makefile.am, configure.ac: Import
strlcpy.[ch] from OpenSSH's openbsd-compat.
* leafnode.h: Add SKIPLWS from leafnode-2
* fetchnews.c: More !isspace-read-past-buffer fixes.
* applyfilter.c: Use fstat() rather than stat(). (stat() did not
check for errors in this place!). Enhance error output and log to
syslog.
* artutil.c: getheader(): use fstat after open. Paranoia mode.
* checkpeerlocal.c: Limit strcpy.
* critmem.c: Silence Flawfinder.
2002-07-04 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* checkpeerlocal.c: Include missing string.h for memcpy.
2002-07-04 Matthias Andree <matthias.andree@gmx.de>
* fetchnews.c: After all relevant servers have been queried, reset
SIGPIPE handling to the default. No network writes are beyond that
point, so SIGPIPE should never happen there.
2002-07-04 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* checkgroups.c, configutil.c, fetchnews.c, nntpd.c: Fix several
potential array bounds reads in rare error cases.
2002-07-04 Matthias Andree <matthias.andree@gmx.de>
* checkpeerlocal.c: Fix IPv6 portability issue (FreeBSD).
* getline.h: Add _getline prototype.
* validatefqdn.c: Reformat FQDN error message.
2002-07-03 Matthias Andree <matthias.andree@gmx.de>
* NEWS: Fix typo: NEWNEWS -> NEWGROUPS
=== release 1.9.23.rc2 ===
* ChangeLog, NEWS, fetchnews.8.in, leafnode.8.in, texpire.8.in:
update documentation
2002-07-03 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* texpire.c: Remove lockfile in rare error case.
2002-07-03 Matthias Andree <matthias.andree@gmx.de>
* getline.c: Synchronize leafnode-1 and leafnode-2 getline.c
* Makefile.am: add missing version.h
2002-07-03 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* fetchnews.c: Fix last checkin: unconditionally ignore
SIG{INT,PIPE} after server query.
2002-07-03 Matthias Andree <matthias.andree@gmx.de>
* getline.c, mastring.c, mastring.h, version.h: Synchronize
leafnode-1 and leafnode-2 mastring.*
2002-07-03 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* fetchnews.c: After longjmp ignore SIGINT and SIGPIPE. Prevents
race which can lead to double free.
2002-07-02 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* nntpd.c: Simplify list().
* newsq.c: closedir() after reading.
* applyfilter.c: Remove leftover globals.
2002-07-02 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Fix broken Message-ID when posting to localhost.
Reported by Andreas Muck <fam.muck@telda.net>.
* NEWS, activutil.c, fetchnews.c, leafnode.h, nntpd.c: Fix losing
NEWGROUPS information across fetchnews -f or after timeout_active.
* configure.ac: bump version to 1.9.23.rc2
* nntpd.c: Fix order of low/high marks in NEWGROUPS reply.
2002-07-01 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.23.rc1 ===
* leafnode.spec.in: Major overhaul.
* leafnode.spec.in: Let 'news' read the configuration
* configure.ac: The socklen_t test was hosed, Solaris and FreeBSD
complained. Fixed.
* grouplist.c: groupinfo is now valgrind-proof.
2002-07-01 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* grouplist.c: Fix memleaks.
2002-07-01 Matthias Andree <matthias.andree@gmx.de>
* INSTALL: write up on Solaris warnings
* nntpd.c: Pseudo articles are now from news@ rather than nobody@
so people can reply. Pseudo article does not necessarily have
article number 1 (various places). Kill space after number in
dolistgroup(). Fix XOVER for pseudoarticle.
* artutil.c: Bump article pointer to store first article with a
number higher than the pseudo article.
* applyfilter.c, texpire.c: Do not reset group low/high marks when
a group runs empty.
* INSTALL: Mention news: mail alias.
2002-07-01 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* fetchnews.c, leafnode.h, mgetaline.c: Use RETSIGTYPE.
2002-07-01 Matthias Andree <matthias.andree@gmx.de>
* checkpeerlocal.c: Word syslog message for 4.4BSD-IP aliases on
broken Linux kernels better.
* grouplist.c: Fix possible crash, goto crossed mastr *p
initialization. Found by g++.
* fetchnews.c: Make code C++ compiler proof. Fix SUN Workshop Pro
compiler warnings.
* configure.ac: Streamline -lnsl and -lsocket checks, add check for
socklen_t.
* activutil.c, checkpeerlocal.c, critmem.c, mastring.c, nntpd.c,
lockfile.c: Make code C++ compiler proof.
2002-07-01 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* artutil.c: __LINE__ is integer, not char.
* fetchnews.c: Throroughly check changes from crashed previous
fetchnews.
2002-07-01 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am: Work around broken Solaris tar that does not archive
directories.
* checkpeerlocal.c, configure.ac: Portability: SIOCGIF* need
#include <sys/sockio.h> on SysV systems (Solaris, IRIX, Unixware,
...)
* checkpeerlocal.c: Add license. Do not abort(), but skip the
interface when SIOCGIFADDR yields a different address than was
passed in. This can happen with 4.4BSD-style aliases on Linux that
are configured with ip addr add, with older Linux kernels. Tell the
user to configure Solaris-style alias interfaces instead.
* pcre_extract.c: Add email address to copyright.
2002-07-01 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* nntpd.c: Fix relaxed parsing of XHDR argument: add colon if not
present.
* checkpeerlocal.c, pcre_extract.c: splint guard arpa/inet.h,
indent.
* NEWS, README.FQDN.pod: Fix typos.
* applyfilter.c, configutil.c, fetchnews.c, texpire.c: Remove name
clashes for readability.
* fetchnews.c: Fix parsing of bogus server mark in
leaf.node/server. Can happen with previous interrupted fetchnews.
2002-07-01 Matthias Andree <matthias.andree@gmx.de>
* Makefile.am: Fix 'files left after distclean' warning (on FreeBSD
at least).
* getline.c: Fix missing prototype warning on systems without
getline.
2002-06-30 Matthias Andree <matthias.andree@gmx.de>
* .cvsignore: add README.FQDN{,.html}
* newsq.c: Also print Message-ID and the complete/incomplete state.
* fetchnews.c: Only try to post articles that have the u+x flag
set. As fetchnews does not lock in "postonly" mode, this mode might
post incomplete articles that the client is posting at the same
time.
* nntpd.c: dopost(): Validate Message-ID if present, it must not
have a local or unqualified domain name part. Retry to open another
out.going spool file if one with the same name already exists.
fsync() the out.going file before acknowledging acceptance (240 Ok).
chmod a complete out.going file to mode 755 so that fetchnews can
see it is complete. The idea was taken from Postfix.
* NEWS: update.
* Makefile.am, README.FQDN.pod: New README.FQDN.
* Makefile.am, leafnode.h, pcre_extract.c: New function
pcre_extract().
* config.example: Fix typo, make allowstrangers warnings more
verbose.
* checkpeerlocal.c: Fix 'no previous prototype' and 'defined but
not used' compiler warnings.
* nntpd.c, TODO: Nuke tmpfile().
* leafnode.h: Add missing checkpeerlocal() prototype.
* Makefile.am, README, checkpeerlocal.c, config.example,
configutil.c, leafnode.h, nntpd.c: By default, deny connection from
hosts outside the local networks.
* INSTALL: Document xinetd, add note about true remote access.
* README, validatefqdn.c: Clarify on the new hostname issue.
* mastring.c, mastring.h: Add mastr_size, to obtain the buffer
size. (Actually, the buffer is one character bigger, to hold a
trailing NUL byte.)
2002-06-28 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* texpire.c: Fix minor memleak.
2002-06-28 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: add debug info to markinterest()
* fetchnews.c, xoverutil.c: tabs2spaces is now in xoverutil.c
* fetchnews.c: avoid double free when downloading HEAD.
* TODO: folding stuff is debugged
* configure.ac: bump version to 1.9.23.rc1
* newsq.c: Don't crash when headers are not found and a careless
libc is in place. Do not leak memory. Unfold headers.
* artutil.c: fix memory leak
* nntpd.c: More dopost() article syntax checks: control data,
whitespace in header tag (before colon), missing colon; better
diagnosis, report missing body. Remove dead CR/LF removal code
(getline does this already). Fix a typo in error message for missing
Subject: header.
* artutil.c: fgetheader: Complain if header to find does not end in
a colon. Cleanup, using getfoldedheader. Add simple test function.
* texpire.c: remove empty group directory
* texpire.8.in: Add a new BUGS item
* getfoldedline.c: Change: folded lines keep their LF.
* xoverutil.c: When removing .overview, log this in debugmode. Also
try to remove the current directory, which will be empty at that
time.
* fetchnews.c: Renamed serverlist to server, add freeservers().
Change SIGINT handling again, and suppress warning that no server
that allowed posting could be found after SIGINT.
* nntputil.c, texpire.c, configutil.c, leafnode.h: Renamed
serverlist to server, add freeservers().
* nntpd.c: Renamed serverlist to server, add freeservers(). No
longer open pseudoarticle for /any/ article that is not found, but
only in pseudogroups.
* filterutil.c: only log pcre_exec when debugmode is 2 or higher.
* artutil.c: When storing an article, bump the low group mark
(cg->first) to 2 if it's 1, to prevent some newsreaders from
offering the pseudoarticle again.
* TODO: Applyfilter: fixed low/high marks to 1/1 for empty groups,
reported by Ralf Wildenhues.
* applyfilter.c: Fix low/high marks to 1/1 for empty groups. Free
server list after readconfig.
2002-06-27 Matthias Andree <matthias.andree@gmx.de>
* checkgroups.c, nntpd.c: drop #include <setjmp.h>
* .indent.pro: drop implicit options mentioned explicitly
2002-06-27 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* fetchnews.c: Fix SIGINT setjmp behaviour: don't try to fetch
again.
2002-06-24 Matthias Andree <matthias.andree@gmx.de>
* CREDITS: update
* COPYING, COPYING.GPL, Makefile.am, cindent: Add cindent script.
* fetchnews.c: New nopost option. Fix exit status. Always log how
many articles have been posted. main(): keep servers variable
intact. Use volatile to protect variables from setjmp clobbering.
Re-indent.
* NEWS, config.example, configutil.c, leafnode.h: New nopost
option.
2002-06-23 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: beautify code
2002-06-23 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* leafnode.h: Remove unneeded member alive from struct newsgroup.
2002-06-22 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* texpire.c: Fix possible NULL deref in dogroup.
2002-06-22 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.23.pre3 ===
* miscutil.c: fix typo
* grouplist.c: Also list "groups" that have no subdirectories.
* activutil.c, fetchnews.c, nntpd.c, texpire.c: Further fixes to
article number treatment.
* fetchnews.c: The check to suppress the upstream server's xref:
header is now case insensitive. Only store articles if all six
mandatory headers are present.
* nntpd.c: robustness: when a group is empty and not interesting,
also mark it as pseudogroup if the group directory still exists.
Reported against leafnode-2 by Ralf Wildenhues.
* leafnode.h: new fixxover() prototype. new #define
PORTFILENAMECSET, a string that contains all characters of the SUS
v2 portable file name character set
* TODO: Mirko Liss' suggestion to not read empty lines is
implemented.
* Makefile.am: make temp.files directory
* lockfile.c: if timeout is 0, do not try any timeout handling.
* xoverutil.c: Fix memory leaks in obscure cases. Also, xoverutil
would not recover properly from multiple lines for the same article
in .overview (which should not happen and is now logged with
LOG_ERR). Reported by Ralf Wildenhues.
* miscutil.c: when recreating missing directories, fix owner to
news before setting the uid. Create new temp.files directory.
* fetchnews.c, xoverutil.c: Move fixxover from fetchnews.c into
xoverutil.c.
2002-06-21 Matthias Andree <matthias.andree@gmx.de>
* miscutil.c: Call endhostent().
2002-06-20 Matthias Andree <matthias.andree@gmx.de>
* README: fix broken cut & paste
2002-06-19 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* xoverutil.c: getxover: after releasing xoverinfo contents, set
xoverinfo = NULL, so subsequent access will scream. Duplicate
strings from overview, don't point into it. Small memleak in
getxoverline.
* texpire.c: Fix memleak.
2002-06-19 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.23.pre2 ===
* t/: cmp.gal1w, cmp.gal5t: fix check references to satisfy make
distcheck
* ChangeLog, configure.ac, configure.in: release 1.9.23.pre2
* artutil.c, fetchnews.c: Debugging cleanups.
* getaline.c: Ignore incomplete lines (without trailing LF).
Suggested by Mirko Liss.
* NEWS, README: New DEBUGGING section in README.
* xoverutil.c: cleanup, add some debug log to getxoverline
* filterutil.c: cleanup, add PROPER debug log (it would formerly
log the wrong pattern on a match
2002-06-18 Matthias Andree <matthias.andree@gmx.de>
* leafnode.h: Drop mallocd from struct xoverinfo.
* xoverutil.c: Further cleanup: getxoverline(): drop mallocd member
of xoverinfo, cope with folded Lines: headers.
* xoverutil.c: Cleanup: Drop iovec stuff, use regular write. Saves
16 LoC.
* xoverutil.c: Kill non-article files in non-verbose mode, too.
Check return value of fchmod, fsync (new) and close, and do not
rename the temporary .overview file into place when an error occurs.
* fetchnews.c, leafnode.h, miscutil.c: appendtolist is gone. use
prependtolist instead.
2002-06-17 Ralf Wildenhues <ralf.wildenhues@gmx.de>
* fetchnews.c: Fix two small memleaks.
2002-06-17 Matthias Andree <matthias.andree@gmx.de>
* leafnode.h, miscutil.c: New prependtolist() function.
* grouplist.c: Fix: adding to list structure was broken. Fix
memory and file descriptor leaks, found by Ralf Wildenhues. Fix
indentation to make vi folding happy.
* makerpm.sh: This file has been superseded by leafnode.spec.in.
2002-06-17 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.23.pre1 ===
* texpire.c: Fix long-standing bug: Also expire groups that are not
in "group.info".
* grouplist.c, leafnode.h: Rename getgrouplist -> get_grouplist.
* miscutil.c: Make last argument of appendtolist a const.
* Makefile.am, grouplist.c, leafnode.h: New function getgrouplist()
to obtain a list of all news groups in the spool.
2002-06-15 Matthias Andree <matthias.andree@gmx.de>
* fetchnews.c: Fix two filtering bugs.
1. Filter hits on mandatory headers did not prevent fetching the
article.
2. For each filtered article, one regular article was NOT fetched.
En passant, fix types to unsigned long. Hand over lock file to
xover-fixing child.
* TODO, configutil.c, leafnode.h: Fix two filtering bugs.
1. Filter hits on mandatory headers did not prevent fetching the
article.
2. For each filtered article, one regular article was NOT fetched.
En passant, fix types to unsigned long.
2002-06-11 17:16 Matthias Andree <matthias.andree@gmx.de>
* fetchnews.c, lockfile.c: fetchnews now hands over the lockfile to
its child; while it's not strictly necessary to hold the lock while
updating the xover, it prevents several processes fighting for the
same .overview file at the same time.
* applyfilter.c, texpire.c: Track new lockfile_exists() prototype
* leafnode.h: Update lockfile.c from leafnode-2 and add the
handover_lock function.
* Makefile.am: Track new files from leafnode-2
* ln_log.c, ln_log.h, writes.c: Merge from leafnode-2
2002-06-03 Matthias Andree <matthias.andree@gmx.de>
* validatefqdn.h: Split from leafnode.h.
* TODO, NEWS: update
* config.example, configutil.c, fetchnews.c, texpire.8.in,
texpire.c: New feature by Andreas Meininger <a.meininger@gmx.net>:
set groupexpire to -1 to tell texpire to leave a group alone.
* fetchnews.8.in: Reword EXIT CODE section
* fetchnews.8.in, fetchnews.c: fetchnews now exits with code 2 if
there was a problem connecting to at least one upstream server.
* nntpd.c: More verbose POST reject messages for missing mandatory
headers.
* nntpd.c: More verbose POST reject messages. Reject 8-bit data in
headers.
* getfoldedline.c: Never try to unfold after a . line
* fetchnews.c: Unfold header lines after HEAD command.
* validatefqdn.c: Fix #include directives.
* install-sh: install-sh is a generated file and does not belong
into CVS.
* gmtoff.c: Add missing stdlib.h include for abort(3).
* configure.in: Add pcre-config --libs output to LIBS rather than
LDFLAGS.
* Makefile.am: New header file validatefqdh.h. Adopt and merge
getfoldedline.c from leafnode-2.
* getfoldedline.c, leafnode.h: Adopt and merge getfoldedline.c from
leafnode-2.
* leafnode.h: Move validatefqdn prototypes to separate file
2002-06-02 Matthias Andree <matthias.andree@gmx.de>
* miscutil.c: Apply fix sent by Raymond Scholz, to fix broken
hostname resolver.
2002-04-28 Matthias Andree <matthias.andree@gmx.de>
* nntputil.c: Drop connection when the upstream server runs
NNTPcache 2.3.x.
2002-04-25 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Change 400 Service discontinued message to "Client
timeout, disconnecting."
* nntpd.c: No longer emit "400 Service discontinued" to the
client, it breaks too many of them.
* leafnode.h: List is_validfqdn().
* miscutil.c: Fix typo.
* miscutil.c: Use new is_validfqdn().
* validatefqdn.c: Also catch linux.local (SuSE default on some
systems) as invalid. Export is_validfqdn() to let whoami() use it
to skip over invalid aliases.
* miscutil.c: Use endpwent() in initvars().
* nntpd.c: Report I/O errors in markdownload() back to the client.
* nntpd.c: Detect I/O errors.
* nntpd.c: Ralf Wildenhues: fix file descriptor leak in
markdownload().
2002-04-23 Matthias Andree <matthias.andree@gmx.de>
* COPYING: Add Jonathan Larmour.
* mgetaline.c: Merge timeout_client patch by Jonathan Larmour
<jifl@jifvik.org>.
* leafnode.h: Merge timeout_client patch by Jonathan Larmour
<jifl@jifvik.org>.
* configutil.c: Merge timeout_client patch by Jonathan Larmour
<jifl@jifvik.org>.
* config.example: Merge timeout_client patch by Jonathan Larmour
<jifl@jifvik.org>.
* configure.in: Bump version to 1.9.23.pre1.
* leafnode.h: Add wildmat and mysetvbuf prototypes.
* mysetvbuf.c: Include leafnode.h to pull the prototype in.
* wildmat.c: Change gets -> fgets in -DTEST main(). From leafnode
2.
2002-04-19 Matthias Andree <matthias.andree@gmx.de>
=== RELEASE 1.9.22 ===
* configure.in: Bump version to 1.9.22.rel.
* CREDITS: Change to UTF-8. Update.
2002-04-17 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Took Ralf Wildenhues' patch to fix the types of the
line length counter variable, to prevent buffer overrun on 64 bit
machines. The bug was introduced in 1.9.22.rc1. Overrides Fabrizio
Tironi's patch.
=== release 1.9.22.rc2 ===
* wildmat.c: Taken from leafnode-2.
* miscutil.c: Drop fnmatch hassle, use wildmat instead. Problem
reported by Arvid Warnecke.
* configure.in: Drop AC_FUNC_FNMATCH. Bump version to 1.9.22.rc2.
* Makefile.am: Add wildmat.c.
2002-04-15 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.22.rc1 ===
* NEWS: Update.
* TODO: Update.
* miscutil.c (whoami): Fix qualification logic, skip hosts that
look like localhost or localhost.localdomain (Red Hat default
installs suffered from the old whoami() logic).
* nntpd.c (parser): Change n from long to int, the range is small
enough (Patch by Fabrizio Tironi <awayz@katamail.com>)
* INSTALL: Add documentation on fully qualified domain names.
2002-04-14 Matthias Andree <matthias.andree@gmx.de>
* README: Update.
* configure.in: Bump version to 1.9.22.rc1.
* nntputil.c: The NewsCache workaround suffered from an inverted
logic and did not work properly. Bug reported by Detlev Jckel.
2002-04-08 Matthias Andree <matthias.andree@gmx.de>
=== RELEASE 1.9.21.rel (stable) ===
* NEWS: Update.
* TODO: Update.
* applyfilter.c: Ralf Wildenhues: keep last newline in header for
dofilter.
* configure.in: Bump version to 1.9.21.rel.
2002-04-05 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.21.rc2 ===
* miscutil.c: Drop HAVE_GMTOFF trash, use gmtoff()
instead. Suggested by Ralf Wildenhues.
* configure.in: Bump version to 1.9.21.rc2. Drop HAVE_GMTOFF check
(obsolete).
* xoverutil.c: Properly rewrite .overview when articles have been
removed that are not the first or last articles in the group,
reported by Volker Apelt (against leafnode-2) and Ralf Wildenhues.
* applyfilter.c: Do not reset group high water mark. (Reported by
Ralf Wildenhues.)
=== release 1.9.21.rc1 ===
* applyfilter.c: Work around bogus gcc warning "score might be
unused".
* TODO: Reorder and drop Cornelius' applyfilter wish (now
implemented).
* TODO: Mark "update overview (applyfilter)" as done.
* applyfilter.c: Update .overview after filtering, reported by
Ralf Wildenhues.
* nntpd.c: Add Jonathan Larmour to copyright.
* leafnode.h: Add clamp_maxage.
* configutil.c: Parse clamp_maxage.
* configure.in: Change version from 1.9.21.pre2 to 1.9.21.rc1,
short cutting because of the gmtoff bug.
* config.example: Addition by Jonathan Larmour
<jifl@jifvik.org>: document that maxage=0 means "No checking".
Matthias Andree: add clamp_maxage documentation.
* TODO: update
* NEWS: update
* INSTALL: Add MacOS X PCRE build instructions.
* fetchnews.c: Allow maxage manipulation -- newly introduced in
1.9.21.pre1 -- to be suppressed with "clamp_maxage=0" in the
configuration file.
2002-04-04 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Robustness fix by Jonathan Larmour
<jifl@jifvik.org>: save the group when rereading the active
file. Fixes a SIGSEGV.
* fetchnews.c: Robustness fix by Jonathan Larmour
<jifl@jifvik.org>: don't dereference NULL fields when parsing
incomplete XOVER lines. Fixes SIGSEGV.
* gmtoff.c: Former gmtoff() versions forced the DST flag to 0, so
the gmtoff() calculation had the wrong offset in locales that use
daylight saving time. Reported by Ralf Wildenhues.
2002-04-03 Matthias Andree <matthias.andree@gmx.de>
* configure.in: Bump version to 1.9.21.pre2.
* applyfilter.c: Ralf Wildenhues: Remove artificial limit on
header length -- new function readtodelim, terminate string
correctly. Fix usage description and a SEGV in case of wrong
cmdline input. Ralf Wildenhues: fix memory leak.
2002-03-29 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.21.pre1 ===
* NEWS: Update.
* fetchnews.8.in: Update XOVER information. Document that expire
overrides maxage if maxage is higher.
* TODO: Update.
* fetchnews.c: Abort when ENOSPC is detected on fclose in
getbody() or getgroup(). Problem reported by Michael O'Quinn.
* texpire.c: Drop lookup_expire, now in configutil.c.
* fetchnews.c: Clamp maxage to groupexpire/expire to prevent
fetching duplicates. Reported by Michael O'Quinn.
* configutil.c: Add "days" for expire entries. Move
lookup_expire() here (was in texpire.c).
* config.h.in: Updated.
* activutil.c: Fix uninitialized err use.
* leafnode.h: Add "days" for expire entries.
* activutil.c: Fix crash when no groupinfo data is
present. Reported by Thorsten Gunkel.
* mysetvbuf.c: New file. Wraps around setvbuf, taking care of
SETVBUF_REVERSED.
* leafnode.h: Add lfindinlist, replaceinlist, mysetvbuf
prototypes.
* configure.in: Bump version to 1.9.21.pre1. Add
AC_FUNC_SETVBUF_REVERSED.
* Makefile.am: Add mysetvbuf.c.
* miscutil.c: Add replaceinlist and lfindinlist functions.
* fetchnews.c: Change SERVERNAME~ files in processupstream to line
buffered mode. Roll in SERVERNAME~ into SERVERNAME if the ~ file
is newer.
2002-03-25 Matthias Andree <matthias.andree@gmx.de>
=== RELEASE 1.9.20 ===
* configure.in: Bump version to 1.9.20.rel, without actually
releasing 1.9.20.rc10.
* README: Drop reference to German documentation.
* fetchnews.c: Make getbody unlink messages more verbose.
2002-03-24 Matthias Andree <matthias.andree@gmx.de>
* configure.in: Bump version to .rc10.
* config.example: Move initialfetch closer to the beginning of the
file and recommend it.
* TODO: Add two bug reports by Michael O'Quinn.
* NEWS: new
* INSTALL: Recommend initialfetch.
* fetchnews.c: Keep old $spooldir/leaf.node/SERVERNAME file in
place when the new file has write errors. Bug found by Michael
O'Quinn. En passant, make two log messages more verbose and
easier to read.
2002-03-23 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.20.rc9 ===
* mgetaline.c: New file.
* README.FIRST: New file.
* Makefile.am: Add README.FIRST, mgetaline.c.
* README: Update.
* validatefqdn.c: Add "logtostderr" option to write a short 503
notice to stdout (for newsreaders connecting to nntpd) to give
users a hint why leafnode commits suicide. Idea arose after Heiko
Nock had difficulties with 1.9.20.rc8.
* texpire.c: Fix syslog/configuration initialization order.
Expire articles with 0 bytes.
* nntputil.c: Drop timeout handling, now in separate file. In
fopenart(), consider articles of 0 size as nonexistent. In
nntpreply(), use mgetaline() instead of getaline() to allow
network reads to time out.
* nntpd.c: Fix syslog/configuration initialization order. Drop
timeout handling, now in separate file. In fopenart(), consider
articles of 0 size as nonexistent.
* miscutil.c: Add "logtostderr" tag to initvars, to let nntpd tell
the connecting newsreader about its domain name troubles.
* leafnode.h: Fix prototypes, exhibit timeout management API
(timer, mgetaline & Co.).
* fetchnews.c: Also send "considering articles..." message to
syslog. Fix syslog/configuration initialization order. Fix file
descriptor leak, leaking one fd on each NNTP errors while fetching
articles; this fix introduces a new protocol element: articles are
truncated to 0 size on write errors, and 0-sized articles are
considered nonexistent by texpire and leafnode (the nntpd.)
* configure.in: Bump version to 1.9.20.rc9.
* checkgroups.c: Fix syslog/configuration initialization order.
* applyfilter.c: Fix syslog/configuration initialization order.
2002-03-20 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Drop unneeded variable p from dolist (Ralf Wildenhues).
* miscutil.c: Remove duplicate definition of global active (Ralf
Wildenhues).
* leafnode.h: Fix getline prototype (Ralf Wildenhues).
=== release 1.9.20.rc8 ===
* fetchnews.c: Add "HEAD" to logging of replies to "HEAD"
commands.
* TODO: Update.
* README: Update.
* INSTALL: Deprecate installation without tcpd.
* fetchnews.c: Log replies to GROUP commands ourselves with debug
== 1. To trace NewsPlex problems reported by Michael O'Quinn.
* Makefile.am: Fix fetchnews_DEPENDENCIES, fetchnews was not
linked anew after LIBOBJS or liblnutil.a updates.
* nntputil.c (putaline): do not log trailing CR or LF with
syslog. Use fputs instead of fprintf for efficiency.
(nntpreply): log the replies with debug == 1 now that getaline
only logs with debug > 1.
* nntputil.c: Log port number in "connected to" syslog message,
and mark the "200" with "reply:" so users know it's not the port
number. Suggested by Michael O'Quinn.
2002-03-18 Matthias Andree <matthias.andree@gmx.de>
* leafnode.h: Have findmsgid() return unsigned long (formerly
int).
* fetchnews.c: Have getmarked() consistently use unsigned long for
article numbers (formerly int).
* miscutil.c: Have findmsgid() return unsigned long (formerly
int).
2002-03-16 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: More doarticle() fixes by Ralf Wildenhues. I was too
fast with my last patch.
2002-03-15 Matthias Andree <matthias.andree@gmx.de>
* configure.in: Bump version to 1.9.20.rc8.
* nntpd.c: Fix possible NULL pointer dereference in response to
XHDR command, reported by Ralf Wildenhues. If INET_ADDRSTRLEN is
not defined, use 16 instead, OSF/1 v4.0 does not define this
macro; reported by Jrg Dietrich.
=== release 1.9.20.rc7 ===
* getaline.c: Drop trailing \n from syslog.
* nntpd.c: Quick and UGLY hack to log own and peer address.
* TODO: Update.
* .cvsignore: Add some test files.
* ALL: fix splint comments that indent broke again. Bug report
against indent 2.2.6 was filed, because it still breaks comments
with -nfca -nfc1.
* xoverutil.c: Add missing closedir(), patch by Ralf Wildenhues.
* nntpd.c: Make sure that ARTICLE <mid> marks the proper article
for download. Bug report by Ralf Wildenhues. Fix error reply
string (patch by Ralf Wildenhues). Replace xstrdup by critstrdup
(suggested by Ralf Wildenhues).
* fetchnews.c: Restore the splint comments that indent broke.
* configure.in: Bump version to 1.9.20.rc7.
2002-03-11 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.20.rc6 ===
* snprintf.c: Include leafnode.h.
* leafnode.h: Add vsnprintf prototype.
* xsnprintf.c: Enhanced.
* snprintf.c: Fix bogus "overrun" detections.
* Makefile.am: Update for automake 1.6.
* configure.in: Update for autoconf 2.53.
* snprintf.c: Add vsnprintf.
* ALL: ran through indent.
* artutil.c: Use NULL instead of 0.
* artutil.c: Add missing 0 terminator to mastr_vcat call.
* Makefile.am: Add attributes.h and getline.h to
liblnutil_a_SOURCES.
* .cvsignore: Update.
* tools/.cvsignore: Add Makefile.
* t/.cvsignore: New.
* xsnprintf.c: New snprintf checker.
* xoverutil.c: Silence flawfinder.
* validatefqdn.c: Silence flawfinder.
* texpire.c: Tons of type, format string and buffer overrun fixes
(not exploitable).
* strdup.c: Silence flawfinder.
* nntputil.c: Tons of type, format string and buffer overrun fixes
(not exploitable).
* nntpd.c: Fix buffer overruns (not exploitable). Fed through
indent.
* newsq.c: Fix buffer overrun (not exploitable). Fed through
indent.
* miscutil.c: Tons of type, format string and buffer overrun fixes
(not exploitable). Add overrun() and xsnprintf().
* lsort.c: Fix buffer overrun (not exploitable).
* lockfile.c: Silence flawfinder.
* leafnode.h: Type fixes.
* fetchnews.c: Fed through indent.
* fetchnews.c: Tons of type, format string and buffer overrun
fixes (not exploitable).
* configutil.c: Tons of type, format string and buffer overrun
fixes (not exploitable).
* attributes.h: From 2.0b.
* applyfilter.c: Properly initialize g->first to ULONG_MAX rather
than INT_MAX.
* activutil.c: Use xsnprintf to prevent buffer overruns from
spooldir (not exploitable).
* quickmkdir.c: Silence flawfinder.
* mastring.h: From 2.0b.
* mastring.c: From 2.0b.
* Makefile.am: Add mastring.c/.h and xsnprintf check.
* artutil.c: Fix possible buffer overrun with excessive crossposts
in store().
* artutil.c: Drop broken and unused storearticle() function.
* fetchnews.c: Fix compiler warnings around supersede().
* leafnode.h: Fix copyright statement.
* getline.c: Fix copyright statement.
* configutil.c: Fix copyright statement. Ralf Wildenhues: Add
splint annotations. Fix rare memory leaks and OOM management.
* artutil.c: Ralf Wildenhues: fix memory leak in
storearticle(). Fix uninitialized variable in store().
* COPYING.LGPL: Added.
* COPYING: Fix copyright statement.
* texpire.c: Fix copyright statement.
* testgen.c: Fix copyright statement.
* test1.c: Fix copyright statement.
* syslog.c: Fix copyright statement.
* quickmkdir.c: Fix copyright statement.
* mkstemp.c: Pull in mkstemp() from leafnode 2.0b.
* gmtoff.c: Fix copyright statement.
* getline.h: Fix copyright statement.
* Makefile.am: Add note to config.c that the file is
auto-generated. Drop env.c.
* Makefile.am: Fix copyright statement.
* applyfilter.c: Fix copyright statement.
* amiroot.c: Add reference to COPYING.LGPL.
* README: Add hacking and status notes.
* xoverutil.c: Ralf Wildenhues: fix possible null pointer
dereferences on badly formatted articles in getxoverline().
* nntpd.c: Ralf Wildenhues: fix *getheader memory leaks.
* miscutil.c: Ralf Wildenhues: fix format string bug in lookup().
* nntputil.c: Add Ralf Wildenhues to Copyright. Ralf Wildenhues:
add splint annotations.
* critmem.h: Add copyright statement and license. Ralf
Wildenhues: backport critstrdup from 2.0b8, add SPlint
annotations.
* leafnode.h: Ralf Wildenhues: SPlint annotations.
* fetchnews.c: Ralf Wildenhues: SPlint annotations, strdup ->
critstrdup, memleaks and possible NULL pointer dereference in
postarticles fixed.
* critmem.c: Add copyright and license statements.
* critmem.c: Ralf Wildenhues: add critstrdup from leafnode 2.0b.
* activutil.c: Ralf Wildenhues: fix memory leaks in mergegroups(),
changegroupdesc(), writeactive(), readactive(). Turn unchecked
strdup() into critstrdup().
2002-03-10 Matthias Andree <matthias.andree@gmx.de>
* quickmkdir.c: Ralf Wildenhues: add some const keywords to fix
compiler warnings.
* nntpd.c: Ralf Wildenhues: don't extract the article number for
STAT/BODY/HEAD/ARTICLE <MID> form, return 22X 0 <MID> according to
the current NNTP draft. We anticipate this change for
compatibility with some clients.
* miscutil.c: Ralf Wildenhues: introduce compile-time option
-DTESTMODE which ignores UID switch failures. Don't use in
production.
* lsort.c: Ralf Wildenhues: add some const keywords.
* fetchnews.c: Ralf Wildenhues' patch: fix compiler warnings, fix
variable shadows and add some const keywords.
* texpire.8.in: Document that texpire expires individual articles,
not threads.
* nntpd.c: Fix pseudo article handling broken by changes that went
into .rc5. Reported by Ralf Wildenhues.
* miscutil.c: Introduce SIZE_s as the size of the "s" variable.
* getaline.c: getaline(): Only print lines read when debug is >
1. Bug found by Michael O'Quinn. License: remove infiltration
clause for leafnode.
* configure.in: Bump version to 1.9.20.rc6.
2002-03-08 Matthias Andree <matthias.andree@gmx.de>
* fetchnews.c: Workaround for yet unknown bug: Also catch SIGPIPE
to let us still update the XOVER.
2002-03-05 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.20.rc5 ===
* TODO: Update.
* Makefile.am: Remove /dist from find in disk-hook to fix "make
dist" troubles when WITH_PCRE=no (for RPM).
* nntpd.c: fopenart(): Unify "STAT n" and "STAT" (with implicit
current article pointer) handling (also for ARTICLE/BODY/HEAD) to
fix inconsistencies reported by Ralf Wildenhues. Further tuning
may be required should bogus pseudoarticles show up. doarticle():
drop printf(...) in header/body copy loops, use fputs(..., stdout)
instead for efficiency.
* nntpd.c: Fix two strdup that didn't check their return value; we
have a new xstrdup function that does that. Found by Ralf
Wildenhues. Fix delaybody. Since 1.9.19.ma4, this had been broken
and would never deliver a body with BODY or ARTICLE. Found by Ralf
Wildenhues.
* nntpd.c: Fix NEWGROUPS "GMT" inverse logic bug which used
local->GMT compensation when the keyword GMT was NOT in place. The
bug has been introduced in 1.9.20.rc3 and was discovered by Ralf
Wildenhues.
2002-03-01 Matthias Andree <matthias.andree@gmx.de>
* TODO: Update.
* fetchnews.c: Merge Ralf Wildenhues' patch to fix atoi to strtol.
* configure.in: Bump version to 1.9.20.rc5.
* Makefile.am: Prune CVS directories from tarball. Reported by
Ralf Wildenhues.
=== release 1.9.20.rc4 ===
* xoverutil.c: Type and format string fixes.
* xoverutil.c: Drop arpa/inet.h, not needed in this file.
* nntpd.c: Feed through indent.
* leafnode.h: Type and format string fixes.
* fetchnews.c: Type and format string fixes. Drop delposted.
Remove article as soon as successfully posted to any server, to
prevent moderators from being mailed articles twice. NOTE: put
your most reliable servers first in the config file!
Fix SIGSEGV with fetchnews -P.
* configutil.c: Type and format string fixes.
* activutil.c: Type and format string fixes.
2002-02-28 Matthias Andree <matthias.andree@gmx.de>
* nntpd.c: Return article number 1 instead of 0 for pseudo group
STAT/HEAD/BODY/ARTICLE.
* nntpd.c: Fix STAT/HEAD/BODY/ARTICLE with pseudo article with
implicit article number. Bug reported, found and different fix
suggested by Ralf Wildenhues.
2002-02-27 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.20.rc3 ===
* README: Add some documentation on troubleshooting.
* env.c: Drop inline keywords, they break Sun's Workshop cc.
* test1.c: Fix compiler warnings, dropping argc/argv.
* env.c: Feed through protoize. Add some (int) typecasts.
* nntpd.c: Fix "XOVER 1- yields 420 on pseudogroups" bug reported
by Ralf Wildenhues. At the same time allow "XOVER -n" syntax.
* newsq.c: Implement new "-f" option that shows the
failed.postings queue instead. Change the column headers.
* newsq.1.in: Document new "-f" option that shows the
failed.postings queue instead.
* TODO: Update.
* README: Update.
* genlsm.sh.in: Update Maintained-By:.
* configure.in: Add AM_MAINTAINER_MODE to speed up end user
builds. If you want to hack on leafnode, please use ./configure
--enable-maintainer-mode.
* fetchnews.c: Drop unused variables from delposted().
* syslog.c: Include leafnode.h, patch by Ralf Wildenhues.
* nntpd.c: Various type and format string fixes.
* quickmkdir.c: Include stdlib/string.h. Patch by Ralf Wildenhues.
* fetchnews.c: Partially restore delposted() handling.
* texpire.c: Drop whoami() call, now done in initvars().
* nntputil.c: Change lllen to size_t.
* nntpd.c: Drop fqdn override to "localhost". Drop whoami(), now
called from initvars(). Use gmtoff() handling from
2.0b8_ma10pre. Drop global variable gmt_off, inadequate.
* miscutil.c: Call whoami() and validatefqdn() from initvars().
* lockfile.c: Register atexit() function to clean up left-behind
temporary lock helper files.
* leafnode.h: Add validatefqdn, gmtoff, drop whoami, change fqdn
size to a #define.
* configure.in: Bump version to 1.9.20.rc3.
* checkgroups.c: Drop whoami() call, now done in initvars().
* applyfilter.c: Drop whoami() call, now done in initvars().
* Makefile.am: Add .indent.pro, validatefqdn.c, gmtoff.c.
* gmtoff.c: new module.
2002-02-26 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.20.rc2 ===
* configure.in: Bump version to 1.9.20.rc2.
* fetchnews.c: When fetchnews is run with servers down, articles
may not make it to the upstream, but not to failed.postings
either, and will be lost without traces at the time delposted() is
run. We just drop delposted() and rely on postarticles() to remove
the articles successfully posted, relying on the upstream server
to reject postings older than its history data base. Bug reported
against leafnode 2.0b8 by Ivo Schwalbe, <ivo@ivos.de>, Message-ID:
<jffdg9.1v.ln@abu.ivos.de>, 1.9.19 inquiry by jom1@voonoo.net.
2002-02-20 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.20.rc1 ===
* nntpd.c: Add Ralf Wildenhues to Copyright.
* configure.in: Bump version to 1.9.20.rc1.
* nntpd.c: Ralf Wildenhues found and fixed a buffer underrun in
leafnode 2.0b8_ma9 and reported it was also present in
1.9.19. Merging the fix from 2.0b8_ma*.
2002-01-11 Matthias Andree <matthias.andree@gmx.de>
=== release 1.9.19.ma4 ===
* fetchnews.c: Take the workaround Mark Brown
<broonie@sirena.org.uk>, Debian leafnode package maintainer,
suggested to limit the impact of zero-sized groupinfo woes, Debian
Bug#128524. Beware however, this is not a complete fix and does
only work for setups with exactly one server/supplement line
(either server or supplement) in /etc/leafndoe/config, on
multi-server setups, after fixing your authentication information,
you *MUST* rerun fetchnews -f. Still, it does not make things
worse for the user, so I took it although I hesitated at
first. (Matthias Andree)
* nntputil.c: Add support for NewsCache workaround, keep a copy of
the line last read by nntpreply().
* nntpd.c: Take gmtoff from leafnode-2.0b8_ma9rc2 to fix Solaris
compilation troubles and wrong timezone in logs.
* Makefile.am: Require automake >= 1.5. Add copyright. No longer
distribute config.c. Properly set owner of directory holding the
lockfile (reported by Doug Laidlaw).
* leafnode.spec.in: Move lockfile to
/var/spool/news/leaf.node/fetchnews.lck
* fetchnews.c: Backport NewsCache workaround for upstream posting
from leafnode 2.0b*
* COPYING: Put 2002 in (C).
* configure.in: Require automake >= 2.52, put 2002 in (C), bump
version.
2001-09-02 Matthias Andree <matthias.andree@gmx.de>
* release 1.9.19.ma2
* updated for autoconf 2.52 and automake 1.5
* updated PCRE to 3.5
* Makefile.am: tweaks for automake
* env.c: shamelessly stolen from FreeBSD 4.4-RC
(setenv): change bcopy to memcpy
do __P right
* nntpd.c: fix unsetenv issues. May memory leak a couple of bytes
for the TZ environment variable, we cannot fix that portably
without major effort.
2001-06-16 Matthias Andree <matthias.andree@gmx.de>
f
* lockfile.c (safe_mkstemp): umask safe mkstemp
(lockfile_exists): reimplemented from scratch.
* miscutil.c: remove lockfile_exists, now available as separate
file. It was broken beyond repair.
2001-06-07 Matthias Andree <matthias.andree@gmx.de>
* activutil.c: remove snprintf which did not check its error code
and replace by a safe collection of fputs/fprintf.
2001-01-14 Matthias Andree <matthias.andree@gmx.de>
* generic: have callers of lockfile_exists() report to stdout if
locking fails.
* release: 1.9.18ma4
* Makefile.am: fix fetchnews dependencies when included PCRE are
to be used. fix make test when configured for build outside of
source directory.
* config.example: document linebuffer parameter
* configure.in: fix dependencies for included PCRE
* configutil.c: add "linebuffer" parameter, if set to != 0,
it will change stdout and stderr to be line buffered.
* fetchnews.c: tell port in "Trying to connect to..." verbose
message (only in 1.9.18ma4)
* filterutil.c: fix pcre.h include location and a minor typo.
2000-12-19 Matthias Andree <matthias.andree@gmx.de>
* configure.in: remove bash-isms
* Makefile.am: fix GNU make dependencies, BSD pmake is fine now
* fetchnews.c: fix some syslog format strings (%d -> %ld)
* nntpd.c: fix some syslog format strings (%d -> %ld)
2000-09-11 Matthias Andree <matthias.andree@gmx.de>
* genlsm.sh.in: generates lsm file automatically
* xoverutil.c: switch to mysyslog and remove mkstemp #ifdefs (now
handled by autoconf)
* testgen.c: testcase generator.
* test1.c: getaline tester.
* t/: new directory, has test cases for getaline.
* syslog.c (myopenlog): new function to remove #ifdefs from
program files. Encapsulate system differences in this file.
* quickmkdir.c: installation helper tool.
* nntpd.c: replace fgets by getaline, fix article number variables
types to unsigned long, switch to myopenlog.
* miscutil.c: remove snprintf, change xfirst/xlast to unsigned
long, split critmalloc/critrealloc, strdup, snprintf off, add
verbose>3-debug to makedir, delete getaline function (too complex,
yet buggy), fix ngmatch not recognizing * and [ as wildcards.
* makerpm.sh: removed file
* leafnode.spec.in: have leafnode.spec built by autoconf
* leafnode.h: cleanup, support for critmem.h and prototypes for
new and replacement functions, change xfirst/xlast to unsigned long
* getline.c: new implementation from scratch for systems without
GNU libc 6. GPL. Uses getc currently.
* getaline.c: new implementation from scratch, uses getline,
GPL. Rock solid. Will not break on \0. Does not change \0 to space
(waste of time, if an article has \0, it's broken, don't try to
fix).
* fetchnews.c: fix constants to PATH_MAX, support XOVER, work
around %y strftime compiler warning, switch to myopenlog
* doc_german: remove old documentation. outdated.
* critmem.c: split functions off miscutil.c
* critmem.h: new file
* configutil.c: change libdir to sysconfdir
* configure.in: adjust to automake, put -lpcre into PCRELIB rather
than LIBS, use AC_REPLACE_FUNCS for snprintf strdup mkstemp and
getline, support --with-spooldir, change --with-confdir to
override sysconfdir, support --with-lockfile, check rpm build
directory, add man pages to AC_OUTPUT, echo help message after
configuration.
* applyfilter.c: fix article counter type to unsigned long, switch
to myopenlog
* man pages: insert proper paths by autoconf
* activutil.c (readactive): fix type of n to ssize_t
* acconfig.h: new #defines: SPOOLDIR, LOCKFILE, HAVE_GETLINE
* PCRE_README: new documentation
* Makefile.am: switch to automake
* INSTALL: Updated and revised. Removed section on %y yielding
only last 2 digits of year.
2000-09-06 Matthias Andree <matthias.andree@gmx.de>
* lockfile.c: when a stale lock file existed, it would be removed,
but locking would still fail. Fixed. locking is now retried when
stale file had been removed.
* fetchnews.c: move whoami() in front of the lockfile_exists() call
addendum: move updateactive/writeactive/unlink(lockfile) from
child to parent process, since with the new lockfile.c, lockfiles
are no longer shared between processes.
* texpire.c (main): insert whoami(), needed for lockfile recovery
* applyfilter.c (main): insert whoami(), needed for lockfile recovery
History of 1.9.19 -- changes since 1.9.18:
activutil.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> to
_compactive() which removes some compiler warnings on FreeBSD.
applyfilter.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
- store() now is declared without all the unused variables.
artutil.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
configure.in:
- "ar" was not found on Solaris 8. Reported by Robert Kuhn
<robert@vermtech.de>.
fetchnews.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
- nntpactive(): To avoid a compiler warning, we let strftime()
produce a four-digit year; in the next line, we skip the
first two digits, though. Code written by Matthias Andree
<matthias.andree@web.de>.
- getgroup(): removed reset of group numbers when a group was unsubscribed.
Suggested by o.rousseaux@libertysurf.fr.
filterutil.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
leafnode.h:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
- store() now is declared without all the unused variables.
- moved various #include statements to the top of the file to make
leafnode also compile on IRIX 6.2. Reported by Gerhard Lenerz
<gerhard.lenerz@gmx.de>.
miscutil.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
- removed old getaline(), included new getline() and getaline() from
leafnode-2.0b8, both written by Matthias Andree <matthias.andree@web.de>.
nntpd.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
- gmtoff() returned wrong values. Bug first fixed in Leafnode-2.0b6 by
Stefan Wiens <s.wi@gmx.net>.
- gmtoff(): if there is no TZ variable set in the environment before
calling gmtoff(), it will now be unset again afterwards. Patch by
by <o.rousseaux@libertysurf.fr>.
Makefile.in:
- removed message about disregarding warning when making fetchnews because
the warning does not occur anymore.
- getline.c, getaline.c and getline.h now included.
xoverutil.c:
- applied a patch by Matthias Andree <matthias.andree@web.de> which
removes some compiler warnings on FreeBSD.
* configure.in: link pcre library only to those executables that
need it
(confdir): make confdir override sysconfdir with appropriate warnings.
=============================================================================
* miscutil.c (ngmatch): fix bad logic in finding wildcard characters
(snprintf): change i to type size_t (was int)
History of 1.9.18 -- changes since 1.9.17:
fetchnews.c:
- postarticles(): under certain circumstances, files were not closed.
Bug found by Carl D. Cravens <raven@phoenyx.net>.
- nntpactive(): if "LIST NEWSGROUPS news.group.name" does not work for the
first group, it is not attempted for other groups. Suggested by
Carlos Robinson <cerobinson@teleline.es>.
makerpm.sh:
- patch by Karsten Merker <merker@linuxtag.org> to accommodate new names of
tarballs changed in 1.9.17.
Miscellaneous:
- renamed CHANGES to ChangeLog.
=============================================================================
History of 1.9.17 -- changes since 1.9.16:
activutil.c:
- fixed a few printf statements which caused warnings on FreeBSD 4.1-STABLE.
Reported by Ron Rosson <insane@lunatic.oneinsane.net>.
fetchnews.c:
- some time_t variables in getgroup() now casted to int to avoid warnings
on FreeBSD 4.1-STABLE. Reported by Ron Rosson <insane@lunatic.oneinsane.net>.
Makefile:
- "make dist" now generates one tarball without and one with pcre library.
miscutil.c:
- another patch to getaline() because the previous one did not work
satisfactorily. NUL bytes are now changed to spaces.
nntpd.c:
- "xhdr [header] <message-id>" did not work correctly (always returned
the first header with the string length of [header] which became
obvious when Xref: was asked and Path: returned). Bug reported by
Andrzej Radecki <radecki@wpk.p.lodz.pl>.
- added the code for correct determination of timezone differences from
2.x by Joerg Dietrich.
texpire.c:
- crashed with segmentation fault if groupinfo file did not exist. Bug
described by Shaul Karl <shaulk@israsrv.net.il>; patch by Mark Brown
<broonie@tardis.ed.ac.uk>.
=============================================================================
History of 1.9.16 -- changes since 1.9.15:
fetchnews.c:
- getgroup(): applied a patch by <o.rousseaux@libertysurf.fr> which
makes fetchnews fetch news in ascending order.
nntpd.c:
- doxhdr(): now also returns "Newsgroups" header when only pseudo
article is available. Feature requested by Karen Nakamura <mail@gpsy.com>
because MT Newswatcher needs it.
=============================================================================
History of 1.9.15 -- changes since 1.9.14:
fetchnews.c:
- nntpactive() now uses LIST instead of LIST ACTIVE.
miscutil.c:
- getaline() now can also handle NUL bytes. Patch by Matthias Andree
<ma@dt.e-technik.uni-dortmund.de>.
=============================================================================
History of 1.9.14 -- changes since 1.9.13:
fetchnews.c:
- if the second server had no new articles compared to the first one,
fetchnews would not adjust the counter properly. Bug fixed by
Peter Katzmann <peter.katzmann@knuut.de>.
makerpm.sh:
- "make rpm" now also works on SuSE. Patch by Juergen Salk
<juergen.salk@gmx.net>.
- FAQ is now included in RPM. Bug reported by Bjoern Voigt <bjoern@web.de>.
miscutil.c:
- snprintf() was buggy (did not recognize %lu and %ld). Reported by Joerg
Dietrich <joerg@dietrich.net>.
nntpd.c:
- dopost(): if owndn is set, it is now also included in the Path: (not
only used for the message ID). Suggested by Mark Brown
<broonie@tardis.ed.ac.uk>
texpire.c:
- expiregroup(): checks now also if the pointer g exists. Bug reported
by Peter Katzmann <peter.katzmann@knuut.de>.
xoverutil.c:
- removed stripspace() completely from the code that creates the
overview lines. This means that leading and trailing blanks are not
removed any more in any header line, nor are consecutive blanks
compressed.
- getxoverline(): in the Subject: line, consecutive blanks are now left
untouched. Requested by Thomas Zajic <zlatko@gmx.at>.
=============================================================================
History of 1.9.13 -- changes since 1.9.12:
configure.in:
- tests now also for snprintf() because it is used in activutil.c.
configutil.c:
- fixed possible overflow bug when providing very large expiry times. Bug
described by Andreas Ferber <aferber@techfak.uni-bielefeld.de>.
miscutil.c:
- added a homegrown version of snprintf() for systems which don't supply it.
nntpd.c:
- did not compile under *BSD because it defines the timezone in a different
way. Bug first reported by Ron Rosson <insane@lunatic.oneinsane.net> and
fixed by Shigeru Ikeda <js3guj@gold.ocn.ne.jp> and Joerg Dietrich
<joerg@dietrich.net>.
=============================================================================
History of 1.9.12 -- changes since 1.9.11:
activutil.c:
- mergegroup() now sets the name of the newsgroup after the last
as NULL. Suggested by Claude Michel <cpjm@free.fr>.
- insertgroup() does not change any information of groups which are
already present. Bug discovered and fixed independently by Johannes
Stezenbach and Joerg Dietrich <joerg@dietrich.net>.
artutil.c:
- fgetheader(): header doesn't have to include terminal : anymore.
fetchnews.c:
- delposted(): if an article could not be deleted, there was no error
message. Noted by Matthias Leisi <usenet-03-2000@astrum.ch>.
- nntpactive(): if the whole newsgroups file is fetched from upstream
servers, the timestamps are set to 0. Bug discovered and fixed by
Joerg Dietrich <joerg@dietrich.net>.
Makefile.in:
- to install man pages, "install" is now used instead of "cp". Suggested
by Mike Castle <dalgoda@ix.netcom.com>.
nntpd.c:
- in donewgroups(), the timezone was not considered. Bug described and
fixed by Joerg Dietrich <joerg@dietrich.net>.
- in doxhdr(), arg was overwritten sometimes for some reasons. Therefore
it is now copied into a separate buffer which is then used. Bug
discovered by Johannes Stezenbach.
- dummy article now points to http://www.leafnode.org/ and mentions
fetchnews instead of fetch. Noted by Hauke Heidtmann
<haukeheidtmann@gmx.net>. (This was already corrected in the 2.0alpha
versions.)
texpire.c:
- texpire could crash when directories contained subdirectories whose
names consisted of digits only. Bug discovered and fixed by
Georg Borgstroem <geobo@lysator.liu.se>.
- in dogroup(), replaced a rewinddir() call by a closedir() ; opendir().
Suggested by Stephen Marley <stephen@home.uklinux.net> because of some
strange infinite loop he ran into.
xoverutil.c:
- "updated x lines in y/.overview" now only logged if debugmode is
switched on. Suggested by Juergen Salk <juergen.salk@gmx.de>.
=============================================================================
History of 1.9.11 -- changes since 1.9.10:
activutil.c:
- helpfindgroup() modified which speeds up the time to find a group.
Prompted by benchmarking the code to some code written by Tony de
Haan <tony@iae.nl>.
- readactive() caused huge memory leaks if called repeatedly because the
old active was not freed properly. Bug found and fixed by Lloyd Zusman
<ljz@asfast.com>.
fetchnews.c:
- nntpactive() did not insert new newsgroups correctly. Bug discovered
and fixed by Joerg Dietrich <joerg@dietrich.net>. This bug was partially
introduced in 1.9.10 but was partially present already in previous
versions.
Miscellaneous:
- configure.in now detects old-style BSD syslog. This also involves
changes in leafnode.h and applyfilter.c, fetchnews.c, nntpd.c and
texpire.c.
- configure.in readjusted (HAVE_OFFT_8 was not needed)
- configure.in now checks whether kernel includes are installed properly.
Suggested by Matthias Andree <ma@dt.e-technik.uni-dortmund.de>.
- added a new point to the FAQ. Suggested by Matthias Andree
<ma@dt.e-technik.uni-dortmund.de>.
=============================================================================
History of 1.9.10 -- changes since 1.9.9:
activutil.c:
- changegroupdesc() crashed when getting a NULL pointer as parameter.
Bug discovered and fixed by Joerg Dietrich <joerg@dietrich.net>.
- writeactive() stopped writing active file if an empty record was
encountered. Fixed. (I have no idea where these empty records come
from in the first place...)
- readactive() now sets first and last article in each group to 1 if they
are 0.
- writeactive() now should not write empty records to the groupinfo file
any more
- replaced the old version with the version from leafnode-2.0a9 featuring
arrays instead of trees. There is one difference: since lsort is already
called in the makefile, the active file is not re-sorted when reading
it.
applyfilter.c:
- fixed for new activutil.
checkgroups.c:
- fixed for new activutil.
config.example:
- replaced all "supplement" with "server"
configutil.c:
- corelimit.rlim_cur is now cast to int.
fetchnews.c:
- diverse time_t things casted to int.
- nntpactive() logged too much after last "fix". Fixed.
- fixed nntpactive() for new activutil.
- if "LIST NEWSGROUPS" returned just "215" without any text, fetchnews
became confused. Reported by Pasqualino Casciano
<pasqualino.casciano@stud.lrz-muenchen.de>.
miscutil.c:
- somehow, Bruno Rohee's patch escaped the final distribution of 1.9.8
and 1.9.9. Fixed.
nntpd.c:
- if there is a timeout when calling mgetaline(), leafnode now returns
400 instead of 421. Suggested by Michael Schlennstedt <schlenn@schlenn.de>.
- doxhdr() now returns (none) if asked for XHDR REFERENCES of an
article. Suggested by Ted Marston <ted@nowtsfree.freeserve.co.uk>;
increases compatibility with xrn.
- fixed for new activutil.
texpire.c:
- fixed for new activutil.
xoverutil.c:
- illegal articles are now simply removed.
Miscellaneous:
- added a section about connection loss to the FAQ
- TROUBLESHOOTING section in README moved into separate FAQ document
- changes in config.example and leafnode.8 suggested by Mark Brown
<broonie@tardis.ed.ac.uk>.
=============================================================================
History of 1.9.9 -- changes since 1.9.8:
Miscellaneous:
- the previous correction in the Makefile actually was not a correction
but the introduction of a bug because it prevents proper compilation
if libpcre is not installed already. Fixed back. Reported first by
Matthias Flohr <mflohr@gmx.de>.
=============================================================================
History of 1.9.8 -- changes since 1.9.7:
fetchnews.c:
- getgroup(): there was still a realloc() too many left which led to
occasional crashes. Fixed.
- getgroup(): if realloc( x, 0 ) is called twice, the program will crash.
Fixed.
- getgroup(): if there are no articles to get, we don't go through the
"XHDR Date" stuff (which seems to be very slow with DNews anyway).
- getgroup(): if a group is unsubscribed, "first" and "last" are set to 1
- fixed a bug in getgroup() which might have lead to premature expiring
of groups
miscutil.c:
- fixed a bug in ngmatch() (#ifdef was for HAVE_FNMATCH_H instead of
HAVE_FNMATCH) discovered by Daniel Barron <daniel@jadeb.com>.
- applied a patch by Bruno Rohee <rohee@OpenBSD.ORG> replacing setreuid()
and setregid() with setuid() and setgid() when possible
nntpd.c:
- donewgroups(): changed code to make it more clear
- donewgroups(): some newsreaders exhibited a Y2K problem and sent 7-digit
dates. Leafnode can now parse these dates as well.
- markinterest() changed both mtime and atime if file was already
present. Fixed. (A problem with the expiry mechanism had been reported
by several people but it was quite difficult to track it down.)
texpire.c:
- article numbers are not reset when a group is empty because this
results in new articles not being displayed in low-traffic groups.
xoverutil.c:
- applied a patch by Bruno Rohee <rohee@OpenBSD.ORG> replacing mktemp()
with mkstemp() if possible
- removed the error message that occurred if a directory contained
newsgroups starting with a digit
Miscellaneous:
- /var/spool/news/failed.postings was not installed during "make install"
- added "fetchnews -n" to the troubleshooting section of the README.
- small bug in Makefile.in corrected (-lpcre was linked twice with
applyfilter)
- small bug in makerpm.sh fixed (version number was hard-coded).
=============================================================================
History of 1.9.7 -- changes since 1.9.6:
fetchnews.c:
- new function tabtospace() to handle tab-ified article headers. Written
by Radoslaw Gancarz <r_g@priv2.onet.pl>. (This problem is treated
differently in leafnode-2.0a7.)
- getgroup(): somehow a bug which I thought had been fixed crept in again.
If a newsgroup line starts with more than one space, fetchnews would
not delete the last characters when deleting spaces. Bug found by
Manfred Weihs <e9525662@student.tuwien.ac.at> and Thomas Themel
<tthemel@gmx.net>. (Actually, I have no idea what will happen with
leafnode-2.0a7 in this case.)
Miscellaneous:
- "make rpm" now works; thanks to Karsten Merker <merker@guug.de> for
the patch (major modifications in makerpm.sh and Makefile.in)
=============================================================================
History of 1.9.6 -- changes since 1.9.5:
fetchnews.c:
- getgroup: if any article was killed by min/maxlines or maxage, not all
remaining articles in that group were fetched. Reported by
Jeff East <an972@freenet.carleton.ca>.
=============================================================================
History of 1.9.5 -- changes since 1.9.4:
activutil.c:
- When groupinfo was not a file, leafnode would crash. Fixed.
- Misc. castings done.
- isinteresting() now works case-insensitive.
- A closedir was missing in fakeactive(). Fixed.
config.example:
- added lines for "hostname" and "filterfile" parameter.
config.h.in:
- Support for libshadow and libcrypt added (not needed yet).
- Misc. changes.
configure.in:
- Cleaned up.
- Timezone problems fixed.
- IPv6 support improved.
- Checking for shadow library (not needed yet).
configutil.c:
- Server now logged with LOG_DEBUG instead of LOG_INFO (like the rest of
the configuration).
fetchnews.c:
- No more lowercase conversion of newsgroups names.
- If some essential header was not found, fetchnews segfaulted. Fixed.
- Calls to tgetaline() removed.
- If upstream server understood XGTITLE, new groups and their descriptions
were not entered in active file. Fixed (hopefully).
filterutil.c:
- If no filterfile is present, return FALSE.
miscutil.c:
- getpid() is now casted to int.
- tolower() now casts its argument.
- lowercase() removed.
- Year 2000 problem fixed.
- Timezone problems fixed.
newsq.c:
- st.st_size is now copied in a variable first and printed later (otherwise
we had troubles with warnings etc. on various operating systems, including
HP/UX, Digital Unix and *BSD).
- #include <sys/types.h> for HP/UX and certain variants of BSD.
nntpd.c:
- Y2K fix in donewgroups().
- No more conversion to lowercase of newsgroups names.
- Complains now if configuration file cannot be read.
- Empty lines on input are ignored.
nntputil.c:
- tgetaline() removed.
texpire.c:
- dogroup(): when determining the first and last articles in the
group, we now stat() every article and check whether it is a
regular file. This saves troubles with groups like alt.2600
where a directory alt/2600 exists and the 2600 was mistaken as
an article number.
xoverutil.c:
- Information about updating .overview files is not displayed on stdout
anymore.
Miscellaneous:
- New file lsort.c, to properly resort groupinfo file.
Changes of 1.9.4-ma1-bn1 included:
---------------------------------
- Fixed a few non-portable constructs in the update.sh script
Changes of 1.9.4-ma1 included:
-----------------------------
INSTALL:7: added information about SuSE --prefix=/usr
INSTALL:78: added pointers to hosts_access(5) and hosts_options(5)
Makefile.in:53: moved @cp pcre/libpcre.a libpcre.a into libpcre.a: actions
Makefile.in:57: prepended $(MFLAGS) and $(MAKEFLAGS) with dash (`-')
Makefile.in:96: clean also removes *~ and \#*
Makefile.in:98: prepended $(MFLAGS) and $(MAKEFLAGS) with dash (`-')
ll 57,98 fixes stop emacs barfing on make -k "unknown target k"
Makefile.in:101: realclean also removes *.rej and *.orig
Makefile.in:161ff: split uninstall into uninstall and uninstall-bins
uninstall-bins will not touch $(SPOOLDIR) and $(LIBDIR)
configutil.c:106: initializers added: p = 0, q = 0
activutil.c:167: initializer added: desc = 0
miscutil.c:145: made namelen unsigned
nntputil.c:196: corrected parentheses in #define
nntputil.c:206: made struct servent *sp static (was auto)
nntputil.c:210: made int i static (was register, should not hurt, indexes
only servers)
fetchnews.c:216: inserted comparison against date: string, fixed
some strange SIGSEGV I experienced
fetchnews.c:731++: added fast XHDR header check for maxage speedup
speeds up maxage purging if some other site dumped loads of
old news into some high-traffic newsgroup.
fetchnews.c:738: initializer added: aage = 0
fetchnews.c:1059: warning re. strftime %y yielding 2 digits is ok and
conforms to RFC-977 which respects Y2k issues.
fetchnews.c:1209: stat() checks for errors and skips . and ..
xoverutil.c:301: skips . and .. directory entries
=============================================================================
History of 1.9.4 -- changes since 1.9.3:
libutil:
=======
180799: xoverutil: getxover() now logs corrected XOVER lines to syslog
instead of printing them to stdout (this should have happened
before).
nntpd:
=====
160799: added more verbose error message in dopost() if an article could
not be posted (code written by Matthias Andree
<mandree@sx1.HRZ.Uni-Dortmund.DE>).
160799: removed an unnecessary open() call in dopost() (probably a cut-
and-paste error)
160799: in doarticle(), moved free(p) into previous if.. condition.
Suggested by Matthias Andree <mandree@sx1.HRZ.Uni-Dortmund.DE>.
Miscellaneous:
=============
170799: changed several occurences of /usr/lib to /etc in the manpages.
Problem first noted by Stefan Ladwig <stefan.ladwig@privat.kkf.net>.
150799: pcre(7) now installs correctly. Bug found by Diedrich Ehlerding
<diedrich.ehlerding@t-online.de>.
=============================================================================
History of 1.9.3 -- changes since 1.9.3b6:
fetchnews:
=========
150799: age(): time_struct is now set to zero before filling it with
variables. Fix by <wiml@netcom.com>.
libutil:
=======
100799: filterutil: autodetection of various pcre versions now allows
compiling with pre-existing versions on a system.
090799: filterutil: now only the matched pattern is logged to LOG_DEBUG,
and this happens only if the debugmode is switched on
070799: xoverutil: "illegal articles" (i.e. articles which don't have
correct XOVER information) are now removed again (it is checked
before whether these are really articles).
070799: configutil: "fqdn" is now the same as "hostname" in the
configuration file. (Necessary because of a mistake in a
FAQ by Jonas Luster which made it into LINUX magazine.)
nntpd:
=====
150799: NEWGROUPS would sometimes return all groups because struct
timearray (in donewgroups()) was sometimes only partially
initialized. Bug reported and fix provided by <wiml@netcom.com>.
Miscellaneous:
=============
150799: updated German documentation by Alexander Reinwarth
<a.reinwarth@gmx.de>.
150799: created acconfig.h (courtesy Mark Brown <broonie@tardis.ed.ac.uk>)
140799: replaced pcre.3 with pcre.7 (courtesy Mark Brown
<broonie@tardis.ed.ac.uk>)
100799: configure.in: fiddled, together with Mark Brown
<broonie@tardis.ed.ac.uk>, a lot with the autodetection of various
pcre versions.
090799: Makefile.in: install pcre.3 only if no libpcre is found on the
system. Suggested by Mark Brown <broonie@tardis.ed.ac.uk>.
070799: Makefile.in: libpcre is now built before compiling of the main
programs
=============================================================================
History of 1.9.3b6 -- changes since 1.9.3b5:
fetchnews:
=========
280699: getgroup(): case-insensitive recognition of newsgroups did not
work yet. Now the Newsgroups: header is explicitely converted
to lower case before storing the files.
libutil:
=======
010799: activutil: writeactive() now converts all existing groups to
lowercase
300699: activutil: insertgroup() now converts groupname to lowercase
before inserting it into tree
280699: filterutil: readfilter() would enter BS into the cleartext fields.
Fixed.
nntpd:
=====
050799: included patch for IPv6 by Mark Brown <broonie@tardis.ed.ac.uk>.
Miscellaneous:
=============
050799: calling ./configure with --with-ipv6 will enable IPv6.
050799: fixed Mark's patch from yesterday.
040799: gcc-specific compiler flags are now only set if gcc was indeed
detected. Patch by Mark Brown <broonie@tardis.ed.ac.uk>.
010799: If libpcre was already installed by something else, this would not
be recognized properly. Bug reported by Mark Brown
<broonie@tardis.ed.ac.uk>.
=============================================================================
History of 1.9.3b5 -- changes since 1.9.3b4:
applyfilter:
===========
270699: files are only stat()ed if they start with a digit
270699: applyfilter now checks at most the first 5000 bytes of an article
(which should be more than enough to accommodate headers). This
avoids lots of realloc()s.
270699: program crashed when encountering articles without bodies. Now
these articles are deleted.
libutil:
=======
270699: activutil: isinteresting(), insertgroup() and findgroup() are now
case-insensitive
270699: miscutil: new function lowercase() (from 1.10b2)
270699: filterutil: now logs matched expression to LOG_DEBUG
270699: filterutil: now works with pcre instead of the libc regexp. This
leads to a further speed increase. Suggested by Sven Paulus
<sven@karlsruhe.org>.
Miscellaneous:
=============
270699: update.sh: now re-sorts the groupinfo file in a case-insensitive
manner. Must be called when updating from 1.9.2 or smaller.
270699: Makefile.in now created with autoconf-2.13 instead of 2.10.
=============================================================================
History of 1.9.3b4 -- changes since 1.9.3b3:
fetchnews:
=========
260699: getgroup(): doing things with an uninitialized variable (which
was also unnecessary) could lead to segfaults. Bug discovered
by Mark Brown <broonie@tardis.ed.ac.uk>.
newsq:
=====
160699: output format changed (code written by Matthias Andree
<mandree@sx1.HRZ.Uni-Dortmund.DE>)
=============================================================================
History of 1.9.3b3 -- changes since 1.9.3b2:
applyfilter:
===========
240699: now also checks for kept files
230699: now delete message-id links immediately together with others. This
saves a lot of time.
230699: added "if (debugmode)" in front of various "syslog(LOG_DEBUG,...)"
statements
fetchnews:
=========
240699: replaced getaline() with tgetaline() where appropriate
220699: inserted an additional fflush(stdout) into main() to avoid
double logging of messages. Fix provided by Stefan Troeger
<stefan.troeger@wirtschaft.tu-chemnitz.de>.
libutil:
=======
240699: configutil: username and password are not logged any more in clear
text to LOG_DEBUG
240699: nntputil: new function tgetaline() which is a wrapper for getaline()
that honours timeouts. timeout considered is that of the current
server. (Originally introduced 110499 in 1.10b1)
nntpd:
=====
240699: parser() rewritten. Now the connection is closed after 15 minutes
of inactivity
Miscellaneous:
=============
230699: Makefile.in: patch by Philippe De Muyter <phdm@macqel.be> to
compile leafnode in a separate directory
220699: removed all the rpm stuff from configure.in and put it into
makerpm.sh. This also leads to changes in Makefile.in. However,
"make rpm" does not work (breaks with "bad user/group").
=============================================================================
History of 1.9.3b2 -- changes since 1.9.3b1:
fetchnews:
=========
210699: openlog() now called with "fetchnews" instead of "fetch"
libutil:
=======
210699: miscutil: rfctime(): fiddled with the timezone. Bug reported by
Sven Paulus <sven@karlsruhe.org> (rfctime did some odd rounding).
nntpd:
=====
210699: doxhdr(): handles now also "xhdr [header] a-" correctly
210699: removed a debug call from fopenart()
=============================================================================
History of 1.9.3b1 -- changes since 1.9.2:
applyfilter:
===========
150399: for some reason, the config file was read twice (which lead to
crashes). Fixed.
fetch/fetchnews:
===============
210699: renamed fetch to fetchnews to avoid potential conflicts with
other programs
100499: getgroup(): fetch would crash with a segmentation fault if all
headers began with whitespace because of an uninitialized
variable. Bug report and patch provided by Stephan Block
<block@enst.fr>.
020499: new function _ignore_answer() (not used yet)
220399: added "if (debugmode)" in front of various "syslog(LOG_DEBUG,...)"
statements
210399: postarticles(): we had forgotten to remove the putaline() which
resulted in complete screw-up of articles posted. Fixed.
200399: main(): we always authenticate if we have a username entry for
the current_server. The reason is that it is not always obvious
whether you have to authenticate yourself at the remote server
or not. Problem reported by Mark Lutz <Mark.Lutz@usa.net>.
200399: postarticles(): we don't use putaline any more to post bodies
because the line length of bodies is not restricted and lines
> 1023 chars crashed sprintf(). Bug reported by Sven Paulus
<sven@karlsruhe.org>.
200399: getgroup(): replaced possible / in Message-IDs with @ (like in
lookup()).
190399: problems with dots at the beginning of lines fixed. Insisted upon
(rightly!) by Johnny Tevessen <j.tevessen@gmx.net>.
190399: delposted() looks for stale articles in out.going. Patch by
Joerg Dietrich <uzsv7x@ibm.rhrz.uni-bonn.de>.
170399: getgroup(): reply to HEAD and BODY are now checked only for the
first two digits to make fetch work with more broken upstream
servers.
170399: getgroup() crashed when checking for a Lines: header which was
not present. Fixed. Independently discovered by Juha Pohjalainen
<jmp@iki.fi> and Jarle Rongved <rongved@online.no>.
160399: nntpactive(): LIST NEWSGROUPS should now work also with faulty replies
(like the ones produced by INN 1.5.1).
160399: processupstream(): no more logging of getaline()s when reading
from files in /var/spool/news/leaf.node/
140399: fetch -P would delete lockfiles not produced by it. Fixed.
120399: getgroup(): parsing for maxbytes didn't work. Reported by
Friedhelm Hinrichs <F.Hinrichs@tu-bs.de>. My fix will still
fail if XHDR get out of sync, but the other option (to compare
the whole array every time) is not very elegant either.
120399: age(): included some fixes provided by Friedhelm Hinrichs
<F.Hinrichs@tu-bs.de>.
090399: output of XHDR is now not logged to LOG_DEBUG anymore.
090399: added a warning message in nntpactive() to indicate to users
whether they should use "nodesc = 1" in their config files
070399: fixed a bug (reported by Jeff Grossman <jeff@stikman.com>) in
processupstream(). When "linux.announce" and "comp.os.linux.announce"
were fetched from the same server, fetch had sometimes problems
to store the correct last article number for "linux.announce".
libutil:
=======
130499: configutil: raised default timeout to 30 seconds (from 10, which
would sometimes hit on my local server).
030499: artutil: fixed a bug in fgetheader(): to always get a header, it
is necessary to rewind the file before doing the search
020499: included lots of tabs instead of spaces into the code of
activutil.c
210399: xoverutil: no more logging of "wrote .../.overview" to stdout
because this did confuse so many people (despite it being mentioned
in the docs)
170399: xoverutil & nntputil: replaced all atoi() with strtol()
170399: configutil: readconfig() now parses the actual value of
create_all_links. Suggested by Taisuke Yamada <tai@imasy.or.jp>.
170399: configutil: replaced all atoi() with strtol()
160399: xoverutil: moved legalxoverline() to texpire.c and changed a
parameter. This reduces the size of fetch and nntpd by about 3 kBytes
and the size of texpire by almost 20 kBytes.
150399: updateactive(): "if ( fopen(...) > 0 )" changed to "if
( fopen(...) != NULL )". Bug reported and fix provided by
Johnny Teveen <j.tevessen@gmx.de>.
140399: xoverutil: logging of faulty xoverlines now to LOG_DEBUG instead of
LOG_INFO.
120399: configutil: maxbytes was ignored if maxlines was not set as well.
Fixed. Reported by Friedhelm Hinrichs <F.Hinrichs@tu-bs.de>.
070399: miscutil: new functions findinlist() and freelist().
070399: miscutil: removed a potentially confusing error message from
lockfile_exists() which was introduced for testing purposes in 1.9.1.
nntpd:
=====
120499: doxhdr() failed on XHDR [header] from-to. Reported and patched
by Steven Flintham <steven@lemma.demon.co.uk>.
120499: dolist() now doesn't call chdir anymore which caused leafnode
to forget the directory of the current group. Bug reported by
Steven Flintham <steven@lemma.demon.co.uk> and Thomas J.
Merritt <tjm@codegen.com>.
160699: dopost(): if posting fails, error is now 441 instead of 440 (as
it should be). Fixed by Matthias Andree
<mandree@sx1.HRZ.Uni-Dortmund.DE>.
090399: fleshed out dohelp(); patch by Ed Carp <erc@pobox.com>.
texpire:
=======
230399: faulty syslog() statement fixed which lead to a segfault
160399: moved legalxoverline() here from xoverutil.c
140399: removed double logging of faulty xoverlines
Miscellaneous:
=============
210699: Makefile.in: changed "chown user.group" to "chown user:group".
Suggested by many people (I forgot who).
210699: selected the interesting bits from 1.10b2 to put them into 1.9.3.
150699: README: added some more description to the troubleshooting entry
070699: configure.in: RPMSOURCEDIR and some other variables were created
by grepping the output of "rpm --showrc". With new versions of
rpm this grep would sometimes yield more than one hit, leading
to garbled configure scripts. Bug described by Matt Armstrong
<matt@lickey.com> (lots of other people stumbled upon this, but
Matt was the only one who managed to investigate it in depth making
it easy to fix it).
010699: Makefile.in: USRDIR was not created if not present. Bug discovered
by Rene Wuttke <rene@wuttke.net>.
040499: german manpages by Alexander Reinwarth <a.reinwarth@gmx.de>.
020499: Makefile.in: changed the gids in "install -g gid" from "root" to "0"
(there is no group called "root" on FreeBSD).
190399: lots of (int) castings changed to (unsigned char). Patch provided
by Johnny Tevessen <j.tevessen@gmx.net>
180399: german README, courtesy of Alexander Reinwarth <a.reinwarth@gmx.de>
170399: german INSTALL, courtesy of Alexander Stielau <aleks@zedat.fu-berlin.de>
=============================================================================
History of 1.9.2 -- changes since 1.9.1:
Miscellaneous:
=============
030399: leafnode.h: had forgotten to include <sys/types.h> before <regex.h>
which resulted in compilation errors
=============================================================================
History of 1.9.1 -- changes since 1.9:
fetch:
=====
220299: articles fetched are now also counted correctly if delaybody is
set. Bug reported and fixed by Rey IJben <rey@linuxrules.xs4all.nl>.
170299: getgroup(): if /var/spool/news/message.id/ subdirectories are
not present, they are now created as needed. Patch provided by
Max Matveev <max@melbourne.sgi.com>
170299: processupstream(): error message was done with a zero pointer.
Bug reported and fixed by Max Matveev <max@melbourne.sgi.com>
and Stephan Block <block@enst.fr>
140299: postarticles(): haveid was initialized at the wrong place. Bug
reported by Jeff Grossman <jeff@stikman.com>.
140299: getgroup(): "artlimit" is now tested after "initiallimit" (like
in leafnode+-2.4). Bug reported by Rey IJben
<rey@linuxrules.xs4all.nl>.
140299: getgroup(): "initiallimit" is now only applied if the last article
number of a newsgroup on the local server is 1.
140299: moved the "struct stringlist" declaration to leafnode.h
140299: getgroup(): moved checking from lines back into the general
checking of headers. XHDR was very slow, especially when logging
LOG_DEBUG.
140299: main(): using current_server in main loop instead of servers
(doesn't matter but is easier to understand)
140299: nntpactive() now uses the global variable current_server instead
of a local variable
libutil:
=======
030399: activutil: fixed a mistake in insertgroup() which had removed all
the group descriptions
150299: activutil: did some benchmarking
1) getting 5000 lines from active file and building a new tree with
insertgroup() (current algorithm if you use fetch for the very
first time or with -f):
1 min 10 sec, of these were 61 secs user time; load 88.1%
2) building tree by using readactive(), then getting 5000 lines from
active file on stdin and rebuilding tree with insertgroup():
3 sec, of these were 2 secs user time; load 84.7%
3) getting 5000 lines from active file and concatenating them in
memory by using critrealloc() and strcat() (no sorting!):
2 min 45 sec, of these were 141 secs user time; load 86.0%
4) getting 5000 lines from active file and putting them into a
stringlist (unsorted):
< 1 sec; load 92.0%
=> insertgroup() must be improved
140299: miscutil: the lockfile mechanism does not always work. Now, if the
lockfile can be opened but not parsed, 1 is returned. If the lockfile
cannot be opened errors are written to LOG_ERR (experimental)
nntpd:
=====
160299: managed to build wildcard matching into dolist() and list()
160299: major overhaul of doarticle() because it could be forced to
segfault reproducibly
160299: fopenpseudoart() partially taken from leafnode+-2.4
160299: error() taken from leafnode+-2.4
texpire:
=======
210299: groupexpire didn't work on globs. Bug reported and fixed by
Walt Mankowski <waltman@netaxs.com>
Miscellaneous:
=============
230299: new file makerpm.sh which constructs RPMs on the fly. Template
was originally submitted by Karsten Merker <merker@guug.de> and
heavily modified.
170299: Makefile.in: $PREFIX_USR now also used for the $LIBDIR
160299: lots of castings in isspace(), isalpha(), isalnum() and isdigit()
to avoid stupid warnings on Suns
160299: we don't need sys_nerr and sys_errlist anymore because of the
change in nntpd.c error().
140299: added create_all_links to config.example
=============================================================================
History of 1.9 -- changes since 1.8.1:
applyfilter:
===========
030299: optimized the filtering algorithm; filtering is now at least twice
as fast (I ran a benchmark with a 146 line filter file:
query present query not present
old version 12.8 sec 17.1 sec
new version 5.3 sec 7.7 sec)
020299: first and last article of a filtered newsgroup should now be
set correctly
210199: added locking mechanism to applyfilter
190199: added applyfilter(8) to the distribution
fetch:
=====
130299: postarticles(): in some cases, fetch would complain about directory
names not being posted due to uninitialized variables. Fixed. Bug
discovered by Jeff Grossman <jeff@stikman.com>.
120299: postarticles() now logs the number of articles posted if fetch
is called with -v to news.info . Suggested by Jeff Grossman
<jeff@stikman.com>.
120299: main(): changed the patch of Jeff East somewhat (reply was
assumed to be filled correctly by nntpreply() which it was not).
110299: main(): authorizing for posting articles improved. Patch by
Jeff East <an972@freenet.carleton.ca>
090299: postarticles(): for some unknown reason, fgetheader() was able to
retrieve Message-IDs from . and .. therefore directories are now
explicitely excluded from posting
090299: getgroup(): the Supersede:s code causes fetch to hang. Fixed this
by commenting it out with #ifdef NOTYET
090299: main(): authorizing was not done for posting articles. Bug found
and fixed by Jeff East <an972@freenet.carleton.ca>
080299: postarticles(): improved Supersedes: handling (still nonfunctional).
For some odd reason, Supersedes: headers were actually looked for
in the Lines: header.
080299: postarticles(): changed logging of mistakes a bit
070299: nntpactive(): fixed a problem that a LIST ACTIVE was always only
done for the first server, not for the others. This includes
writing two new functions, checkactive() and updateactive(),
which also reduces the number of disk accesses somewhat. Bug
discovered by Jens-Uwe Rumstich <rumstich@informatik.hu-berlin.de>.
070299: processupstream(): error message added if an "interesting" group
was not found in the groupinfo file
070299: processupstream(): apparently, there were sometimes problems if
the server files (/var/spool/news/leaf.node/my.server.name) did
exist but were empty. Now, empty files are ignored and not read.
060299: age(): now I can also parse written-out weekday names
040299: getgroup(): applied a patch by Arne Wichmann <aw@anhrefn.saar.de>
which will avoid unsubscribing groups that have little traffic
040299: postarticles(): some text changed
040299: supersede(): removed an unnecessary "syslog( LOG_DEBUG, ... )"
040299: getgroup(): evaluated a stat structure which was not filled
beforehand. This obviously led to unwanted unsubscriptions.
I have no idea when this error was introduced. Problem reported
by Dirk Dettmering <dettmer@pc16154.pharmazie.uni-marburg.de>
and David Steuber <david@david-steuber.com>.
040299: getgroup(): changed syslog message when skipping groups
030299: getgroup(): fixed a bug which truncated all headers by the
last char and was introduced yesterday
020299: getgroup(): assembly of multiline headers was faulty. Headers
were concatenated directly and a linefeed put afterwards. Now,
linefeeds are put between the two parts (and only if the first
part exists at all).
010299: if fetch is called with -P, it does not care for the presence
of the lockfile any more (not necessary)
310199: postarticles(): if an article with the same message id was
already upstream, error treatment was not always consistent.
Code changed by Joerg Dietrich <uzsv7x@ibm.rhrz.uni-bonn.de>.
210199: fetch_new.c contains a asynchronously working version of fetch
which stores articles in /var/spool/news/in.coming/<message-id>
but does not sort them in yet. This will have to wait until
the code for rnews is running. fetch_new.c is not part of the
1.9 distribution.
210199: made TIMEOUT_LONG, TIMEOUT_SHORT and TIMEOUT_ACTIVE configurable
200199: declared current_server here (and not in leafnode.h anymore)
This reduces the code size of nntpd and texpire by about 20 kBytes
(including symbols).
200199: replaced a clumsy if... construction in main() with a more
elegant switch ... case
190199: added code to handle Supersedes: headers
190199: if fork() fails, fetch now tells something about the reason
190199: included a setsid() call in the fork(). This fixes the problem
that fetch is killed by the end of sudo or the ppd. Problem
reported by Jo Moskalewski <JoMo@schwaben.de> and Joerg Dietrich
<uzsv7x@ibm.rhrz.uni-bonn.de>.
180199: newsgroups with . at the beginning are not allowed (RFC1036,
son-of-rfc1036). Reverted change from 150199.
180199: removed an error condition in getgroup() which resulted from an
uninitialized variable
180199: removed a looping condition in getgroup() which I had introduced
yesterday
170199: fetch now checks before posting whether a posting with the same
message id is already upstream
170199: gave getgroup() a facelift which will make it (hopefully) a little
faster. Basically, I replaced the clumsy error stuff with a lot of
continue commands and removed some superfluous if... constructs.
170199: corrected a silly mistake in getgroup() (trying to log an int with
syslog("%s") led to a segfault)
160199: aborting fetch with Ctrl-C will now skip fetching but xoverfiles
will be generated
160199: minlines and maxlines are now also checked via XHDR
160199: removed an obsolete fflush() from main
150199: removed an obsolete nntpdisconnect() from main which did not
exactly speed up fetch
150199: apparently there exist newsgroups which start with a . in the
name. fetch ignored these so far. Bug reported and fixed by
A. Olaru <aolaru@datacomm.ch>.
150199: now maxbytes really checks for bytes, not lines
130199: more error checking when storing articles (suggested by Maarten
Geurts <mgeurts@tip.nl>, who is currently trying to port leafnode
to NT)
100199: fixed a bug when posting failed (reported by Michael Stroeder,
<s_stroed@ira.uka.de>).
100199: if -P is given, active file should not been written (but was).
Fixed.
090199: modified -P option that filters are now not read in that case
(this helps with some segfaults while posting)
060199: changed some code in nntpactive() to make fetch deal more
robustly with failing hardware clocks. Problem reported by
Peter Kronfuss <pkronfuss@ycom.or.at>.
040199: new option -P : only post articles. First suggested (including
code) by Michael Mauch <elmicha@unidui.uni-duisburg.de>.
040199: age(): now also able to parse dates of the form
Date: Sun, 3 Jan 1999 14:35:24 +0100
instead of
Date: Sun, 03 Jan 1999 14:35:24 +0100
030199: postarticles(): articles are now not logged anymore into LOG_DEBUG
libutil:
=======
120299: configutil: stabilized parse_line() against empty lines
120299: configutil & artutil: re-introduced create_all_links (requested by
Alan Shutko <ats@acm.org>)
110299: xoverutil: if UIO_MAXIOV is not defined, set it to 16 (regardless
of what it might be called)
110299: miscutil: initvar(), when getting a NULL argument, will now not
perform setregid() etc. changes. Needed for some instances of
nntpd, although I would have preferred to see the nntpd also run
as user news.
110299: miscutil: patched getaline() to work with binary files. Patch by
Matthias Andree <mandree@dosis.uni-dortmund.de>.
100299: configutil: yesterday's fix completely messed up parsing. Fixed.
090299: configutil: trailing non-alnums were removed (for example, passwords
could only end with [a-zA-Z0-9]). Bug discovered by Erik Beckers
<erik.beckers@planet-interkom.de>.
070299: miscutil: new function ngmatch() matches a pattern to a string.
Was previously in texpire.
060299: xoverutil: Lines: header were mandatory in getxoverline(). Now
they are not any more. While doing this, I played a bit more
with the function. Independently found by Mark Hannon
<mark.hannon@stockholm.mail.telia.com> and <henke@phoenix.net>.
040299: artutil: messed with storearticle() (still unused)
030299: filterutil: readfilter() now does not log filter contents to
LOG_DEBUG anymore
290199: filterutil: readfilter() now immediately returns if "filterfile"
is empty. Bug reported by Dirk Dettmering
<dettmer@pc16154.pharmazie.uni-marburg.de>.
280199: configutil: added configurability for the right part of the
message ID (hostname)
280199: moved buildpseudoart() from artutil.c to nntpd.c
250199: artutil: fgetheader() allocated not enough memory which could
lead to segfaults. Bug reported and fixed in 1.8.1 (getheader())
by Michael Schwendt <schwendt@my-dejanews.com> (was probably
the reason for the segfaults in 1.8.1).
220199: artutil: added new procedure storearticle() (currently unused)
210199: configutil: added configurability of timeout (per server),
TIMEOUT_SHORT, TIMEOUT_LONG and READ_INTERVALL (now timeout_short,
timeout_long and timeout_active). Defaults are as in previous
versions. The names of the new parameters (except "timeout")
are compatible with leafnode+-2.4
210199: configutil: made existing features compatible with leafnode+-2.4
210199: moved lockfile_exists() from fetch.c to miscutil.c because it
is also needed in texpire and applyfilter
200199: moved putaline() from miscutil.c back to nntputil.c
180199: activutil: readactive() now checks whether groupinfo is a file
170199: artutil: store() now always writes Xref: lines
170199: moved putaline() from nntputil.c to miscutil.c
170199: nntputil: improved DEBUG logging in authenticate()
160199: artutil: replaced getheaders() with getheader() and fgetheader()
150199: miscutil: new function initvar() which initializes some global
variables
150199: miscutil: minor fix in getaline() with respect to debugging
150199: nntputil: minor fix in putaline() with respect to debugging
150199: filterutil(): readfilter() now ignores empty lines and lines starting
with # (to allow for comments). Suggested by A. Olaru
<aolaru@datacomm.ch>
150199: filterutil: filter was not initialized properly. Fixed.
150199: xoverutil: getxover() would produce strange xfirst and xlast
numbers if a directory was empty. Now, xfirst and xlast are
set to 1.
150199: xoverutil: getxover(), when called from nntpd, would delete
"illegal articles" (whatever that was) which sometimes lead to the
destruction of whole directories in the spool. Now "illegal articles"
are just ignored. Reported by Joerg Dietrich
<uzsv7x@ibm.rhrz.uni-bonn.de> and possibly Evert Meulie
<evert@royal.net>.
150199: artutil: getheaders() would always insert an additional linebreak
before "other headers". Fixed.
100199: activutil: if newsgroup description is updated and new description
is '-x-' or 'local grp', it is ignored.
100199: removed doubly defined variables s (was in miscutil and configutil),
headers (in miscutil and artutil) and expire_base (configutil and
texpire). Reported by John R. Schrader <jrschrader@mainz-online.de>.
090199: filterutil: fiddled with readfilter() because the filterlist
could be the cause for certain segfaults
050199: artutil: getheaders() would segfault at times. Fixed (hopefully).
Bug reported by Vladimir Litovka <doka@root.webest.com> and others.
030199: artutil: getheaders() always assumed that the file in question
indeed contained headers. Now it tests whether this assumption
is correct. Reported and fixed by Matthias Andree
<mandree@dosis.uni-dortmund.de>
nntpd:
=====
110299: main() now calls initvar() with a NULL argument
050299: parser(): miscellaneous changes to speed it up a bit. Command line
length is now generally restricted to 1000 chars. Commands are
not converted to lowercase anymore since comparison is done
with strcasecmp() anyway. If buffer overflow is tried, leafnode
now responds with 500 instead of 400 and continues to work (of
course this opens the door to DoS attacks)
020299: parser(): quit does not call rereadactive()
020299: parser(): some logging added
280199: generateMessageID(): made right part of message ID configurable
280199: moved buildpseudoart() from artutil.c to nntpd.c
280199: rewrote fopenart() because it did not always open pseudo articles
when it was supposed to
280199: removed printf to nntpout (actually removed earlier, but not
logged in here)
210199: rereadactive() is now called for every command. This might slow
down the performance a tiny bit but ensures that active is always
kept recent.
180199: tried to minimize the calls to getxover()
170199: LIST EXTENSIONS now lists OVER and LISTGROUP.
170199: OVER command supported (supposed to replace XOVER).
170199: dolistgroup() now returns 411 if group is unknown.
170199: if a LIST command cannot be parsed properly, dolist() now returns
503 instead of 501.
170199: removed "if ( g->last > g->first )" condition in list() which
cannot occur anymore
170199: STAT <message-id> now returns article numbers where appropriate
(same goes for HEAD, BODY and ARTICLE)
170199: implemented LAST and NEXT more correctly
150199: removed dostat() again and fiddled a lot with doarticle() instead.
doarticle() now also returns Message-IDs, as requested by RFC977
(apparently needed for using GNUs).
150199: in doxhdr() and doxover(), made sure that there was a change
to a group directory before getxover() was called. This involved
some more drastical changes in doxover().
130199: made NEWNEWS compliant with the new standard (can now parse both
two- and four-digit years)
120199: XOVER may now also return 420 if article range is out of real
range
120199: fiddled a bit with doarticle()
120199: introduced dostat() to correctly answer STAT requests (needed for
pine). STAT <message-id> does not work yet, however. Bug reported
by Evert Meulie <evert@royal.net>.
100199: markinterest(): if...else construction was ambiguous. Fixed.
Reported by John R. Schrader <jrschrader@mainz-online.de>.
040199: fopenart(): opening an article with a non-existant message id
would lead to a crash because it was tried to open a pseudo
article when no group was selected. Fixed.
040199: doarticle(): it was not possible to get articles by Message-ID.
Fixed. Bug reported by Matthias Andree <mandree@dosis.uni-dortmund.de>
texpire:
=======
070299: some more changes by Kazushi (changed ints into unsigned longs, and
other stuff)
070299: wildcard matching moved to miscutil.c
220199: groupexpire now understands glob(1) wildcard patterns
210199: added locking mechanism to texpire
190199: merged code with leafnode+-2.4
190199: texpire now also checks /var/spool/news/message.id/000/
100199: expiremsgid(): if...else construction was ambiguous. Fixed.
Reported by John R. Schrader <jrschrader@mainz-online.de>.
100199: removed doubly defined variables expire_base (configutil and
texpire). Reported by John R. Schrader <jrschrader@mainz-online.de>.
Miscellaneous:
=============
130299: README: troubleshooting section expanded
110299: Makefile.in: install-sh must be mode 755 in the tar.gz file. Fixed.
110299: Makefile.in: install flag -s now coded as $(STRIP). Suggested by
Matthias Andree <mandree@dosis.uni-dortmund.de>
100299: messed around with configure.in because it sometimes would not
define the HAVE_SYS_NERR even if it was present. Now we define
it explicitely.
070299: configure.in & Makefile.in: some adjustments to create rpm's.
(Variables are written into the Makefile, but are not usable yet.)
070299: configure.in: with some installations, sys_nerr is defined in
stdio.h. Therefore, we now also check stdio.h for sys_nerr.
Reported by Jeff Grossman <jeff@stikman.com>.
070299: Makefile.in: set $USR_PREFIX to @prefix@ instead of /usr/local .
This makes it possible to call "configure" with "--prefix=/usr"
to relocate the leafnode binaries to /usr/sbin and /usr/bin.
070299: added ngmatch() to leafnode.h
030299: fixed an error in texpire.8
020299: Makefile.in: "make clean" now keeps config.h and Makefile; to remove
them as well, do "make realclean".
020299: Makefile.in: had forgotten newsq in "make all"
310199: removed a "#define HAVE_SYS_NERR" from leafnode.h which previously
seemed necessary to correctly build leafnode on my system but
generated lots of warnings on other systems
280199: rewrote newsq in C
270199: made some corrections to Makefile.in so that "make install" will
compile cleanly (reported by Juergen Vollmer <vollmer@cocolab.de>)
210199: removed scarce_links from leafnode.h
210199: configure.in: added a test for the existence of sys_nerr and removed
"#ifdef __hpux__" and "#ifdef sun"
200199: added "#ifdef __hpux__" to leafnode.h
190199: moved to compiling with autoconf, changed INSTALL accordingly
150199: fiddled a bit with the documentation
150199: removed blocked() declaration functions from leafnode.h
140199: nice copyright remark in checkgroups.c (was missing)
130199: changed the maxage in the config.example file to 10 (the default).
Suggested by Maarten Geurts <mgeurts@tip.nl>.
090199: install now called with -c for better BSD compatibility (without
-c, BSD install removes the original files)
090199: newsq now installed with mode 755 instead of 750 (suggested by
Joerg Dietrich <uzsv7x@ibm.rhrz.uni-bonn.de>)
050199: changed Makefile to work with plan /bin/sh instead of bash (by
Andy Doran <andy@psn.ie>)
050199: leafnode.h: added patch for FreeBSD, courtesy of Andy Doran
<andy@psn.ie>
050199: fiddled a bit with the Makefile to avoid putting test code in the
final archive when doing a "make dist"
040199: removed two files with test source which inadvertantly popped up
in 1.8.1
040199: changed some more things in README.
040199: removed the warning about changing upstream servers from leafnode.8
and added a paragraph on it in the README.
040199: reintroduced the creation of libutil.a from the Makefile. This
makes the resulting executables much smaller (except fetch) and
less memory-hungry. "ar" is called as $(AR) and "ranlib" is called
explicitely since $(RANLIB) does not work on my system and
$(AR) -s does not work on NetBSD. In the future, it might be
necessary to switch to automake/autoconf.
=============================================================================
History of 1.8.1 -- changes since 1.8:
libutil:
=======
211298: activutil: if the first article of a newsgroup is 0, it is set to 1.
The last article is set to 1 if it is smaller than the first one.
This will fix problems with Netscape which barfs if encountering
zero article numbers. Reported by Peter Katzmann
<peter@katzmann.fd.shuttle.de>.
211298: filterutil: forgot to #include <syslog.h>. Fixed.
191298: filterutil: glibc2-based distributions (RedHat 5.2, Debian 2.0)
demand that <sys/types.h> be included before <regex.h>. Bug reported
and fixed by Trever Adams <highlander@teleteam.net>.
checkgroups:
===========
211298: removed an unnecessary #include <syslog.h>
fetch:
=====
020199: fetch could crash if an "article x already stored" message was logged.
The reason was that an old or uninitialized filehandle was being
checked. Bug reported and fixed by Joe Hutchinson
<joeh@netspace.net.au>
020199: age() did not calculate proper ages when the year was changing.
Fixed. (Bug was already present in 1.4 and had been reported for
1.8 by Jose Rosales <jrosales@tdv.net> and Stefan Luetkebrune
<s.luetkebrune@ndh.net>)
211298: fixed a typo in main()
nntpd:
=====
231298: some changes in doxhdr()
231298: some changes in dolistgroup() to deal properly with empty
newsgroups
211298: changed doxover() and doxhdr() to account for empty directories
211298: removed lots of unnecessary "\r\n" from syslogs
191298: if access time change of files in interesting.groups failed,
error message was garbled (reported by Harald Kretzschmar
<hk@thuer.slf.uunet.de>). Fixed.
Miscellaneous:
=============
020199: added a patch for NetBSD to leafnode.h (provided by Anders Dinsen,
<dinsen@danbbs.dk>)
=============================================================================
History of 1.8 -- changes since 1.7.1:
libutil:
=======
131298: filterutil: filtering seems to work now, but it is fairly slow. I
wrote a little program to remove all the spam from alt.religion.
scientology.
131298: activutil: in readactive(), the last article is now set to at least
1 (was 0). Age is set to 0 (was 1).
131298: activutil: added isinteresting() from fetch.c
131298: artutil: new file. Received buildpseudoart() from miscutil,
store() from fetch.c and new function getheaders().
131298: "create_all_links = no" is now the default and cannot be switched
off. As mentioned by Arnt Gulbrandsen, this invites problems if new
newsgroups are subscribed to because the Xref: lines are not
properly modified. We'll look into this later :-)
131298: activutil: messed around with insertgroup() to remove segfaults
(apparently successfully).
121298: removed declaration of errno and h_errno from various files
121298: filterutil: new (at the moment empty)
101298: miscutil: chdirgroup() now returns 1 if successful, 0 if not.
fetch:
=====
171298: crosspostlimit was not honoured anymore (in getgroup()). Fixed.
141298: removed some logging from getgroup()
141298: intelligently enough, I made a bug when building in filtering
support which would result in only the last header being filtered
on. Fixed.
131298: replaced all occurences of snprintf() with sprintf() to make
leafnode compile on OSF1
131298: managed to build filtering support into fetch
131298: postarticles() does not close connections any more.
131298: fetch now only posts an article to a server if the server has this
group. Many servers kill a connection if they get a posting which
they cannot process.
131298: moved store() to artutil.c and isinteresting() to activutil.c
121298: fetch would run into problems when a newsgroup name was completely
contained in another newsgroup name *and* the order in the
/var/spool/news/leaf.node/server.name file was such that the
longer name came first. Bug reported and tracked down by
Kent B. Hansen <kent.hansen@bigfoot.com>. Fixed (hopefully).
nntpd:
=====
141298: dopost() would delete empty lines from postings (apparently
introduced yesterday). Fixed.
131298: replaced all occurences of snprintf() with sprintf() to make
leafnode compile on OSF1
131298: first attempt to implement local groups failed because getxover()
would remove the articles which were constructed
121298: markinterest(): open() with APPEND flag would not change the mtime,
therefore we now change the mtime by calling utime() and only
call fopen() when utime fails with ENOENT (problems were reported
by various people, among them Trever Adams <highlander@teleteam.net>)
121298: rewrote doxhdr(); deals now properly with new newsgroups
121298: rewrote dolistgroup()
101298: introduced a new global variable "pseudogroup" which is TRUE if
the current newsgroup is a newly created one (i.e. without
spool directory and .overview file), FALSE otherwise. This variable
is set by dogroup() and dolistgroup().
101298: in dogroup() and dolistgroup(), whether a group is "pseudo" is now
determined by checking whether its directory exists or not.
texpire:
=======
121298: added a "\n" to one log message (reported and fixed by Michael
Schwendt, <sidplay@geocities.com>)
misc:
====
171298: fixed a typo in INSTALL (discovered by Michael Dreher,
<micha@planet-interkom.de>)
141298: added some rudimentary documentation about the filtering to
INSTALL
131298: Makefile: added libs for Suns
131298: leafnode.h: messed around to compile leafnode on Suns and HP-UX
121298: leafnode.h: #include <time.h> (for time_t)
121298: removed the creation of libutil.a from the Makefile. The various
object files are now individually linked together. This avoids
calling "ar" and possibly "ranlib" which may be not installed on
other systems. Suggested by Anders Dinsen <dinsen@danbbs.dk>
who compiled leafnode-1.7.1 on NetBSD 1.3.2
=============================================================================
History of 1.7.1 -- changes since 1.7:
libutil:
=======
091298: configutil: fixed a bug in readconfig() which crippled the "nodesc"
option. The format of "nodesc" is now different: it is put on a
separate line.
081298: activutil: replaced the for{} loop for removal of spurious '\0'
bytes with calls to memchr(). This makes the operation at least
twice as fast if the groupinfo file is not corrupted. If the
groupinfo file is corrupted, the operation becomes rather slow,
however (which is maybe not too bad since it makes users notice :-).
misc:
====
091298: fixed "nodesc" description in leafnode.8 and config.example
081298: some changes to the README file
=============================================================================
History of 1.7 -- changes since 1.6.2:
libutil:
=======
031298: configutil: included some code for parsing "nodesc" parameters with
servers
031298: configutil: removed code for postserver; we don't need it anymore
221198: configutil: posting would not work anymore. Fixed.
211198: configutil: messed up and repaired parse_line()
211198: xoverutil: removed a superfluous "#include <setjmp.h>"
211198: deleted sfgets() from nntputil
211198: moved getaline() from nntputil to miscutil
211198: configutil: now every server can have its own port, username and
password (suggested by Joey Hess <joey@kitenet.net>)
211198: miscutil: chdirgroup() did always create new directories (annoying
when using Netscape). Fixed.
201198: configutil: some changes with regard to starting of debugging
201198: configutil: new parameter maxbytes. Instead of actually determining
how many bytes a message has, maxbytes calculates the maximal number
of lines such a message might have and works then with maxlines.
This reduces NNTP traffic but might be deleterious for program listings
and similar stuff.
191198: configutil: new parameter minlines
181198: activutil: readactive(): stuff is now not free()d anymore at the
beginning of the procedure (caused segfaults)
131198: configutil: debugmode > 1 now makes all programs produce corefiles
131198: activutil: blocked stuff from leafnode-1.5 removed
131198: activutil: readactive(): stuff no more static
131198: activutil: readactive(): active is now always cleared
091198: activutil: complete rewrite of readactive() since it would still
segfault at times.
061198: nntputil: new function nntpdisconnect() which makes all the proper
tests and then disconnects an NNTP connection.
311098: xoverutil: getxover() returns now 0 when directory is empty
301098: configutil: new parameter "debugmode". If set, the programs will
continue to generate lots of output to the news.debug syslog
facility. Otherwise, they won't.
fetch:
=====
051298: if a new server is added in the config file, fetch now gets the
full list of newsgroups the first time.
041298: articles are now posted to all upstream servers that allow posting.
To achieve this, the filenames of successfully posted articles are
put into a list and all entries in this list are deleted later with
the new function delposted(). This is probably not bug-free at all
yet.
031298: code for postservers removed: fetch now realizes whether a server
allows posting or not and only in the former case will try to post
articles
031298: code for servers which don't support XGTITLE or LIST NEWSGROUPS
is now partially configurable: option should be
server = your.server.host nodesc
221198: lockfile_exists() introduced: makes all proper tests and removes
stuff from the main file. Suggested by Bjrn Frantzen <bjoff@bgnett.no>
211198: getgroup(): fixed an instance of sloppy programming (introduced by
myself in 1.6.2) that lead to a bug when I rewrote the code for parsing
the config file
211198: getgroup(): fixed a bug when article was already present (error
message "unable to store article: "). It is unclear at the moment
what causes articles to be fetched twice. It is also unclear what
"Invalid argument" means when returned by stat().
201198: getgroup(): fixed a bug in the code which would result in odd
behaviour of fetch if verbosity was off and a group contained
no new articles
201198: getgroup(): for some odd reason fetch forgot to automatically
unsubscribe newsgroups (this bug was introduced in 1.6). Fixed.
191198: added parameter "minlines" because of spamming with empty articles
of alt.religion.scientology
181198: corrected a small error when calculating initial limits (reported
by Diana Schirmer <diana.schirmer@t-online.de>)
171198: some authentication code put into main(), courtesy of Jeff East
<an972@freenet.carleton.ca>
101198: new code for upstream servers which neither support XGTITLE nor
LIST NEWSGROUPS properly (see detailed explanation under misc).
091198: fixed problems with delayed body fetching and multiple servers
(reported by Holger Graf <Holger.Graf@gmx.net>).
061198: removed double call of usage() from main()
061198: included -f option in usage()
061198: fetch would sometimes not disconnect properly. Bug and fix reported
by Peter Hirdina <Peter.Hirdina@gmx.net> and Juergen Richter
<richter@wohnheim.uni-ulm.de>.
061198: fixed a typo in age()
061198: fetch now logs its version number to news.debug
301098: added debugmode thingy
281098: removed a possible cause of segfaults if /var/spool/news/active.read
did not exist (in nntpactive()).
251098: fetch would ignore lines beginning with a dot. Fixed. Reported
by Michael Guertler <guertler@cs.bonn.edu>.
221098: fetch crashed if the permissions of /var/lock/news were messed up
(which they should never have been, but apparently some people
messed around with permissions). Now fetch terminates with proper
error message. Reported by Peter Hirdina <Peter.Hirdina@gmx.net>.
nntpd:
=====
211198: pseudo articles now do not refer to http://www.troll.no/ anymore.
211198: removed superfluous declaration of fqdn[64]
101198: removed creation of dotfiles in dolistgroup()
091198: when a client would use LIST OVERVIEW.FMT after GROUP, XOVER would
not work properly anymore. Reported and fixed by Michael Schwendt
<sidplay@geocities.com>. (This bugfix makes the news client of
StarOffice work properly.)
061198: markinterest(): interesting.groups/news.groups.name is now opened
with O_APPEND instead of O_TRUNC. (Opening the file with O_TRUNC
would delete previously marked articles when using the "delaybody"
option.) Bug report and fix provided by Holger Graf
<grafh@t-online.de>.
311098: for some reason nntpd would not log incoming commands anymore
if debugmode was on. Fixed.
301098: added debugmode thingy
texpire:
=======
211198: total deletes are now also logged to news.info
201198: messed around with the expiry algorithm
061198: added logging of version number to news.debug
061198: added a usage message
061198: added -f option (don't check atimes of files, important when
you grep through a spool directory or otherwise read files in
the spool directory manually)
301098: added debugmode thingy
checkgroups:
===========
301098: more informative error message if checkgroups file could not
be opened
misc:
====
031298: documentation for "nodesc" added
031298: Makefile: #define HAVE_XGTITLE removed (now configurable)
211198: gave up the project to give each function its own file since size
reduction is at most 10 kBytes after stripping (before stripping
there is even size increase):
"old" "new"
20464 checkgroups* 14640
51824 fetch* 46976
48560 nntpd* 44088
33800 texpire* 23368
211198: updated leafnode.8 and config.example (which did not include
an example of a supplementary server either)
201198: updated leafnode.8 to include "minlines" and "maxbytes"
101198: updated README
101198: Makefile: new #define HAVE_XGTITLE (by default switched on) must
be switched off if upstream newsserver supports neither "XGTITLE
news.group.name" nor "LIST NEWSGROUPS news.group.name" (reported
by Richard Poole <rp202@rp202.demon.co.uk>)
091198: fixed a typo in newsq.1 (reported by Lenz Grimmer <grimmer@suse.de>)
091198: changed Makefile: newsq is now also installed (in /usr/local/bin)
091198: updated TODO file
091198: added CREDITS file
061198: added documentation for -f to texpire.8
061198: added documentation for debugmode to leafnode.8
=============================================================================
History of 1.6.2 -- changes since 1.6.1:
libutil:
=======
181098: activutil.c:fakeactive(): when the directory could not be opened,
the name should appear in the logfile which it did not. Bug report
and fix provided by Peter Mutsaers (plm@xs4all.nl).
fetch.c:
=======
201098: fetch now writes its PID into the lockfile. Suggestion by
Joey Hess <joey@kitenet.net>.
181098: fetch would not delete its lockfile when unable to read its config
file or unable to find an upstream server therein. Bug reported by
PhiR <Gerlach@mygale.org>.
181098: processupstream(): fetch segfaulted when trying to read from a new
server. Bug reports and fixes provided by Edgar Toernig (froese@gmx.de)
and kise@imicom.or.jp.
nntpd.c:
=======
131098: apparently I missed a slash when inserting Joerg Dietrich's
patch in rereadactive() -- fixed
texpire.c:
=========
201098: when expiring a group, texpire now also resets the numbers of the
first and last articles; not doing this would lead to problems
with initialfetch which was ignored in these cases (reported by
Benjamin Schweizer <SternSZ@gmx.de>)
Miscellaneous:
=============
181098: "make dist" does not fail anymore if the directory already exists in
which the distribution is built
181098: corrected a bug in the Makefile which would try to link leafnode
with libutil.a's installed elsewhere in a libdir (reported by
Daniel Fraga <chapolin@inc101.internetcom.com.br>)
131098: changed version number to 1.6.2
131098: some changes in the Makefile (suggested by Michael Mayer
<mmayer@muenster.de>)
=============================================================================
History of 1.6.1 -- changes since 1.6:
fetch.c:
=======
091098: fixed a bug in getgroup(): in concert with "maxlines" being set
to a value, fetch would report every article being too long (but
properly reject only those which really were). Now fetch only
complains about articles which are indeed too long. (Bug reported
by Hannes Birnbacher <ad-soft@t-online.de>)
nntpd.c:
=======
091098: removed creation of dotfiles in dogroup()
091098: fixed a bug in doarticle() which made it impossible to display
a pseudo-article of a new newsgroup.
091098: fixed a bug in dolistgroup() which made it impossible to display
a pseudo-article of a new newsgroup.
091098: fixed a bug in dogroup() which made it impossible to select a
new newsgroup or to display its pseudo-article (I have no idea
when I introduced this...).
091098: fixed a bug in rereadactive() (leafnode tried to open
/usr/lib/leafnode/groupinfo instead of
/var/spool/news/leaf.node/groupinfo) (bug report and fix by Joerg
Dietrich, uzsv7x@ibm.rhrz.uni-bonn.de).
Miscellaneous:
=============
101098: changed version number to 1.6.1
091098: added "maxlines" to config.example
091098: changed the Makefile somewhat to allow for various CHANGES files
=============================================================================
History of 1.6 -- changes since 1.4:
util.c:
======
230998: activutil: new procedure fakeactive() produces essential active
information from scratch (does not rely on either groupinfo or
.overview files). fakeactive() is called from fetch when used
with the -f parameter.
210998: activutil: readactive() hopefully now will detect a defective
(i.e. truncated) groupinfo file, abort cleanly and give an error
message. Previously readactive() just crashed, leading to
segmentation faults in fetch and nntpd.
210998: activutil: helpwriteactive() hopefully now recognizes if writing
fails (for example because of a full disk)
230898: configutil: initialized expire_base (if not, texpire crashes with
segfault). Bug detected & fixed by Timo Giesselmann <gmann@on-line.de>
200898: xoverutil: removed an unnecessary call to legalxoverline()
from getxover() (which was not used anyway)
200898: xoverutil: getxoverline() accepts messages without bodies
(important for "delaybody" option). However, in this case
bogus Byte: entries will be created in the .overview file
200898: xoverutil: getxoverline() now believes in upstream Lines: headers
(but still computes its own if not provided)
200898: xoverutil: fixed legalxoverline() which by default returned 1
190898: activutil: made code of writeactive() more foolproof (hopefully)
190898: xoverutil: empty articles are not deleted anymore if delaybody != 0
190898: configutil: delaybody generated an incorrected logfile entry
160898: xoverutil: switched off debugging in getxoverline()
030898: activutil: readactive() rewritten to make modified format possible
without re-reading active file from upstream servers
030898: activutil: writeactive() rewritten to accomodate the date
030898: activutil: insertgroup() does not take information from upstream
servers anymore
030898: configutil: first server to suck news from is also used as post server
030898: configutil: added some support for multiple post servers
030898: configutil: primary server and supplementary servers are now
equivalent.
030898: configutil: servers are now queried front-to-back
030898: split up util.c into several files, to achieve smaller executables.
Changes in these executables will still be subsumed under util.c
for the time being
020898: fixed a bug when writing the groupinfo file
200798: "crosspostlimit" now "int" instead of "unsigned int"
200798: fixed a bug when writing the groupinfo file
170798: some changes to create proper XOVER information when reading new
groups. tin pre-1.4 release 980514 used to hang when starting to
read new groups. This is now fixed; however, tin now doesn't see
the "default" article... :-(
170798: introduced new global variable "debug" to keep the logfile somewhat
smaller
070798: added parameter create_all_links
200698: fixed a bug introduced on 180698 which corrupted the groupinfo file
180698: if groupinfo file cannot be written, old groupinfo file is not
deleted any more
270598: implemented the changes of leafnode-1.5(enz)
120598: enhanced debugging capabilities drastically (you can now listen
to leafnode talking :-)
060598: added "maxage" parameter to /usr/lib/leafnode/config
020598: added "post" parameter to /usr/lib/leafnode/config which allows
posting through an additional server (or maybe I should go through
replay.com?)
020598: changed readconfig() to accommodate groupexpire options (Arnt
will kill me for this :-)
010598: even more massive changes in readconfig which works now even better
(I discovered strtok() and strsep())
300498: more changes in readconfig which does now not work any more :-(
270498: more massive changes in readconfig which now works :-)
190298: changes in readconfig
fetch.c:
=======
230998: "fetch -f" now calls fakeactive() and does not attempt to read
the active file any more
230998: replaced two occurances of isalpha() with isalnum() to allow
for top-level hierarchies which start with digits
230998: nntpactive(): when getting new groups, now first LIST ACTIVE
and then LIST NEWSGROUPS is issued (LIST NEWSGROUPS alone does
only return groups which have a description which results in an
incomplete groupinfo file)
210998: lockfile mechanism didn't work anymore because I took Stevens too
literally. Now the lockfile is only deleted when fetch ends.
Disadvantage: if fetch crashes, the lockfile is not removed at all.
070998: nntpactive(): LIST NEWSGROUPS [news.group] was not properly
terminated which apparently caused errors in entering new
files (reported by Tobias Burnus <tobias.burnus@uumail.de>)
310898: getgroup(): .overview files are not removed by fetch anymore
310898: nntpactive(): active.read was not created if not already there
(reported by Tobias Burnus <tobias.burnus@uumail.de>)
210898: getbody(): new bodies now get new article numbers, old ones are
removed, xover line is changed appropriately
210898: getgroup(): omitted an error condition in yesterday's fixing attempt
200898: getgroup(): article files were not closed when "delaybody" was
set which resulted in the duplication of headers
160898: fetch now logs Subject:s of discarded articles
140898: fixxover() reintroduced because the call of texpire did not work
correctly (note that the removal of fixxover() is not indicated
below but probably occured on 050898)
050898: added parameter "maxlines" to avoid very large articles
050898: nntpactive() is now called for every server on the list which makes
it possible to read groups which are only held by certain servers
050898: nntpactive() now reads newsgroups descriptions with NEWGROUPS
except for very large intervals. LIST ACTIVE is completely omitted
and newsgroups counted from 1 instead.
050898: readactive() and writeactive() were not called anymore; re-inserted
030898: supplementary servers and primary server are now handled by the
same procedure (which makes sense and saves space)
220798: fixed a bug which would corrupt multiple-line headers
220798: no more IHAVE since it doesn't work on most servers anyway
220798: modified getgroup() to accommodate multiline headers
210798: fixed a bug in getgroup(): fetch would try to get nonexistent
articles because optimization was not correctly accounted for
210798: fixed a bug when processing supplements: fetch would write the
groupinfo file (although unnecessary), thus causing a lot of
unnecessary traffic
200798: lockfile is now actually created (this got lost somehow during
messing with the code)
200798: turned off logging for forked process
200798: fixed a bug in handling of "crosspostlimits" (groups were not
counted correctly)
200798: fixed a bug: news articles were retrieved even when the group
was being skipped in the future
180798: added support for maximal number of crosspostings
170798: error messages mentioned in 070798 removed by rewrite of
getgroup()
170798: major rewrite of getgroup(): fetch now fetches HEAD and BODY of
each article separately and performs some kind of checks
170798: implemented some of the changes of leafnode 1.5(enz) (untested)
070798: added parameter create_all_links (if set to "no" only hardlinks
into "interesting" groups are created). This works apparently,
although /var/log/news.messages contains a lot of error messages:
fetch[31989]: Error No such file or directory when opening (null)
These occur between fetching the header and the rest of the
article. They also occur when an article is not crossposted.
250698: added a possibly important error message when an article cannot be
written into the news spool
150698: now using READ_INTERVALL for rereading of active file instead
of TIMEOUT_LONG (makes more sense)
120598: added some system to the number of "v"s:
"fetch": barfs if critical errors occur
"fetch -v": barfs if non-critical errors occur
"fetch -vv": puts out additional information about groups
"fetch -vvv": puts out additional information about articles
"fetch -vvvv": for debugging purposes
120598: first semi-successful query of supplementary servers
060598: added "maxage" parameter (aging function already provided by
leafnode 1.4 but not used)
020598: some support for posting to one additional server
020598: some more ints changed to longs
010598: some changes in handling of supplementary servers (still broken).
010598: usesupplement is now a global variable.
270498: "47 bug" removed (fetch did never report more than 47 outstanding
articles, even when there were hundreds)
270498: changed some definitions of article numbers from int to long (there
may well be more than 32767 articles in a group)
190298: lockfile is created later now (I don't know if this is really
a clever idea)
310198: some changes in fetching group descriptions
310198: some things logged to syslog instead of writing them to the screen
220198: some more error messages logged instead of printed to console
220198: option -n implemented (no automatical expiry of groups: very
sensible for holidays or one-person servers :-)
220198: improved (?) some "verbose" messages
220198: "usesupplement" set to 1 in main()
nntpd.c:
=======
210898: messed with fopenpseudoart() (twice)
200898: pseudo articles now properly displayed in tin
200898: dolistgroup() now returns proper output for pseudo articles
200898: doxover() now returns proper overview line for pseudo articles
200898: changed some logging in nntpd
060898: changed some logging in nntpd
050898: implemented NEWGROUPS (time zone information is ignored)
180798: implemented some of the changes of leafnode 1.5(enz) (untested)
170798: improved logging in general :-)
170798: improved logging in doarticle()
170798: improved logging in dogroup()
170798: improved logging in dolistgroup()
170798: LISTGROUP without group now returns 412 instead of 481.
170798: LISTGROUP of an empty group now returns an empty list instead of
"481 Overview information not available". This fixes the problem
that tin hangs with empty newsgroups.
170798: NEXT/LAST now return correct return codes if the latest/oldest
article has been reached
170798: XOVER now also works properly with new newsgroups
010598: LIST OVERVIEW.FMT implemented
220198: useless "dostat" declaration removed
texpire.c:
=========
310898: dogroup(): remove .overview if group becomes emptied
200898: removed legal() (replaced by legalxoverline() from xoverutil.c)
020598: fixed a small bug in expiremsgid()
020598: groupexpire implemented
020598: -v option implemented
020598: verbose logging
Miscellaneous:
=============
280998: Arnt Gulbrandsen will not maintain leafnode anymore.
280998: update of README
230998: update of README
210998: more changes in the manpages for checkgroups
200998: update of README
060998: slight updates in checkgroups and its manpage
010998: "make update" correctly documented (in INSTALL and README)
010998: "make update" now works correctly (calls update.sh with parameters)
310898: fixed a small error in the Makefile (reported by Tom Schlangen,
<t.schlangen@ndh.net>)
230898: "update" included into Makefile (doesn't work correctly yet)
230898: "uninstall" included into Makefile
230898: Makefile modified
160898: Makefile modified
160898: improved update script: groupinfo now converted and new file for
main server generated
060898: added update script
060898: slight bug in Makefile fixed
050898: added documentation for "maxlines"
050898: improved (?) the documentation a little
050898: removed the HOWTO from the Makefile since it is outdated with
respect to 1.6
050898: removed the server field from the struct newsgroup
050898: fixed a small bug in the Makefile: the lockfile directory that was
created was wrong
030898: groupinfo and the various server files are now kept in
/var/spool/news/leaf.node/<filename>. Makefile and INSTALL have been
changed appropriately
030898: added support for split of util.c in Makefile
220798: added documentation for "maxcrosspost"
200798: lockfile now in /var/lock/news to be compatible to old versions
170798: "delaybody" documented
170798: Makefile now zips the patch up
270598: changed config.example to incorporate the new options of
leafnode-1.5(enz)
270598: changed Makefile according to leafnode-1.5(enz); omitted
rules for install-bin and update, however.
270598: added patches from leafnode-1.5(enz) to leafnode.h
270598: added newsq.1 from leafnode-1.5(enz)
270598: fixed a bug in the Makefile
020598: changed config.example
020598: lots of ints changed to unsigned longs
020598: leafnode.8 updated
020598: texpire.8 updated
010598: fixed bug in config.example (maxfetch was designated "maxcount")
300498: removed rfc977 and rfc1036 from the package
300498: added leafnode mini-HOWTO
300498: global rewrite of leafnode.8 (also posted to
de.comp.os.linux.networking)
250498: Makefile: replaced "cp" and "chmod" calls with "install"
(suggested by Axel Eble <aeble@controlware.de>)
140298: added rfc977 and rfc1036 to the package
220198: Makefile: added "patch" ("make patch" will generate a patch)
220198: Makefile: permission for $SPOOLDIR now 2755 (was 2750)
220198: leafnode.8: maxfetch was designated "maxcount"; fixed
220198: fetch.8: added documentation for -n
Changes 1.5(enz) --> 1.6:
Leafnode 1.6 was built on the sources of 1.4 because the sources of 1.5(enz)
became only available later. Here are the changes introduced by 1.6 with
respect to 1.5(enz):
* It is possible to use multiple upstream servers
* Blocking of newsgroups has been disabled again.
* Added new option "create_all_links" which is set by default. If unset,
fetch only stores links of crosspostings posted to "interesting" groups.
* Several new options to filter downloads:
"maxlines" to set a maximal size of postings to download
"crosspostlimit" to filter out spam
"maxage" to cope with burps of upstream servers
* New option "groupexpire" to selectively modulate expiry time for certain
newsgroups.
* Bug fixes (as usual)
See also the more detailed ChangeLog below which lists the changes with
respect to 1.4.
Author: Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de>
Date: October 1998
------------------------------------------------------------------------------
Changes 1.4-7 --> 1.5(enz):
* Headers and bodies of articles can be downloaded separately if the
"delaybody" option is set. In this case, if someone attempts to read a
message body he gets a text telling him that the message has been marked
for download by fetch. The files in $SPOOL_DIR/interesting.groups are
used for storing the numbers of marked messages.
* The complete rereading of the newsgroup list from the remote server is
done less frequently now (READ_INTERVALL in leafnode.h set to 90 days).
Instead, fetch uses the NEWGROUPS command every time it is run.
* Some changes were made concerning the pseudo mail that is shown when a
group is opened for the first time (telling some infos about leafnode).
It did not work satisfyingly before.
* Blocking of certain newsgroups is possible.
Author: Markus Enzenberger <enz@cip.physik.uni-muenchen.de>
Date: April 1998
------------------------------------------------------------------------------
Changes 1.4 --> 1.4-7:
* This version is identical to leafnode-1.4, except for some little fixes
mostly provided by redhat and debian.
* The empty files put in /var/spool/news/interesting.groups were preceded
by a period, for example: .alt.os.linux instead of the proper
alt.os.linux etc.
* The config file now reads 'maxfetch' instead of the incorrect 'maxcount'.
* Makefile changed to allow it to create the subdirectories in
/var/spool/news/message.id without a problem when you do make install.
Author: Kent Robotti <robotti@erols.com>
Date: March 1998
------------------------------------------------------------------------------
Version 1.4
Written by Arnt Gulbrandsen <agulbra@troll.no> and copy-
right 1995 Troll Tech AS, Postboks 6133 Etterstad, 0602
Oslo, Norway, fax +47 22646949.
=============================================================================
Version history:
* Arnt Gulbrandsen <agulbra@troll.no> wrote versions 0.9 to 1.4 (only
1.0 and 1.4 were publicly released).
* Kent Robotti <robotti@erols.com> published a slightly changed
version of leafnode as leafnode-1.4.7 in March 1998.
* leafnode-1.5(enz) is leafnode-1.5 by Markus Enzenberger
<enz@cip.physik.uni-muenchen.de> which was released in April 1998.
It incorporated all (?) changes made in leafnode-1.4.7.
* Various versions of leafnode-1.4jp were published by Kazushi (Jam)
Marukawa <jam@pobox.com> in Spring 1998. (Patches are available from
http://www.io.com/~kazushi/freeware/#leafnode). Further development
commenced, the software is now being called leafnode+ and is
actively being developed (http://www.io.com/~kazushi/leafnode+/).
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published a
patched leafnode version from May 12th, 1998 as leafnode-1.4.1.
This version did not have any code of leafnode-1.5(enz) in it.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published a
patched leafnode version from July 20th, 1998 as leafnode-1.6alpha.
This version incorporated most of the leafnode-1.5(enz) patches.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published a
patched leafnode version from August 16th, 1998 as leafnode-1.6b.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published
leafnode-1.6 on October 3rd, 1998.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published
leafnode-1.6.1 on October ??th, 1998.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published
leafnode-1.6.2 on October 22th, 1998.
|