| 12
 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
 4145
 4146
 4147
 4148
 4149
 4150
 4151
 4152
 4153
 4154
 4155
 4156
 4157
 4158
 4159
 4160
 4161
 4162
 4163
 4164
 4165
 4166
 4167
 4168
 4169
 4170
 4171
 4172
 4173
 4174
 4175
 4176
 4177
 4178
 4179
 4180
 4181
 4182
 4183
 4184
 4185
 4186
 4187
 4188
 4189
 4190
 4191
 4192
 4193
 4194
 4195
 4196
 4197
 4198
 4199
 4200
 4201
 4202
 4203
 4204
 4205
 4206
 4207
 4208
 4209
 4210
 4211
 4212
 4213
 4214
 4215
 4216
 4217
 4218
 4219
 4220
 4221
 4222
 4223
 4224
 4225
 4226
 4227
 4228
 4229
 4230
 4231
 4232
 4233
 4234
 4235
 4236
 4237
 4238
 4239
 4240
 4241
 4242
 4243
 4244
 4245
 4246
 4247
 4248
 4249
 4250
 4251
 4252
 4253
 4254
 4255
 4256
 4257
 4258
 4259
 4260
 4261
 4262
 4263
 4264
 4265
 4266
 4267
 4268
 4269
 4270
 4271
 4272
 4273
 4274
 4275
 4276
 4277
 4278
 4279
 4280
 4281
 4282
 4283
 4284
 4285
 4286
 4287
 4288
 4289
 4290
 4291
 4292
 4293
 4294
 4295
 4296
 4297
 4298
 4299
 4300
 4301
 4302
 4303
 4304
 4305
 4306
 4307
 4308
 4309
 4310
 4311
 4312
 4313
 4314
 4315
 4316
 4317
 4318
 4319
 4320
 4321
 4322
 4323
 4324
 4325
 4326
 4327
 4328
 4329
 4330
 4331
 4332
 4333
 4334
 4335
 4336
 4337
 4338
 4339
 4340
 4341
 4342
 4343
 4344
 4345
 4346
 4347
 4348
 4349
 4350
 4351
 4352
 4353
 4354
 4355
 4356
 4357
 4358
 4359
 4360
 4361
 4362
 4363
 4364
 4365
 4366
 4367
 4368
 4369
 4370
 4371
 4372
 4373
 4374
 4375
 4376
 4377
 4378
 4379
 4380
 4381
 4382
 4383
 4384
 4385
 4386
 4387
 4388
 4389
 4390
 4391
 4392
 4393
 4394
 4395
 4396
 4397
 4398
 4399
 4400
 4401
 4402
 4403
 4404
 4405
 4406
 4407
 4408
 4409
 4410
 4411
 4412
 4413
 4414
 4415
 4416
 4417
 4418
 4419
 4420
 4421
 4422
 4423
 4424
 4425
 4426
 4427
 4428
 4429
 4430
 4431
 4432
 4433
 4434
 4435
 4436
 4437
 4438
 4439
 4440
 4441
 4442
 4443
 4444
 4445
 4446
 4447
 4448
 4449
 4450
 4451
 4452
 4453
 4454
 4455
 4456
 4457
 4458
 4459
 4460
 4461
 4462
 4463
 4464
 4465
 4466
 4467
 4468
 4469
 4470
 4471
 4472
 4473
 4474
 4475
 4476
 4477
 4478
 4479
 4480
 4481
 4482
 4483
 4484
 4485
 4486
 4487
 4488
 4489
 4490
 4491
 4492
 4493
 4494
 4495
 4496
 4497
 4498
 4499
 4500
 4501
 4502
 4503
 4504
 4505
 4506
 4507
 4508
 4509
 4510
 4511
 4512
 4513
 4514
 4515
 4516
 4517
 4518
 
 | <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
<chapter id="happy">
  <title>Making Happy Users</title>
	<para>
	It is said that <quote>a day that is without troubles is not fulfilling.  Rather, give 
	me a day of troubles well handled so that I can be content with my achievements.</quote>
	</para>
	<para>
	In the world of computer networks, problems are as varied as the people who create them
	or experience them. The design of the network implemented in <link linkend="Big500users"/>
	may create problems for some network users. The following lists some of the problems that
	may occur:
	</para>
	<indexterm><primary>PDC</primary></indexterm>
	<indexterm><primary>network bandwidth</primary><secondary>utilization</secondary></indexterm>
	<indexterm><primary>BDC</primary></indexterm>
	<indexterm><primary>user account</primary></indexterm>
	<indexterm><primary>PDC/BDC ratio</primary></indexterm>
<caution><para>
A significant number of network administrators have responded to the guidance given
here. It should be noted that there are sites that have a single PDC for many hundreds of
concurrent network clients. Network bandwidth, network bandwidth utilization, and server load
are among the factors that determine the maximum number of Windows clients that
can be served by a single domain controller (PDC or BDC) on a network segment. It is possible
to operate with only a single PDC over a routed network. What is possible is not necessarily
<emphasis>best practice</emphasis>. When Windows client network logons begin to fail with
the message that the domain controller cannot be found or that the user account cannot
be found (when you know it exists), that may be an indication that the domain controller is
overloaded or network bandwidth is overloaded. The guidance given for PDC/BDC ratio to Windows
clients is conservative and if followed will minimize problems &smbmdash; but it is not absolute.
</para></caution>
	<variablelist>
		<varlistentry>
		<term>Users experiencing difficulty logging onto the network</term>
		<listitem><para>
		<indexterm><primary>network</primary><secondary>logon</secondary></indexterm>
		<indexterm><primary>multiple domain controllers</primary></indexterm>
		When a Windows client logs onto the network, many data packets are exchanged
		between the client and the server that is providing the network logon services.
		Each request between the client and the server must complete within a specific
		time limit. This is one of the primary factors that govern the installation of
		multiple domain controllers (usually called secondary or backup controllers).
		As a rough rule, there should be one such backup controller for every
		30 to 150 clients. The actual limits are determined by network operational
		characteristics. 
		</para>
		<para>
		<indexterm><primary>PDC</primary></indexterm>
		<indexterm><primary>BDC</primary></indexterm>
		<indexterm><primary>clients per DC</primary></indexterm>
		If the domain controller provides only network logon services
		and all file and print activity is handled by domain member servers, one domain	
		controller per 150 clients on a single network segment may suffice. In any
		case, it is highly recommended to have a minimum of one domain controller (PDC or BDC)
		per network segment. It is better to have at least one BDC on the network
		segment that has a PDC. If the domain controller is also used as a file and
		print server, the number of clients it can service reliably is reduced,
		and generally for low powered hardware should not exceed 30 machines (Windows 
		workstations plus domain member servers) per domain controller. Many sites are
		able to operate with more clients per domain controller, the number of clients
		that can be supported is limited by the CPU speed, memory and the workload on
		the Samba server as well as network bandwidth utilization.
		</para></listitem>
		</varlistentry>
		<varlistentry>
		<term>Slow logons and log-offs</term>
		<listitem><para>
		<indexterm><primary>slow logon</primary></indexterm>
		Slow logons and log-offs may be caused by many factors that include:
			<itemizedlist>
				<listitem><para>
				<indexterm><primary>NetBIOS</primary><secondary>name resolution</secondary><tertiary>delays</tertiary></indexterm>
				<indexterm><primary>WINS</primary><secondary>server</secondary></indexterm>
				Excessive delays in the resolution of a NetBIOS name to its IP
				address. This may be observed when an overloaded domain controller 
				is also the WINS server. Another cause may be the failure to use
				a WINS server (this assumes that there is a single network segment).
				</para></listitem>
				<listitem><para>
				<indexterm><primary>traffic collisions</primary></indexterm>
				<indexterm><primary>HUB</primary></indexterm>
				<indexterm><primary>ethernet switch</primary></indexterm>
				Network traffic collisions due to overloading of the network
				segment. One short-term workaround to this may be to replace
				network HUBs with Ethernet switches.
				</para></listitem>
				<listitem><para>
				<indexterm><primary>networking hardware</primary><secondary>defective</secondary></indexterm>
				Defective networking hardware. Over the past few years, we have seen
				on the Samba mailing list a significant increase in the number of
				problems that were traced to a defective network interface controller,
				a defective HUB or Ethernet switch, or defective cabling. In most cases,
				it was the erratic nature of the problem that ultimately pointed to
				the cause of the problem.
				</para></listitem>
				<listitem><para>
				<indexterm><primary>profile</primary><secondary>roaming</secondary></indexterm>
				<indexterm><primary>MS Outlook</primary><secondary>PST file</secondary></indexterm>
				Excessively large roaming profiles. This type of problem is typically
				the result of poor user education as well as poor network management.
				It can be avoided by users not storing huge quantities of email in
				MS Outlook PST files as well as by not storing files on the desktop.
				These are old bad habits that require much discipline and vigilance
				on the part of network management.
				</para></listitem>
				<listitem><para>
				<indexterm><primary>WebClient</primary></indexterm>
				You should verify that the Windows XP WebClient service is not running.
				The use of the WebClient service has been implicated in many Windows
				networking-related problems.
				</para></listitem>
			</itemizedlist>
			</para></listitem>
		</varlistentry>
		<varlistentry>
		<term>Loss of access to network drives and printer resources</term>
		<listitem><para>
		Loss of access to network resources during client operation may be caused by a number
		of factors, including:
		</para>
			<itemizedlist>
				<listitem><para>
				<indexterm><primary>network</primary><secondary>overload</secondary></indexterm>
				Network overload (typically indicated by a high network collision rate)
				</para></listitem>
				<listitem><para>
				Server overload
				</para></listitem>
				<listitem><para>
				<indexterm><primary>network</primary><secondary>timeout</secondary></indexterm>
				Timeout causing the client to close a connection that is in use but has
				been latent (no traffic) for some time (5 minutes or more)
				</para></listitem>
				<listitem><para>
				<indexterm><primary>network hardware</primary><secondary>defective</secondary></indexterm>
				Defective networking hardware
				</para></listitem>
			</itemizedlist>
		<para>
		<indexterm><primary>data</primary><secondary>corruption</secondary></indexterm>
		No matter what the cause, a sudden loss of access to network resources can
		result in BSOD (blue screen of death) situations that necessitate rebooting of the client
		workstation. In the case of a mild problem, retrying to access the network drive of the printer
		may restore operations, but in any case this is a serious problem that may lead to the next
		problem, data corruption.
		</para></listitem>
		</varlistentry>
		<varlistentry>
		<term>Potential data corruption</term>
		<listitem><para>
		<indexterm><primary>data</primary><secondary>corruption</secondary></indexterm>
		Data corruption is one of the most serious problems. It leads to uncertainty, anger, and 
		frustration, and generally precipitates immediate corrective demands. Management response
		to this type of problem may be rational, as well as highly irrational. There have been
		cases where management has fired network staff for permitting this situation to occur without 
		immediate correction. There have been situations where perfectly functional hardware was thrown 
		out and replaced, only to find the problem caused by a low-cost network hardware item. There 
		have been cases where server operating systems were replaced, or where Samba was updated, 
		only to later isolate the problem due to defective client software.
		</para></listitem>
		</varlistentry>
	</variablelist>
	<para>
	In this chapter, you can work through a number of measures that significantly arm you to
	anticipate and combat network performance issues. You can work through complex and thorny
	methods to improve the reliability of your network environment, but be warned that all such steps
	demand the price of complexity.
	</para>
<sect1>
<title>Regarding LDAP Directories and Windows Computer Accounts</title>
	<para>
	<indexterm><primary>LDAP</primary><secondary>directory</secondary></indexterm>
	Computer (machine) accounts can be placed wherever you like in an LDAP directory subject to some 
	constraints that are described in this section.
	</para>
	<para>
	<indexterm><primary>POSIX</primary></indexterm>
	<indexterm><primary>SambaSAMAccount</primary></indexterm>
	<indexterm><primary>machine account</primary></indexterm>
	<indexterm><primary>trust account</primary></indexterm>
	The POSIX and SambaSAMAccount components of computer (machine) accounts are both used by Samba. 
	That is, machine  accounts are treated inside Samba in the same way that Windows NT4/200X treats 
	them. A user account and a machine account are indistinguishable from each other, except that
	the machine account ends in a $ character, as do trust accounts.
	</para>
	<para>
	<indexterm><primary>account</primary></indexterm>
	<indexterm><primary>UID</primary></indexterm>
	The need for Windows user, group, machine, trust, and other such accounts to be tied to a valid UNIX UID
	is a design decision that was made a long way back in the history of Samba development. It is 
	unlikely that this decision will be reversed or changed during the remaining life of the 
	Samba-3.x series. 
	</para>
	<para>
	<indexterm><primary>SID</primary></indexterm>
	<indexterm><primary>NSS</primary></indexterm>
	The resolution of a UID from the Windows SID is achieved within Samba through a mechanism that
	must refer back to the host operating system on which Samba is running. The name service
	switch (NSS) is the preferred mechanism that shields applications (like Samba) from the
	need to know everything about every host OS it runs on.
	</para>
	<para>
	Samba asks the host OS to provide a UID via the <quote>passwd</quote>, <quote>shadow</quote>
	and <quote>group</quote> facilities in the NSS control (configuration) file. The best tool
	for achieving this is left up to the UNIX administrator to determine. It is not imposed by
	Samba. Samba provides winbindd together with its support libraries as one method. It is
	possible to do this via LDAP, and for that Samba provides the appropriate hooks so that
	all account entities can be located in an LDAP directory.
	</para>
	<para>
	<indexterm><primary>nss_ldap</primary></indexterm>
	For many the weapon of choice is to use the PADL nss_ldap utility. This utility must
	be configured so that computer accounts can be resolved to a POSIX/UNIX account UID. That
	is fundamentally an LDAP design question.  The information provided on the Samba list and
	in the documentation is directed at providing working examples only. The design
	of an LDAP directory is a complex subject that is beyond the scope of this documentation.
	</para>
</sect1>
<sect1>
	<title>Introduction</title>
	<para>
	You just opened an email from Christine that reads:
	</para>
	<para>
	Good morning,
	<blockquote><attribution>Christine</attribution><para>
	A few months ago we sat down to design the network. We discussed the challenges ahead and we all
	agreed to compromise our design to keep it simple. We knew there would be problems, but anticipated
	that we would have some time to resolve any issues that might be encountered.
	</para>
	<para>
	As you now know, we started off on the wrong foot. We have a lot of unhappy users. One of them
	resigned yesterday afternoon because she was under duress to complete some critical projects. She
	suffered a blue screen of death situation just as she was finishing four hours of intensive work, all
	of which was lost. She has a unique requirement that involves storing large files on her desktop.
	Mary's desktop profile is nearly 1 GB in size. As a result of her desktop configuration, it
	takes her nearly 15 minutes just to log onto her workstation. But that is not enough. Because all
	network logon traffic passes over the network links between our buildings, logging on may take
	three or four attempts due to blue screen problems associated with network timeouts.
	</para>
	<para>
	A few of us worked to help her out of trouble. We convinced her to stay and promised to fully 
	resolve the difficulties she is facing. We have no choice. We must implement LDAP and set hard 
	limits on what our users can do with their desktops. Otherwise, we face staff losses 
	that can surely do harm to our growth as well as to staff morale. I am sure we can better deal 
	with the consequences of what we know we must do than we can with the unrest we have now.
	</para>
	<para>
	Stan and I have discussed the current situation. We are resolved to help our users and protect
	the well being of Abmas. Please acknowledge this advice with consent to proceed as required to
	regain control of our vital IT operations.
	</para></blockquote>
	</para>
	<para>
	<indexterm><primary>compromise</primary></indexterm>	
	<indexterm><primary>network</primary><secondary>multi-segment</secondary></indexterm>
	Every compromise has consequences. Having a large routed (i.e., multisegment) network with only a
	single domain controller is a poor design that has obvious operational effects that may
	frustrate users. Here is your reply:
	</para>
	<blockquote><attribution>Bob</attribution><para>
	Christine, Your diligence and attention to detail are much valued. Stan and I fully support your
	proposals to resolve the issues. I am confident that your plans fully realized will significantly
	boost staff morale. Please go ahead with your plans. If you have any problems, please let me know.
	Please let Stan know what the estimated cost will be so I can approve the expense. Do not wait
	for approval; I appreciate the urgency.
	</para></blockquote>
	<sect2>
		<title>Assignment Tasks</title>
		<para>
		The priority of assigned tasks in this chapter is:
		</para>
		<orderedlist>
			<listitem><para>
			<indexterm><primary>Backup Domain Controller</primary><see>BDC</see></indexterm>
			<indexterm><primary>BDC</primary></indexterm>
			<indexterm><primary>tdbsam</primary></indexterm>
			<indexterm><primary>LDAP</primary></indexterm><indexterm><primary>migration</primary></indexterm>
			Implement Backup Domain Controllers (BDCs) in each building. This involves
			a change from a <emphasis>tdbsam</emphasis> backend that was used in the previous
			chapter to an LDAP-based backend.
			</para>
			<para>
			You can implement a single central LDAP server for this purpose.
			</para></listitem>
			<listitem><para>
			<indexterm><primary>logon time</primary></indexterm>
			<indexterm><primary>network share</primary></indexterm>
			<indexterm><primary>default profile</primary></indexterm>
			<indexterm><primary>profile</primary><secondary>default</secondary></indexterm>
			Rectify the problem of excessive logon times. This involves redirection of
			folders to network shares as well as modification of all user desktops to
			exclude the redirected folders from being loaded at login time. You can also
			create a new default profile that can be used for all new users.
			</para></listitem>
		</orderedlist>
		<para>
		<indexterm><primary>disk image</primary></indexterm>
		You configure a new MS Windows XP Professional workstation disk image that you roll out
		to all desktop users. The instructions you have created are followed on a staging machine
		from which all changes can be carefully tested before inflicting them on your network users.
		</para>
		<para>
		<indexterm><primary>CUPS</primary></indexterm>
		This is the last network example in which specific mention of printing is made. The example
		again makes use of the CUPS printing system.
		</para>
	</sect2>
</sect1>
<sect1>
	<title>Dissection and Discussion</title>
	<para>
	<indexterm><primary>BDC</primary></indexterm>
	<indexterm><primary>LDAP</primary></indexterm>
	<indexterm><primary>OpenLDAP</primary></indexterm>
	The implementation of Samba BDCs necessitates the installation and configuration of LDAP.
	For this site, you use OpenLDAP, the open source software LDAP server platform. Commercial
	LDAP servers in current use with Samba-3 include:
	</para>
	<itemizedlist>
		<listitem><para>
		<indexterm><primary>eDirectory</primary></indexterm>
		Novell <ulink url="http://www.novell.com/products/edirectory/">eDirectory</ulink>
		is being successfully used by some sites. Information on how to use eDirectory can be
		obtained from the Samba mailing lists or from Novell.
		</para></listitem>
		<listitem><para>
		<indexterm><primary>Tivoli Directory Server</primary></indexterm>
		IBM <ulink url="http://www-306.ibm.com/software/tivoli/products/directory-server/">Tivoli 
		Directory Server</ulink> can be used to provide the Samba LDAP backend. Example schema 
		files are provided in the Samba source code tarball under the directory 
		<filename>~samba/example/LDAP.</filename>
		</para></listitem> 
		<listitem><para>
		<indexterm><primary>Sun ONE Identity Server</primary></indexterm>
		Sun <ulink url="http://www.sun.com/software/software/products/identity_srvr/home_identity.xml">ONE Identity 
		Server product suite</ulink> provides an LDAP server that can be used for Samba.
		Example schema files are provided in the Samba source code tarball under the directory
		<filename>~samba/example/LDAP.</filename>
		</para></listitem>
	</itemizedlist>
	<para>
	A word of caution is fully in order. OpenLDAP is purely an LDAP server, and unlike commercial
	offerings, it requires that you manually edit the server configuration files and manually
	initialize the LDAP directory database. OpenLDAP itself has only command-line tools to
	help you to get OpenLDAP and Samba-3 running as required, albeit with some learning curve challenges.
	</para>
	<para>
	<indexterm><primary>Active Directory</primary></indexterm>
	For most sites, the deployment of Microsoft Active Directory from the shrink-wrapped installation is quite
	adequate. If you are migrating from Microsoft Active Directory, be warned that OpenLDAP does not include
	GUI-based directory management tools. Even a simple task such as adding users to the OpenLDAP database 
	requires an understanding of what you are doing, why you are doing it, and the tools that you must use.
	</para>
	<para>
	<indexterm><primary>Identity Management</primary></indexterm>
	<indexterm><primary>high availability</primary></indexterm>
	<indexterm><primary>directory</primary><secondary>replication</secondary></indexterm>
	<indexterm><primary>directory</primary><secondary>synchronization</secondary></indexterm>
	<indexterm><primary>performance</primary></indexterm>
	<indexterm><primary>directory</primary><secondary>management</secondary></indexterm>
	<indexterm><primary>directory</primary><secondary>schema</secondary></indexterm>
	When installed and configured, an OpenLDAP Identity Management backend for Samba functions well. 
	High availability operation may be obtained through directory replication/synchronization and 
	master/slave server configurations. OpenLDAP is a mature platform to host the organizational 
	directory infrastructure that can include all UNIX accounts, directories for electronic mail, and much more. 
	The price paid through learning how to design an LDAP directory schema in implementation and configuration 
	of management tools is well rewarded by performance and flexibility and the freedom to manage directory
	contents with greater ability to back up, restore, and modify the directory than is generally possible
	with Microsoft Active Directory.
	</para>
	<para>
	<indexterm><primary>comparison</primary><secondary>Active Directory & OpenLDAP</secondary></indexterm>
	<indexterm><primary>ADAM</primary></indexterm>
	<indexterm><primary>Active Directory</primary></indexterm>
	<indexterm><primary>OpenLDAP</primary></indexterm>
	A comparison of OpenLDAP with Microsoft Active Directory does not do justice to either. OpenLDAP is an LDAP directory
	tool-set. Microsoft Active Directory Server is an implementation of an LDAP server that is largely preconfigured
	for a specific task orientation. It comes with a set of administrative tools that is entirely customized
	for the purpose of running MS Windows applications that include file and print services, Microsoft Exchange
	server, Microsoft SQL server, and more. The complexity of OpenLDAP is highly valued by the UNIX administrator
	who wants to build a custom directory solution. Microsoft provides an application called 
	<ulink url="http://www.microsoft.com/windowsserver2003/adam/default.mspx">
	MS ADAM</ulink> that provides more generic LDAP services, yet it does not have the vanilla-like services
	of OpenLDAP.
	</para>
	<para>
	<indexterm><primary>directory</primary><secondary>schema</secondary></indexterm>
	<indexterm><primary>passdb backend</primary></indexterm>
	You may wish to consider outsourcing the development of your OpenLDAP directory to an expert, particularly
	if you find the challenge of learning about LDAP directories, schemas, configuration, and management
	tools and the creation of shell and Perl scripts a bit
	challenging. OpenLDAP can be easily customized, though it includes
	many ready-to-use schemas. Samba-3 provides an OpenLDAP schema file
	that is required for use as a passdb backend.
	</para>
	<para>
	<indexterm><primary>interoperability</primary></indexterm>
	For those who are willing to brave the process of installing and configuring LDAP and Samba-3 interoperability,
	there are a few nice Web-based tools that may help you to manage your users and groups more effectively.
	The Web-based tools you might like to consider include the
	<ulink url="http://lam.sourceforge.net/">LDAP Account Manager</ulink> (LAM) and the Webmin-based
	<ulink url="http://www.webmin.com">Webmin</ulink> Idealx
	<ulink url="http://webmin.idealx.org/index.en.html">CGI tools</ulink>.
	</para>
	<para>
	Some additional LDAP tools should be mentioned. Every so often a Samba user reports using one of 
	these, so it may be useful to them: 
	<ulink url="http://biot.com/gq">GQ</ulink>, a GTK-based LDAP browser; 
	LDAP <ulink url="http://www.iit.edu/~gawojar/ldap/">Browser/Editor</ulink> 
	<ulink url="http://www.jxplorer.org/">; JXplorer</ulink> (by Computer Associates);
	and <ulink url="http://phpldapadmin.sourceforge.net/">phpLDAPadmin</ulink>.
	</para>
	<note><para>
	The following prescriptive guidance is not an LDAP tutorial. The LDAP implementation expressly uses minimal
	security controls. No form of secure LDAP communications is attempted. The LDAP configuration information provided
	is considered to consist of the barest essentials only. You are strongly encouraged to learn more about
	LDAP before attempting to deploy it in a business-critical environment.
	</para></note>
	<para>
	Information to help you get started with OpenLDAP is available from the
	<ulink url="http://www.openldap.org/pub/">OpenLDAP web site</ulink>. Many people have found the book
	<ulink url="http://www.oreilly.com/catalog/ldapsa/index.html"><emphasis>LDAP System Administration</emphasis>,</ulink>
	by Jerry Carter quite useful.
	</para>
	<para>
	<indexterm><primary>BDC</primary></indexterm>
	<indexterm><primary>network</primary><secondary>segment</secondary></indexterm>
	<indexterm><primary>performance</primary></indexterm>
	<indexterm><primary>network</primary><secondary>wide-area</secondary></indexterm>
	Mary's problems are due to two factors. First, the absence of a domain controller on the local network is the
	main cause of the errors that result in blue screen crashes. Second, Mary has a large profile that must
	be loaded over the WAN connection. The addition of BDCs on each network segment significantly
	improves overall network performance for most users, but it is not enough. You must gain control over
	user desktops, and this must be done in a way that wins their support and does not cause further loss of
	staff morale. The following procedures solve this problem.
	</para>
	<para>
	<indexterm><primary>smart printing</primary></indexterm>
	There is also an opportunity to implement smart printing features. You add this to the Samba configuration
	so that future printer changes can be managed without need to change desktop configurations.
	</para>
	<para>
	You add the ability to automatically download new printer drivers, even if they are not installed 
	in the default desktop profile. Only one example of printing configuration is given. It is assumed that
	you can extrapolate the principles and use them to install all printers that may be needed.
	</para>
	<sect2>
	<title>Technical Issues</title>
	<para>
	<indexterm><primary>identity</primary><secondary>management</secondary></indexterm>
	<indexterm><primary>directory</primary><secondary>server</secondary></indexterm>
	<indexterm><primary>Posix</primary></indexterm>
	The solution provided is a minimal approach to getting OpenLDAP running as an identity management directory
	server for UNIX system accounts as well as for Samba. From the OpenLDAP perspective, UNIX system
	accounts are stored POSIX schema extensions. Samba provides its own schema to permit storage of account 
	attributes Samba needs. Samba-3 can use the LDAP backend to store:
	</para>
	
	<itemizedlist>
		<listitem><para>Windows Networking User Accounts</para></listitem>
		<listitem><para>Windows NT Group Accounts</para></listitem>
		<listitem><para>Mapping Information between UNIX Groups and Windows NT Groups</para></listitem>
		<listitem><para>ID Mappings for SIDs to UIDs (also for foreign Domain SIDs)</para></listitem>
	</itemizedlist>
	<para>
	<indexterm><primary>UNIX accounts</primary></indexterm>
	<indexterm><primary>Windows accounts</primary></indexterm>
	<indexterm><primary>PADL LDAP tools</primary></indexterm>
	<indexterm><primary>/etc/group</primary></indexterm>
	<indexterm><primary>LDAP</primary></indexterm>
	<indexterm><primary>name service switch</primary><see>NSS</see></indexterm>
	<indexterm><primary>NSS</primary></indexterm>
	<indexterm><primary>UID</primary></indexterm>
	<indexterm><primary>nss_ldap</primary></indexterm>
	The use of LDAP with Samba-3 makes it necessary to store UNIX accounts as well as Windows Networking
	accounts in the LDAP backend. This implies the need to use the 
	<ulink url="http://www.padl.com/Contents/OpenSourceSoftware.html">PADL LDAP tools</ulink>. The resolution 
	of the UNIX group name to its GID must be enabled from either the <filename>/etc/group</filename> 
	or from the LDAP backend. This requires the use of the PADL <filename>nss_ldap</filename> tool-set
	that integrates with the NSS. The same requirements exist for resolution
	of the UNIX username to the UID. The relationships are demonstrated in <link linkend="sbehap-LDAPdiag"/>.
	</para>
	<figure id="sbehap-LDAPdiag">
		<title>The Interaction of LDAP, UNIX Posix Accounts and Samba Accounts</title>
		<imagefile scale="50">UNIX-Samba-and-LDAP</imagefile>
	</figure>
	<para>
	<indexterm><primary>security</primary></indexterm>
	<indexterm><primary>LDAP</primary><secondary>secure</secondary></indexterm>
	You configure OpenLDAP so that it is operational. Before deploying the OpenLDAP, you really
	ought to learn how to configure secure communications over LDAP so that site security is not
	at risk. This is not covered in the following guidance.
	</para>
	<para>
	<indexterm><primary>PDC</primary></indexterm>
	<indexterm><primary>LDAP Interchange Format</primary><see>LDIF</see></indexterm>
	<indexterm><primary>LDIF</primary></indexterm>
	<indexterm><primary>secrets.tdb</primary></indexterm>
	When OpenLDAP has been made operative, you configure the PDC called <constant>MASSIVE</constant>.
	You initialize the Samba <filename>secrets.tdb<subscript></subscript></filename> file. Then you
	create the LDAP Interchange Format (LDIF) file from which the LDAP database can be initialized.
	You need to decide how best to create user and group accounts. A few hints are, of course, provided.
	You can also find on the enclosed CD-ROM, in the <filename>Chap06</filename> directory, a few tools
	that help to manage user and group configuration.
	</para>
	<para>
	<indexterm><primary>folder redirection</primary></indexterm>
	<indexterm><primary>default profile</primary></indexterm>
	<indexterm><primary>roaming profile</primary></indexterm>
	In order to effect folder redirection and to add robustness to the implementation,
	create a network default profile. All network users workstations are configured to use
	the new profile. Roaming profiles will automatically be deleted from the workstation
	when the user logs off.
	</para>
	<para>
	<indexterm><primary>mandatory profile</primary></indexterm>
	The profile is configured so that users cannot change the appearance
	of their desktop. This is known as a mandatory profile. You make certain that users
	are able to use their computers efficiently.
	</para>
	<para>
	<indexterm><primary>logon script</primary></indexterm>
	A network logon script is used to deliver flexible but consistent network drive
	connections.
	</para>
		<sect3 id="sbehap-ppc">
		<title>Addition of Machines to the Domain</title>
		<para>
		<indexterm><primary></primary></indexterm>
		<indexterm><primary></primary></indexterm>
		<indexterm><primary></primary></indexterm>
		<indexterm><primary></primary></indexterm>
		Samba versions prior to 3.0.11 necessitated the use of a domain administrator account
		that maps to the UNIX UID=0. The UNIX operating system permits only the <constant>root</constant>
		user to add user and group accounts. Samba 3.0.11 introduced a new facility known as
		<constant>Privileges</constant>, which provides five new privileges that
		can be assigned to users and/or groups; see Table 5.1.
		</para>
		<table id="sbehap-privs">
			<title>Current Privilege Capabilities</title>
			<tgroup cols="2">
				<colspec align="left"/>
				<colspec align="left"/>
				<thead>
					<row>
						<entry align="left">Privilege</entry>
						<entry align="left">Description</entry>
					</row>
				</thead>
				<tbody>
					<row>
						<entry><para>SeMachineAccountPrivilege</para></entry>
						<entry><para>Add machines to domain</para></entry>
					</row>
					<row>
						<entry><para>SePrintOperatorPrivilege</para></entry>
						<entry><para>Manage printers</para></entry>
					</row>
					<row>
						<entry><para>SeAddUsersPrivilege</para></entry>
						<entry><para>Add users and groups to the domain</para></entry>
					</row>
					<row>
						<entry><para>SeRemoteShutdownPrivilege</para></entry>
						<entry><para>Force shutdown from a remote system</para></entry>
					</row>
					<row>
						<entry><para>SeDiskOperatorPrivilege</para></entry>
						<entry><para>Manage disk share</para></entry>
					</row>
				</tbody>
			</tgroup>
		</table>
		<para>
		In this network example use is made of one of the supported privileges purely to demonstrate
		how any user can now be given the ability to add machines to the domain using a normal user account
		that has been given the appropriate privileges.
		</para>
		</sect3>
		<sect3>
		<title>Roaming Profile Background</title>
		<para>
		As XP roaming profiles grow, so does the amount of time it takes to log in and out.
		</para>
		<para>
		<indexterm><primary>roaming profile</primary></indexterm>
		<indexterm><primary>HKEY_CURRENT_USER</primary></indexterm>
		<indexterm><primary>NTUSER.DAT</primary></indexterm>
		<indexterm><primary>%USERNAME%</primary></indexterm>
		An XP roaming profile consists of the <constant>HKEY_CURRENT_USER</constant> hive file
		<filename>NTUSER.DAT</filename> and a number of folders (My Documents, Application Data,
		Desktop, Start Menu, Templates, NetHood, Favorites, and so on).  When a user logs onto the 
		network with the default configuration of MS Windows NT/200x/XPP, all this data is 
		copied to the local machine under the <filename>C:\Documents and Settings\%USERNAME%</filename>
		directory. While the user is logged in, any changes made to any of these folders or to the
		<constant>HKEY_CURRENT_USER</constant> branch of the registry are made to the local copy
		of the profile.  At logout the profile data is copied back to the server. This behavior
		can be changed through appropriate registry changes and/or through changes to the default
		user profile. In the latter case, it updates the registry with the values that are set in the
		profile <filename>NTUSER.DAT</filename>
		file.
		</para>
		<para>
		The first challenge is to reduce the amount of data that must be transferred to and 
		from the profile server as roaming profiles are processed.  This includes removing 
		all the shortcuts in the Recent directory, making sure the cache used by the Web browser 
		is not being dumped into the <filename>Application Data</filename> folder, removing the 
		Java plug-ins cache (the .jpi_cache directory in the profile), as well as training the 
		user to not place large files on the desktop and to use his or her mapped home directory
		instead of the <filename>My Documents</filename> folder for saving documents.
		</para>
		<para>
		<indexterm><primary>My Documents</primary></indexterm>
		Using a folder other than <filename>My Documents</filename> is a nuisance for 
		some users, since many applications use it by default.
		</para>
		<para>
		<indexterm><primary>roaming profiles</primary></indexterm>
		<indexterm><primary>Local Group Policy</primary></indexterm>
		<indexterm><primary>NTUSER.DAT</primary></indexterm>
		The secret to rapid loading of roaming profiles is to prevent unnecessary data from 
		being copied back and forth, without losing any functionality. This is not difficult; 
		it can be done by making changes to the Local Group Policy on each client as well 
		as changing some paths in each user's <filename>NTUSER.DAT</filename> hive.
		</para>
		<para>
		<indexterm><primary>Network Default Profile</primary></indexterm>
		<indexterm><primary>redirected folders</primary></indexterm>
		Every user profile has its own <filename>NTUSER.DAT</filename> file. This means
		you need to edit every user's profile, unless a better method can be
		followed. Fortunately, with the right preparations, this is not difficult.
		It is possible to remove the <filename>NTUSER.DAT</filename> file from each
		user's profile. Then just create a Network Default Profile. Of course, it is
		necessary to copy all files from redirected folders to the network share to which
		they are redirected.
		</para>
		</sect3>
		<sect3 id="sbehap-locgrppol">
		<title>The Local Group Policy</title>
		<para>
		<indexterm><primary>Group Policy Objects</primary></indexterm>
		<indexterm><primary>Active Directory</primary></indexterm>
		<indexterm><primary>PDC</primary></indexterm>
		<indexterm><primary>Group Policy editor</primary></indexterm>
		Without an Active Directory PDC, you cannot take full advantage of Group Policy 
		Objects. However, you can still make changes to the Local Group Policy by using 
		the Group Policy editor (<command>gpedit.msc</command>).
		</para>
		<para>
		The <emphasis>Exclude directories in roaming profile</emphasis> settings can 
		be found under 
		<menuchoice>
			<guimenu>User Configuration</guimenu>
			<guimenuitem>Administrative Templates</guimenuitem>
			<guimenuitem>System</guimenuitem>
			<guimenuitem>User Profiles</guimenuitem>
		</menuchoice>. 
		By default this setting contains
		<quote>Local Settings; Temporary Internet Files; History; Temp</quote>.
		</para>
		<para>
		Simply add the folders you do not wish to be copied back and forth to this 
		semicolon-separated list. Note that this change must be made on all clients 
		that are using roaming profiles.
		</para>
		</sect3>
		<sect3>
		<title>Profile Changes</title>
		<para>
		<indexterm><primary>NTUSER.DAT</primary></indexterm>
		<indexterm><primary>%USERNAME%</primary></indexterm>
		There are two changes that should be done to each user's profile. Move each of 
		the directories that you have excluded from being copied back and forth out of 
		the usual profile path. Modify each user's <filename>NTUSER.DAT</filename> file 
		to point to the new paths that are shared over the network instead of to the default
		path (<filename>C:\Documents and Settings\%USERNAME%</filename>).
		</para>
		<para>
		<indexterm><primary>Default User</primary></indexterm>
		<indexterm><primary>regedt32</primary></indexterm>
		The above modifies existing user profiles. So that newly created profiles have 
		these settings, you need to modify the <filename>NTUSER.DAT</filename> in 
		the <filename>C:\Documents and Settings\Default User</filename> folder on each 
		client machine, changing the same registry keys.  You could do this by copying 
		<filename>NTUSER.DAT</filename> to a Linux box and using <command>regedt32</command>.
		The basic method is described under <link linkend="redirfold"/>.
		</para>
		</sect3>
		<sect3>
		<title>Using a Network Default User Profile</title>
		<para>
		<indexterm><primary>NETLOGON</primary></indexterm>
		<indexterm><primary>NTUSER.DAT</primary></indexterm>
		If you are using Samba as your PDC, you should create a file share called 
		<constant>NETLOGON</constant> and within that create a directory called 
		<filename>Default User</filename>, which is a copy of the desired default user 
		configuration (including a copy of <filename>NTUSER.DAT</filename>).
		If this share exists and the <filename>Default User</filename> folder exists, 
		the first login from a new account pulls its configuration from it.
		See also <ulink url="http://isg.ee.ethz.ch/tools/realmen/det/skel.en.html">
		the Real Men Don't Click</ulink> Web site.
		</para>
		</sect3>
		<sect3>
		<title>Installation of Printer Driver Auto-Download</title>
		<para>
		<indexterm><primary>printing</primary><secondary>dumb</secondary></indexterm>
		<indexterm><primary>dumb printing</primary></indexterm>
		<indexterm><primary>Raw Print Through</primary></indexterm>
		The subject of printing is quite topical. Printing problems run second place to name
		resolution issues today. So far in this book, you have experienced only what is generally
		known as <quote>dumb</quote> printing. Dumb printing is the arrangement by which all drivers
		are manually installed on each client and the printing subsystems perform no filtering
		or intelligent processing. Dumb printing is easily understood. It usually works without
		many problems, but it has its limitations also. Dumb printing is better known as
		<command>Raw-Print-Through</command> printing.
		</para>
		<para>
		<indexterm><primary>printing</primary><secondary>drag-and-drop</secondary></indexterm>
		<indexterm><primary>printing</primary><secondary>point-n-click</secondary></indexterm>
		Samba permits the configuration of <command>smart</command> printing using the Microsoft
		Windows point-and-click (also called drag-and-drop) printing. What this provides is
		essentially the ability to print to any printer. If the local client does not yet have a
		driver installed, the driver is automatically downloaded from the Samba server and
		installed on the client. Drag-and-drop printing is neat; it means the user never needs
		to fuss with driver installation, and that is a <trademark>Good Thing,</trademark>
		isn't it?
		</para>
		<para>
		There is a further layer of print job processing that is known as <command>intelligent</command>
		printing that automatically senses the file format of data submitted for printing and
		then invokes a suitable print filter to convert the incoming data stream into a format
		suited to the printer to which the job is dispatched.
		</para>
		<para>
		<indexterm><primary>CUPS</primary></indexterm>
		<indexterm><primary>Easy Software Products</primary></indexterm>
		<indexterm><primary>Postscript</primary></indexterm>
		The CUPS printing subsystem is capable of intelligent printing. It has the capacity to
		detect the data format and apply a print filter. This means that it is feasible to install
		on all Windows clients a single printer driver for use with all printers that are routed
		through CUPS. The most sensible driver to use is one for a PostScript printer. Fortunately,
		<ulink url="http://www.easysw.com">Easy Software Products</ulink>, the authors of CUPS, have
		released a PostScript printing driver for Windows. It can be installed into the Samba
		printing backend so that it automatically downloads to the client when needed. 
		</para>
		<para>
		This means that so long as there is a CUPS driver for the printer, all printing from Windows 
		software can use PostScript, no matter what the actual printer language for the physical 
		device is. It also means that the administrator can swap out a printer with a totally 
		different type of device without ever needing to change a client workstation driver.
		</para>
		<para>
		This book is about Samba-3, so you can confine the printing style to just the smart
		style of installation. Those interested in further information regarding intelligent
		printing should review documentation on the Easy Software Products Web site.
		</para>
		</sect3>
		<sect3 id="sbeavoid">
		<title>Avoiding Failures: Solving Problems Before They Happen</title>
		<para>
		It has often been said that there are three types of people in the world: those who
		have sharp minds and those who forget things. Please do not ask what the third group
		is like! Well, it seems that many of us have company in the second group. There must
		be a good explanation why so many network administrators fail to solve apparently
		simple problems efficiently and effectively.
		</para>
		<para>
		Here are some diagnostic guidelines that can be referred to when things go wrong:
		</para>
		<sect4>
		<title>Preliminary Advice: Dangers Can Be Avoided</title>
		<para>
		The best advice regarding how to mend a broken leg is <quote>Never break a leg!</quote>
		</para>
		<para>
		<indexterm><primary>LDAP</primary></indexterm>
		Newcomers to Samba and LDAP seem to struggle a great deal at first.  If you want advice
		regarding the best way to remedy LDAP and Samba problems: <quote>Avoid them like the plague!</quote>
		</para>
		<para>
		If you are now asking yourself how problems can be avoided, the best advice is to start
		out your learning experience with a <emphasis>known-good configuration.</emphasis> After
		you have seen a fully working solution, a good way to learn is to make slow and progressive
		changes that cause things to break, then observe carefully how and why things ceased to work.
		</para>
		<para>
		The examples in this chapter (also in the book as a whole) are known to work. That means
		that they could serve as the kick-off point for your journey through fields of knowledge.
		Use this resource carefully; we hope it serves you well.
		</para>
		<warning><para>
		Do not be lulled into thinking that you can easily adopt the examples in this
		book and adapt them without first working through the examples provided. A little
		thing overlooked can cause untold pain and may permanently tarnish your experience.
		</para></warning>
		</sect4>
		<sect4>
		<title>The Name Service Caching Daemon</title>
		<para>
		The name service caching daemon (nscd) is a primary cause of difficulties with name
		resolution, particularly where <command>winbind</command> is used. Winbind does its
		own caching, thus nscd causes double caching which can lead to peculiar problems during
		debugging. As a rule, it is a good idea to turn off the name service caching daemon.
		</para>
		<para>
		Operation of the name service caching daemon is controlled by the 
		<filename>/etc/nscd.conf</filename> file. Typical contents of this file are as follows:
<screen>
# /etc/nscd.conf
# An example Name Service Cache config file.  This file is needed by nscd.
# Legal entries are:
#       logfile                 <file>
#       debug-level             <level>
#       threads                 <threads to use>
#       server-user             <user to run server as instead of root>
#               server-user is ignored if nscd is started with -S parameters
#       stat-user               <user who is allowed to request statistics>
#       reload-count            unlimited|<number>
#
#       enable-cache            <service> <yes|no>
#       positive-time-to-live   <service> <time in seconds>
#       negative-time-to-live   <service> <time in seconds>
#       suggested-size          <service> <prime number>
#       check-files             <service> <yes|no>
#       persistent              <service> <yes|no>
#       shared                  <service> <yes|no>
# Currently supported cache names (services): passwd, group, hosts
#       logfile                 /var/log/nscd.log
#       threads                 6
#       server-user             nobody
#       stat-user               somebody
        debug-level             0
#       reload-count            5
        enable-cache            passwd          yes
        positive-time-to-live   passwd          600
        negative-time-to-live   passwd          20
        suggested-size          passwd          211
        check-files             passwd          yes
        persistent              passwd          yes
        shared                  passwd          yes
        enable-cache            group           yes
        positive-time-to-live   group           3600
        negative-time-to-live   group           60
        suggested-size          group           211
        check-files             group           yes
        persistent              group           yes
        shared                  group           yes
# !!!!!WARNING!!!!! Host cache is insecure!!! The mechanism in nscd to
# cache hosts will cause your local system to not be able to trust
# forward/reverse lookup checks. DO NOT USE THIS if your system relies on
# this sort of security mechanism. Use a caching DNS server instead.
        enable-cache            hosts           no
        positive-time-to-live   hosts           3600
        negative-time-to-live   hosts           20
        suggested-size          hosts           211
        check-files             hosts           yes
        persistent              hosts           yes
        shared                  hosts           yes
</screen>
	It is feasible to comment out the <constant>passwd</constant> and <constant>group</constant>
	entries so they will not be cached. Alternatively, it is often simpler to just disable the
	<command>nscd</command> service by executing (on Novell SUSE Linux):
<screen>
&rootprompt; chkconfig nscd off
&rootprompt; rcnscd off
</screen>
		</para>
		</sect4>
		<sect4>
		<title>Debugging LDAP</title>
		<para>
		<indexterm><primary>/etc/openldap/slapd.conf</primary></indexterm>
		<indexterm><primary>loglevel</primary></indexterm>
		<indexterm><primary>slapd</primary></indexterm>
		In the example <filename>/etc/openldap/slapd.conf</filename> control file
		(see <link linkend="sbehap-dbconf"/>) there is an entry for <constant>loglevel	256</constant>.
		To enable logging via the syslog infrastructure, it is necessary to uncomment this parameter
		and restart <command>slapd</command>.
		</para>
		<para>
		<indexterm><primary>/etc/syslog.conf</primary></indexterm>
		<indexterm><primary>/var/log/ldaplogs</primary></indexterm>
		LDAP log information can be directed into a file that is separate from the normal system
		log files by changing the <filename>/etc/syslog.conf</filename> file so it has the following
		contents:
<screen>
# Some foreign boot scripts require local7
#
local0,local1.*                 -/var/log/localmessages
local2,local3.*                 -/var/log/localmessages
local5.*                        -/var/log/localmessages
local6,local7.*                 -/var/log/localmessages
local4.*                        -/var/log/ldaplogs
</screen>
		In this case, all LDAP-related logs will be directed to the file
		<filename>/var/log/ldaplogs</filename>. This makes it easy to track LDAP errors.
		The snippet provides a simple example of usage that can be modified to suit
		local site needs. The configuration used later in this chapter reflects such
		customization with the intent that LDAP log files will be stored at a location
		that meets local site needs and wishes more fully.
		</para>
		</sect4>
		<sect4>
		<title>Debugging NSS_LDAP</title>
		<para>
		The basic mechanism for diagnosing problems with the nss_ldap utility involves adding to the
		<filename>/etc/ldap.conf</filename> file the following parameters:
<screen>
debug 256
logdir /data/logs
</screen>
		Create the log directory as follows:
<screen>
&rootprompt; mkdir /data/logs
</screen>
		</para>
<?latex \newpage ?>
		<para>
		The diagnostic process should follow these steps:
		</para>
		<procedure>
		<title>NSS_LDAP Diagnostic Steps</title>
			<step><para>
			Verify the <constant>nss_base_passwd, nss_base_shadow, nss_base_group</constant> entries
			in the <filename>/etc/ldap.conf</filename> file and compare them closely with the directory
			tree location that was chosen when the directory was first created.
			</para>
			<para>
			One way this can be done is by executing:
<screen>
&rootprompt; slapcat | grep Group | grep dn
dn: ou=Groups,dc=abmas,dc=biz
dn: cn=Domain Admins,ou=Groups,dc=abmas,dc=biz
dn: cn=Domain Users,ou=Groups,dc=abmas,dc=biz
dn: cn=Domain Guests,ou=Groups,dc=abmas,dc=biz
dn: cn=Domain Computers,ou=Groups,dc=abmas,dc=biz
dn: cn=Administrators,ou=Groups,dc=abmas,dc=biz
dn: cn=Print Operators,ou=Groups,dc=abmas,dc=biz
dn: cn=Backup Operators,ou=Groups,dc=abmas,dc=biz
dn: cn=Replicators,ou=Groups,dc=abmas,dc=biz
</screen>
			The first line is the DIT entry point for the container for POSIX groups. The correct entry
			for the <filename>/etc/ldap.conf</filename> for the <constant>nss_base_group</constant>
			parameter therefore is the distinguished name (dn) as applied here:
<screen>
nss_base_group ou=Groups,dc=abmas,dc=biz?one
</screen>
			The same process may be followed to determine the appropriate dn for user accounts.
			If the container for computer accounts is not the same as that for users (see the &smb.conf;
			file entry for <constant>ldap machine suffix</constant>), it may be necessary to set the 
			following DIT dn in the <filename>/etc/ldap.conf</filename> file:
<screen>
nss_base_passwd dc=abmas,dc=biz?sub
</screen>
			This instructs LDAP to search for machine as well as user entries from the top of the DIT
			down. This is inefficient, but at least should work. Note: It is possible to specify multiple
			<constant>nss_base_passwd</constant> entries in the <filename>/etc/ldap.conf</filename> file; they
			will be evaluated sequentially. Let us consider an example of use where the following DIT
			has been implemented:
			</para>
			<para>
			<itemizedlist>
			<listitem><para>User accounts are stored under the DIT: ou=Users, dc=abmas, dc=biz</para></listitem>
			<listitem><para>User login accounts are under the DIT: ou=People, ou-Users, dc=abmas, dc=biz</para></listitem>
			<listitem><para>Computer accounts are under the DIT: ou=Computers, ou=Users, dc=abmas, dc=biz</para></listitem>
			</itemizedlist>
			</para>
			<para>
			The appropriate multiple entry for the <constant>nss_base_passwd</constant> directive
			in the <filename>/etc/ldap.conf</filename> file may be:
<screen>
nss_base_passwd ou=People,ou=Users,dc=abmas,dc=org?one
nss_base_passwd ou=Computers,ou=Users,dc=abmas,dc=org?one
</screen>
			</para></step>
			<step><para>
			Perform lookups such as:
<screen>
&rootprompt; getent passwd
</screen>
			Each such lookup will create an entry in the <filename>/data/log</filename> directory
			for each such process executed. The contents of each file created in this directory
			may provide a hint as to the cause of the a problem that is under investigation. 
			</para></step>
			<step><para>
			For additional diagnostic information, check the contents of the <filename>/var/log/messages</filename>
			to see what error messages are being generated as a result of the LDAP lookups. Here is an example of
			a successful lookup:
<screen>
slapd[12164]: conn=0 fd=10 ACCEPT from IP=127.0.0.1:33539
(IP=0.0.0.0:389)
slapd[12164]: conn=0 op=0 BIND dn="" method=128
slapd[12164]: conn=0 op=0 RESULT tag=97 err=0 text=
slapd[12164]: conn=0 op=1 SRCH base="" scope=0 deref=0
filter="(objectClass=*)"
slapd[12164]: conn=0 op=1 SEARCH RESULT tag=101 err=0
nentries=1 text=
slapd[12164]: conn=0 op=2 UNBIND
slapd[12164]: conn=0 fd=10 closed
slapd[12164]: conn=1 fd=10 ACCEPT from
IP=127.0.0.1:33540 (IP=0.0.0.0:389)
slapd[12164]: conn=1 op=0 BIND
dn="cn=Manager,dc=abmas,dc=biz" method=128
slapd[12164]: conn=1 op=0 BIND
dn="cn=Manager,dc=abmas,dc=biz" mech=SIMPLE ssf=0
slapd[12164]: conn=1 op=0 RESULT tag=97 err=0 text=
slapd[12164]: conn=1 op=1 SRCH
base="ou=People,dc=abmas,dc=biz" scope=1 deref=0
filter="(objectClass=posixAccount)"
slapd[12164]: conn=1 op=1 SRCH attr=uid userPassword
uidNumber gidNumber cn
homeDirectory loginShell gecos description objectClass
slapd[12164]: conn=1 op=1 SEARCH RESULT tag=101 err=0
nentries=2 text=
slapd[12164]: conn=1 fd=10 closed
</screen>
			</para></step>
			<step><para>
			Check that the bindpw entry in the <filename>/etc/ldap.conf</filename> or in the
			<filename>/etc/ldap.secrets</filename> file is correct, as specified in the
			<filename>/etc/openldap/slapd.conf</filename> file.
			</para></step>
		</procedure>
		</sect4>
		<sect4>
		<title>Debugging Samba</title>
		<para>
		The following parameters in the &smb.conf; file can be useful in tracking down Samba-related problems:
<screen>
[global]
	...
	log level = 5
	log file = /var/log/samba/%m.log
	max log size = 0
	...
</screen>
		This will result in the creation of a separate log file for every client from which connections
		are made. The log file will be quite verbose and will grow continually. Do not forget to
		change these lines to the following when debugging has been completed:
<screen>
[global]
	...
	log level = 1
	log file = /var/log/samba/%m.log
	max log size = 50
	...
</screen>
		</para>
		<para>
		The log file can be analyzed by executing:
<screen>
&rootprompt; cd /var/log/samba
&rootprompt; grep -v "^\[200" machine_name.log
</screen>
		</para>
		<para>
		Search for hints of what may have failed by looking for the words <emphasis>fail</emphasis>
		and <emphasis>error</emphasis>.
		</para>
		</sect4>
		<sect4>
		<title>Debugging on the Windows Client</title>
		<para>
		MS Windows 2000 Professional and Windows  XP Professional clients can be configured
		to create a netlogon.log file that can be very helpful in diagnosing network logon problems. Search
		the Microsoft knowledge base for detailed instructions. The techniques vary a little with each
		version of MS Windows.
		</para>
		</sect4>
		</sect3>
	</sect2>
	<sect2>
		<title>Political Issues</title>
		<para>
		MS Windows network users are generally very sensitive to limits that may be imposed when 
		confronted with locked-down workstation configurations. The challenge you face must 
		be promoted as a choice between reliable, fast network operation and a constant flux 	
		of problems that result in user irritation.
		</para>
	</sect2>
	<sect2>
		<title>Installation Checklist</title>
	<para>
	You are starting a complex project. Even though you went through the installation of a complex
	network in <link linkend="Big500users"/>, this network is a bigger challenge because of the
	large number of complex applications that must be configured before the first few steps
	can be validated. Take stock of what you are about to undertake, prepare yourself, and
	frequently review the steps ahead while making at least a mental note of what has already
	been completed. The following task list may help you to keep track of the task items
	that are covered:
	</para>
	<itemizedlist>
		<listitem><para>Samba-3 PDC Server Configuration</para>
			<orderedlist>
				<listitem><para>DHCP and DNS servers</para></listitem>
				<listitem><para>OpenLDAP server</para></listitem>
				<listitem><para>PAM and NSS client tools</para></listitem>
				<listitem><para>Samba-3 PDC</para></listitem>
				<listitem><para>Idealx smbldap scripts</para></listitem>
				<listitem><para>LDAP initialization</para></listitem>
				<listitem><para>Create user and group accounts</para></listitem>
				<listitem><para>Printers</para></listitem>
				<listitem><para>Share point directory roots</para></listitem>
				<listitem><para>Profile directories</para></listitem>
				<listitem><para>Logon scripts</para></listitem>
				<listitem><para>Configuration of user rights and privileges</para></listitem>
			</orderedlist>
		</listitem>
		<listitem><para>Samba-3 BDC Server Configuration</para>
			<orderedlist>
				<listitem><para>DHCP and DNS servers</para></listitem>
				<listitem><para>PAM and NSS client tools</para></listitem>
				<listitem><para>Printers</para></listitem>
				<listitem><para>Share point directory roots</para></listitem>
				<listitem><para>Profiles directories</para></listitem>
			</orderedlist>
		</listitem>
		<listitem><para>Windows XP Client Configuration</para>
			<orderedlist>
				<listitem><para>Default profile folder redirection</para></listitem>
				<listitem><para>MS Outlook PST file relocation</para></listitem>
				<listitem><para>Delete roaming profile on logout</para></listitem>
				<listitem><para>Upload printer drivers to Samba servers</para></listitem>
				<listitem><para>Install software</para></listitem>
				<listitem><para>Creation of roll-out images</para></listitem>
			</orderedlist>
		</listitem>
	</itemizedlist>
	</sect2>
</sect1>
<sect1>
	<title>Samba Server Implementation</title>
	<para>
	<indexterm><primary>file servers</primary></indexterm>
	<indexterm><primary>BDC</primary></indexterm>
	The network design shown in <link linkend="chap6net"/> is not comprehensive. It is assumed
	that you will install additional file servers and possibly additional BDCs.
	</para>
	<figure id="chap6net">
		<title>Network Topology &smbmdash; 500 User Network Using ldapsam passdb backend</title>
		<imagefile scale="50">chap6-net</imagefile>
	</figure>
	<para>
	<indexterm><primary>SUSE Linux</primary></indexterm>
	<indexterm><primary>Red Hat Linux</primary></indexterm>
	All configuration files and locations are shown for SUSE Linux 9.2 and are equally valid for SUSE
	Linux Enterprise Server 9. The file locations for Red Hat Linux are similar. You may need to
	adjust the locations for your particular Linux system distribution/implementation.
	</para>
<note><para>
The following information applies to Samba-3.0.20 when used with the Idealx smbldap-tools
scripts version 0.9.1. If using a different version of Samba or of the smbldap-tools tarball,
please verify that the versions you are about to use are matching. The smbldap-tools package
uses counter-entries in the LDAP directory to avoid duplication of the UIDs and GIDs that are
issued for POSIX accounts. The LDAP rdn under which this information is stored are called
<constant>uidNumber</constant> and <constant>gidNumber</constant> respectively. These may be
located in any convenient part of the directory information tree (DIT). In the examples that
follow they have been located under <constant>dn=sambaDomainName=MEGANET2,dc=abmas,dc=org</constant>.
They could just as well be located under the rdn <constant>cn=NextFreeUnixId</constant>.
</para></note>
	<para>
	The steps in the process involve changes from the network configuration shown in
	<link linkend="Big500users"/>.  Before implementing the following steps, you must
	have completed the network implementation shown in that chapter. If you are starting
	with newly installed Linux servers, you must complete the steps shown in
	<link linkend="ch5-dnshcp-setup"/> before commencing at <link linkend="ldapsetup"/>.
	</para>
	<sect2 id="ldapsetup">
	<title>OpenLDAP Server Configuration</title>
	<para>
	<indexterm><primary>nss_ldap</primary></indexterm>
	<indexterm><primary>pam_ldap</primary></indexterm>
	<indexterm><primary>openldap</primary></indexterm>
	Confirm that the packages shown in <link linkend="oldapreq"/> are installed on your system.
	</para>
	<table id="oldapreq">
		<title>Required OpenLDAP Linux Packages</title>
		<tgroup cols="3">
			<colspec align="left"/>
			<colspec align="left"/>
			<colspec align="left"/>
			<thead>
				<row>
					<entry align="center">SUSE Linux 8.x</entry>
					<entry align="center">SUSE Linux 9.x</entry>
					<entry align="center">Red Hat Linux</entry>
				</row>
			</thead>
			<tbody>
				<row>
					<entry>nss_ldap</entry>
					<entry>nss_ldap</entry>
					<entry>nss_ldap</entry>
				</row>
				<row>
					<entry>pam_ldap</entry>
					<entry>pam_ldap</entry>
					<entry>pam_ldap</entry>
				</row>
				<row>
					<entry>openldap2</entry>
					<entry>openldap2</entry>
					<entry>openldap</entry>
				</row>
				<row>
					<entry>openldap2-client</entry>
					<entry>openldap2-client</entry>
					<entry></entry>
				</row>
			</tbody>
		</tgroup>
	</table>
	<para>
	Samba-3 and OpenLDAP will have a degree of interdependence that is unavoidable. The method
	for bootstrapping the LDAP and Samba-3 configuration is relatively straightforward. If you
	follow these guidelines, the resulting system should work fine.
	</para>
	<procedure>
	<title>OpenLDAP Server Configuration Steps</title>
		<step><para>
		<indexterm><primary>/etc/openldap/slapd.conf</primary></indexterm>
		Install the file shown in <link linkend="sbehap-slapdconf"/> in the directory
		<filename>/etc/openldap</filename>.
		</para></step>
		<step><para>
		<indexterm><primary>/data/ldap</primary></indexterm>
		<indexterm><primary>group account</primary></indexterm>
		<indexterm><primary>user account</primary></indexterm>
		Remove all files from the directory <filename>/data/ldap</filename>, making certain that
		the directory exists with permissions:
<screen>
&rootprompt; ls -al /data | grep ldap
drwx------   2 ldap    ldap       48 Dec 15 22:11 ldap
</screen>
		This may require you to add a user and a group account for LDAP if they do not exist.
		</para></step>
		<step><para>
		<indexterm><primary>DB_CONFIG</primary></indexterm>
		Install the file shown in <link linkend="sbehap-dbconf"/> in the directory
		<filename>/data/ldap</filename>. In the event that this file is added after <constant>ldap</constant>
		has been started, it is possible to cause the new settings to take effect by shutting down
		the <constant>LDAP</constant> server, executing the <command>db_recover</command> command inside the
		<filename>/data/ldap</filename> directory, and then restarting the <constant>LDAP</constant> server.
		</para></step>
		<step><para>
		<indexterm><primary>syslog</primary></indexterm>
		Performance logging can be enabled and should preferably be sent to a file on
		a file system that is large enough to handle significantly sized logs. To enable
		the logging at a verbose level to permit detailed analysis, uncomment the entry in
		the <filename>/etc/openldap/slapd.conf</filename> shown as <quote>loglevel 256</quote>.
		</para>
		<para>
		Edit the <filename>/etc/syslog.conf</filename> file to add the following at the end
		of the file:
<screen>
local4.*        -/data/ldap/log/openldap.log
</screen>
		Note: The path <filename>/data/ldap/log</filename> should be set at a location
		that is convenient and that can store a large volume of data.
		</para></step>
	</procedure>
<example id="sbehap-dbconf">
<title>LDAP DB_CONFIG File</title>
<screen>
set_cachesize           0 150000000 1
set_lg_regionmax        262144
set_lg_bsize            2097152
#set_lg_dir             /var/log/bdb
set_flags               DB_LOG_AUTOREMOVE
</screen>
</example>
<example id="sbehap-slapdconf">
<title>LDAP Master Configuration File &smbmdash; <filename>/etc/openldap/slapd.conf</filename> Part A</title>
<screen>
include		/etc/openldap/schema/core.schema
include		/etc/openldap/schema/cosine.schema
include		/etc/openldap/schema/inetorgperson.schema
include		/etc/openldap/schema/nis.schema
include		/etc/openldap/schema/samba3.schema
pidfile		/var/run/slapd/slapd.pid
argsfile	/var/run/slapd/slapd.args
access to dn.base=""
		by self write
		by * auth
access to attr=userPassword
		by self write
		by * auth
access to attr=shadowLastChange
		by self write
		by * read
access to *
                by * read
                by anonymous auth
#loglevel	256
schemacheck 	on
idletimeout	30
backend		bdb
database	bdb
checkpoint      1024 5
cachesize       10000
suffix		"dc=abmas,dc=biz"
rootdn		"cn=Manager,dc=abmas,dc=biz"
# rootpw = not24get
rootpw          {SSHA}86kTavd9Dw3FAz6qzWTrCOKX/c0Qe+UV
directory	/data/ldap
</screen>
</example>
<example id="sbehap-slapdconf2">
<title>LDAP Master Configuration File &smbmdash; <filename>/etc/openldap/slapd.conf</filename> Part B</title>
<screen>
# Indices to maintain
index objectClass           eq
index cn                    pres,sub,eq
index sn                    pres,sub,eq
index uid                   pres,sub,eq
index displayName           pres,sub,eq
index uidNumber             eq
index gidNumber             eq
index memberUID             eq
index sambaSID              eq
index sambaPrimaryGroupSID  eq
index sambaDomainName       eq
index default               sub
</screen>
</example>
	</sect2>
	<sect2 id="sbehap-PAM-NSS">
	<title>PAM and NSS Client Configuration</title>
	<para>
	<indexterm><primary>LDAP</primary></indexterm>
	<indexterm><primary>NSS</primary></indexterm>
	<indexterm><primary>PAM</primary></indexterm>
	The steps that follow involve configuration of LDAP, NSS LDAP-based resolution of users and
	groups. Also, so that LDAP-based accounts can log onto the system, the steps ahead configure
	the Pluggable Authentication Modules (PAM) to permit LDAP-based authentication.
	</para>
	<para>
	<indexterm><primary>Pluggable Authentication Modules</primary><see>PAM</see></indexterm>
	<indexterm><primary>pam_unix2.so</primary></indexterm>
	Since you have chosen to put UNIX user and group accounts into the LDAP database, it is likely
	that you may want to use them for UNIX system (Linux) local machine logons. This necessitates
	correct configuration of PAM. The <command>pam_ldap</command> open source package provides the
	PAM modules that most people would use. On SUSE Linux systems, the <command>pam_unix2.so</command>
	module also has the ability to redirect authentication requests through LDAP.
	</para>
	<para>
	<indexterm><primary>YaST</primary></indexterm>
	<indexterm><primary>SUSE Linux</primary></indexterm>
	<indexterm><primary>Red Hat Linux</primary></indexterm>
	<indexterm><primary>authconfig</primary></indexterm>
	You have chosen to configure these services by directly editing the system files, but of course, you
	know that this configuration can be done using system tools provided by the Linux system vendor.
	SUSE Linux has a facility in YaST (the system admin tool) through <menuchoice><guimenu>yast</guimenu>
	<guimenuitem>system</guimenuitem><guimenuitem>ldap-client</guimenuitem></menuchoice> that permits
	configuration of SUSE Linux as an LDAP client. Red Hat Linux provides the <command>authconfig</command>
	tool for this.
	</para>
	<procedure>
	<title>PAM and NSS Client Configuration Steps</title>
		<step><para>
		<indexterm><primary>/lib/libnss_ldap.so.2</primary></indexterm>
		<indexterm><primary>/etc/ldap.conf</primary></indexterm>
		<indexterm><primary>nss_ldap</primary></indexterm>
		Execute the following command to find where the <filename>nss_ldap</filename> module
		expects to find its control file:
<screen>
&rootprompt; strings /lib/libnss_ldap.so.2 | grep conf
</screen>
		The preferred and usual location is <filename>/etc/ldap.conf</filename>.
		</para></step>
		<step><para>
		On the server <constant>MASSIVE</constant>, install the file shown in 
		<link linkend="sbehap-nss01"/> into the path that was obtained from the step above.
		On the servers called <constant>BLDG1</constant> and <constant>BLDG2</constant>, install the file shown in
		<link linkend="sbehap-nss02"/> into the path that was obtained from the step above.
		</para></step>
<example id="sbehap-nss01">
<title>Configuration File for NSS LDAP Support &smbmdash; <filename>/etc/ldap.conf</filename></title>
<screen>
host 127.0.0.1
base dc=abmas,dc=biz
binddn cn=Manager,dc=abmas,dc=biz
bindpw not24get
timelimit 50
bind_timelimit 50
bind_policy hard
idle_timelimit 3600
pam_password exop
nss_base_passwd ou=People,dc=abmas,dc=biz?one
nss_base_shadow ou=People,dc=abmas,dc=biz?one
nss_base_group  ou=Groups,dc=abmas,dc=biz?one
ssl off
</screen>
</example>
<example id="sbehap-nss02">
<title>Configuration File for NSS LDAP Clients Support &smbmdash; <filename>/etc/ldap.conf</filename></title>
<screen>
host 172.16.0.1
base dc=abmas,dc=biz
binddn cn=Manager,dc=abmas,dc=biz
bindpw not24get
timelimit 50
bind_timelimit 50
bind_policy hard
idle_timelimit 3600
pam_password exop
nss_base_passwd ou=People,dc=abmas,dc=biz?one
nss_base_shadow ou=People,dc=abmas,dc=biz?one
nss_base_group  ou=Groups,dc=abmas,dc=biz?one
ssl off
</screen>
</example>
		<step><para>
		<indexterm><primary>/etc/nsswitch.conf</primary></indexterm>
		Edit the NSS control file (<filename>/etc/nsswitch.conf</filename>) so that the lines that
		control user and group resolution will obtain information from the normal system files as
		well as from <command>ldap</command>:
<screen>
passwd: files ldap
shadow: files ldap
group:  files ldap
hosts:  files dns wins
</screen>
		Later, when the LDAP database has been initialized and user and group accounts have been
		added, you can validate resolution of the LDAP resolver process. The inclusion of 
		WINS-based hostname resolution is deliberate so that all MS Windows client hostnames can be 
		resolved to their IP addresses, whether or not they are DHCP clients.
		</para>
		<note><para>
		Some Linux systems (Novell SUSE Linux in particular) add entries to the <filename>nsswitch.conf</filename>
		file that may cause operational problems with the configuration methods adopted in this book. It is
		advisable to comment out the entries <constant>passwd_compat</constant> and <constant>group_compat</constant>
		where they are found in this file.
		</para></note>
		<para>
		Even at the risk of overstating the issue, incorrect and inappropriate configuration of the
		<filename>nsswitch.conf</filename> file is a significant cause of operational problems with LDAP.
		</para></step>
		<step><para>
		<indexterm><primary>pam_unix2.so</primary><secondary>use_ldap</secondary></indexterm>
		For PAM LDAP configuration on this SUSE Linux 9.0 system, the simplest solution is to edit the following
		files in the <filename>/etc/pam.d</filename> directory: <command>login</command>, <command>password</command>,
		<command>samba</command>, <command>sshd</command>.  In each file, locate every entry that has the
		<command>pam_unix2.so</command> entry and add to the line the entry <command>use_ldap</command> as shown
		for the <command>login</command> module in this example:
<screen>
#%PAM-1.0
auth      requisite  pam_unix2.so   nullok use_ldap #set_secrpc
auth      required   pam_securetty.so
auth      required   pam_nologin.so
#auth     required   pam_homecheck.so
auth      required   pam_env.so
auth      required   pam_mail.so
account   required   pam_unix2.so   use_ldap
password  required   pam_pwcheck.s  nullok
password  required   pam_unix2.so   nullok use_first_pass \
                                    use_authtok use_ldap
session   required   pam_unix2.so   none use_ldap # debug or trace
session   required   pam_limits.so
</screen>
		</para>
		<para>
		<indexterm><primary>pam_ldap.so</primary></indexterm>
		On other Linux systems that do not have an LDAP-enabled <command>pam_unix2.so</command> module,
		you must edit these files by adding the <command>pam_ldap.so</command> modules as shown here:
<screen>
#%PAM-1.0
auth     required    pam_securetty.so
auth     required    pam_nologin.so
auth     sufficient  pam_ldap.so
auth     required    pam_unix2.so   nullok try_first_pass #set_secrpc
account  sufficient  pam_ldap.so
account  required    pam_unix2.so
password required    pam_pwcheck.so nullok
password required    pam_ldap.so    use_first_pass use_authtok
password required    pam_unix2.so   nullok use_first_pass use_authtok
session  required    pam_unix2.so   none # debug or trace
session  required    pam_limits.so
session  required    pam_env.so
session  optional    pam_mail.so
</screen>
		This example does have the LDAP-enabled <command>pam_unix2.so</command>, but simply
		demonstrates the use of the <command>pam_ldap.so</command> module. You can use either
		implementation, but if the <command>pam_unix2.so</command> on your system supports
		LDAP, you probably want to use it rather than add an additional module.
		</para></step>
	</procedure>
	</sect2>
	<sect2 id="sbehap-massive">
	<title>Samba-3 PDC Configuration</title>
	<para>
	<indexterm><primary>Samba RPM Packages</primary></indexterm>
	Verify that the Samba-3.0.20 (or later) packages are installed on each SUSE Linux server 
	before following the steps below. If Samba-3.0.20 (or later) is not installed, you have the
	choice to either build your own or obtain the packages from a dependable source.
	Packages for SUSE Linux 8.x, 9.x, and SUSE Linux Enterprise Server 9, as well as for 
	Red Hat Fedora Core and Red Hat Enterprise Linux Server 3 and 4, are included on the CD-ROM that
	is included with this book.
	</para>
	<procedure>
	<title>Configuration of PDC Called <constant>MASSIVE</constant></title>
		<step><para>
		Install the files in <link linkend="sbehap-massive-smbconfa"/>, 
		<link linkend="sbehap-massive-smbconfb"/>, <link linkend="sbehap-shareconfa"/>, 
		and <link linkend="sbehap-shareconfb"/> into the <filename>/etc/samba/</filename> 
		directory. The three files should be added together to form the &smb.conf; 
		master file. It is a good practice to call this file something like
		<filename>smb.conf.master</filename> and then to perform all file edits
		on the master file. The operational &smb.conf; is then generated as shown in
		the next step.
		</para></step>
		<step><para>
		<indexterm><primary>testparm</primary></indexterm>
		Create and verify the contents of the &smb.conf; file that is generated by:
<screen>
&rootprompt; testparm -s smb.conf.master > smb.conf
</screen>
		Immediately follow this with the following:
<screen>
&rootprompt; testparm
</screen>
		The output that is created should be free from errors, as shown here:
<screen>
Load smb config files from /etc/samba/smb.conf
Processing section "[accounts]"
Processing section "[service]"
Processing section "[pidata]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[apps]"
Processing section "[netlogon]"
Processing section "[profiles]"
Processing section "[profdata]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions
</screen>
		</para></step>
		
		<step><para>
		Delete all runtime files from prior Samba operation by executing (for SUSE
		Linux):
<screen>
&rootprompt; rm /etc/samba/*tdb
&rootprompt; rm /var/lib/samba/*tdb
&rootprompt; rm /var/lib/samba/*dat
&rootprompt; rm /var/log/samba/*
</screen>
		</para></step>
		<step><para>
		<indexterm><primary>secrets.tdb</primary></indexterm>
		<indexterm><primary>smbpasswd</primary></indexterm>
		Samba-3 communicates with the LDAP server. The password that it uses to
		authenticate to the LDAP server must be stored in the <filename>secrets.tdb</filename>
		file. Execute the following to create the new <filename>secrets.tdb</filename> files
		and store the password for the LDAP Manager:
<screen>
&rootprompt; smbpasswd -w not24get
</screen>
		The expected output from this command is:
<screen>
Setting stored password for "cn=Manager,dc=abmas,dc=biz" in secrets.tdb
</screen>
		</para></step>
		<step><para>
		<indexterm><primary>smbd</primary></indexterm>
		<indexterm><primary>net</primary><secondary>getlocalsid</secondary></indexterm>
		Samba-3 generates a Windows Security Identifier (SID) only when <command>smbd</command>
		has been started. For this reason, you start Samba. After a few seconds delay,
		execute:
<screen>
&rootprompt; smbclient -L localhost -U%
&rootprompt; net getlocalsid
</screen>
		A report such as the following means that the domain SID has not yet
		been written to the <filename>secrets.tdb</filename> or to the LDAP backend:
<screen>
[2005/03/03 23:19:34, 0] lib/smbldap.c:smbldap_connect_system(852)
  failed to bind to server ldap://massive.abmas.biz
with dn="cn=Manager,dc=abmas,dc=biz" Error: Can't contact LDAP server
        (unknown)
[2005/03/03 23:19:48, 0] lib/smbldap.c:smbldap_search_suffix(1169)
  smbldap_search_suffix: Problem during the LDAP search:
        (unknown) (Timed out)
</screen>
		The attempt to read the SID will cause and attempted bind to the LDAP server. Because the LDAP server
		is not running, this operation will fail by way of a timeout, as shown previously. This is
		normal output; do not worry about this error message.  When the domain has been created and
		written to the <filename>secrets.tdb</filename> file, the output should look like this:
<screen>
SID for domain MASSIVE is: S-1-5-21-3504140859-1010554828-2431957765
</screen>
		If, after a short delay (a few seconds), the domain SID has still not been written to 
		the <filename>secrets.tdb</filename> file, it is necessary to investigate what 
		may be misconfigured. In this case, carefully check the &smb.conf; file for typographical 
		errors (the most common problem).  The use of the <command>testparm</command> is highly 
		recommended to validate the contents of this file.
		</para></step>
		<step><para>
		When a positive domain SID has been reported, stop Samba.
		</para></step>
		<step><para>
		<indexterm><primary>NFS server</primary></indexterm>
		<indexterm><primary>/etc/exports</primary></indexterm>
		<indexterm><primary>BDC</primary></indexterm>
		<indexterm><primary>rsync</primary></indexterm>
		Configure the NFS server for your Linux system. So you can complete the steps that
		follow, enter into the <filename>/etc/exports</filename> the following entry:
<screen>
/home   *(rw,root_squash,sync)
</screen>
		This permits the user home directories to be used on the BDC servers for testing
		purposes. You, of course, decide what is the best way for your site to distribute
		data drives, and you create suitable backup and restore procedures for Abmas
		I'd strongly recommend that for normal operation the BDC is completely independent 
		of the PDC. rsync is a useful tool here, as it resembles the NT replication service quite 
		closely. If you do use NFS, do not forget to start the NFS server as follows:
<screen>
&rootprompt; rcnfsserver start
</screen>
		</para></step>
	</procedure>
	<para>
	Your Samba-3 PDC is now ready to communicate with the LDAP password backend. Let's get on with
	configuration of the LDAP server.
	</para>
<example id="sbehap-massive-smbconfa">
<title>LDAP Based &smb.conf; File, Server: MASSIVE &smbmdash; global Section: Part A</title>
<smbconfblock>
<smbconfcomment>Global parameters</smbconfcomment>
<smbconfsection name="[global]"/>
	<smbconfoption name="unix charset">LOCALE</smbconfoption>
	<smbconfoption name="workgroup">MEGANET2</smbconfoption>
	<smbconfoption name="netbios name">MASSIVE</smbconfoption>
	<smbconfoption name="interfaces">eth1, lo</smbconfoption>
	<smbconfoption name="bind interfaces only">Yes</smbconfoption>
	<smbconfoption name="passdb backend">ldapsam:ldap://massive.abmas.biz</smbconfoption>
	<smbconfoption name="enable privileges">Yes</smbconfoption>
	<smbconfoption name="username map">/etc/samba/smbusers</smbconfoption>
	<smbconfoption name="log level">1</smbconfoption>
	<smbconfoption name="syslog">0</smbconfoption>
	<smbconfoption name="log file">/var/log/samba/%m</smbconfoption>
	<smbconfoption name="max log size">50</smbconfoption>
	<smbconfoption name="smb ports">139</smbconfoption>
	<smbconfoption name="name resolve order">wins bcast hosts</smbconfoption>
	<smbconfoption name="time server">Yes</smbconfoption>
	<smbconfoption name="printcap name">CUPS</smbconfoption>
	<smbconfoption name="show add printer wizard">No</smbconfoption>
	<smbconfoption name="add user script">/opt/IDEALX/sbin/smbldap-useradd -m "%u"</smbconfoption>
	<smbconfoption name="delete user script">/opt/IDEALX/sbin/smbldap-userdel "%u"</smbconfoption>
	<smbconfoption name="add group script">/opt/IDEALX/sbin/smbldap-groupadd -p "%g"</smbconfoption>
	<smbconfoption name="delete group script">/opt/IDEALX/sbin/smbldap-groupdel "%g"</smbconfoption>
	<smbconfoption name="add user to group script">/opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g"</smbconfoption>
	<smbconfoption name="delete user from group script">/opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g"</smbconfoption>
	<smbconfoption name="set primary group script">/opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u"</smbconfoption>
	<smbconfoption name="add machine script">/opt/IDEALX/sbin/smbldap-useradd -w "%u"</smbconfoption>
</smbconfblock>
</example>
<example id="sbehap-massive-smbconfb">
<title>LDAP Based &smb.conf; File, Server: MASSIVE &smbmdash; global Section: Part B</title>
<smbconfblock>
	<smbconfoption name="logon script">scripts\logon.bat</smbconfoption>
	<smbconfoption name="logon path">\\%L\profiles\%U</smbconfoption>
	<smbconfoption name="logon drive">X:</smbconfoption>
	<smbconfoption name="domain logons">Yes</smbconfoption>
	<smbconfoption name="preferred master">Yes</smbconfoption>
	<smbconfoption name="wins support">Yes</smbconfoption>
	<smbconfoption name="ldap suffix">dc=abmas,dc=biz</smbconfoption>
	<smbconfoption name="ldap machine suffix">ou=People</smbconfoption>
	<smbconfoption name="ldap user suffix">ou=People</smbconfoption>
	<smbconfoption name="ldap group suffix">ou=Groups</smbconfoption>
	<smbconfoption name="ldap idmap suffix">ou=Idmap</smbconfoption>
	<smbconfoption name="ldap admin dn">cn=Manager,dc=abmas,dc=biz</smbconfoption>
	<smbconfoption name="idmap backend">ldap:ldap://massive.abmas.biz</smbconfoption>
	<smbconfoption name="idmap uid">10000-20000</smbconfoption>
	<smbconfoption name="idmap gid">10000-20000</smbconfoption>
	<smbconfoption name="map acl inherit">Yes</smbconfoption>
	<smbconfoption name="printing">cups</smbconfoption>
	<smbconfoption name="printer admin">root, chrisr</smbconfoption>
</smbconfblock>
</example>
	</sect2>
	<sect2 id="sbeidealx">
	<title>Install and Configure Idealx smbldap-tools Scripts</title>
	<para>
	<indexterm><primary>Idealx</primary><secondary>smbldap-tools</secondary></indexterm>
	The Idealx scripts, or equivalent, are necessary to permit Samba-3 to manage accounts
	on the LDAP server. You have chosen the Idealx scripts because they are the best-known
	LDAP configuration scripts. The use of these scripts will help avoid the necessity
	to create custom scripts. It is easy to download them from the Idealx
	<ulink url="http://samba.idealx.org/index.en.html">Web site</ulink>. The tarball may
	be directly <ulink url="http://samba.idealx.org/dist/smbldap-tools-0.9.1.tgz">downloaded</ulink>
	from this site also. Alternatively, you may obtain the 
	<ulink url="http://samba.idealx.org/dist/smbldap-tools-0.9.1-1.src.rpm">smbldap-tools-0.9.1-1.src.rpm</ulink>
	file that may be used to build an installable RPM package for your Linux system.
	</para>
<note><para>
The smbldap-tools scripts can be installed in any convenient directory of your choice, in which case you must
change the path to them in your &smb.conf; file on the PDC (<constant>MASSIVE</constant>).
</para></note>
	<para>
	The smbldap-tools are located in <filename>/opt/IDEALX/sbin</filename>.
	The scripts are not needed on BDC machines because all LDAP updates are handled by
	the PDC alone.
	</para>
	<sect3>
	<title>Installation of smbldap-tools from the Tarball</title>
	<para>
	To perform a manual installation of the smbldap-tools scripts, the following procedure may be used:
	</para>
	<procedure id="idealxscript">
	<title>Unpacking and Installation Steps for the <constant>smbldap-tools</constant> Tarball</title>
		<step><para>
		Create the <filename>/opt/IDEALX/sbin</filename> directory, and set its permissions
		and ownership as shown here:
<screen>
&rootprompt; mkdir -p /opt/IDEALX/sbin
&rootprompt; chown root:root /opt/IDEALX/sbin
&rootprompt; chmod 755 /opt/IDEALX/sbin
&rootprompt; mkdir -p /etc/smbldap-tools
&rootprompt; chown root:root /etc/smbldap-tools
&rootprompt; chmod 755 /etc/smbldap-tools
</screen>
		</para></step>
		<step><para>
		If you wish to use the downloaded tarball, unpack the smbldap-tools in a suitable temporary location.
		Change into either the directory extracted from the tarball or the smbldap-tools
		directory in your <filename>/usr/share/doc/packages</filename> directory tree.
		</para></step>
		<step><para>
		Copy all the <filename>smbldap-*</filename> and the <filename>configure.pl</filename> files into the 
		<filename>/opt/IDEALX/sbin</filename> directory, as shown here:
<screen>
&rootprompt; cd smbldap-tools-0.9.1/
&rootprompt; cp smbldap-* configure.pl *pm /opt/IDEALX/sbin/
&rootprompt; cp smbldap*conf /etc/smbldap-tools/
&rootprompt; chmod 750 /opt/IDEALX/sbin/smbldap-*
&rootprompt; chmod 750 /opt/IDEALX/sbin/configure.pl
&rootprompt; chmod 640 /etc/smbldap-tools/smbldap.conf
&rootprompt; chmod 600 /etc/smbldap-tools/smbldap_bind.conf
</screen>
		</para></step>
		<step><para>
		The smbldap-tools scripts master control file must now be configured.
		Change to the <filename>/opt/IDEALX/sbin</filename> directory, then edit the
		<filename>smbldap_tools.pm</filename> to affect the changes
		shown here:
<screen>
...
# ugly funcs using global variables and spawning openldap clients
my $smbldap_conf="/etc/smbldap-tools/smbldap.conf";
my $smbldap_bind_conf="/etc/smbldap-tools/smbldap_bind.conf";
...
</screen>
		</para></step>
		<step><para>
		To complete the configuration of the smbldap-tools, set the permissions and ownership
		by executing the following commands:
<screen>
&rootprompt; chown root:root /opt/IDEALX/sbin/* 
&rootprompt; chmod 755 /opt/IDEALX/sbin/smbldap-*
&rootprompt; chmod 640 /opt/IDEALX/sbin/smb*pm 
</screen>
		The smbldap-tools scripts are now ready for the configuration step outlined in
		<link linkend="smbldap-init"/>.
		</para></step>
	</procedure>
	</sect3>
	<sect3>
	<title>Installing smbldap-tools from the RPM Package</title>
	<para>
	In the event that you have elected to use the RPM package provided by Idealx, download the
	source RPM <filename>smbldap-tools-0.9.1-1.src.rpm</filename>, then follow this procedure:
	</para>
	<procedure>
	<title>Installation Steps for <constant>smbldap-tools</constant> RPM's</title>
		<step><para>
		Install the source RPM that has been downloaded as follows:
<screen>
&rootprompt; rpm -i smbldap-tools-0.9.1-1.src.rpm
</screen>
		</para></step>
		<step><para>
		Change into the directory in which the SPEC files are located. On SUSE Linux:
<screen>
&rootprompt; cd /usr/src/packages/SPECS
</screen>
		On Red Hat Linux systems:
<screen>
&rootprompt; cd /usr/src/redhat/SPECS
</screen>
		</para></step>
		<step><para>
		Edit the <filename>smbldap-tools.spec</filename> file to change the value of the
		<constant>_sysconfig</constant> macro as shown here:
<screen>
%define _prefix /opt/IDEALX
%define _sysconfdir /etc
</screen>
		Note: Any suitable directory can be specified.
		</para></step>
		<step><para>
		Build the package by executing:
<screen>
&rootprompt; rpmbuild -ba -v smbldap-tools.spec
</screen>
		A build process that has completed without error will place the installable binary
		files in the directory <filename>../RPMS/noarch</filename>.
		</para></step>
		<step><para>
		Install the binary package by executing:
<screen>
&rootprompt; rpm -Uvh ../RPMS/noarch/smbldap-tools-0.9.1-1.noarch.rpm
</screen>
		</para></step>
	</procedure>
	<para>
	The Idealx scripts should now be ready for configuration using the steps outlined in
	<link linkend="smbldap-init">Configuration of smbldap-tools</link>.
	</para>
	</sect3>
	<sect3 id="smbldap-init">
	<title>Configuration of smbldap-tools</title>
	<para>
	Prior to use, the smbldap-tools must be configured to match the settings in the &smb.conf; file
	and to match the settings in the <filename>/etc/openldap/slapd.conf</filename> file. The assumption
	is made that the &smb.conf; file has correct contents. The following procedure ensures that
	this is completed correctly:
	</para>
	<para>
	The smbldap-tools require that the NetBIOS name (machine name) of the Samba server be included
	in the &smb.conf; file.
	</para>
	<procedure>
	<title>Configuration Steps for <constant>smbldap-tools</constant> to Enable Use</title>
		<step><para>
		Change into the directory that contains the <filename>configure.pl</filename> script.
<screen>
&rootprompt; cd /opt/IDEALX/sbin
</screen>
		</para></step>
		<step><para>
		Execute the <filename>configure.pl</filename> script as follows:
<screen>
&rootprompt; ./configure.pl
</screen>
		The interactive use of this script for the PDC is demonstrated here:
<screen>
&rootprompt; /opt/IDEALX/sbin/configure.pl 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
       smbldap-tools script configuration
       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Before starting, check
 . if your samba controller is up and running.
 . if the domain SID is defined (you can get it with the
                                                    'net getlocalsid')
 . you can leave the configuration using the Crtl-c key combination
 . empty value can be set with the "." character
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Looking for configuration files...
Samba Config File Location [/etc/samba/smb.conf] > 
smbldap-tools configuration file Location (global parameters)
                        [/etc/opt/IDEALX/smbldap-tools/smbldap.conf] > 
smbldap Config file Location (bind parameters) 
                   [/etc/opt/IDEALX/smbldap-tools/smbldap_bind.conf] > 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Let's start configuring the smbldap-tools scripts ...
. workgroup name: name of the domain Samba act as a PDC
  workgroup name [MEGANET2] > 
. netbios name: netbios name of the samba controler
  netbios name [MASSIVE] > 
. logon drive: local path to which the home directory 
                    will be connected (for NT Workstations). Ex: 'H:'
  logon drive [H:] > 
. logon home: home directory location (for Win95/98 or NT Workstation)
  (use %U as username) Ex:'\\MASSIVE\%U'
  logon home (press the "." character if you don't want homeDirectory)
                                                     [\\MASSIVE\%U] > 
. logon path: directory where roaming profiles are stored. 
                                            Ex:'\\MASSIVE\profiles\%U'
  logon path (press the "." character
               if you don't want roaming profile) [\\%L\profiles\%U] >
. home directory prefix (use %U as username)
                                           [/home/%U] > /data/users/%U
. default users' homeDirectory mode [700] > 
. default user netlogon script (use %U as username)
                                                 [scripts\logon.bat] >
  default password validation time (time in days) [45] > 900
. ldap suffix [dc=abmas,dc=biz] > 
. ldap group suffix [ou=Groups] > 
. ldap user suffix [ou=People,ou=Users] > 
. ldap machine suffix [ou=Computers,ou=Users] > 
. Idmap suffix [ou=Idmap] > 
. sambaUnixIdPooldn: object where you want to store the next uidNumber
  and gidNumber available for new users and groups
  sambaUnixIdPooldn object (relative to ${suffix}) 
                                          [sambaDomainName=MEGANET2] > 
. ldap master server: IP adress or DNS name of the master 
                                                (writable) ldap server
  ldap master server [massive.abmas.biz] > 
. ldap master port [389] > 
. ldap master bind dn [cn=Manager,dc=abmas,dc=biz] > 
. ldap master bind password [] > 
. ldap slave server: IP adress or DNS name of the slave ldap server: 
                                            can also be the master one
  ldap slave server [massive.abmas.biz] > 
. ldap slave port [389] > 
. ldap slave bind dn [cn=Manager,dc=abmas,dc=biz] > 
. ldap slave bind password [] > 
. ldap tls support (1/0) [0] > 
. SID for domain MEGANET2: SID of the domain 
                      (can be obtained with 'net getlocalsid MASSIVE')
  SID for domain MEGANET2
                        [S-1-5-21-3504140859-1010554828-2431957765]] >
. unix password encryption: encryption used for unix passwords
  unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > MD5
. default user gidNumber [513] > 
. default computer gidNumber [515] > 
. default login shell [/bin/bash] > 
. default skeleton directory [/etc/skel] > 
. default domain name to append to mail adress [] > abmas.biz
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
backup old configuration files:
  /etc/opt/IDEALX/smbldap-tools/smbldap.conf->
                        /etc/opt/IDEALX/smbldap-tools/smbldap.conf.old
  /etc/opt/IDEALX/smbldap-tools/smbldap_bind.conf->
                   /etc/opt/IDEALX/smbldap-tools/smbldap_bind.conf.old
writing new configuration file:
  /etc/opt/IDEALX/smbldap-tools/smbldap.conf done.
  /etc/opt/IDEALX/smbldap-tools/smbldap_bind.conf done.
</screen>
		Since a slave LDAP server has not been configured, it is necessary to specify the IP
		address of the master LDAP server for both the master and the slave configuration
		prompts.
		</para></step>
		<step><para>
		Change to the directory that contains the <filename>smbldap.conf</filename> file,
		then verify its contents.
		</para></step>
	</procedure>
	<para>
	The smbldap-tools are now ready for use.
	</para>
	</sect3>
	</sect2>
	<sect2>
	<title>LDAP Initialization and Creation of User and Group Accounts</title>
	<para>
	The LDAP database must be populated with well-known Windows domain user accounts and domain group 
	accounts before Samba can be used. The following procedures step you through the process.
	</para>
	<para>
	At this time, Samba-3 requires that on a PDC all UNIX (POSIX) group accounts that are
	mapped (linked) to Windows domain group accounts must be in the LDAP database. It does not
	hurt to have UNIX user and group accounts in both the system files as well as in the LDAP
	database. From a UNIX system perspective, the NSS resolver checks system files before
	referring to LDAP. If the UNIX system can resolve (find) an account in the system file, it
	does not need to ask LDAP.
	</para>
	<para>
	Addition of an account to the LDAP backend can be done in two ways:
	</para>
	<itemizedlist>
		<listitem><para>
		<indexterm><primary>NIS</primary></indexterm>
		<indexterm><primary>/etc/passwd</primary></indexterm>
		<indexterm><primary>Posix accounts</primary></indexterm>
		<indexterm><primary>pdbedit</primary></indexterm>
		<indexterm><primary>SambaSamAccount</primary></indexterm>
		<indexterm><primary>PosixAccount</primary></indexterm>
		If you always have a user account in the <filename>/etc/passwd</filename> on every 
		server or in a NIS(+) backend, it is not necessary to add POSIX accounts for them in 
		LDAP. In this case, you can add Windows domain user accounts using the 
		<command>pdbedit</command> utility. Use of this tool from the command line adds the 
		SambaSamAccount entry for the user, but does not add the PosixAccount entry for the user.
		</para>
		<para>
		This is the least desirable method because when LDAP is used as the passwd backend Samba
		expects the POSIX account to be in LDAP also. It is possible to use the PADL account
		migration tool to migrate all system accounts from either the <filename>/etc/passwd</filename>
		files, or from NIS, to LDAP.
		</para></listitem>
		<listitem><para>
		If you decide that it is probably a good idea to add both the PosixAccount attributes
		as well as the SambaSamAccount attributes for each user, then a suitable script is needed.
		In the example system you are installing in this exercise, you are making use of the
		Idealx smbldap-tools scripts. A copy of these tools, preconfigured for this system,
		is included on the enclosed CD-ROM under <filename>Chap06/Tools.</filename>
		</para></listitem>
	</itemizedlist>
	<para>
	<indexterm><primary>Idealx</primary><secondary>smbldap-tools</secondary></indexterm>
	If you wish to have more control over how the LDAP database is initialized or 
	if you don't want to use the Idealx smbldap-tools, you should refer to 
	<link linkend="appendix"/>, <link linkend="altldapcfg"/>.
	</para>
	<para>
	<indexterm><primary>smbldap-populate</primary></indexterm>
	The following steps initialize the LDAP database, and then you can add user and group
	accounts that Samba can use. You use the <command>smbldap-populate</command> to
	seed the LDAP database. You then manually add the accounts shown in <link linkend="sbehap-bigacct"/>. 
	The list of users does not cover all 500 network users; it provides examples only.
	</para>
	<note><para>
	<indexterm><primary>LDAP</primary><secondary>database</secondary></indexterm>
	<indexterm><primary>directory</primary><secondary>People container</secondary></indexterm>
	<indexterm><primary>directory</primary><secondary>Computers container</secondary></indexterm>
	In the following examples, as the LDAP database is initialized, we do create a container
	for Computer (machine) accounts. In the Samba-3 &smb.conf; files, specific use is made
	of the People container, not the Computers container, for domain member accounts. This is not a
	mistake; it is a deliberate action that is necessitated by the fact that the resolution of 
	a machine (computer) account to a UID is done via NSS. The only way this can be handled is
	using the NSS (<filename>/etc/nsswitch.conf</filename>) entry for <constant>passwd</constant>,
	which is resolved using the <filename>nss_ldap</filename> library. The configuration file for
	the <filename>nss_ldap</filename> library is the file <filename>/etc/ldap.conf</filename> that
	provides only one possible LDAP search command that is specified by the entry called
	<constant>nss_base_passwd</constant>. This means that the search path must take into account
	the directory structure so that the LDAP search will commence at a level that is above
	both the Computers container and the Users (or People) container. If this is done, it is
	necessary to use a search that will descend the directory tree so that the machine account
	can be found. Alternatively, by placing all machine accounts in the People container, we
	are able to sidestep this limitation. This is the simpler solution that has been adopted
	in this chapter.
	</para></note>
	<table id="sbehap-bigacct">
		<title>Abmas Network Users and Groups</title>
		<tgroup cols="4">
			<colspec align="left"/>
			<colspec align="left"/>
			<colspec align="left"/>
			<colspec align="left"/>
			<thead>
				<row>
					<entry align="center">Account Name</entry>
					<entry align="center">Type</entry>
					<entry align="center">ID</entry>
					<entry align="center">Password</entry>
				</row>
			</thead>
			<tbody>
				<row>
					<entry>Robert Jordan</entry>
					<entry>User</entry>
					<entry>bobj</entry>
					<entry>n3v3r2l8</entry>
				</row>
				<row>
					<entry>Stanley Soroka</entry>
					<entry>User</entry>
					<entry>stans</entry>
					<entry>impl13dst4r</entry>
				</row>
				<row>
					<entry>Christine Roberson</entry>
					<entry>User</entry>
					<entry>chrisr</entry>
					<entry>S9n0nw4ll</entry>
				</row>
				<row>
					<entry>Mary Vortexis</entry>
					<entry>User</entry>
					<entry>maryv</entry>
					<entry>kw13t0n3</entry>
				</row>
				<row>
					<entry>Accounts</entry>
					<entry>Group</entry>
					<entry>Accounts</entry>
					<entry></entry>
				</row>
				<row>
					<entry>Finances</entry>
					<entry>Group</entry>
					<entry>Finances</entry>
					<entry></entry>
				</row>
				<row>
					<entry>Insurance</entry>
					<entry>Group</entry>
					<entry>PIOps</entry>
					<entry></entry>
				</row>
			</tbody>
		</tgroup>
	</table>
	<procedure id="creatacc">
	<title>LDAP Directory Initialization Steps</title>
		<step><para>
		Start the LDAP server by executing:
<screen>
&rootprompt; rcldap start
Starting ldap-server                           done
</screen>
		</para></step>
		<step><para>
		Change to the <filename>/opt/IDEALX/sbin</filename> directory.
		</para></step>
		<step><para>
		Execute the script that will populate the LDAP database as shown here:
<screen>
&rootprompt; ./smbldap-populate -a root -k 0 -m 0
</screen>
		The expected output from this is:
<screen>
Using workgroup name from smb.conf: sambaDomainName=MEGANET2
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> Warning: you must update smbldap.conf configuration file to :
=> sambaUnixIdPooldn parameter must be set
	to "sambaDomainName=MEGANET2,dc=abmas,dc=biz"
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Using builtin directory structure
adding new entry: dc=abmas,dc=biz
adding new entry: ou=People,dc=abmas,dc=biz
adding new entry: ou=Groups,dc=abmas,dc=biz
entry ou=People,dc=abmas,dc=biz already exist.
adding new entry: ou=Idmap,dc=abmas,dc=biz
adding new entry: sambaDomainName=MEGANET2,dc=abmas,dc=biz
adding new entry: uid=root,ou=People,dc=abmas,dc=biz
adding new entry: uid=nobody,ou=People,dc=abmas,dc=biz
adding new entry: cn=Domain Admins,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Domain Users,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Domain Guests,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Domain Computers,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Administrators,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Print Operators,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Backup Operators,ou=Groups,dc=abmas,dc=biz
adding new entry: cn=Replicators,ou=Groups,dc=abmas,dc=biz
</screen>
		</para></step>
		<step><para>
		Edit the <filename>/etc/smbldap-tools/smbldap.conf</filename> file so that the following
		information is changed from:
<screen>
# Where to store next uidNumber and gidNumber available
sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
</screen>
		to read, after modification:
<screen>
# Where to store next uidNumber and gidNumber available
#sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
sambaUnixIdPooldn="sambaDomainName=MEGANET2,dc=abmas,dc=biz"
</screen>
		</para></step>
		<step><para>
		It is necessary to restart the LDAP server as shown here:
<screen>
&rootprompt; rcldap restart
Shutting down ldap-server                            done
Starting ldap-server                                 done
</screen>
		</para></step>
		<step><para>
		<indexterm><primary>slapcat</primary></indexterm>
		So that we can use a global IDMAP repository, the LDAP directory must have a container object for IDMAP data. 
		There are several ways you can check that your LDAP database is able to receive IDMAP information. One of 
		the simplest is to execute:
<screen>
&rootprompt; slapcat | grep -i idmap
dn: ou=Idmap,dc=abmas,dc=biz
ou: idmap
</screen>
		<indexterm> <primary>ldapadd</primary></indexterm>
	        If the execution of this command does not return IDMAP entries, you need to create an LDIF
		template file (see <link linkend="sbehap-ldifadd"/>). You can add the required entries using 
		the following command:
<screen>
&rootprompt; ldapadd -x -D "cn=Manager,dc=abmas,dc=biz" \
		-w not24get < /etc/openldap/idmap.LDIF
</screen>
		Samba automatically populates this LDAP directory container when it needs to.
		</para></step>
		<step><para>
		<indexterm><primary>slapcat</primary></indexterm>
		It looks like all has gone well, as expected. Let's confirm that this is the case
		by running a few tests. First we check the contents of the database directly
		by running <command>slapcat</command> as follows (the output has been cut down):
<screen>
&rootprompt; slapcat
dn: dc=abmas,dc=biz
objectClass: dcObject
objectClass: organization
dc: abmas
o: abmas
structuralObjectClass: organization
entryUUID: 5ab02bf6-c536-1027-9d29-b1f32350fb43
creatorsName: cn=Manager,dc=abmas,dc=biz
createTimestamp: 20031217234200Z
entryCSN: 2003121723:42:00Z#0x0001#0#0000
modifiersName: cn=Manager,dc=abmas,dc=biz
modifyTimestamp: 20031217234200Z
...
dn: cn=Domain Computers,ou=Groups,dc=abmas,dc=biz
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 553
cn: Domain Computers
description: Netbios Domain Computers accounts
sambaSID: S-1-5-21-3504140859-1010554828-2431957765-553
sambaGroupType: 2
displayName: Domain Computers
structuralObjectClass: posixGroup
entryUUID: 5e0a41d8-c536-1027-9d3b-b1f32350fb43
creatorsName: cn=Manager,dc=abmas,dc=biz
createTimestamp: 20031217234206Z
entryCSN: 2003121723:42:06Z#0x0002#0#0000
modifiersName: cn=Manager,dc=abmas,dc=biz
modifyTimestamp: 20031217234206Z
</screen>
		This looks good so far.
		</para></step>
		<step><para>
		<indexterm><primary>ldapsearch</primary></indexterm>
		The next step is to prove that the LDAP server is running and responds to a
		search request. Execute the following as shown (output has been cut to save space):
<screen>
&rootprompt; ldapsearch -x -b "dc=abmas,dc=biz" "(ObjectClass=*)"
# extended LDIF
#
# LDAPv3
# base <dc=abmas,dc=biz> with scope sub
# filter: (ObjectClass=*)
# requesting: ALL
#
# abmas.biz
dn: dc=abmas,dc=biz
objectClass: dcObject
objectClass: organization
dc: abmas
o: abmas
# People, abmas.biz
dn: ou=People,dc=abmas,dc=biz
objectClass: organizationalUnit
ou: People
...
# Domain Computers, Groups, abmas.biz
dn: cn=Domain Computers,ou=Groups,dc=abmas,dc=biz
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 553
cn: Domain Computers
description: Netbios Domain Computers accounts
sambaSID: S-1-5-21-3504140859-1010554828-2431957765-553
sambaGroupType: 2
displayName: Domain Computers
# search result
search: 2
result: 0 Success
# numResponses: 20
# numEntries: 19
</screen>
		Good. It is all working just fine.
		</para></step>
		<step><para>
		<indexterm><primary>getent</primary></indexterm>
		You must now make certain that the NSS resolver can interrogate LDAP also.
		Execute the following commands:
<screen>
&rootprompt; getent passwd | grep root
root:x:998:512:Netbios Domain Administrator:/home:/bin/false
&rootprompt; getent group | grep Domain
Domain Admins:x:512:root
Domain Users:x:513:
Domain Guests:x:514:
Domain Computers:x:553:
</screen>
		<indexterm><primary>nss_ldap</primary></indexterm>
		This demonstrates that the <command>nss_ldap</command> library is functioning
		as it should. If these two steps fail to produce this information, refer to
		<link linkend="sbeavoid"/> for diagnostic procedures that can be followed to
		isolate the cause of the problem. Proceed to the next step only when the previous steps
		have been successfully completed.
		</para></step>
		<step><para>
		<indexterm><primary>smbldap-useradd</primary></indexterm>
		<indexterm><primary>smbldap-passwd</primary></indexterm>
		<indexterm><primary>smbpasswd</primary></indexterm>
		Our database is now ready for the addition of network users. For each user for
		whom an account must be created, execute the following:
<screen>
&rootprompt; ./smbldap-useradd -m -a <constant>username</constant>
&rootprompt; ./smbldap-passwd <constant>username</constant>
Changing password for <constant>username</constant>
New password : XXXXXXXX
Retype new password : XXXXXXXX
&rootprompt; smbpasswd <constant>username</constant>
New SMB password: XXXXXXXX
Retype new SMB password: XXXXXXXX
</screen>
		where <constant>username</constant> is the login ID for each user.
		</para></step>
		<step><para>
		<indexterm><primary>getent</primary></indexterm>
		Now verify that the UNIX (POSIX) accounts can be resolved via NSS by executing the
		following:
<screen>
&rootprompt; getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
...
root:x:0:512:Netbios Domain Administrator:/home:/bin/false
nobody:x:999:514:nobody:/dev/null:/bin/false
bobj:x:1000:513:System User:/home/bobj:/bin/bash
stans:x:1001:513:System User:/home/stans:/bin/bash
chrisr:x:1002:513:System User:/home/chrisr:/bin/bash
maryv:x:1003:513:System User:/home/maryv:/bin/bash
</screen>
		This demonstrates that user account resolution via LDAP is working.
		</para></step>
		<step><para>
		This step will determine whether or not identity resolution is working correctly.
		Do not procede is this step fails, rather find the cause of the failure. The
		<command>id</command> command may be used to validate your configuration so far,
		as shown here:
<screen>
&rootprompt; id chrisr
uid=1002(chrisr) gid=513(Domain Users) groups=513(Domain Users)
</screen>
		This confirms that the UNIX (POSIX) user account information can be resolved from LDAP
		by system tools that make a getentpw() system call.
		</para></step>
		<step><para>
		<indexterm><primary>smbldap-usermod</primary></indexterm>
		The root account must have UID=0; if not, this means that operations conducted from
		a Windows client using tools such as the Domain User Manager fails under UNIX because
		the management of user and group accounts requires that the UID=0. Additionally, it is
		a good idea to make certain that no matter how root account credentials are resolved,
		the home directory and shell are valid. You decide to effect this immediately
		as demonstrated here:
<screen>
&rootprompt; cd /opt/IDEALX/sbin
&rootprompt; ./smbldap-usermod -u 0 -d /root -s /bin/bash root
</screen>
		</para></step>
		<step><para>
		Verify that the changes just made to the <constant>root</constant> account were
		accepted by executing:
<screen>
&rootprompt; getent passwd | grep root
root:x:0:0:root:/root:/bin/bash
root:x:0:512:Netbios Domain Administrator:/root:/bin/bash
</screen>
		This demonstrates that the changes were accepted.
		</para></step>
		<step><para>
		Make certain that a home directory has been created for every user by listing the
		directories in <filename>/home</filename> as follows:
<screen>
&rootprompt; ls -al /home
drwxr-xr-x   8 root   root         176 Dec 17 18:50 ./
drwxr-xr-x  21 root   root         560 Dec 15 22:19 ../
drwx------   7 bobj   Domain Users     568 Dec 17 01:16 bobj/
drwx------   7 chrisr Domain Users     568 Dec 17 01:19 chrisr/
drwx------   7 maryv  Domain Users     568 Dec 17 01:27 maryv/
drwx------   7 stans  Domain Users     568 Dec 17 01:43 stans/
</screen>
		This is precisely what we want to see.
		</para></step>
		<step><para>
		<indexterm><primary>ldapsam</primary></indexterm>
		<indexterm><primary>pdbedit</primary></indexterm>
		The final validation step involves making certain that Samba-3 can obtain the user
		accounts from the LDAP ldapsam passwd backend. Execute the following command as shown:
<screen>
&rootprompt; pdbedit -Lv chrisr
Unix username:        chrisr
NT username:          chrisr
Account Flags:        [U          ]
User SID:             S-1-5-21-3504140859-1010554828-2431957765-3004
Primary Group SID:    S-1-5-21-3504140859-1010554828-2431957765-513
Full Name:            System User
Home Directory:       \\MASSIVE\homes
HomeDir Drive:        H:
Logon Script:         scripts\login.cmd
Profile Path:         \\MASSIVE\profiles\chrisr
Domain:               MEGANET2
Account desc:         System User
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Mon, 18 Jan 2038 20:14:07 GMT
Kickoff time:         Mon, 18 Jan 2038 20:14:07 GMT
Password last set:    Wed, 17 Dec 2003 17:17:40 GMT
Password can change:  Wed, 17 Dec 2003 17:17:40 GMT
Password must change: Mon, 18 Jan 2038 20:14:07 GMT
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
</screen>
		This looks good. Of course, you fully expected that it would all work, didn't you?
		</para></step>
		<step><para>
		<indexterm><primary>smbldap-groupadd</primary></indexterm>
		Now you add the group accounts that are used on the Abmas network. Execute
		the following exactly as shown:
<screen>
&rootprompt; ./smbldap-groupadd -a Accounts
&rootprompt; ./smbldap-groupadd -a Finances
&rootprompt; ./smbldap-groupadd -a PIOps
</screen>
		The addition of groups does not involve keyboard interaction, so the lack of console
		output is of no concern.
		</para></step>
		<step><para>
		<indexterm><primary>getent</primary></indexterm>
		You really do want to confirm that UNIX group resolution from LDAP is functioning 
		as it should. Let's do this as shown here:
<screen>
&rootprompt; getent group
...
Domain Admins:x:512:root
Domain Users:x:513:bobj,stans,chrisr,maryv
Domain Guests:x:514:
...
Accounts:x:1000:
Finances:x:1001:
PIOps:x:1002:
</screen>
		The well-known special accounts (Domain Admins, Domain Users, Domain Guests), as well
		as our own site-specific group accounts, are correctly listed. This is looking good.
		</para></step>
		<step><para>
		<indexterm><primary>net</primary><secondary>groupmap</secondary><tertiary>list</tertiary></indexterm>
		The final step we need to validate is that Samba can see all the Windows domain groups
		and that they are correctly mapped to the respective UNIX group account. To do this,
		just execute the following command:
<screen>
&rootprompt; net groupmap list
Domain Admins (S-1-5-21-3504140859-...-2431957765-512) -> Domain Admins
Domain Users (S-1-5-21-3504140859-...-2431957765-513) -> Domain Users
Domain Guests (S-1-5-21-3504140859-...-2431957765-514) -> Domain Guests
...
Accounts (S-1-5-21-3504140859-1010554828-2431957765-3001) -> Accounts
Finances (S-1-5-21-3504140859-1010554828-2431957765-3003) -> Finances
PIOps (S-1-5-21-3504140859-1010554828-2431957765-3005) -> PIOps
</screen>
		This is looking good. Congratulations &smbmdash; it works! Note that in the above output
		the lines were shortened by replacing the middle value (1010554828) of the SID with the 
		ellipsis (...).
		</para></step>
		<step><para>
		The server you have so carefully built is now ready for another important step. You 
		start the Samba-3 server and validate its operation. Execute the following to render all 
		the processes needed fully operative so that, on system reboot, they are automatically 
		started:
<screen>
&rootprompt; chkconfig named on
&rootprompt; chkconfig dhcpd on
&rootprompt; chkconfig ldap on
&rootprompt; chkconfig nmb on
&rootprompt; chkconfig smb on
&rootprompt; chkconfig winbind on
&rootprompt; rcnmb start
&rootprompt; rcsmb start
&rootprompt; rcwinbind start
</screen>
		</para></step>
		<step><para>
		The next step might seem a little odd at this point, but take note that you are about to
		start <command>winbindd</command>, which must be able to authenticate to the PDC via the
		localhost interface with the <command>smbd</command> process. This account can be
		easily created by joining the PDC to the domain by executing the following command:
<screen>
&rootprompt; net rpc join -S MASSIVE -U root%not24get
</screen>
		Note: Before executing this command on the PDC, both <command>nmbd</command> and
		<command>smbd</command> must be started so that the <command>net</command> command
		can communicate with <command>smbd</command>. The expected output is as follows:
<screen>
Joined domain MEGANET2.
</screen>
		This indicates that the domain security account for the PDC has been correctly created.
		</para></step>
		<step><para>
		At this time it is necessary to restart <command>winbindd</command> so that it can
		correctly authenticate to the PDC. The following command achieves that:
<screen>
&rootprompt; rcwinbind restart
</screen>
		</para></step>
		<step><para>
		<indexterm><primary>smbclient</primary></indexterm>
		You may now check Samba-3 operation as follows:
<screen>
&rootprompt; smbclient -L massive -U%
        Sharename      Type      Comment
        ---------      ----      -------
        IPC$           IPC       IPC Service (Samba 3.0.20)
        accounts       Disk      Accounting Files
        service        Disk      Financial Services Files
        pidata         Disk      Property Insurance Files
        apps           Disk      Application Files
        netlogon       Disk      Network Logon Service
        profiles       Disk      Profile Share
        profdata       Disk      Profile Data Share
        ADMIN$         IPC       IPC Service (Samba 3.0.20)
        Server               Comment
        ---------            -------
        MASSIVE              Samba 3.0.20
        Workgroup            Master
        ---------            -------
        MEGANET2             MASSIVE
</screen>
	This shows that an anonymous connection is working.
		</para></step>
		<step><para>
		For your finale, let's try an authenticated connection:
<screen>
&rootprompt; smbclient //massive/bobj -Ubobj%n3v3r2l8
smb: \> dir
  .                    D        0  Wed Dec 17 01:16:19 2003
  ..                   D        0  Wed Dec 17 19:04:42 2003
  bin                  D        0  Tue Sep  2 04:00:57 2003
  Documents            D        0  Sun Nov 30 07:28:20 2003
  public_html          D        0  Sun Nov 30 07:28:20 2003
  .urlview             H      311  Fri Jul  7 06:55:35 2000
  .dvipsrc             H      208  Fri Nov 17 11:22:02 1995
          57681 blocks of size 524288. 57128 blocks available
smb: \> q
</screen>
		Well done. All is working fine.
		</para></step>
	</procedure>
	<para>
	The server <constant>MASSIVE</constant> is now configured, and it is time to move onto the next task.
	</para>
	</sect2>
	<sect2 id="sbehap-ptrcfg">
	<title>Printer Configuration</title>
	<para>
	<indexterm><primary>CUPS</primary></indexterm>
	The configuration for Samba-3 to enable CUPS raw-print-through printing has already been
	taken care of in the &smb.conf; file. The only preparation needed for <constant>smart</constant>
	printing to be possible involves creation of the directories in which Samba-3 stores
	Windows printing driver files.
	</para>
	<procedure>
	<title>Printer Configuration Steps</title>
                <step><para>
                Configure all network-attached printers to have a fixed IP address.
                </para></step>
                <step><para>
                Create an entry in the DNS database on the server <constant>MASSIVE</constant>
                in both the forward lookup database for the zone <constant>abmas.biz.hosts</constant>
                and in the reverse lookup database for the network segment that the printer is to
                be located in. Example configuration files for similar zones were presented in <link linkend="secure"/>,
                <link linkend="abmasbiz"/> and in <link linkend="eth2zone"/>.
                </para></step>
                <step><para>
                Follow the instructions in the printer manufacturers' manuals to permit printing
                to port 9100.  Use any other port the manufacturer specifies for direct mode,
                raw printing.  This allows the CUPS spooler to print using raw mode protocols.
                <indexterm><primary>CUPS</primary></indexterm>
                <indexterm><primary>raw printing</primary></indexterm>
                </para></step>
		<step><para>
		<indexterm><primary>lpadmin</primary></indexterm>
                <indexterm><primary>CUPS</primary><secondary>queue</secondary></indexterm>
                Only on the server to which the printer is attached, configure the CUPS Print
                Queues as follows:
<screen>
&rootprompt; lpadmin -p <parameter>printque</parameter>
	 -v socket://<parameter>printer-name</parameter>.abmas.biz:9100 -E
</screen>
                <indexterm><primary>print filter</primary></indexterm>
                This step creates the necessary print queue to use no assigned print filter. This
                is ideal for raw printing, that is, printing without use of filters.
                The name <parameter>printque</parameter> is the name you have assigned for
                the particular printer.
                </para></step>
                <step><para>
                Print queues may not be enabled at creation. Make certain that the queues
                you have just created are enabled by executing the following:
<screen>
&rootprompt; /usr/bin/enable <parameter>printque</parameter>
</screen>
                </para></step>
                <step><para>
                Even though your print queue may be enabled, it is still possible that it
                may not accept print jobs. A print queue will service incoming printing
                requests only when configured to do so. Ensure that your print queue is
                set to accept incoming jobs by executing the following commands:
<screen>
&rootprompt; /usr/bin/accept <parameter>printque</parameter>
</screen>
                </para></step>
		<step><para>
                <indexterm><primary>mime type</primary></indexterm>
                <indexterm><primary>/etc/mime.convs</primary></indexterm>
                <indexterm><primary>application/octet-stream</primary></indexterm>
                Edit the file <filename>/etc/cups/mime.convs</filename> to uncomment the line:
<screen>
application/octet-stream     application/vnd.cups-raw      0     -
</screen>
		</para></step>
		 <step><para>
		 <indexterm><primary>/etc/mime.types</primary></indexterm>
		 Edit the file <filename>/etc/cups/mime.types</filename> to uncomment the line:
<screen>
application/octet-stream
</screen>
	        </para></step>
	        <step><para>
	        Refer to the CUPS printing manual for instructions regarding how to configure
	        CUPS so that print queues that reside on CUPS servers on remote networks
	        route print jobs to the print server that owns that queue. The default setting
	        on your CUPS server may automatically discover remotely installed printers and
	        may permit this functionality without requiring specific configuration.
	        </para></step>
		<step><para>
		The following action creates the necessary directory subsystem. Follow these 
		steps to printing heaven:
<screen>
&rootprompt; mkdir -p /var/lib/samba/drivers/{W32ALPHA,W32MIPS,W32X86,WIN40}
&rootprompt; chown -R root:root /var/lib/samba/drivers
&rootprompt; chmod -R ug=rwx,o=rx /var/lib/samba/drivers
</screen>
		</para></step>
	</procedure>
	</sect2>
</sect1>
<sect1 id="sbehap-bldg1">
	<title>Samba-3 BDC Configuration</title>
	<procedure>
	<title>Configuration of BDC Called: <constant>BLDG1</constant></title>
		<step><para>
		Install the files in <link linkend="sbehap-bldg1-smbconf"/>,
		<link linkend="sbehap-shareconfa"/>, and <link linkend="sbehap-shareconfb"/>
		into the <filename>/etc/samba/</filename> directory. The three files
		should be added together to form the &smb.conf; file.
		</para></step>
		<step><para>
		Verify the &smb.conf; file as in step 2 of <link
	      linkend="sbehap-massive"/>.
		</para></step>
		<step><para>
		Carefully follow the steps outlined in <link linkend="sbehap-PAM-NSS"/>, taking
		particular note to install the correct <filename>ldap.conf</filename>.
		</para></step>
		<step><para>
		Verify that the NSS resolver is working. You may need to cycle the run level
		to 1 and back to 5 before the NSS LDAP resolver functions. Follow these
		commands:
<screen>
&rootprompt; init 1
</screen>
		After the run level has been achieved, you are prompted to provide the
		<constant>root</constant> password. Log on, and then execute:
<screen>
&rootprompt; init 5
</screen>
		When the normal logon prompt appears, log into the system as <constant>root</constant>
		and then execute these commands:
<screen>
&rootprompt; getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:Daemon:/sbin:/bin/bash
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
...
root:x:0:512:Netbios Domain Administrator:/root:/bin/bash
nobody:x:999:514:nobody:/dev/null:/bin/false
bobj:x:1000:513:System User:/home/bobj:/bin/bash
stans:x:1001:513:System User:/home/stans:/bin/bash
chrisr:x:1002:513:System User:/home/chrisr:/bin/bash
maryv:x:1003:513:System User:/home/maryv:/bin/bash
vaioboss$:x:1005:553:vaioboss$:/dev/null:/bin/false
bldg1$:x:1006:553:bldg1$:/dev/null:/bin/false
</screen>
		This is the correct output. If the accounts that have UIDs above 512 are not shown, there is a problem.
		</para></step>
		<step><para>
		<indexterm><primary>getent</primary></indexterm>
		The next step in the verification process involves testing the operation of UNIX group
		resolution via the NSS LDAP resolver. Execute these commands:
<screen>
&rootprompt; getent group
root:x:0:
bin:x:1:daemon
daemon:x:2:
sys:x:3:
...
Domain Admins:x:512:root
Domain Users:x:513:bobj,stans,chrisr,maryv,jht
Domain Guests:x:514:
Administrators:x:544:
Users:x:545:
Guests:x:546:nobody
Power Users:x:547:
Account Operators:x:548:
Server Operators:x:549:
Print Operators:x:550:
Backup Operators:x:551:
Replicator:x:552:
Domain Computers:x:553:
Accounts:x:1000:
Finances:x:1001:
PIOps:x:1002:
</screen>
		This is also the correct and desired output, because it demonstrates that the LDAP client
		is able to communicate correctly with the LDAP server (<constant>MASSIVE</constant>).
		</para></step>
		<step><para>
		<indexterm><primary>smbpasswd</primary></indexterm>
		You must now set the LDAP administrative password into the Samba-3 <filename>secrets.tdb</filename>
		file by executing this command:
<screen>
&rootprompt; smbpasswd -w not24get
Setting stored password for "cn=Manager,dc=abmas,dc=biz" in secrets.tdb
</screen>
		</para></step>
		<step><para>
		Now you must obtain the domain SID from the PDC and store it into the
		<filename>secrets.tdb</filename> file also. This step is not necessary with an LDAP
		passdb backend because Samba-3 obtains the domain SID from the 
		sambaDomain object it automatically stores in the LDAP backend. It does not hurt to
		add the SID to the <filename>secrets.tdb</filename>, and if you wish to do so, this 
		command can achieve that:
<screen>
&rootprompt; net rpc getsid MEGANET2
Storing SID S-1-5-21-3504140859-1010554828-2431957765 \
                           for Domain MEGANET2 in secrets.tdb
</screen>
		When configuring a Samba-3 BDC that has an LDAP backend, there is no need to take
		any special action to join it to the domain. However, winbind communicates with the
		domain controller that is running on the localhost and must be able to authenticate,
		thus requiring that the BDC should be joined to the domain. The process of joining
		the domain creates the necessary authentication accounts.
		</para></step>
		<step><para>
		To join the Samba BDC to the domain, execute the following:
<screen>
&rootprompt; net rpc join -U root%not24get
Joined domain MEGANET2.
</screen>
		This indicates that the domain security account for the BDC has been correctly created.
		</para></step>
		<step><para>
		<indexterm>
			<primary>pdbedit</primary>
		</indexterm>
		Verify that user and group account resolution works via Samba-3 tools as follows:
<screen>
&rootprompt; pdbedit -L
root:0:root
nobody:65534:nobody
bobj:1000:System User
stans:1001:System User
chrisr:1002:System User
maryv:1003:System User
bldg1$:1006:bldg1$
&rootprompt; net groupmap list
Domain Admins (S-1-5-21-3504140859-...-2431957765-512) ->
                                                        Domain Admins
Domain Users (S-1-5-21-3504140859-...-2431957765-513) -> Domain Users
Domain Guests (S-1-5-21-3504140859-...-2431957765-514) -> 
                                                        Domain Guests
Administrators (S-1-5-21-3504140859-...-2431957765-544) ->
                                                       Administrators
...
Accounts (S-1-5-21-3504140859-1010554828-2431957765-3001) -> Accounts
Finances (S-1-5-21-3504140859-1010554828-2431957765-3003) -> Finances
PIOps (S-1-5-21-3504140859-1010554828-2431957765-3005) -> PIOps
</screen>
		These results show that all things are in order.
		</para></step>
                <step><para>
                The server you have so carefully built is now ready for another important step. Now
                start the Samba-3 server and validate its operation. Execute the following to render all
                the processes needed fully operative so that, upon system reboot, they are automatically
                started:
<screen>
&rootprompt; chkconfig named on
&rootprompt; chkconfig dhcpd on
&rootprompt; chkconfig nmb on
&rootprompt; chkconfig smb on
&rootprompt; chkconfig winbind on
&rootprompt; rcnmb start
&rootprompt; rcsmb start
&rootprompt; rcwinbind start
</screen>
		Samba-3 should now be running and is ready for a quick test. But not quite yet!
                </para></step>
		<step><para>
		Your new <constant>BLDG1, BLDG2</constant> servers do not have home directories for users.
		To rectify this using the SUSE yast2 utility or by manually editing the <filename>/etc/fstab</filename>
		file, add a mount entry to mount the <constant>home</constant> directory that has been exported
		from the <constant>MASSIVE</constant> server. Mount this resource before proceeding. An alternate
		approach could be to create local home directories for users who are to use these machines.
		This is a choice that you, as system administrator, must make. The following entry in the
		<filename>/etc/fstab</filename> file suffices for now:
<screen>
massive.abmas.biz:/home  /home  nfs     rw 0 0
</screen>
		To mount this resource, execute:
<screen>
&rootprompt; mount -a
</screen>
		Verify that the home directory has been mounted as follows:
<screen>
&rootprompt; df | grep home
massive:/home         29532988    283388  29249600   1% /home
</screen>
		</para></step>
		<step><para>
		Implement a quick check using one of the users that is in the LDAP database. Here you go:
<screen>
&rootprompt; smbclient //bldg1/bobj -Ubobj%n3v3r2l8
smb: \> dir
  .                    D        0  Wed Dec 17 01:16:19 2003
  ..                   D        0  Wed Dec 17 19:04:42 2003
  bin                  D        0  Tue Sep  2 04:00:57 2003
  Documents            D        0  Sun Nov 30 07:28:20 2003
  public_html          D        0  Sun Nov 30 07:28:20 2003
  .urlview             H      311  Fri Jul  7 06:55:35 2000
  .dvipsrc             H      208  Fri Nov 17 11:22:02 1995
          57681 blocks of size 524288. 57128 blocks available
smb: \> q
</screen>
		</para></step>
	</procedure>
	<para>
	Now that the first BDC (<constant>BDLG1</constant>) has been configured it is time to build 
	and configure the second BDC server (<constant>BLDG2</constant>) as follows:
	</para>
	<procedure id="sbehap-bldg2">
	<title>Configuration of BDC Called <constant>BLDG2</constant></title>
		<step><para>
		Install the files in <link linkend="sbehap-bldg2-smbconf"/>,
		<link linkend="sbehap-shareconfa"/>, and <link linkend="sbehap-shareconfb"/>
		into the <filename>/etc/samba/</filename> directory. The three files
		should be added together to form the &smb.conf; file.
		</para></step>
		<step><para>
		Follow carefully the steps shown in <link linkend="sbehap-bldg1"/>, starting at step 2.
		</para></step>
	</procedure>
<example id="sbehap-bldg1-smbconf">
<title>LDAP Based &smb.conf; File, Server: BLDG1</title>
<smbconfblock>
<smbconfcomment>Global parameters</smbconfcomment>
<smbconfsection name="[global]"/>
	<smbconfoption name="unix charset">LOCALE</smbconfoption>
	<smbconfoption name="workgroup">MEGANET2</smbconfoption>
	<smbconfoption name="netbios name">BLDG1</smbconfoption>
	<smbconfoption name="passdb backend">ldapsam:ldap://massive.abmas.biz</smbconfoption>
	<smbconfoption name="enable privileges">Yes</smbconfoption>
	<smbconfoption name="username map">/etc/samba/smbusers</smbconfoption>
	<smbconfoption name="log level">1</smbconfoption>
	<smbconfoption name="syslog">0</smbconfoption>
	<smbconfoption name="log file">/var/log/samba/%m</smbconfoption>
	<smbconfoption name="max log size">50</smbconfoption>
	<smbconfoption name="smb ports">139</smbconfoption>
	<smbconfoption name="name resolve order">wins bcast hosts</smbconfoption>
	<smbconfoption name="printcap name">CUPS</smbconfoption>
	<smbconfoption name="show add printer wizard">No</smbconfoption>
	<smbconfoption name="logon script">scripts\logon.bat</smbconfoption>
	<smbconfoption name="logon path">\\%L\profiles\%U</smbconfoption>
	<smbconfoption name="logon drive">X:</smbconfoption>
	<smbconfoption name="domain logons">Yes</smbconfoption>
	<smbconfoption name="domain master">No</smbconfoption>
	<smbconfoption name="wins server">172.16.0.1</smbconfoption>
	<smbconfoption name="ldap suffix">dc=abmas,dc=biz</smbconfoption>
	<smbconfoption name="ldap machine suffix">ou=People</smbconfoption>
	<smbconfoption name="ldap user suffix">ou=People</smbconfoption>
	<smbconfoption name="ldap group suffix">ou=Groups</smbconfoption>
	<smbconfoption name="ldap idmap suffix">ou=Idmap</smbconfoption>
	<smbconfoption name="ldap admin dn">cn=Manager,dc=abmas,dc=biz</smbconfoption>
	<smbconfoption name="idmap backend">ldap:ldap://massive.abmas.biz</smbconfoption>
	<smbconfoption name="idmap uid">10000-20000</smbconfoption>
	<smbconfoption name="idmap gid">10000-20000</smbconfoption>
	<smbconfoption name="printing">cups</smbconfoption>
	<smbconfoption name="printer admin">root, chrisr</smbconfoption>
</smbconfblock>
</example>
<example id="sbehap-bldg2-smbconf">
<title>LDAP Based &smb.conf; File, Server: BLDG2</title>
<smbconfblock>
<smbconfcomment>Global parameters</smbconfcomment>
<smbconfsection name="[global]"/>
	<smbconfoption name="unix charset">LOCALE</smbconfoption>
	<smbconfoption name="workgroup">MEGANET2</smbconfoption>
	<smbconfoption name="netbios name">BLDG2</smbconfoption>
	<smbconfoption name="passdb backend">ldapsam:ldap://massive.abmas.biz</smbconfoption>
	<smbconfoption name="enable privileges">Yes</smbconfoption>
	<smbconfoption name="username map">/etc/samba/smbusers</smbconfoption>
	<smbconfoption name="log level">1</smbconfoption>
	<smbconfoption name="syslog">0</smbconfoption>
	<smbconfoption name="log file">/var/log/samba/%m</smbconfoption>
	<smbconfoption name="max log size">50</smbconfoption>
	<smbconfoption name="smb ports">139</smbconfoption>
	<smbconfoption name="name resolve order">wins bcast hosts</smbconfoption>
	<smbconfoption name="printcap name">CUPS</smbconfoption>
	<smbconfoption name="show add printer wizard">No</smbconfoption>
	<smbconfoption name="logon script">scripts\logon.bat</smbconfoption>
	<smbconfoption name="logon path">\\%L\profiles\%U</smbconfoption>
	<smbconfoption name="logon drive">X:</smbconfoption>
	<smbconfoption name="domain logons">Yes</smbconfoption>
	<smbconfoption name="domain master">No</smbconfoption>
	<smbconfoption name="wins server">172.16.0.1</smbconfoption>
	<smbconfoption name="ldap suffix">dc=abmas,dc=biz</smbconfoption>
	<smbconfoption name="ldap machine suffix">ou=People</smbconfoption>
	<smbconfoption name="ldap user suffix">ou=People</smbconfoption>
	<smbconfoption name="ldap group suffix">ou=Groups</smbconfoption>
	<smbconfoption name="ldap idmap suffix">ou=Idmap</smbconfoption>
	<smbconfoption name="ldap admin dn">cn=Manager,dc=abmas,dc=biz</smbconfoption>
	<smbconfoption name="idmap backend">ldap:ldap://massive.abmas.biz</smbconfoption>
	<smbconfoption name="idmap uid">10000-20000</smbconfoption>
	<smbconfoption name="idmap gid">10000-20000</smbconfoption>
	<smbconfoption name="printing">cups</smbconfoption>
	<smbconfoption name="printer admin">root, chrisr</smbconfoption>
</smbconfblock>
</example>
<example id="sbehap-shareconfa">
<title>LDAP Based &smb.conf; File, Shares Section &smbmdash; Part A</title>
<smbconfblock>
<smbconfsection name="[accounts]"/>
	<smbconfoption name="comment">Accounting Files</smbconfoption>
	<smbconfoption name="path">/data/accounts</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
<smbconfsection name="[service]"/>
	<smbconfoption name="comment">Financial Services Files</smbconfoption>
	<smbconfoption name="path">/data/service</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
<smbconfsection name="[pidata]"/>
	<smbconfoption name="comment">Property Insurance Files</smbconfoption>
	<smbconfoption name="path">/data/pidata</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
<smbconfsection name="[homes]"/>
	<smbconfoption name="comment">Home Directories</smbconfoption>
	<smbconfoption name="valid users">%S</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
	<smbconfoption name="browseable">No</smbconfoption>
<smbconfsection name="[printers]"/>
	<smbconfoption name="comment">SMB Print Spool</smbconfoption>
	<smbconfoption name="path">/var/spool/samba</smbconfoption>
	<smbconfoption name="guest ok">Yes</smbconfoption>
	<smbconfoption name="printable">Yes</smbconfoption>
	<smbconfoption name="browseable">No</smbconfoption>
</smbconfblock>
</example>
<example id="sbehap-shareconfb">
<title>LDAP Based &smb.conf; File, Shares Section &smbmdash; Part B</title>
<smbconfblock>
<smbconfsection name="[apps]"/>
	<smbconfoption name="comment">Application Files</smbconfoption>
	<smbconfoption name="path">/apps</smbconfoption>
	<smbconfoption name="admin users">bjordan</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
<smbconfsection name="[netlogon]"/>
	<smbconfoption name="comment">Network Logon Service</smbconfoption>
	<smbconfoption name="path">/var/lib/samba/netlogon</smbconfoption>
	<smbconfoption name="guest ok">Yes</smbconfoption>
	<smbconfoption name="locking">No</smbconfoption>
<smbconfsection name="[profiles]"/>
	<smbconfoption name="comment">Profile Share</smbconfoption>
	<smbconfoption name="path">/var/lib/samba/profiles</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
	<smbconfoption name="profile acls">Yes</smbconfoption>
<smbconfsection name="[profdata]"/>
	<smbconfoption name="comment">Profile Data Share</smbconfoption>
	<smbconfoption name="path">/var/lib/samba/profdata</smbconfoption>
	<smbconfoption name="read only">No</smbconfoption>
	<smbconfoption name="profile acls">Yes</smbconfoption>
<smbconfsection name="[print$]"/>
	<smbconfoption name="comment">Printer Drivers</smbconfoption>
	<smbconfoption name="path">/var/lib/samba/drivers</smbconfoption>
	<smbconfoption name="browseable">yes</smbconfoption>
	<smbconfoption name="guest ok">no</smbconfoption>
	<smbconfoption name="read only">yes</smbconfoption>
	<smbconfoption name="write list">root, chrisr</smbconfoption>
</smbconfblock>
</example>
<example id="sbehap-ldifadd">
<title>LDIF IDMAP Add-On Load File &smbmdash; File: /etc/openldap/idmap.LDIF</title>
<screen>
dn: ou=Idmap,dc=abmas,dc=biz
objectClass: organizationalUnit
ou: idmap
structuralObjectClass: organizationalUnit
</screen>
</example>
</sect1>
<sect1>
	<title>Miscellaneous Server Preparation Tasks</title>
	<para>
	My father would say, <quote>Dinner is not over until the dishes have been done.</quote>
	The makings of a great network environment take a lot of effort and attention to detail.
	So far, you have completed most of the complex (and to many administrators, the interesting
	part of server configuration) steps, but remember to tie it all together. Here are
	a few more steps that must be completed so that your network runs like a well-rehearsed
	orchestra.
	</para>
	<sect2>
	<title>Configuring Directory Share Point Roots</title>
	<para>
	In your &smb.conf; file, you have specified Windows shares. Each has a <parameter>path</parameter>
	parameter. Even though it is obvious to all, one of the common Samba networking problems is
	caused by forgetting to verify that every such share root directory actually exists and that it
	has the necessary permissions and ownership.
	</para>
	<para>
	Here is an example, but remember to create the directory needed for every share:
<screen>
&rootprompt; mkdir -p /data/{accounts,finsvcs,piops}
&rootprompt; mkdir -p /apps
&rootprompt; chown -R root:root /data
&rootprompt; chown -R root:root /apps
&rootprompt; chown -R bobj:Accounts /data/accounts
&rootprompt; chown -R bobj:Finances /data/finsvcs
&rootprompt; chown -R bobj:PIOps /data/piops
&rootprompt; chmod -R ug+rwxs,o-rwx /data
&rootprompt; chmod -R ug+rwx,o+rx-w /apps
</screen>
	</para>
	</sect2>
	<sect2>
	<title>Configuring Profile Directories</title>
	<para>
	You made a conscious decision to do everything it would take to improve network client
	performance. One of your decisions was to implement folder redirection. This means that Windows
	user desktop profiles are now made up of two components: a dynamically loaded part and a set of file
	network folders.
	</para>
	<para>
	For this arrangement to work, every user needs a directory structure for the network folder
	portion of his or her profile as shown here:
<screen>
&rootprompt; mkdir -p /var/lib/samba/profdata
&rootprompt; chown root:root /var/lib/samba/profdata
&rootprompt; chmod 755 /var/lib/samba/profdata
# Per user structure
&rootprompt; cd /var/lib/samba/profdata
&rootprompt; mkdir -p <emphasis>username</emphasis>
&rootprompt; for i in InternetFiles Cookies History AppData \
                      LocalSettings MyPictures MyDocuments Recent
&rootprompt; do
&rootprompt; mkdir <emphasis>username</emphasis>/$i
&rootprompt; done
&rootprompt; chown -R <emphasis>username</emphasis>:Domain\ Users <emphasis>username</emphasis>
&rootprompt; chmod -R 750 <emphasis>username</emphasis>
</screen>
	</para>
	<para>
	<indexterm><primary>roaming profile</primary></indexterm>
	<indexterm><primary>mandatory profile</primary></indexterm>
	You have three options insofar as the dynamically loaded portion of the roaming profile
	is concerned: 
	</para>
	<itemizedlist>
		<listitem><para>You may permit the user to obtain a default profile.</para></listitem>
		<listitem><para>You can create a mandatory profile.</para></listitem>
		<listitem><para>You can create a group profile (which is almost always a mandatory profile).</para></listitem>
	</itemizedlist>
	<para>
	Mandatory profiles cannot be overwritten by a user. The change from a user profile to a mandatory
	profile is effected by renaming the <filename>NTUSER.DAT</filename> to <filename>NTUSER.MAN</filename>,
	that is, just by changing the filename extension.
	</para>
	<para>
	<indexterm><primary>SRVTOOLS.EXE</primary></indexterm>
	<indexterm><primary>Domain User Manager</primary></indexterm>
	The location of the profile that a user can obtain is set in the user's account in the LDAP passdb backend.
	You can manage this using the Idealx smbldap-tools or using the 
	<ulink url="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE">Windows NT4 Domain User Manager</ulink>.
	</para>
	<para>
	It may not be obvious that you must ensure that the root directory for the user's profile exists
	and has the needed permissions. Use the following commands to create this directory:
<screen>
&rootprompt; mkdir -p /var/lib/samba/profiles/<emphasis>username</emphasis>
&rootprompt; chown <emphasis>username</emphasis>:Domain\ Users
	    /var/lib/samba/profiles/<emphasis>username</emphasis>
&rootprompt; chmod 700  /var/lib/samba/profiles/<emphasis>username</emphasis>
</screen>
	</para>
	</sect2>
	<sect2>
	<title>Preparation of Logon Scripts</title>
	<para>
	<indexterm><primary>logon script</primary></indexterm>
	The use of a logon script with Windows XP Professional is an option that every site should consider.
	Unless you have locked down the desktop so the user cannot change anything, there is risk that
	a vital network drive setting may be broken or that printer connections may be lost. Logon scripts
	can help to restore persistent network folder (drive) and printer connections in a predictable
	manner. One situation in which such breakage may occur in particular is when a mobile PC (notebook)
	user attaches to another company's network that forces environment changes that are alien to your
	network.
	</para>
	<para>
	If you decide to use network logon scripts, by reference to the &smb.conf; files for the domain
	controllers, you see that the path to the share point for the <constant>NETLOGON</constant>
	share defined is <filename>/var/lib/samba/netlogon</filename>. The path defined for the logon
	script inside that share is <filename>scripts\logon.bat</filename>. This means that as a Windows
	NT/200x/XP client logs onto the network, it tries to obtain the file <filename>logon.bat</filename>
	from the fully qualified path <filename>/var/lib/samba/netlogon/scripts</filename>. This fully
	qualified path should therefore exist whether you install the <filename>logon.bat</filename>.
	</para>
	<para>
	You can, of course, create the fully qualified path by executing:
<screen>
&rootprompt; mkdir -p /var/lib/samba/netlogon/scripts
</screen>
	</para>
	<para>
	You should research the options for logon script implementation by referring to <emphasis>TOSHARG2</emphasis>, Chapter 24,
	Section 24.4. A quick Web search will bring up a host of options. One of the most popular logon
	facilities in use today is called <ulink url="http://www.kixtart.org">KiXtart</ulink>.
	</para>
	</sect2>
	<sect2>
	<title>Assigning User Rights and Privileges</title>
	<para>
	The ability to perform tasks such as joining Windows clients to the domain can be assigned to
	normal user accounts. By default, only the domain administrator account (<constant>root</constant> on UNIX
	systems because it has UID=0) can add accounts. New to Samba 3.0.11 is the ability to grant
	this privilege in a very limited fashion to particular accounts.
	</para>
	<para>
	By default, even Samba-3.0.11 does not grant any rights even to the <constant>Domain Admins</constant>
	group. Here we grant this group all privileges.
	</para>
	<para>
	Samba limits privileges on a per-server basis. This is a deliberate limitation so that users who
	are granted rights can be restricted to particular machines. It is left to the network administrator
	to determine which rights should be provided and to whom.
	</para>
	<procedure>
	<title>Steps for Assignment of User Rights and Privileges</title>
		<step><para>
		Log onto the PDC as the <constant>root</constant> account.
		</para></step>
		<step><para>
		Execute the following command to grant the <constant>Domain Admins</constant> group all
		rights and privileges:
<screen>
&rootprompt; net -S MASSIVE  -U root%not24get rpc rights grant \
        "MEGANET2\Domain Admins" SeMachineAccountPrivilege \
	SePrintOperatorPrivilege SeAddUsersPrivilege \
	SeDiskOperatorPrivilege SeRemoteShutdownPrivilege
Successfully granted rights.
</screen>
		Repeat this step on each domain controller, in each case substituting the name of the server
		(e.g., BLDG1, BLDG2) in place of the PDC called MASSIVE.
		</para></step>
		<step><para>
		In this step the privilege will be granted to Bob Jordan (bobj) to add Windows workstations
		to the domain. Execute the following only on the PDC. It is not necessary to do this on
		BDCs or on DMS machines because machine accounts are only ever added by the PDC:
<screen>
&rootprompt; net -S MASSIVE  -U root%not24get rpc rights grant \
             "MEGANET2\bobj" SeMachineAccountPrivilege
Successfully granted rights.
</screen>
		</para></step>
		<step><para>
		Verify that privilege assignments have been correctly applied by executing:
<screen>
net rpc rights list accounts -Uroot%not24get
MEGANET2\bobj
SeMachineAccountPrivilege
S-0-0
No privileges assigned
BUILTIN\Print Operators
No privileges assigned
BUILTIN\Account Operators
No privileges assigned
BUILTIN\Backup Operators
No privileges assigned
BUILTIN\Server Operators
No privileges assigned
BUILTIN\Administrators
No privileges assigned
Everyone
No privileges assigned
MEGANET2\Domain Admins
SeMachineAccountPrivilege
SePrintOperatorPrivilege
SeAddUsersPrivilege
SeRemoteShutdownPrivilege
SeDiskOperatorPrivilege
</screen>
		</para></step>
	</procedure>
	</sect2>
</sect1>
<sect1>
	<title>Windows Client Configuration</title>
	<para>
	<indexterm><primary>NETLOGON</primary></indexterm>
	In the next few sections, you can configure a new Windows XP Professional disk image on a staging
	machine. You will configure all software, printer settings, profile and policy handling, and desktop
	default profile settings on this system. When it is complete, you copy the contents of the
	<filename>C:\Documents and Settings\Default User</filename> directory to a directory with the same
	name in the <constant>NETLOGON</constant> share on the domain controllers.
	</para>
	<para>
	Much can be learned from the Microsoft Support site regarding how best to set up shared profiles.
	One knowledge-base article in particular stands out:
	"<ulink url="http://support.microsoft.com/default.aspx?scid=kb;EN-US;168475">How to Create a 
	Base Profile for All Users."</ulink>
	</para>
	<sect2 id="redirfold">
	<title>Configuration of Default Profile with Folder Redirection</title>
	<para>
	<indexterm><primary>folder redirection</primary></indexterm>
	Log onto the Windows XP Professional workstation as the local <constant>Administrator</constant>.
	It is necessary to expose folders that are generally hidden to provide access to the
	<constant>Default User</constant> folder.
	</para>
	<procedure>
	<title>Expose Hidden Folders</title>
		<step><para>
		Launch the Windows Explorer by clicking
			<menuchoice>
                                <guimenu>Start</guimenu>
                                <guimenuitem>My Computer</guimenuitem>
                                <guimenuitem>Tools</guimenuitem>
                                <guimenuitem>Folder Options</guimenuitem>
                                <guimenuitem>View Tab</guimenuitem>
                        </menuchoice>.
		Select <guilabel>Show hidden files and folders</guilabel>,
		and click <guibutton>OK</guibutton>.  Exit Windows Explorer.
		</para></step>
		<step><para>
		<indexterm><primary>regedt32</primary></indexterm>
		Launch the Registry Editor. Click 
		<menuchoice>
			<guimenu>Start</guimenu>
			<guimenuitem>Run</guimenuitem>
		</menuchoice>. Key in <command>regedt32</command>, and click
		<guibutton>OK</guibutton>.
		</para></step>
	</procedure>
	<para>
	</para>
	<procedure id="sbehap-rdrfldr">
	<title>Redirect Folders in Default System User Profile</title>
		<step><para>
		<indexterm><primary>HKEY_LOCAL_MACHINE</primary></indexterm>
		<indexterm><primary>Default User</primary></indexterm>
		Give focus to <constant>HKEY_LOCAL_MACHINE</constant> hive entry in the left panel.
		Click <menuchoice>
			<guimenu>File</guimenu>
			<guimenuitem>Load Hive...</guimenuitem>
			<guimenuitem>Documents and Settings</guimenuitem>
			<guimenuitem>Default User</guimenuitem>
			<guimenuitem>NTUSER</guimenuitem>
			<guimenuitem>Open</guimenuitem>
		      </menuchoice>. In the dialog box that opens, enter the key name
		<constant>Default</constant> and click <guibutton>OK</guibutton>.
		</para></step>
		<step><para>
		Browse inside the newly loaded Default folder to:
<screen>
HKEY_LOCAL_MACHINE\Default\Software\Microsoft\Windows\
                     CurrentVersion\Explorer\User Shell Folders\
</screen>
		The right panel reveals the contents as shown in <link linkend="XP-screen001"/>.
		</para></step>
		<step><para>
		<indexterm><primary>%USERPROFILE%</primary></indexterm>
		<indexterm><primary>%LOGONSERVER%</primary></indexterm>
		You edit hive keys. Acceptable values to replace the 
		<constant>%USERPROFILE%</constant> variable includes:
		<itemizedlist>
			<listitem><para>A drive letter such as <constant>U:</constant></para></listitem>
			<listitem><para>A direct network path such as
				<constant>\\MASSIVE\profdata</constant></para></listitem>
			<listitem><para>A network redirection (UNC name) that contains a macro such as </para>
				<para><constant>%LOGONSERVER%\profdata\</constant></para></listitem>
		</itemizedlist>
		</para></step>
		<step><para>
		<indexterm><primary>registry keys</primary></indexterm>
		Set the registry keys as shown in <link linkend="proffold"/>. Your implementation makes the assumption
		that users have statically located machines. Notebook computers (mobile users) need to be
		accommodated using local profiles. This is not an uncommon assumption.
		</para></step>
		<step><para>
		Click back to the root of the loaded hive <constant>Default</constant>.
		Click <menuchoice><guimenu>File</guimenu><guimenuitem>Unload Hive...</guimenuitem>
		<guimenuitem>Yes</guimenuitem></menuchoice>.
		</para></step>
		<step><para>
		<indexterm><primary>Registry Editor</primary></indexterm>
		Click <menuchoice><guimenu>File</guimenu><guimenuitem>Exit</guimenuitem></menuchoice>. This exits the
		Registry Editor.
		</para></step>
		<step><para>
		Now follow the procedure given in <link linkend="sbehap-locgrppol"/>. Make sure that each folder you
		have redirected is in the exclusion list.
		</para></step>
		<step><para>
		You are now ready to copy<footnote><para>
			There is an alternate method by which a default user profile can be added to the
			<constant>NETLOGON</constant> share. This facility in the Windows System tool 
			permits profiles to be exported. The export target may be a particular user or 
			group profile share point or else the <constant>NETLOGON</constant> share. 
			In this case, the profile directory must be named <constant>Default User</constant>.
			</para></footnote> 
		the Default User profile to the Samba domain controllers. Launch Microsoft Windows Explorer,
		and use it to copy the full contents of the directory <filename>Default User</filename> that
		is in the <filename>C:\Documents and Settings</filename> to the root directory of the
		<constant>NETLOGON</constant> share. If the <constant>NETLOGON</constant> share has the defined
		UNIX path of <filename>/var/lib/samba/netlogon</filename>, when the copy is complete there must
		be a directory in there called <filename>Default User</filename>.
		</para></step>
	</procedure>
	<para>
	Before punching out new desktop images for the client workstations, it is perhaps a good idea that
	desktop behavior should be returned to the original Microsoft settings. The following steps achieve
	that ojective:
	</para>
	<procedure>
	<title>Reset Folder Display to Original Behavior</title>
		<step><para>
		To launch the Windows Explorer, click
			<menuchoice>
                                <guimenu>Start</guimenu>
                                <guimenuitem>My Computer</guimenuitem>
                                <guimenuitem>Tools</guimenuitem>
                                <guimenuitem>Folder Options</guimenuitem>
                                <guimenuitem>View Tab</guimenuitem>
                        </menuchoice>.
		Deselect <guilabel>Show hidden files and folders</guilabel>, and click <guibutton>OK</guibutton>.
		Exit Windows Explorer.
		</para></step>
	</procedure>
	<figure id="XP-screen001">
		<title>Windows XP Professional &smbmdash; User Shared Folders</title>
		<imagefile scale="65">XP-screen001</imagefile>
	</figure>
<table id="proffold">
	<title>Default Profile Redirections</title>
	<tgroup cols="2">
		<colspec align="left"/>
		<colspec align="left"/>
		<thead>
			<row>
				<entry>Registry Key</entry>
				<entry>Redirected Value</entry>
			</row>
		</thead>
		<tbody>
			<row>
				<entry>Cache</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\InternetFiles</entry>
			</row>
			<row>
				<entry>Cookies</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\Cookies</entry>
			</row>
			<row>
				<entry>History</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\History</entry>
			</row>
			<row>
				<entry>Local AppData</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\AppData</entry>
			</row>
			<row>
				<entry>Local Settings</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\LocalSettings</entry>
			</row>
			<row>
				<entry>My Pictures</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\MyPictures</entry>
			</row>
			<row>
				<entry>Personal</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\MyDocuments</entry>
			</row>
			<row>
				<entry>Recent</entry>
				<entry>%LOGONSERVER%\profdata\%USERNAME%\Recent</entry>
			</row>
		</tbody>
	</tgroup>
</table>
	</sect2>
	<sect2>
	<title>Configuration of MS Outlook to Relocate PST File</title>
	<para>
	<indexterm><primary>Outlook</primary><secondary>PST</secondary></indexterm>
	<indexterm><primary>MS Outlook</primary><secondary>PST</secondary></indexterm>
	Microsoft Outlook can store a Personal Storage file, generally known as a PST file.
	It is the nature of email storage that this file grows, at times quite rapidly.
	So that users' email is available to them at every workstation they may log onto,
	it is common practice in well-controlled sites to redirect the PST folder to the
	users' home directory. Follow these steps for each user who wishes to do this.
	</para>
	<para>
	To redirect the Outlook PST file in Outlook 2003 (older versions of Outlook behave
	slightly differently), follow these steps:
	</para>
	<procedure>
	<title>Outlook PST File Relocation</title>
		<step><para>
		Close Outlook if it is open.
		</para></step>
		<step><para>
		From the <guimenu>Control Panel</guimenu>, launch the Mail icon.
		</para></step>
		<step><para>
		Click <guimenu>Email Accounts.</guimenu>
		</para></step>
		<step><para>
		Make a note of the location of the PST file(s). From this location, move
		the files to the desired new target location. The most desired new target location 
		may well be the users' home directory.
		</para></step>
		<step><para>
		Add a new data file, selecting the PST file in the new desired target location.
		Give this entry (not the filename) a new name such as <quote>Personal Mail Folders.</quote>
		</para>
		<para>
		Note: If MS Outlook has been configured to use an IMAP account configuration there may be problems
		following these instructions. Feedback from users suggests that where IMAP is used the PST
		file is used to store rules and filters. When the PST store is relocated it appears to break
		MS Outlook's Send/Receive button. If anyone has sucessfully relocated PST files where IMAP is 
		used please email <literal>jht@samba.org</literal> with useful tips and suggestions so that
		this warning can be removed or modified.
		</para></step>
		<step><para>
		Close the <guimenu>Date Files</guimenu> windows, then click <guimenu>Email Accounts</guimenu>.
		</para></step>
		<step><para>
		Select <guimenu>View of Change</guimenu> exiting email accounts, click <guibutton>Next.</guibutton>
		</para></step>
		<step><para>
		Change the <guimenu>Mail Delivery Location</guimenu> so as to use the data file in the new
		target location.
		</para></step>
		<step><para>
		Go back to the <guimenu>Data Files</guimenu> window, then delete the old data file entry.
		</para></step>
	</procedure>
	
	<note><para>
	<indexterm><primary>Outlook Address Book</primary></indexterm>
	You may have to remove and reinstall the Outlook Address Book (Contacts) entries, otherwise 
	the user may be not be able to retrieve contacts when addressing a new email message.
	</para></note>
	<note><para>
	<indexterm><primary>Outlook Express</primary></indexterm>
	Outlook Express is not at all like MS OutLook. It stores file very differently also. Outlook
	Express storage files can not be redirected to network shares. The options panel will not permit
	this, but they can be moved to folders outside of the user's profile. They can also be excluded
	from folder synchronization as part of the roaming profile.
	</para>
	<para>
	While it is possible to redirect the data stores for Outlook Express data stores by editing the 
	registry, experience has shown that data corruption and loss of email messages will result.
	</para>
	<para>
	<indexterm><primary>Outlook Express</primary></indexterm>
	<indexterm><primary>MS Outlook</primary></indexterm>
	In the same vane as MS Outlook, Outlook Express data stores can become very large. When used with
	roaming profiles this can result in excruciatingly long login and logout behavior will files are
	synchronized. For this reason, it is highly recommended not to use Outlook Express where roaming
	profiles are used.
	</para></note>
	<para>
	<indexterm><primary>PST file</primary></indexterm>
	Microsoft does not support storing PST files on network shares, although the practice does appear
	to be rather popular. Anyone who does relocation the PST file to a network resource should refer
	the Microsoft <ulink url="http://support.microsoft.com/kb/297019/">reference</ulink> to better
	understand the issues.
	</para>
	<para>
	<indexterm><primary>PST file</primary></indexterm>
	Apart from manually moving PST files to a network share, it is possible to set the default PST
	location for new accounts by following the instructions at the WindowsITPro <ulink
	url="http://www.windowsitpro.com/Windows/Article/ArticleID/48228/48228.html">web</ulink> site.
	</para>
	<para>
	<indexterm><primary>PST file</primary></indexterm>
	User feedback suggests that disabling of oplocks on PST files will significantly improve
	network performance by reducing locking overheads. One way this can be done is to add to the
	&smb.conf; file stanza for the share the PST file the following:
<screen>
veto oplock files = /*.pdf/*.PST/
</screen>
	</para>
	</sect2>
	<sect2>
	<title>Configure Delete Cached Profiles on Logout</title>
	<para>
	Configure the Windows XP Professional client to auto-delete roaming profiles on logout:
	</para>
	<para>
	<indexterm><primary>MMC</primary></indexterm>
	Click 
	<menuchoice>
		<guimenu>Start</guimenu>
		<guimenuitem>Run</guimenuitem>
	</menuchoice>. In the dialog box, enter <command>MMC</command> and click <guibutton>OK</guibutton>.
	</para>
	<para>
	Follow these steps to set the default behavior of the staging machine so that all roaming
	profiles are deleted as network users log out of the system. Click
	<menuchoice>
		<guimenu>File</guimenu>
		<guimenuitem>Add/Remove Snap-in</guimenuitem>
		<guimenuitem>Add</guimenuitem>
		<guimenuitem>Group Policy</guimenuitem>
		<guimenuitem>Add</guimenuitem>
		<guimenuitem>Finish</guimenuitem>
		<guimenuitem>Close</guimenuitem>
		<guimenuitem>OK</guimenuitem>
	</menuchoice>. 
	</para>
	<para>
	<indexterm><primary>Microsoft Management Console</primary><see>MMC</see></indexterm>
	The Microsoft Management Console now shows the <guimenu>Group Policy</guimenu>
	utility that enables you to set the policies needed. In the left panel, click
	<menuchoice>
		<guimenuitem>Local Computer Policy</guimenuitem>
		<guimenuitem>Administrative Templates</guimenuitem>
		<guimenuitem>System</guimenuitem>
		<guimenuitem>User Profiles</guimenuitem>
	</menuchoice>. In the right panel, set the properties shown here by double-clicking on each
	item as shown:
	</para>
	<itemizedlist>
		<listitem><para>Do not check for user ownership of Roaming Profile Folders = Enabled</para></listitem>
		<listitem><para>Delete cached copies of roaming profiles = Enabled</para></listitem>
	</itemizedlist>
	<para>
	Close the Microsoft Management Console. The settings take immediate effect and persist onto all image copies
	made of this system to deploy the new standard desktop system.
	</para>
	</sect2>
	<sect2>
	<title>Uploading Printer Drivers to Samba Servers</title>
	<para>
	<indexterm><primary>printing</primary><secondary>drag-and-drop</secondary></indexterm>
	Users want to be able to use network printers. You have a vested interest in making
	it easy for them to print. You have chosen to install the printer drivers onto the Samba
	servers and to enable point-and-click (drag-and-drop) printing. This process results in
	Samba being able to automatically provide the Windows client with the driver necessary to
	print to the printer chosen. The following procedure must be followed for every network
	printer:
	</para>
	<procedure>
	<title>Steps to Install Printer Drivers on the Samba Servers</title>
		<step><para>
		Join your Windows XP Professional workstation (the staging machine) to the 
		<constant>MEGANET2</constant> domain. If you are not sure of the procedure, 
		follow the guidance given in <link linkend="appendix"/>, <link linkend="domjoin"/>.
		</para></step>
		<step><para>
		After the machine has rebooted, log onto the workstation as the domain
		<constant>root</constant> (this is the Administrator account for the 
		operating system that is the host platform for this implementation of Samba.
		</para></step>
		<step><para>
		Launch MS Windows Explorer. Navigate in the left panel. Click
		<menuchoice>
			<guimenu>My Network Places</guimenu>
			<guimenuitem>Entire Network</guimenuitem>
			<guimenuitem>Microsoft Windows Network</guimenuitem>
			<guimenuitem>Meganet2</guimenuitem>
			<guimenuitem>Massive</guimenuitem>
		</menuchoice>. Click on <guimenu>Massive</guimenu>
			<guimenu>Printers and Faxes</guimenu>.
		</para></step>
		<step><para>
		Identify a printer that is shown in the right panel. Let us assume the printer is called 
		<constant>ps01-color</constant>. Right-click on the <guimenu>ps01-color</guimenu> icon
		and select the <guimenu>Properties</guimenu> entry. This opens a dialog box that indicates
		that <quote>The printer driver is not installed on this computer. Some printer properties
		will not be accessible unless you install the printer driver. Do you want to install the
		driver now?</quote> It is important at this point you answer <guimenu>No</guimenu>.
		</para></step>
		<step><para>
		The printer properties panel for the <guimenu>ps01-color</guimenu> printer on the server 
		<constant>MASSIVE</constant> is displayed. Click the <guimenu>Advanced</guimenu> tab.
		Note that the box labeled <guimenu>Driver</guimenu> is empty. Click the <guimenu>New Driver</guimenu>
		button that is next to the <guimenu>Driver</guimenu> box. This launches the <quote>Add Printer Wizard</quote>.
		</para></step>
		<step><para>
		<indexterm><primary>Add Printer Wizard</primary><secondary>APW</secondary></indexterm>
		<indexterm><primary>APW</primary></indexterm>
		The <quote>Add Printer Driver Wizard on <constant>MASSIVE</constant></quote> panel 
		is now presented. Click <guimenu>Next</guimenu> to continue. From the left panel, select the 
		printer manufacturer. In your case, you are adding a driver for a printer manufactured by 
		Lexmark. In the right panel, select the printer (Lexmark Optra Color 40 PS). Click 
		<guimenu>Next</guimenu>, and then <guimenu>Finish</guimenu> to commence driver upload. A 
		progress bar appears and instructs you as each file is being uploaded and that it is being 
		directed at the network server <constant>\\massive\ps01-color</constant>.
		</para></step>
		<step><para>
		<indexterm><primary>printers</primary><secondary>Advanced</secondary></indexterm>
		<indexterm><primary>printers</primary><secondary>Properties</secondary></indexterm>
		<indexterm><primary>printers</primary><secondary>Sharing</secondary></indexterm>
		<indexterm><primary>printers</primary><secondary>General</secondary></indexterm>
		<indexterm><primary>printers</primary><secondary>Security</secondary></indexterm>
		<indexterm><primary>AD printer publishing</primary></indexterm>
		The driver upload completes in anywhere from a few seconds to a few minutes. When it completes,
		you are returned to the <guimenu>Advanced</guimenu> tab in the <guimenu>Properties</guimenu> panel. 
		You can set the Location (under the <guimenu>General</guimenu> tab) and Security settings (under 
		the <guimenu>Security</guimenu> tab). Under the <guimenu>Sharing</guimenu> tab it is possible to
		load additional printer drivers; there is also a check-box in this tab called <quote>List in the
		directory</quote>. When this box is checked, the printer will be published in Active Directory
		(Applicable to Active Directory use only.)
		</para></step>
		<step><para>
		<indexterm><primary>printers</primary><secondary>Default Settings</secondary></indexterm>
		Click <guimenu>OK</guimenu>. It will take a minute or so to upload the settings to the server. 
		You are now returned to the <guimenu>Printers and Faxes on Massive</guimenu> monitor.
		Right-click on the printer, click <menuchoice><guimenu>Properties</guimenu> 
		<guimenuitem>Device Settings</guimenuitem> </menuchoice>.  Now change the settings to suit 
		your requirements. BE CERTAIN TO CHANGE AT LEAST ONE SETTING and apply the changes even if 
		you need to reverse the changes back to their original settings. 
		</para></step>
		<step><para>
		This is necessary so that the printer settings are initialized in the Samba printers
		database. Click <guimenu>Apply</guimenu> to commit your settings. Revert any settings you changed
		just to initialize the Samba printers database entry for this printer. If you need to revert a setting,
		click <guimenu>Apply</guimenu> again.
		</para></step>
		<step><para>
		<indexterm><primary>Print Test Page</primary></indexterm>
		Verify that all printer settings are at the desired configuration. When you are satisfied that they are,
		click the <guimenu>General</guimenu> tab. Now click the <guimenu>Print Test Page</guimenu> button.
		A test page should print. Verify that it has printed correctly. Then click <guimenu>OK</guimenu>
		in the panel that is newly presented. Click <guimenu>OK</guimenu> on the <guimenu>ps01-color on 
		massive Properties</guimenu> panel.
		</para></step>
		<step><para>
		You must repeat this process for all network printers (i.e., for every printer on each server).
		When you have finished uploading drivers to all printers, close all applications. The next task
		is to install software your users require to do their work.
		</para></step>
	</procedure>
	</sect2>
	<sect2>
	<title>Software Installation</title>
	<para>
	Your network has both fixed desktop workstations as well as notebook computers. As a general rule, it is
	a good idea to not tamper with the operating system that is provided by the notebook computer manufacturer.
	Notebooks require special handling that is beyond the scope of this chapter.
	</para>
	<para>
	For desktop systems, the installation of software onto administratively centralized application servers
	make a lot of sense. This means that you can manage software maintenance from a central
	perspective and that only minimal application stubware needs to be installed onto the desktop
	systems. You should proceed with software installation and default configuration as far as is humanly
	possible and so long as it makes sense to do so. Make certain to thoroughly test and validate every aspect
	of software operations and configuration.
	</para>
	<para>
	When you believe that the overall configuration is complete, be sure to create a shared group profile
	and migrate that to the Samba server for later reuse when creating custom mandatory profiles, just in
	case a user may have specific needs you had not anticipated.
	</para>
	</sect2>
	<sect2>
	<title>Roll-out Image Creation</title>
	<para>
	The final steps before preparing the distribution Norton Ghost image file you might follow are:
	</para>
	<blockquote><para>
	Unjoin the domain &smbmdash; Each workstation requires a unique name and must be independently
	joined into domain membership.
	</para></blockquote>
	<blockquote><para>
	Defragment the hard disk &smbmdash; While not obvious to the uninitiated, defragmentation results
	in better performance and often significantly reduces the size of the compressed disk image. That
	also means it will take less time to deploy the image onto 500 workstations.
	</para></blockquote>
	</sect2>
</sect1>
<sect1>
	<title>Key Points Learned</title>
	<para>
	This chapter introduced many new concepts. Is it a sad fact that the example presented deliberately
	avoided any consideration of security. Security does not just happen; you must design it into your total
	network. Security begins with a systems design and implementation that anticipates hostile behavior from
	users both inside and outside the organization. Hostile and malicious intruders do not respect barriers;
	they accept them as challenges. For that reason, if not simply from a desire to establish safe networking
	practices, you must not deploy the design presented in this book in an environment where there is risk
	of compromise.
	</para>
	<para>
	<indexterm><primary>Access Control Lists</primary><see>ACLs</see></indexterm>
	<indexterm><primary>ACLs</primary></indexterm>
	As a minimum, the LDAP server must be protected by way of Access Control Lists (ACLs), and it must be
	configured to use secure protocols for all communications over the network. Of course, secure networking
	does not result just from systems design and implementation but involves constant user education
	training and, above all, disciplined attention to detail and constant searching for signs of unfriendly
	or alien activities. Security is itself a topic for a whole book. Please do consult appropriate sources.
	Jerry Carter's book <ulink url="http://www.booksense.com/product/info.jsp&isbn=1565924916">
	<emphasis>LDAP System Administration</emphasis></ulink> is a good place to start reading about OpenLDAP
	as well as security considerations.
	</para>
	<para>
	The substance of this chapter that has been deserving of particular attention includes:
	</para>
	<itemizedlist>
		<listitem><para>
		Implementation of an OpenLDAP-based passwd backend, necessary to support distributed
		domain control.
		</para></listitem>
		<listitem><para>
		Implementation of Samba primary and secondary domain controllers with a common LDAP backend
		for user and group accounts that is shared with the UNIX system through the PADL nss_ldap and
		pam_ldap tool-sets.
		</para></listitem>
		<listitem><para>
		Use of the Idealx smbldap-tools scripts for UNIX (POSIX) account management as well as
		to manage Samba Windows user and group accounts.
		</para></listitem>
		<listitem><para>
		The basics of implementation of Group Policy controls for Windows network clients.
		</para></listitem>
		<listitem><para>
		Control over roaming profiles, with particular focus on folder redirection to network drives.
		</para></listitem>
		<listitem><para>
		Use of the CUPS printing system together with Samba-based printer driver auto-download.
		</para></listitem>
	</itemizedlist>
</sect1>
<sect1>
	<title>Questions and Answers</title>
	<para>
	Well, here we are at the end of this chapter and we have only ten questions to help you to
	remember so much. There are bound to be some sticky issues here.
	</para>
	<qandaset defaultlabel="chap06qa" type="number">
	<qandaentry>
	<question>
		<para>
		Why did you not cover secure practices? Isn't it rather irresponsible to instruct
		network administrators to implement insecure solutions?
		</para>
	</question>
	<answer>
		<para>
		Let's get this right. This is a book about Samba, not about OpenLDAP and secure
		communication protocols for subjects other than Samba. Earlier on, you note,
		that the dynamic DNS and DHCP solutions also used no protective secure communications
		protocols. The reason for this is simple: There are so many ways of implementing
		secure protocols that this book would have been even larger and more complex.
		</para>
		<para>
		The solutions presented here all work (at least they did for me). Network administrators
		have the interest and the need to be better trained and instructed in secure networking
		practices and ought to implement safe systems. I made the decision, right or wrong,
		to keep this material as simple as possible. The intent of this book is to demonstrate
		a working solution and not to discuss too many peripheral issues.
		</para>
		<para>
		This book makes little mention of backup techniques. Does that mean that I am recommending
		that you should implement a network without provision for data recovery and for disaster
		management? Back to our focus: The deployment of Samba has been clearly demonstrated.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		You have focused much on SUSE Linux and little on the market leader, Red Hat. Do
		you have a problem with Red Hat Linux? Doesn't that make your guidance irrelevant
		to the Linux I might be using?
		</para>
	</question>
	<answer>
		<para>
		Both Red Hat Linux and SUSE Linux comply with the Linux Standards Base specifications
		for a standard Linux distribution. The differences are marginal. Surely you know
		your Linux platform, and you do have access to administration manuals for it. This
		book is not a Linux tutorial; it is a Samba tutorial. Let's keep the focus on
		the Samba part of the book; all the other bits are peripheral (but important) to
		creation of a total network solution. 
		</para>
		<para>
		What I find interesting is the attention reviewers give to Linux installation and to
		the look and feel of the desktop, but does that make for a great server? In this book,
		I have paid particular attention to the details of creating a whole solution framework.
		I have not tightened every nut and bolt, but I have touched on all the issues you
		need to be familiar with. Over the years many people have approached me wanting to
		know the details of exactly how to implement a DHCP and dynamic DNS server with Samba
		and WINS. In this chapter, it is plain to see what needs to be configured to provide
		transparent interoperability. Likewise for CUPS and Samba interoperation. These are
		key stumbling areas for many people.
		</para>
		<para>
		At every critical junction, I have provided comparative guidance for both SUSE and
		Red Hat Linux. Both manufacturers have done a great job in furthering the cause
		of open source software. I favor neither and respect both. I like particular
		features of both products (companies also). No bias in presentation is intended.
		Oh, before I forget, I particularly like Debian Linux; that is my favorite playground.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		You did not use SWAT to configure Samba. Is there something wrong with it?
		</para>
	</question>
	<answer>
		<para>
		That is a good question. As it is, the &smb.conf; file configurations are presented
		in as direct a format as possible. Adding SWAT into the equation would have complicated
		matters. I sought simplicity of implementation. The fact is that I did use SWAT to
		create the files in the first place.
		</para>
		<para>
		There are people in the Linux and open source community who feel that SWAT is dangerous
		and insecure. Many will not touch it with a barge-pole. By not introducing SWAT, I
		hope to have brought their interests on board. SWAT is well covered is <emphasis>TOSHARG2</emphasis>.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		You have exposed a well-used password <emphasis>not24get</emphasis>. Is that
		not irresponsible? 
		</para>
	</question>
	<answer>
		<para>
		Well, I had to use a password of some sort. At least this one has been consistently
		used throughout. I guess you can figure out that in a real deployment it would make 
		sense to use a more secure and original password.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		The Idealx smbldap-tools create many domain group accounts that are not used. Is that
		a good thing?
		</para>
	</question>
	<answer>
		<para>
		I took this up with Idealx and found them most willing to change that in the next version.
		Let's give Idealx some credit for the contribution they have made. I appreciate their work
		and, besides, it does no harm to create accounts that are not now used &smbmdash; at some time 
		Samba may well use them.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		Can I use LDAP just for Samba accounts and not for UNIX system accounts?
		</para>
	</question>
	<answer>
		<para>
		Yes, you can do that for user accounts only. Samba requires there to be a POSIX (UNIX)
		group account for every Windows domain group account. But if you put your users into
		the system password account, how do you plan to keep all domain controller system
		password files in sync? I think that having everything in LDAP makes a lot of sense
		for the UNIX administrator who is still learning the craft and is migrating from MS Windows.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		Why are the Windows domain RID portions not the same as the UNIX UID?
		</para>
	</question>
	<answer>
		<para>
		Samba uses a well-known public algorithm for assigning RIDs from UIDs and GIDs.
		This algorithm ought to ensure that there will be no clashes with well-known RIDs.
		Well-known RIDs have special significance to MS Windows clients. The automatic
		assignment used the calculation: RID = UID x 2 + 1000. Of course, Samba does
		permit you to override that to some extent. See the &smb.conf; man page entry
		for <parameter>algorithmic rid base</parameter>.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		Printer configuration examples all show printing to the HP port 9100. Does this
		mean that I must have HP printers for these solutions to work?
		</para>
	</question>
	<answer>
		<para>
		No. You can use any type of printer and must use the interfacing protocol supported
		by the printer. Many networks use LPR/LPD print servers to which are attached
		PCL printers, inkjet printers, plotters, and so on. At home I use a USB-attached
		inkjet printer. Use the appropriate device URI (Universal Resource Interface)
		argument to the <constant>lpadmin -v</constant> option that is right for your
		printer.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		Is folder redirection dangerous? I've heard that you can lose your data that way.
		</para>
	</question>
	<answer>
		<para>
		The only loss of data I know of that involved folder redirection was caused by
		manual misuse of the redirection tool. The administrator redirected a folder to
		a network drive and said he wanted to migrate (move) the data over. Then he 
		changed his mind, so he moved the folder back to the roaming profile. This time,
		he declined to move the data because he thought it was still in the local profile
		folder. That was not the case, so by declining to move the data back, he wiped out
		the data. You cannot hold the tool responsible for that. Caveat emptor still applies.
		</para>
	</answer>
	</qandaentry>
	<qandaentry>
	<question>
		<para>
		Is it really necessary to set a local Group Policy to exclude the redirected
		folders from the roaming profile?
		</para>
	</question>
	<answer>
		<para>
		Yes. If you do not do this, the data will still be copied from the network folder
		(share) to the local cached copy of the profile.
		</para>
	</answer>
	</qandaentry>
	</qandaset>
</sect1>
</chapter>
 |