[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
[0597]
[0598]
[0599]
[0600]
[0601]
[0602]
[0603]
[0604]
[0605]
[0606]
[0607]
[0608]
[0609]
[0610]
[0611]
[0612]
[0613]
[0614]
[0615]
[0616]
[0617]
[0618]
[0619]
[0620]
[0621]
[0622]
[0623]
[0624]
[0625]
[0626]
[0627]
[0628]
[0629]
[0630]
[0631]
[0632]
[0633]
[0634]
[0635]
[0636]
[0637]
[0638]
[0639]
[0640]
[0641]
[0642]
[0643]
[0644]
[0645]
[0646]
[0647]
[0648]
[0649]
[0650]
[0651]
[0652]
[0653]
[0654]
[0655]
[0656]
[0657]
[0658]
[0659]
[0660]
[0661]
[0662]
[0663]
[0664]
[0665]
[0666]
[0667]
[0668]
[0669]
[0670]
[0671]
[0672]
[0673]
[0674]
[0675]
[0676]
[0677]
[0678]
[0679]
[0680]
[0681]
[0682]
[0683]
[0684]
[0685]
[0686]
[0687]
[0688]
[0689]
[0690]
[0691]
[0692]
[0693]
[0694]
[0695]
[0696]
[0697]
[0698]
[0699]
[0700]
[0701]
[0702]
[0703]
[0704]
[0705]
[0706]
[0707]
[0708]
[0709]
[0710]
[0711]
[0712]
[0713]
[0714]
[0715]
[0716]
[0717]
[0718]
[0719]
[0720]
[0721]
[0722]
[0723]
[0724]
[0725]
[0726]
[0727]
[0728]
[0729]
[0730]
[0731]
[0732]
[0733]
[0734]
[0735]
[0736]
[0737]
[0738]
[0739]
[0740]
[0741]
[0742]
[0743]
[0744]
[0745]
[0746]
[0747]
[0748]
[0749]
[0750]
[0751]
[0752]
[0753]
[0754]
[0755]
[0756]
[0757]
[0758]
[0759]
[0760]
[0761]
[0762]
[0763]
[0764]
[0765]
[0766]
[0767]
[0768]
[0769]
[0770]
[0771]
[0772]
[0773]
[0774]
[0775]
[0776]
[0777]
[0778]
[0779]
[0780]
[0781]
[0782]
[0783]
[0784]
[0785]
[0786]
[0787]
[0788]
[0789]
[0790]
[0791]
[0792]
[0793]
[0794]
[0795]
[0796]
[0797]
[0798]
[0799]
[0800]
[0801]
[0802]
[0803]
[0804]
[0805]
[0806]
[0807]
[0808]
[0809]
[0810]
[0811]
[0812]
[0813]
[0814]
[0815]
[0816]
[0817]
[0818]
[0819]
[0820]
[0821]
[0822]
[0823]
[0824]
[0825]
[0826]
[0827]
[0828]
[0829]
[0830]
[0831]
[0832]
[0833]
[0834]
[0835]
[0836]
[0837]
[0838]
[0839]
[0840]
[0841]
[0842]
[0843]
[0844]
[0845]
[0846]
[0847]
[0848]
[0849]
[0850]
[0851]
[0852]
[0853]
[0854]
[0855]
[0856]
[0857]
[0858]
[0859]
[0860]
[0861]
[0862]
[0863]
[0864]
[0865]
[0866]
[0867]
[0868]
[0869]
[0870]
[0871]
[0872]
[0873]
[0874]
[0875]
[0876]
[0877]
[0878]
[0879]
[0880]
[0881]
[0882]
[0883]
[0884]
[0885]
[0886]
[0887]
[0888]
[0889]
[0890]
[0891]
[0892]
[0893]
[0894]
[0895]
[0896]
[0897]
[0898]
[0899]
[0900]
[0901]
[0902]
[0903]
[0904]
[0905]
[0906]
[0907]
[0908]
[0909]
[0910]
[0911]
[0912]
[0913]
[0914]
[0915]
[0916]
[0917]
[0918]
[0919]
[0920]
[0921]
[0922]
[0923]
[0924]
[0925]
[0926]
[0927]
[0928]
[0929]
[0930]
[0931]
[0932]
[0933]
[0934]
[0935]
[0936]
[0937]
[0938]
[0939]
[0940]
[0941]
[0942]
[0943]
[0944]
[0945]
[0946]
[0947]
[0948]
[0949]
[0950]
[0951]
[0952]
[0953]
[0954]
[0955]
[0956]
[0957]
[0958]
[0959]
[0960]
[0961]
[0962]
[0963]
[0964]
[0965]
[0966]
[0967]
[0968]
[0969]
[0970]
[0971]
[0972]
[0973]
[0974]
[0975]
[0976]
[0977]
[0978]
[0979]
[0980]
[0981]
[0982]
[0983]
[0984]
[0985]
[0986]
[0987]
[0988]
[0989]
[0990]
[0991]
[0992]
[0993]
[0994]
[0995]
[0996]
[0997]
[0998]
[0999]
[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]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-1.9.9) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!--  3-NOV-2021 02:50 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_features.WASDOC -->

<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>
<style type="text/css">._button { border: 1px gray solid; border-radius:3px; padding:0.1em; margin:0.1em; font-size:90%; }</style>

<a id="0." href="#"></a>
<title>WASD Features and Facilities &ndash; WebDAV</title>
<a id="6." href="#"></a>
<a id="6.webdav" href="#"></a>
<a id="webdav" href="#"></a>
<h1 class="head chunk">WASD Features and Facilities</h1>
<h1 class="head"><span class="numb">6.</span><span class="text">WebDAV</span></h1>

<div class="TOC2cols2" style="width:80%;max-width:80%;">
<table class="TOC2table">
<tr><td><a href="features006.html#6.1.httpmethodssupported"><span class="numb">6.1</span><span class="text">HTTP Methods Supported</span></a>
<tr><td><a href="features006.html#6.1.1.copyrestrictions"><span class="numb">6.1.1</span><span class="text">COPY Restrictions</span></a>
<tr><td><a href="features006.html#6.1.2.deleterestrictions"><span class="numb">6.1.2</span><span class="text">DELETE Restrictions</span></a>
<tr><td><a href="features006.html#6.1.3.moverestrictions"><span class="numb">6.1.3</span><span class="text">MOVE Restrictions</span></a>
<tr><td><a href="features006.html#6.1.4.ifrestrictions"><span class="numb">6.1.4</span><span class="text">If: Restrictions</span></a>
<tr><td><a href="features006.html#6.2.webdavconfiguration"><span class="numb">6.2</span><span class="text">WebDAV Configuration</span></a>
<tr><td><a href="features006.html#6.2.1.webdavsetrules"><span class="numb">6.2.1</span><span class="text">WebDAV Set Rules</span></a>
<tr><td><a href="features006.html#6.2.2.filenaming"><span class="numb">6.2.2</span><span class="text">File Naming</span></a>
<tr><td><a href="features006.html#6.2.3.filesystemaccess"><span class="numb">6.2.3</span><span class="text">File-system Access</span></a>
<tr><td><a href="features006.html#6.2.4.filesystemauthorisation"><span class="numb">6.2.4</span><span class="text">File-system Authorisation</span></a>
<tr><td><a href="features006.html#6.2.5.concurrentauthorisation"><span class="numb">6.2.5</span><span class="text">Concurrent Authorisation</span></a>
<tr><td><a href="features006.html#6.2.6.realworldexample"><span class="numb">6.2.6</span><span class="text">Real-World Example</span></a>
<tr><td><a href="features006.html#6.3.webdavmetadata"><span class="numb">6.3</span><span class="text">WebDAV Metadata</span></a>
<tr><td><a href="features006.html#6.4.webdavlocking"><span class="numb">6.4</span><span class="text">WebDAV Locking</span></a>
<tr><td><a href="features006.html#6.5.somewrinkles"><span class="numb">6.5</span><span class="text">Some Wrinkles</span></a>
<tr><td><a href="features006.html#6.5.1.osxfinder"><span class="numb">6.5.1</span><span class="text">OS X Finder</span></a>
<tr><td><a href="features006.html#6.5.2.gnomegvfsnautilus"><span class="numb">6.5.2</span><span class="text">Gnome/gvfs/Nautilus</span></a>
<tr><td><a href="features006.html#6.5.3.dreamweaver"><span class="numb">6.5.3</span><span class="text">Dreamweaver</span></a>
<tr><td><a href="features006.html#6.6.microsoftmiscellanea"><span class="numb">6.6</span><span class="text">Microsoft Miscellanea</span></a>
<tr><td><a href="features006.html#6.6.1.mapping"><span class="numb">6.6.1</span><span class="text">Mapping</span></a>
<tr><td><a href="features006.html#6.6.2.frontpageextensions"><span class="numb">6.6.2</span><span class="text">FrontPage Extensions</span></a>
<tr><td><a href="features006.html#6.6.3.avoidingmicrosoftpropertyclutter"><span class="numb">6.6.3</span><span class="text">Avoiding Microsoft Property Clutter</span></a>
<tr><td><a href="features006.html#6.6.4.optionsheaderquotmsauthorviadavquot"><span class="numb">6.6.4</span><span class="text">OPTIONS header &quot;MS-Author-Via: DAV&quot;</span></a>
<tr><td><a href="features006.html#6.6.5.repairingbrokenxpwebfolders"><span class="numb">6.6.5</span><span class="text">Repairing broken XP Web Folders</span></a>
<tr><td><a href="features006.html#6.6.6.addingaportnumbertothewebfolderaddress"><span class="numb">6.6.6</span><span class="text">Adding a port number to the webfolder-address</span></a>
<tr><td><a href="features006.html#6.6.7.addinganumbersignquotquottothewebfolderaddress"><span class="numb">6.6.7</span><span class="text">Adding a number-sign (&quot;#&quot;) to the webfolder-address</span></a>
<tr><td><a href="features006.html#6.6.8.forcewindowsxptousebasicauthentication"><span class="numb">6.6.8</span><span class="text">Force Windows XP to use Basic Authentication</span></a>
<tr><td><a href="features006.html#6.6.9.microsoftxpexplorerbasicauthentication"><span class="numb">6.6.9</span><span class="text">Microsoft XP Explorer BASIC Authentication</span></a>
<tr><td><a href="features006.html#6.6.10.microsoftwindows7basicauthentication"><span class="numb">6.6.10</span><span class="text">Microsoft Windows 7 BASIC Authentication</span></a>
<tr><td><a href="features006.html#6.6.11.error0x800700dfthefilesizeexceedsthelimitallowedandcannotbesaved"><span class="numb">6.6.11</span><span class="text">Error 0x800700DF: The file size exceeds the limit allowed and cannot be saved</span></a>
<tr><td><a href="features006.html#6.7.references"><span class="numb">6.7</span><span class="text">References</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="features005.html#5.">&#8598;&#xFE0E;</a>
<td><a href="features000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="features007.html#7.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<p> Web-based Distributed Authoring and (not) Versioning for the WASD package.

<p> Effective WASD WebDAV file-space (without significant naming constraints)
relies on being hosted on ODS-5 volumes.  Behaviour hosting file-space on ODS-2
volumes is untested (though possible provided file naming is constrained to
ODS-2 conventions).

<p> WASD WebDAV methods and request headers, etc., are also propagated to the
scripting environment and so functionality may be implemented using CGI,
CGIplus or RTE based applications.

<p> WASD proxy-serving supports WebDAV methods, header fields, etc.

<p> Generally WebDAV clients are applications other than browsers and so
response  bodies with human-readable error explanations are unnecessary and
consume bandwidth to no good purpose, and so not provided.

<p> File-systems are notoriously latent components relative to the rest of the
system (more so with VMS).  Any operation to collections (directories) are not
going to be atomic and for large collections requiring many sub-operations the
potential for the process to be interrupted or otherwise disturbed are
enormous.  File-systems are not databases amenable to extensive ACID
operations.

<p> In addition each file under WebDAV management has the potential for an
associated but independent metadata file.  This of course means for every
DAV-specific resource file activity there is at least a file-system action to
check for a metadata file and for some actions such as COPY the potential for
an associated but entirely independent file operation.

<p> Of course WebDAV was not intended or designed as a general file-system
protocol  but one for distributed management of somewhat restricted collections
of Web-related resources and so in context probably works well enough.

<p> See sections below on file-system operation method restrictions.

<div class="note">
<a id="6.0.0.0.1" href="#"></a>
<a id="6.caution" href="#"></a>
<a id="caution" href="#"></a>
<h5 class="head center"><span class="text">Caution</span></h5>
<hr class="note_hr">
If using WebDAV in any serious fashion the likes of
<div class="blockof code">&dollar; HTTPD/DO=RESTART=NOW
</div>

<p> during server WebDav file-system modifications is a recipe for
inconsistency and/or corruption!
<hr class="note_hr">
</div>

<a id="6.1" href="#"></a>
<a id="6.1.httpmethodssupported" href="#"></a>
<a id="httpmethodssupported" href="#"></a>
<h2 class="head"><span class="numb">6.1</span><span class="text">HTTP Methods Supported</span></h2>

<p> A list of WebDAV methods, what WASD does with them, and any limitations or
restrictions.  Some of these are familiar HTTP/1.<span class="high italic">n</span> methods and other are
RFC 4981 specific.  Some of the HTTP/1.<span class="high italic">n</span> methods are overloaded with
additional or variant behaviours when used in a WebDAV context.  Issues of
atomicity with the manipulation of file-system trees containing numbers of
individual files makes strict RFC 4918 compliance difficult.  See
&quot;&hellip;Restrictions&quot; below.

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Method
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd">COPY**
<td class="tabd">Reproduces both single resources (files) and collections (directory trees). 
Will overwrite files (if specified by the request) but will respond 209
(Conflict) if it would overwrite a tree.
<tr class="tabr">
<td class="tabd">DELETE**
<td class="tabd">deletes files and directory trees
<tr class="tabr backlight">
<td class="tabd">GET
<td class="tabd">just the vanilla HTTP/1.1 behaviour
<tr class="tabr">
<td class="tabd">HEAD
<td class="tabd">ditto
<tr class="tabr backlight">
<td class="tabd">LOCK**
<td class="tabd">see WEBDAV LOCKING below
<tr class="tabr">
<td class="tabd">MKCOL**
<td class="tabd">create a directory
<tr class="tabr backlight">
<td class="tabd">MOVE**
<td class="tabd">Moves (rename or copy) a file or a directory tree.  Will 'overwrite' files (if
specified by the request) but will respond 209 (Conflict) if it would overwrite
a tree.
<tr class="tabr">
<td class="tabd">OPTIONS
<td class="tabd">If WebDAV is enabled and available for the path this reports the WebDAV
extension methods
<tr class="tabr backlight">
<td class="tabd">PROPFIND**
<td class="tabd">Retrieves the requested file characteristics, DAV lock status and
'dead' properties for individual files, a directory and its child files, or a
directory tree.
<tr class="tabr">
<td class="tabd">PROPPATCH**
<td class="tabd">set and remove 'dead' meta-data properties
<tr class="tabr backlight">
<td class="tabd">PUT
<td class="tabd">Against a WebDAV resource behaves a little differently to historical
WASD implementation of PUT.
<tr class="tabr">
<td class="tabd">UNLOCK**
<td class="tabd">see WebDAV locking below
<tr class="tabr">
<td class="tabd">
<td class="tabd">**<span class="high italic">WebDAV RFC 4918 method</span>
</table>

<p> WASD Statistics Reports gather WebDAV related data.  Where a method can be
used both for vanilla HTTP/1.<span class="high italic">n</span> and WebDAV purposes it is counted in
WebDAV statistics if the request header contains some other indication of a
WebDAV activity.

<a id="6.1.1" href="#"></a>
<a id="6.1.1.copyrestrictions" href="#"></a>
<a id="copyrestrictions" href="#"></a>
<h3 class="head"><span class="numb">6.1.1</span><span class="text">COPY Restrictions</span></h3>

<p> Does not comply with the overwrite:T directive for collections (does so for
files).  Will not preemptively delete the existing tree.  It returns a 209
(Conflict) response instead.

<p> COPY does not maintain collection consistent URL namespace if a member
resource cannot be moved as required by RFC 4918.  It should maintain the
source subtree completely uncopied.  Instead it is best-effort and continues
copying resources until exhausted.  This is consistent with file-system
behaviour.  The RFC 4918 requirement, while not impossible, is fraught with
issues inside a file-system.

<a id="6.1.2" href="#"></a>
<a id="6.1.2.deleterestrictions" href="#"></a>
<a id="deleterestrictions" href="#"></a>
<h3 class="head"><span class="numb">6.1.2</span><span class="text">DELETE Restrictions</span></h3>

<p> Deletion of collections is particularly fraught with issues for a
file-system.  In userland it is almost impossible to predetermine if an
individual file in a directory tree is going to resist deletion (due to
locking, protections, etc) and in kernel land it's probably no easier.  It
leaves the undeleted tree hierachy (resource ancestors) intact. This is RFC
4918 compliant however!

<p> So, in the case of WASD WebDAV it's just best-effort and if something down
the  tree won't disappear, it just reports the failure in the 207 response and
carries merrily on through the tree regardless.  This IS acceptable WebDAV
server behaviour!

<a id="6.1.3" href="#"></a>
<a id="6.1.3.moverestrictions" href="#"></a>
<a id="moverestrictions" href="#"></a>
<h3 class="head"><span class="numb">6.1.3</span><span class="text">MOVE Restrictions</span></h3>

<p> Does not comply with the overwrite:T directive for collections (does so for
files).  Will not currently pre-emptively delete the existing tree.  It returns
a 209 (Conflict) response instead.

<p> MOVE first attempts to rename the file or directory.  This is reasonably
efficient, especially for directory trees but obviously only suitable for a
target on the same disk volume.  If a rename failure is due to a different
device it falls back to using a COPY then DELETE in two separate phases. 
Needless-to-say this is hardly atomic and can lead to inconsistencies between
source and target.

<p> MOVE does not maintain collection consistent URL namespace if a member
resource  cannot be moved as required by RFC 4918.  It should maintain the
source subtree unmoved.  Instead it is best-effort and continues moving
resources until exhausted.  This is consistent with file-system behaviour.  The
RFC 4918 requirement, while not impossible, is fraught with issues inside a
file-system.

<a id="6.1.4" href="#"></a>
<a id="6.1.4.ifrestrictions" href="#"></a>
<a id="ifrestrictions" href="#"></a>
<h3 class="head"><span class="numb">6.1.4</span><span class="text">If: Restrictions</span></h3>

<p> The conditional &quot;If:&quot; request header field does not have full RFC 4918
support.  It implements lock token and etag token processing with parenthetical
OR and NOT processing.  For unsupported features WATCH reports that the header
was not understood and always returns an abort status.  WebDAV &quot;If:&quot; processing
is an extrodinarily complex kludge for on-the-fly decision making by the server
and much of what I have read indicates most clients only ever use extremely
simple conditions anyway.

<a id="6.2" href="#"></a>
<a id="6.2.webdavconfiguration" href="#"></a>
<a id="webdavconfiguration" href="#"></a>
<h2 class="head"><span class="numb">6.2</span><span class="text">WebDAV Configuration</span></h2>

<p> WebDAV and its features are globally enabled and configured using
directives contained in the WASD_CONFIG_GLOBAL configuration file.

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Directive
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd">[PutMaxKBytes]
<td class="tabd">maximum size of a file (PUT and POST)
<tr class="tabr">
<td class="tabd">[WebDAV]
<td class="tabd">This directive enables and disables WebDAV.
<tr class="tabr backlight">
<td class="tabd">[WebDAVlocking]
<td class="tabd">Enables and disables WebDAV locking.
<tr class="tabr">
<td class="tabd">[WebDAVlockTimeoutDefault]
<td class="tabd">see <a class="link" href="features006.html#6.4.lockingtimeout">&lsquo;Locking Timeout&rsquo; in 6.4 WebDAV Locking</a>
<tr class="tabr backlight">
<td class="tabd">[WebDAVlockTimeoutMax]
<td class="tabd">see <a class="link" href="features006.html#6.4.lockingtimeout">&lsquo;Locking Timeout&rsquo; in 6.4 WebDAV Locking</a>
<tr class="tabr">
<td class="tabd">[WebDAVlockCollectionDepth]
<td class="tabd">See <a class="link" href="features006.html#6.4.lockingdepth">&lsquo;Locking Depth&rsquo; in 6.4 WebDAV Locking</a>
<tr class="tabr backlight">
<td class="tabd">[WebDAVmetaDir]
<td class="tabd">see <a class="link" href="features006.html#6.3.webdavmetadata">6.3 WebDAV Metadata</a>
<tr class="tabr">
<td class="tabd">[WebDAVquota]
<td class="tabd">Enables and disables RFC 4331 functionality (disk quota
reporting).
</table>

<p> In addition these and other configurations are provided on a per-path basis
using mapping rules.

<a id="6.2.1" href="#"></a>
<a id="6.2.1.webdavsetrules" href="#"></a>
<a id="webdavsetrules" href="#"></a>
<h3 class="head"><span class="numb">6.2.1</span><span class="text">WebDAV Set Rules</span></h3>

<p> WASD request processing rules (see
<a class="link blank" target="_blank" href="../config/#requestprocessingconfiguration">Request Processing Configuration</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>)
may be used on a per-path basis to modify (some) global configuration settings
and provide other WevDAV configuation. 

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Rule
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd">ODS=NAME=<span class="high italic">8BIT&verbar;UTF8&verbar;DEFAULT</span>
<td class="tabd">When a file is PUT
using WebDAV (or upload), for non-7bit ASCII file names use native ODS-5 8bit
syntax (default) or UTF-8 encoded character sequences (see <a class="link" href="features006.html#6.2.2.filenaming">6.2.2 File Naming</a>)
<tr class="tabr">
<td class="tabd">PUT=MAX=&lt;integer&gt; &verbar; *
<td class="tabd">Maximum number of kilobytes file
size, if &quot;*&quot; then effectively unlimited (per-path equivalent of the global
directive [PutMaxKBytes]).
<tr class="tabr backlight">
<td class="tabd">WEBDAV=[NO]HIDDEN
<td class="tabd">list (default) or hide U*x <span class="high italic">hidden</span>
files (i.e. those with names beginning with period)
<tr class="tabr">
<td class="tabd">WEBDAV=[NO]LOCK
<td class="tabd">allow/apply WebDAV locking to this path
<tr class="tabr backlight">
<td class="tabd">WEBDAV=[NO]PROFILE
<td class="tabd">WebDAV access according to SYSUAF profile
<tr class="tabr">
<td class="tabd">WEBDAV=[NO]PROP
<td class="tabd">allow/apply WebDAV 'dead' property(ies) to this path
<tr class="tabr backlight">
<td class="tabd">WEBDAV=[NO]PUT=LOCK
<td class="tabd">a resource must be locked before a PUT is allowed
<tr class="tabr">
<td class="tabd">WEBDAV=[NO]READ
<td class="tabd">WebDAV methods allowed read this tree
<tr class="tabr backlight">
<td class="tabd">WEBDAV=[NO]SERVER
<td class="tabd">WebDAV access as server account (best effort)
<tr class="tabr">
<td class="tabd">WEBDAV=[NO]WINPROP
<td class="tabd">when NOWINPROP windows properties are ignored and emulated
<tr class="tabr backlight">
<td class="tabd">WEBDAV=[NO]WRITE
<td class="tabd">WebDAV methods allowed write to this path (implied read)
<tr class="tabr">
<td class="tabd">WEBDAV=LOCK=TIMEOUT=DEFAULT=
<td class="tabd">hh:mm:ss
<tr class="tabr backlight">
<td class="tabd">WEBDAV=LOCK=TIMEOUT=MAX=
<td class="tabd">hh:mm:ss
<tr class="tabr">
<td class="tabd">WEBDAV=META=DIR=
<td class="tabd">per-path equivalent of global [WevbDAVmetaDir]
(see <a class="link" href="features006.html#6.3.webdavmetadata">6.3 WebDAV Metadata</a>)
</table>

<p> An essential function of the path setting rules is for specifying which
paths in server Web-space are allowed to be accessed using the WebDAV protocol
and what sort of access (read, write, etc.) that path is allowed.

<a id="6.2.2" href="#"></a>
<a id="6.2.2.filenaming" href="#"></a>
<a id="filenaming" href="#"></a>
<h3 class="head"><span class="numb">6.2.2</span><span class="text">File Naming</span></h3>

<p> By default files that are PUT via WebDAV (or upload) support the ISO Latin-1
character set.  ASCII and non-7-bit file names use the native ODS-5 syntax. 
Where character sets other than ISO Latin-1, or where compatibility with other
WebDAV implementations is desired (e.g. Apache), a path can be set to allow
file names supplied using UTF-8 sequences.

<p> For example, the English language word &quot;na&#239;ve&quot;, having a diaeresis
mark over the &quot;i&quot; character (indicating it is pronounced separately from the
preceding vowel) is commonly respresented using the 8 bit character 0xEF, or as
the two byte UTF-8 sequence 0xC3AF.  This word if used as the file name with a
type (extension) of &quot;.TXT&quot; by default would have the sequence of 8-bit
characters

<div class="blockof code">0x6E 0x61 0xEF 0x76 0x65 0x2e 0x54 0x58 0x54
</div>

and if the path had been set <span class="high italic">ods=name=utf8</span> the sequence would be

<div class="blockof code">0x6E 0x61 0xC3 0xAF 0x76 0x65 0x2E 0x54 0x58 0x54
</div>

<p> &quot;Index of&quot; (directory) listings will honour a path set <span class="high italic">ods=name=utf8</span> and
make the listing character set UTF-8 resulting in a browser correctly rendering
the name (WebDAV listings are by definition UTF-8).

<a id="6.2.2.0.1" href="#"></a>
<a id="6.2.2.filenameambiguity" href="#"></a>
<a id="filenameambiguity" href="#"></a>
<h5 class="head"><span class="text">File Name Ambiguity</span></h5>

<p> While files and directories created via WebDAV will have a consistent naming
schema applied those created by applications or manual operation on the VMS
system can result in files that are not accessible with WebDAV.

<p> For example the file name
<div class="blockof code">This^_is^_an^_EXAMPLE^.txt.;1
</div>
would be presented to the client as
<div class="blockof code">This is an EXAMPLE.txt
</div>
which when provided in a URL as
<div class="blockof code">This%20is%20an%20EXAMPLE.txt
</div>
and translated from that URL into the file specification
<div class="blockof code">This^_is^_an^_EXAMPLE.txt;1
</div>
of course will not be able to be accessed.

<p> In addition, the two files
<div class="blockof code">This^_is^_an^_EXAMPLE.txt;1
This^_is^_an^_EXAMPLE^.txt.;1
</div>
are distinct in the file-system, independently parsed from the directory
structure, would be presented to the client as consecutive entries having the
same name, with only the accessible file name actually available.
<div class="blockof code">This is an EXAMPLE.txt
This is an EXAMPLE.txt
</div>

<p> To avoid this situation a potentially ambiguous file name containing an
escaped period and no type (extension) is ignored by directory listings and
WebDAV  property lists.  When an ambiguous file name is detected it is reported
in WATCH reports.

<div class="note">
<a id="6.2.2.0.2" href="#"></a>
<a id="6.2.2.avoidquotinterestingquotfilenames" href="#"></a>
<a id="avoidquotinterestingquotfilenames" href="#"></a>
<h5 class="head center"><span class="text">Avoid &quot;Interesting&quot; File Names</span></h5>
<hr class="note_hr">
While most of these are corner-cases it is best to try and avoid
<span class="high italic">interesting</span> file names that can challenge the rather convoluted VMS
file-system environment.  Inaccessible file names cannot of course be deleted
or renamed via WebDAV and may result in directory (folder) deletion problems. 
These situations generally require manual intervention.
<hr class="note_hr">
</div>

<a id="6.2.3" href="#"></a>
<a id="6.2.3.filesystemaccess" href="#"></a>
<a id="filesystemaccess" href="#"></a>
<h3 class="head"><span class="numb">6.2.3</span><span class="text">File-system Access</span></h3>

<p> Is controlled using the mapping rules:

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Rule
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr">
<td class="tabd">WEBDAV=PROFILE
<td class="tabd">access using request SYSUAF-authenticated security
profile
<tr class="tabr">
<td class="tabd">WEBDAV=WRITE
<td class="tabd">unconditional permission to read/write
<tr class="tabr">
<td class="tabd">WEBDAV=READ
<td class="tabd">unconditional permission to read
<tr class="tabr">
<td class="tabd">WEBDAV=SERVER
<td class="tabd">access using server account permissions
</table>

<p> All access by WebDAV operations <span class="high bold">must have at least one set</span> against the 
path. If access is permitted by one of the above settings SYSPRV is enabled to
allow that access using the server account.  Therefore files and directories
should have a SYSTEM:READ+WRITE+EXECUTE+DELETE protection or equivalent ACL
permissions, or the access may fail totally or in some part of a supposedly
atomic action.

<p> These file-system access settings are applied in the order listed above. 
That  is, if a path successively has one or more of the above settings applied
during rule processing, when it comes to applying those access controls, SYSUAF
profile is applied, then if no profile SETing access to read/write, then to
read-only, then access via the server account. 

<p> In addition WebDAV access requires an authorisation rule against each path.

<a id="6.2.4" href="#"></a>
<a id="6.2.4.filesystemauthorisation" href="#"></a>
<a id="filesystemauthorisation" href="#"></a>
<h3 class="head"><span class="numb">6.2.4</span><span class="text">File-system Authorisation</span></h3>

<p> All access by WebDAV operations <span class="high bold">must have one set</span> against the path.

<p> All WebDAV access is a combination of WASD_CONFIG_MAP path setting and
WASD_CONFIG_AUTH authorisation permissions.  The least permissive of the two
overrides the more. The combination of an authorisation rule and a path mapping
rule mitigates the chance of opening unintended access into the file-system.

<p> These is the test-bench environment used during development:

<div class="blockof code"># WASD_CONFIG_MAP
pass  /dweb/*  /dweb/*  ods=5 webdav=write webdav=nowinprop

# WASD_CONFIG_AUTH
[&quot;KLAATU&quot;=WASD_VMS_RW=id]
/dweb/*  r+w
</div>

<p> Note that WebDAV read/write access is a combination of the mapping and the
authorisation rule (mapping WEBDAV=READ overrides authorisation read+write). 
Expect complications with Microsoft environments.

<p> For test-benching you could avoid authorisation issues completely with:

<div class="blockof code"># WASD_CONFIG_AUTH
[world]
/dweb/*  r+w
</div>

<a id="6.2.5" href="#"></a>
<a id="6.2.5.concurrentauthorisation" href="#"></a>
<a id="concurrentauthorisation" href="#"></a>
<h3 class="head"><span class="numb">6.2.5</span><span class="text">Concurrent Authorisation</span></h3>

<p> A common requirement is to provide concurrent general access and authorised
WebDAV acccess to the same Web-space.  This is accomplished by using two paths
mapped into the same file-system space, the general access (non-authorised)
path, and a WebDAV (authorised) path.  The WebDAV client uses the authorised
path and can then apply WebDAV methods to maintain the resources.

<div class="blockof code"># WASD_CONFIG_MAP
pass  /web/*    /web/*  ods=5
pass  /davweb/* /web/*  ods=5 webdav=profile webdav=nowinprop

# WASD_CONFIG_AUTH
[&quot;KLAATU&quot;=WASD_VMS_RW=id]
/davweb/*  r+w
</div>

<a id="6.2.6" href="#"></a>
<a id="6.2.6.realworldexample" href="#"></a>
<a id="realworldexample" href="#"></a>
<h3 class="head"><span class="numb">6.2.6</span><span class="text">Real-World Example</span></h3>

<p> The following configuration is taken from a site using WebDAV to allow users
to manage their Web presence.  The user mapping is a fairly standard
configuration for VMS accounts (see
<a class="link blank" target="_blank" href="../config/#Mapping User Directories (tilde character ("~"))">Mapping User Directories (tilde character ("~"))</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).
User Web areas are in the [.WWW] subdirectory of the account home area.

<div class="blockof code"># WASD_CONFIG_MAP
# general and WebDAV access (order is important)

user  /~*/dav/* /*/www/*  webdav=profile notepad=webdav
user  /~*/dav   /*/www    webdav=profile notepad=webdav
if (pass:-1 &amp;&amp; notepad:webdav)  pass  /~*/dav/*  /d1/*/www/*
if (pass:-1 &amp;&amp; notepad:webdav)  pass  /~*/dav/*  /d2/*/www/*

user /~*/* /*/www/* dir=access
if (pass:-1)  pass  /~*/*  /d1/*/www/*
if (pass:-1)  pass  /~*/*  /d2/*/www/*
</div>

<p> The four WebDAV access rules are located before the three general user
access rules.  The WebDAV rules are more specific.  The first USER rule maps
subdirectories - and the parent if a trailing slash is included.  The second
USER rule maps the parent directory for user agents that do not include
trailing slash on their directory specifications (most it seems).

<p> The second pair of rules <span class="high italic">reverse-maps</span> the VMS file-system specifications
represented by the <span class="high italic">result</span> (right side) of the PASS rule into the path
represented by the <span class="high italic">template</span> (left side) of the PASS rule.  Mapping from
file-specifications to paths is necessary because of the way the PROPFIND
method searches the file-system and then reports its results to the client as
URLs.

<p> The use of the <span class="high italic">notepad</span> rule with a string of &quot;webdav&quot; (the actual string
is not significant as long as it is unique within the rules) is  used to
conditionally process the reverse-mapping rules.  They will be applied only to
the requests originally mapped by the USER rules.  The <span class="high italic">pass:-1</span> ensures the
rules are only applied during reverse-mapping, not during request mapping.

<p> The fifth rules maps general Web access to the user area.  Remember, web
access is to a user home subdirectory [.WWW].

<p> The sixth and seventh rules <span class="high italic">reverse-map</span> the VMS file-system
specifications for the general USER rules for similar reasons to those
described above.  Why two?  The user directories occur across two disk volumes
and so each must be reverse-mapped.

<div class="blockof code"># WASD_CONFIG_AUTH

[&quot;VMS username/password&quot;=WASD_VMS_RW=id]
/~*/dav/*  read+write,profile,https:
/~*/dav    read+write,profile,https:
</div>

<p> As noted above, WASD WebDAV requires both mapping and authorization rules
(even for &quot;world&quot; - or non-authenticated - access).

<p> In this case authorisation is only required for WebDAV access.  There are
two rules.  The first authorises subdirectories and parent directories for
agents that supply a trailing slash.  The second for agents that do not provide
a trailing slash.

<a id="6.2.6.0.1" href="#"></a>
<a id="6.2.6.whyusehellip" href="#"></a>
<a id="whyusehellip" href="#"></a>
<h5 class="head"><span class="text">Why use &hellip;</span></h5>

<p> &hellip; two rules for each location?  Why

<div class="blockof code">user  /~*/dav/*  /*/www/*
user  /~*/dav    /*/www
</div>
 rather than

<div class="blockof code">user  /~*/dav*    /*/www*
</div>

which would accomplish a <span class="high italic">similar</span> result?

<p> For finer control.  The first only matches requests with a path of
&quot;/~user/dav/subdir/&quot; and &quot;/~user/dav&quot;, whereas the latter matches
&quot;/~user/dav/subdir/&quot; and &quot;/~user/dav&quot; and 
&quot;/~user/david/&quot; and &quot;/~user/davros&quot;, etc.

<a id="6.3" href="#"></a>
<a id="6.3.webdavmetadata" href="#"></a>
<a id="webdavmetadata" href="#"></a>
<h2 class="head"><span class="numb">6.3</span><span class="text">WebDAV Metadata</span></h2>

<p> Metadata is data (information) about data.  WebDAV uses the concept of a
resource <span class="high italic">property</span>.  There are &quot;live&quot; properties and &quot;dead&quot; properties. 
Essentially the live properties are the dynamic characteristics of a
file-system object represented by creation and modification date-times, object
size, etc.  WebDAV dead properties are those supplied by WebDAV clients as XML
entities and stored associated with the particular WebDAV object, in WASD's
case the file-system object (file or directory).  WASD also uses the file
metadata to store resource lock data (see <a class="link" href="features006.html#6.4.webdavlocking">6.4 WebDAV Locking</a>).

<a id="6.3.0.0.1" href="#"></a>
<a id="6.3.metadatafiles" href="#"></a>
<a id="metadatafiles" href="#"></a>
<h5 class="head"><span class="text">Metadata Files</span></h5>

<p> WASD manages resource metadata using a separate file associated by name with
the data file.  This is done for reasons of programmatic simplicity and for the
convenience of any command-line owner or sysadmin of the resources.  No
specialised tools are required.  This metadata file can be stored in one of
three locations. 

<ol class="list">

<li class="item"> By default, WASD uses a metadata file in the same directory and the same
name with &quot;__wasdav&quot; appended to the extension (type).  All non-WebDAV
WASD functionality ignores &quot;*.*__wasdav;&quot; files (e.g. directory listing,
file GET).  Of course other applications (e.g. directory listing) do not.

<div class="blockof code">&dollar; DIRECTORY/SIZE/DATE 01234*.*

Directory WEB:[DAVweb]

01234^.56789.TXT;1    0.50KB   8-JUN-2009 23:07:19.26
01234^.56789.txt__wasdav;1
                         1KB  19-JUN-2009 03:20:34.50
0123456789.TXT;1      0.50KB   8-JUN-2009 23:06:59.16
0123456789.txt__wasdav;1
                         1KB  19-JUN-2009 03:19:14.67
</div>

<li class="item"> An alternate but still <span class="high italic">local</span> location, is in the WASD_CONFIG_GLOBAL
[WebDAVmetadir] globally specified, or per-path <span class="high italic">SET /path webdav=meta=dir</span>
directives.  If specified as a subdirectory the metadata file is stored in a
subdirectory of the data file directory using the same name with &quot;__wasdav&quot;
appended to the extension  (type).  This is owned by the owner of the parent
directory.  The metadata directory does not appear in WASD WebDAV or file
system listings.  Choose something unique as the name cannot be used elsewhere
in WebDAV space.

<p> For example, with the global directive

<div class="blockof code"># WASD_CONFIG_GLOBAL
[WebDAVmetaDir] [.^.dav]
</div>

specifying a subdirectory with a name containing a leading period (i.e. a
U*x <span class="high italic">hidden</span> file), the data files

<div class="blockof code">Directory WEB:[DAVweb]

01234^.56789.TXT;1    0.50KB   8-JUN-2009 23:07:19.26
0123456789.TXT;1      0.50KB   8-JUN-2009 23:06:59.16
</div>

would have the associated metadata files

<div class="blockof code">Directory WEB:[DAVweb.^.dav]

01234^.56789.txt__wasdav;1
                         1KB  19-JUN-2009 03:20:34.50
0123456789.txt__wasdav;1
                         1KB  19-JUN-2009 03:20:24.77
</div>

<li class="item"> The final alternative uses the same directives as above but specifies a
full directory path.  In this case WebDAV metadata is stored completely
separately from the data.  This can be anywhere in available file-space.  The
web server account requires full access to this directory, with the simplest
method of ensuring this to give ownership to the directory.  This global
location is only suitable for ODS-5 volumes.  Sixteen hexadecimal named
subdirectories are used to partition metadata files with file names generated
using data file full name escaped using extended parse syntax.  Using this
approach a sysadmin can easily locate specific metadata files if required.

<p> For example, with the global directive

<div class="blockof code"># WASD_CONFIG_GLOBAL
[WebDAVmetaDir] DKA0:[WASDAVMETA]
</div>

the data files

<div class="blockof code">Directory WEB:[DAVweb]

01234^.56789.TXT;1    0.50KB   8-JUN-2009 23:07:19.26
0123456789.TXT;1      0.50KB   8-JUN-2009 23:06:59.16
</div>

would have the associated metadata files

<div class="blockof code">Directory DKA0:[WASDAVMETA.06]

web^:^[davweb^]01234^.56789.txt__wasdav;1
                         1KB  19-JUN-2009 03:21:34.40
web^:^[davweb^]0123456789.txt__wasdav;1
                         1KB  19-JUN-2009 03:21:14.67
</div>

</ol>

<a id="6.3.0.0.2" href="#"></a>
<a id="6.3.directorymetadata" href="#"></a>
<a id="directorymetadata" href="#"></a>
<h5 class="head"><span class="text">Directory Metadata</span></h5>

<p> The metadata file associated with a directory is stored in the same metadata
location as files contained by that directory (not in the metadata location
associated with the parent directory that contains the directory file).  This
metadata file is named &quot;.DIR__wasdav&quot; (i.e. no name, just an extension), with
the following example illustrating how this would appear in each of the three
metadata locations, for a subdirectory named &quot;New Folder&quot;.

<div class="blockof code">WEB:[DAVweb.New^_Folder].DIR__wasdav;1
WEB:[DAVweb.New^_Folder.^.dav].DIR__wasdav;1
DKA0:[WASDAVMETA.06]web^:^[davweb^.new^_folder^].dir__wasdav;1
</div>

<a id="6.3.0.0.3" href="#"></a>
<a id="6.3.metadataxml" href="#"></a>
<a id="metadataxml" href="#"></a>
<h5 class="head"><span class="text">Metadata XML</span></h5>

<p> All metadata is stored using XML.  Multiple XML data can be contained in a
single metadata file.  Each can be individually manipulated by a WebDAV client. 
The property elements are stored as-supplied by the client.  It is presumed
that their XML well-formedness is guaranteed by the original request XML
parsing.  Metadata files have content similar to the following:

<div class="blockof code">&dollar; TYPE 0123456789.txt__wasdav;1
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;WASDAV:data xmlns:WASDAV=&quot;WASD.VMS.WebDAV&quot;
updated=&quot;2009-06-18T17:49:14Z 19-JUN-2009 03:19:14&quot;&gt;
&lt;WASDAV:lock
token=&quot;opaquelocktoken:4D462D61B0E0427F19B425EBEEF2CFF6&quot;
depth=&quot;0&quot;
type=&quot;write&quot;
scope=&quot;exclusive&quot;
timeout=&quot;Second-86400&quot;
expires=&quot;2009-06-20T22:49:14Z 21-JUN-2009 08:19:14&quot;&gt;
&lt;WASDAV:owner&gt;&lt;NS:href xmlns:NS=&quot;DAV:&quot;&gt;MGD&lt;/NS:href&gt;&lt;/WASDAV:owner&gt;
&lt;/WASDAV:lock&gt;
&lt;WASDAV:prop&gt;
&lt;NS:one xmlns:NS=&quot;two&quot;&gt;three&lt;/NS:one&gt;
&lt;/WASDAV:prop&gt;
&lt;WASDAV:prop&gt;
&lt;NS:four xmlns:NS=&quot;five&quot;&gt;six&lt;/NS:four&gt;
&lt;/WASDAV:prop&gt;
&lt;WASDAV:prop&gt;
&lt;NS:seven xmlns:NS=&quot;eight&quot;&gt;nine&lt;/NS:seven&gt;
&lt;/WASDAV:prop&gt;
&lt;/WASDAV:data&gt;
</div>

<p> This metadata example contains four properties; an exclusive write lock
owned by &quot;MGD&quot; and three set by a client in three different (contrived)
namespaces.

<div class="note">
<a id="6.3.0.0.4" href="#"></a>
<a id="6.3.metadatashouldnotbeeditedmanually" href="#"></a>
<a id="metadatashouldnotbeeditedmanually" href="#"></a>
<h5 class="head center"><span class="text">Metadata should not be edited manually ...</span></h5>
<hr class="note_hr">
&hellip; unless you really, really know what you're doing.  WASD deletes meta-data
files it does not understand or otherwise considers damaged (with some
resultant loss of information).  Of  course you can, for example to remove a
lock on a resource, but you run the (small) risk of a &quot;lost-update&quot; and other
complications.  And, again of course, full metadata can be deleted at the
command-line.
<hr class="note_hr">
</div>

<a id="6.3.0.0.5" href="#"></a>
<a id="6.3.microsoftmetadata" href="#"></a>
<a id="microsoftmetadata" href="#"></a>
<h5 class="head"><span class="text">Microsoft Metadata</span></h5>

<p> An example of such property meta-data generated by a Microsoft Windows (not
Internet) Explorer client (example wrapped for presentation):

<div class="blockof code">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;WASDAV:data xmlns:WASDAV=&quot;WASD.VMS.WebDAV&quot;
updated=&quot;2007-07-23T01:39:11Z&quot;&gt;
&lt;WASDAV:prop&gt;
&lt;NS:Win32CreationTime xmlns:NS=&quot;urn:schemas-microsoft-com:&quot;&gt;
Tue, 26 Jun 2007 02:00:48 GMT&lt;/NS:Win32CreationTime&gt;
&lt;/WASDAV:prop&gt;
&lt;WASDAV:prop&gt;
&lt;NS:Win32LastAccessTime xmlns:NS=&quot;urn:schemas-microsoft-com:&quot;&gt;
Mon, 23 Jul 2007 01:52:32 GMT&lt;/NS:Win32LastAccessTime&gt;
&lt;/WASDAV:prop&gt;
&lt;WASDAV:prop&gt;
&lt;NS:Win32LastModifiedTime xmlns:NS=&quot;urn:schemas-microsoft-com:&quot;&gt;
Mon, 23 Jul 2007 01:52:32 GMT&lt;/NS:Win32LastModifiedTime&gt;
&lt;/WASDAV:prop&gt;
&lt;WASDAV:prop&gt;
&lt;NS:Win32FileAttributes xmlns:NS=&quot;urn:schemas-microsoft-com:&quot;&gt;
00000020&lt;/NS:Win32FileAttributes&gt;
&lt;/WASDAV:prop&gt;
&lt;/WASDAV:data&gt;
</div>

<p> Every file written or modified by <span class="high italic">Windows Explorer</span> generates this sort
of metadata which is then stored in an associated metadata file and read each
time the data file is accessed.  Some might consider this unnecessary clutter
in most circumstances (I do).  WASD allows this metadata to be suppressed and
equivalent data generated (fudged) from file <span class="high italic">live</span> properties when accessed
- often sufficient for purpose.  To suppress the actual processing of <span class="high italic">Windows
Explorer</span> metadata set a path using the WEBDAV=NOWINPROP in WASD_CONFIG_MAP.

<div class="blockof code">set /webdav/* webdav=NOwinprop
</div>

<a id="6.4" href="#"></a>
<a id="6.4.webdavlocking" href="#"></a>
<a id="webdavlocking" href="#"></a>
<h2 class="head"><span class="numb">6.4</span><span class="text">WebDAV Locking</span></h2>

<p> For efficiency and functionality considerations WebDAV locking may be
enabled and disabled (default) as global functionality using the
WASD_CONFIG_GLOBAL [WebDAVlocking] directive.  Additionally the
WEBVDAV=[NO]LOCKING path SETing can configure this on a per-path basis.

<a id="6.4.0.0.1" href="#"></a>
<a id="6.4.writeaccessonly" href="#"></a>
<a id="writeaccessonly" href="#"></a>
<h5 class="head"><span class="text">Write Access Only</span></h5>

<p> In common with RFC 4918 WASD WebDAV locking controls only write access.
Both exclusive and shared locks are provided.  Locking applies to the DELETE,
LOCK, MKCOL, MOVE, PROPPATCH, PUT, and UNLOCK methods.

<a id="6.4.0.0.2" href="#"></a>
<a id="6.4.lockingdepth" href="#"></a>
<a id="lockingdepth" href="#"></a>
<h5 class="head"><span class="text">Locking Depth</span></h5>

<p> WASD WebDAV locking checks parent collections to a configurable depth. 
WASD_CONFIG_GLOBAL directive [WebDAVlockCollectionDepth] where the default (0
or 1) checks only WebDAV locking on files, 2 WebDAV locking on the parent
directory, 3 on the grandparent, 4 the great-grandparent, etc.  Of course each
level can add significant latency (and expense) to some operations.

<div class="note">
<a id="6.4.0.0.3" href="#"></a>
<a id="6.4.lockdepth0" href="#"></a>
<a id="lockdepth0" href="#"></a>
<h5 class="head center"><span class="text">Lock Depth 0</span></h5>
<hr class="note_hr">
Real world experience has suggested locking depth should be maintained at the
default 0 (or 1), allowing the client explicitly to manage and negotiate
hierarchies of locking if required.  WebDAV  clients (probably correctly)
assume a minimally compliant and relatively unsophisticated WebDAV server.
<hr class="note_hr">
</div>

<p> For more information on locking operation and implementation details see
the DAVLOCK.C module and for meta-data in general the DAVMETA.C module.

<a id="6.4.0.0.4" href="#"></a>
<a id="6.4.lockingtimeout" href="#"></a>
<a id="lockingtimeout" href="#"></a>
<h5 class="head"><span class="text">Locking Timeout</span></h5>

<p> When a client locks a resource it can specify the period for the lock.  In
the absence of such a specification WASD will apply the
[WebDAVlockTimeoutDefault] value (by default 0-01:00:00 - one hour).  WASD also
applies the [WebDAVlockTimeoutMax] maximum lock period (by default 7-00:00:00 -
one week).  When the maximum period expires the lock is no longer valid.

<a id="6.4.0.0.5" href="#"></a>
<a id="6.4.vmsdlmlocking" href="#"></a>
<a id="vmsdlmlocking" href="#"></a>
<h5 class="head"><span class="text">VMS DLM Locking</span></h5>

<p> WASD uses VMS locking to queue and arbitrate access to WebDAV resources
and meta-files.

<p> Two lock modes are employed; 'exclusive', when changes are to be made to the
resource or its meta-data, and 'concurrent read', when resource and/or
meta-data are only to be read.  Concurrent read locks are compatible, but an
exclusive queued against a resource currently being read waits, as does a read
against a current exclusive.

<p> WASD takes out its own VMS DLM locks on resources (files and directories)
before beginning any WebDAV operation, and these prevent conflict with other
WASD WebDAV operations on the same system or cluster, but RMS does not use
these nor does WASD use RMS locks (except when actually acessing the
file-system of course), and so there is potential for interactions between the
two domains (in common with general file-system actvities).  WASD WebDAV
deliberately does not try to block file-system actions from other processing
(except where RMS locks/blocks).  Its own DLM locking is purely for internal
purposes.

<a id="6.5" href="#"></a>
<a id="6.5.somewrinkles" href="#"></a>
<a id="somewrinkles" href="#"></a>
<h2 class="head"><span class="numb">6.5</span><span class="text">Some Wrinkles</span></h2>

<p> Some application/environment-specific considerations when using WASD WebDAV. 
Please report any you encounter for future inclusion in this section.  Also see
<a class="link" href="features006.html#6.6.microsoftmiscellanea">6.6 Microsoft Miscellanea</a> immediately below.

<a id="6.5.1" href="#"></a>
<a id="6.5.1.osxfinder" href="#"></a>
<a id="osxfinder" href="#"></a>
<h3 class="head"><span class="numb">6.5.1</span><span class="text">OS X Finder</span></h3>

<p> OS X Finder requires [WebDAVlocking] enabled for read/write access,
otherwise access will be read-only.

<a id="6.5.2" href="#"></a>
<a id="6.5.2.gnomegvfsnautilus" href="#"></a>
<a id="gnomegvfsnautilus" href="#"></a>
<h3 class="head"><span class="numb">6.5.2</span><span class="text">Gnome/gvfs/Nautilus</span></h3>

<br>As at publication, <span class="high italic">Gnome/gvfs/Nautilus</span> has quite a number of behavioural
problems with associated Bugzilla items.  Don't expect it to behave well!  This
has been my experience.

<a id="6.5.3" href="#"></a>
<a id="6.5.3.dreamweaver" href="#"></a>
<a id="dreamweaver" href="#"></a>
<h3 class="head"><span class="numb">6.5.3</span><span class="text">Dreamweaver</span></h3>

<p> Dreamwever 8 (at least, the only version I have access to) insists on using
a URI with a trailing &quot;/./&quot; occasionally (I'm guessing to specify the &quot;current&quot;
directory - cf.  &quot;/../&quot;, or &quot;parent&quot; syntax).  Just absorb this internally
using an appropriate mapping internal redirect.

<div class="blockof code">redirect /webdav/**/./ /webdav/*/
</div>

<a id="6.6" href="#"></a>
<a id="6.6.microsoftmiscellanea" href="#"></a>
<a id="microsoftmiscellanea" href="#"></a>
<h2 class="head"><span class="numb">6.6</span><span class="text">Microsoft Miscellanea</span></h2>

<p> A cornucopia of of minor and major considerations!

<div class="note">
<a id="6.6.0.0.1" href="#"></a>
<a id="6.6.muchofthisisprewindows10" href="#"></a>
<a id="muchofthisisprewindows10" href="#"></a>
<h5 class="head center"><span class="text">much of this is pre- Windows 10</span></h5>
<hr class="note_hr"> 
and relates to Windows 7, Windows XP and possibly earlier.  Windows 10 and
WebDAV behaviour is very much an unknown quantity.  The following information
continues to be included for historical reference only.
<hr class="note_hr">
</div>

<p> Microsoft approach WebDAV in their own inimitable fashion.  Hence Microsoft
agents, considering their ubiquity, including their mini-redirector are
specifically looked for and functionality modified to accomodate them.

<p> The following is a list topics/issues that were encountered/investigated
during WASD WebDAV development.  They may or may not be applicable to your
site.

<p> Some general references:

<ul class="list simple list0">
<li class="item"> <a class="link blank" target="_blank" href="http://greenbytes.de/tech/webdav/webdav-redirector-list.html">http://greenbytes.de/tech/webdav/webdav-redirector-list.html</a>
<li class="item"> <a class="link blank" target="_blank" href="http://greenbytes.de/tech/webdav/webfolder-client-list.html">http://greenbytes.de/tech/webdav/webfolder-client-list.html</a>
<li class="item"> <a class="link blank" target="_blank" href="http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/">http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/</a>
<li class="item"> <a class="link blank" target="_blank" href="http://www.webdavsystem.com/server/documentation/troubleshooting">http://www.webdavsystem.com/server/documentation/troubleshooting</a>
<li class="item"> <a class="link blank" target="_blank" href="http://www.webdavsystem.com/documentation/troubleshooting">http://www.webdavsystem.com/documentation/troubleshooting</a>
<li class="item"> <a class="link blank" target="_blank" href="http://code.google.com/p/sabredav/wiki/Windows">http://code.google.com/p/sabredav/wiki/Windows</a>
<li class="item"> <a class="link blank" target="_blank" href="http://ulihansen.kicks-ass.net/aero/webdav/">http://ulihansen.kicks-ass.net/aero/webdav/</a>
<li class="item"> <a class="link blank" target="_blank" href="http://chapters.marssociety.org/webdav/">http://chapters.marssociety.org/webdav/</a>
</ul>

<p> DOS/Windows command-line network configuration:

<div class="blockof code">C:\&gt; NET USE Z: http://the.host.name/folder/
C:\&gt; NET USE Z: /DELETE
</div>

<a id="6.6.1" href="#"></a>
<a id="6.6.1.mapping" href="#"></a>
<a id="mapping" href="#"></a>
<h3 class="head"><span class="numb">6.6.1</span><span class="text">Mapping</span></h3>

<p> Microsoft agents (at least) seem to request the server OPTIONS of the server
root regardless of any path provided with the NET USE or other network drive
mapping employed.  To selectively map such a request into a path that has
WebDAV enabled on it (and will therefore respond with the DAV-related options)
use a conditional redirect rule.  For example

<div class="blockof code">if (webdav:)
   if (request-method:OPTIONS) redirect / /dav-path/
endif
</div>

or if only required for MS agents then something more specific

<div class="blockof code">if (webdav:MSagent)
   if (request-method:OPTIONS) redirect / /dav-path/
endif
</div>

<p> Subsequent rules will probably be required to map typeless directory
requests to the actual directory required.

<div class="blockof code">redirect /dav-path /dav-path/
pass /dav-path/* /dav_root/* webdav=read
</div>

<a id="6.6.2" href="#"></a>
<a id="6.6.2.frontpageextensions" href="#"></a>
<a id="frontpageextensions" href="#"></a>
<h3 class="head"><span class="numb">6.6.2</span><span class="text">FrontPage Extensions</span></h3>

<p> Requests containing paths /_vti_inf.html and /_vti_bin/* are related to
FrontPage protocol discovery probing.  They can be adequately handled using a
mapping rule lsuch as the following:

<div class="blockof code">pass /_vti_* &quot;404 Not an MS platform!&quot;
</div>

<a id="6.6.3" href="#"></a>
<a id="6.6.3.avoidingmicrosoftpropertyclutter" href="#"></a>
<a id="avoidingmicrosoftpropertyclutter" href="#"></a>
<h3 class="head"><span class="numb">6.6.3</span><span class="text">Avoiding Microsoft Property Clutter</span></h3>

<p> See <a class="link" href="features006.html#6.3.microsoftmetadata">&lsquo;Microsoft Metadata&rsquo; in 6.3 WebDAV Metadata</a>.

<a id="6.6.4" href="#"></a>
<a id="6.6.4.optionsheaderquotmsauthorviadavquot" href="#"></a>
<a id="optionsheaderquotmsauthorviadavquot" href="#"></a>
<h3 class="head"><span class="numb">6.6.4</span><span class="text">OPTIONS header &quot;MS-Author-Via: DAV&quot;</span></h3>

<ul class="list simple">
<li class="item"> <a class="link blank" target="_blank" href="http://msdn2.microsoft.com/en-us/library/ms691698.aspx">http://msdn2.microsoft.com/en-us/library/ms691698.aspx</a>
</ul>

<p> If the server's response does not contain an MS-Author-Via header, the OLE
DB  Provider for Internet Publishing loads the WEC and WebDAV protocol drivers
one at a time (WEC first, WebDAV second) and asks them, &quot;Do you know how to
handle this URL?&quot;, specifying the exact URL passed in by the client. The first
protocol which responds &quot;yes&quot; is selected. If neither protocol driver responds
&quot;yes&quot; then the method which triggered the automatic driver selection (usually
IBindResource::Bind) fails with an OLE DB Provider for Internet Publishing
specific error code IPP_E_SERVERTYPE_NOT_SUPPORTED.

<a id="6.6.5" href="#"></a>
<a id="6.6.5.repairingbrokenxpwebfolders" href="#"></a>
<a id="repairingbrokenxpwebfolders" href="#"></a>
<h3 class="head"><span class="numb">6.6.5</span><span class="text">Repairing broken XP Web Folders</span></h3>

<ul class="list simple">
<li class="item"> <a class="link blank" target="_blank" href="http://chapters.marssociety.org/webdav/">http://chapters.marssociety.org/webdav/</a>
</ul>

<p> Some Windows XP machines have a broken Web Folders installation. Microsoft
includes a Web Folders repair utility built in to Windows to correct the
problem. Use the following steps to fix the problem:

<ol class="list">
<li class="item"> Click on the &quot;Start&quot; menu in the lower left corner, and select &quot;Run...&quot;
<li class="item"> Type in &quot;webfldrs.msi&quot; and click the &quot;OK&quot; button.
<li class="item"> Click on the &quot;Select reinstall mode&quot; button.
<li class="item"> Select *ALL* of the checkboxes *except* for the second one
(&quot;Reinstall only if file is missing&quot;).
<li class="item"> Click on the &quot;OK&quot; button.
<li class="item"> Click on the &quot;Reinstall&quot; button.
<li class="item"> After the reinstallation is complete, reboot the computer.
</ol>

<a id="6.6.6" href="#"></a>
<a id="6.6.6.addingaportnumbertothewebfolderaddress" href="#"></a>
<a id="addingaportnumbertothewebfolderaddress" href="#"></a>
<h3 class="head"><span class="numb">6.6.6</span><span class="text">Adding a port number to the webfolder-address</span></h3>

<p> Attach the port-number (80 by default) to the http-address you enter into
the field of the &quot;My Network Places&quot;-assistant.  As you can see in the
following image and the linked screenshot, this will force Windows XP to use
the &quot;Microsoft Data Access Internet Publishing Provider DAV 1.1&quot; mechanism
instead of &quot;Microsoft-WebDAV-MiniRedir/5.1.2600&quot;.

<a id="6.6.7" href="#"></a>
<a id="6.6.7.addinganumbersignquotquottothewebfolderaddress" href="#"></a>
<a id="addinganumbersignquotquottothewebfolderaddress" href="#"></a>
<h3 class="head"><span class="numb">6.6.7</span><span class="text">Adding a number-sign (&quot;#&quot;) to the webfolder-address</span></h3>

<p> It is also possible to add the number sign # to the http-address you enter
into  the field of the &quot;My Network Places&quot;-assistant.  As you can see in the
following image and the linked screenshot, this will also force Windows XP to
use the &quot;Microsoft Data Access Internet Publishing Provider DAV 1.1&quot; mechanism
instead of &quot;Microsoft-WebDAV-MiniRedir/5.1.2600&quot;.

<div class="blockof code">http://the.host.name/folder#
</div>

<a id="6.6.8" href="#"></a>
<a id="6.6.8.forcewindowsxptousebasicauthentication" href="#"></a>
<a id="forcewindowsxptousebasicauthentication" href="#"></a>
<h3 class="head"><span class="numb">6.6.8</span><span class="text">Force Windows XP to use Basic Authentication</span></h3>

<p> There is a third way to get this working from the client-site.  As described
in  the Microsoft Knowledge Base, Article ID: 841215, Windows XP disables
&quot;Basic Auth&quot; in his &quot;Microsoft-WebDAV-MiniRedir/5.1.2600&quot;-mechanism by default
for security reasons.  See description below.

<a id="6.6.9" href="#"></a>
<a id="6.6.9.microsoftxpexplorerbasicauthentication" href="#"></a>
<a id="microsoftxpexplorerbasicauthentication" href="#"></a>
<h3 class="head"><span class="numb">6.6.9</span><span class="text">Microsoft XP Explorer BASIC Authentication</span></h3>

<ul class="list simple">
<li class="item"> <a class="link blank" target="_blank" href="http://www.microsoft.com/technet/prodtechnol/winxppro/\maintain/sp2netwk.mspx">http://www.microsoft.com/technet/prodtechnol/winxppro/\maintain/sp2netwk.mspx</a>
</ul>

<p> You can enable BasicAuth by adding the following registry key and setting
it to a non-zero value:

<div class="blockof code">HKEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet\Services\WebClient\Parameters\UseBasicAuth (DWORD)
</div>

<p> If you delete the registry key or set it to 0, the behavior reverts to the
default, or disabling the use of BasicAuth.

<p> Disabling Basic Authentication over a clear channel:

<p> Because the DAVRdr is part of the remote file-system stack, a computer is
open to attack whenever an attempt is made to remotely access files. Although
the threat to other applications that use the Internet APIs is less severe than
it is for the DAVRdr, a similar attack is possible whenever an application (or
the user) attempts to access a URL. For this reason, WinInet is exposing the
mechanism by which the DAVRdr disables BasicAuth to other users of the Internet
APIs.

<p> With Windows XP Service Pack 2, there are two ways to block the use of
Basic Authentication over clear (or unencrypted) channels:
	
<p> Create the following registry key and set it to a non-zero value.

<div class="blockof code">HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion
\InternetSettings\DisableBasicOverClearChannel (DWORD)
</div>

<p> This prevents WININET from attempting to use BasicAuth unless the channel
is secured (HTTPS or SSL).
	
<p> The application can disable the use of BasicAuth for its connections by
setting the AUTH_FLAG_DISABLE_BASIC_CLEARCHANNEL flag (0x4) in the value
supplied in the call to InternetSetOption using INTERNET_OPTION_AUTH_FLAGS.

<p> <span class="high bold"> AND THEN RESTART WINDOWS ***</span>

<a id="6.6.10" href="#"></a>
<a id="6.6.10.microsoftwindows7basicauthentication" href="#"></a>
<a id="microsoftwindows7basicauthentication" href="#"></a>
<h3 class="head"><span class="numb">6.6.10</span><span class="text">Microsoft Windows 7 BASIC Authentication</span></h3>

<p> You can enable BasicAuth by setting the following registry key to the value
3 and restarting the WebClient service:

<div class="blockof code">HKEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel (DWORD)
</div>

<a id="6.6.11" href="#"></a>
<a id="6.6.11.error0x800700dfthefilesizeexceedsthelimitallowedandcannotbesaved" href="#"></a>
<a id="error0x800700dfthefilesizeexceedsthelimitallowedandcannotbesaved" href="#"></a>
<h3 class="head"><span class="numb">6.6.11</span><span class="text">Error 0x800700DF: The file size exceeds the limit allowed and cannot be saved</span></h3>

<p> &quot;In my case I try to copy file over WEBDAV to WEB Client connection e.g. I have
mapped drive to web site. file is about 70MB I can copy small files from the
same WEBDav folder.&quot;

<div class="blockof code">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
</div>

<ol class="list">
<li class="item"> Right click on the FileSizeLimitInBytes and click Modify
<li class="item"> Click on Decimal
<li class="item"> In the Value data box, type 4294967295, and then click OK. Note this 
sets the maximum you can download from the Webdav to 4 gig at one time, I
havent figured out how to make it unlimited so if you want to download more you
need to split it up.
</ol>

<ul class="list simple">
<li class="item"> <a class="link blank" target="_blank" href="http://social.answers.microsoft.com\/Forums/en/xphardware/thread/d208bba6-920c-4639-bd45-f345f462934f">http://social.answers.microsoft.com\/Forums/en/xphardware/thread/d208bba6-920c-4639-bd45-f345f462934f</a>
</ul>

<a id="6.7" href="#"></a>
<a id="6.7.references" href="#"></a>
<a id="references" href="#"></a>
<h2 class="head"><span class="numb">6.7</span><span class="text">References</span></h2>

<p> These are the resources used during WASD WebDAV development.

<ul class="list">

<li class="item"> WebDAV in general:

<ul class="list simple list0">
<li class="item"> <a class="link blank" target="_blank" href="http://webdav.org/">http://webdav.org/</a>
<li class="item"> <a class="link blank" target="_blank" href="http://en.wikipedia.org/wiki/Webdav">http://en.wikipedia.org/wiki/Webdav</a>
<li class="item"> <a class="link blank" target="_blank" href="http://tools.ietf.org/html/rfc4918">http://tools.ietf.org/html/rfc4918</a>
<li class="item"> <a class="link blank" target="_blank" href="http://tools.ietf.org/html/rfc4331">http://tools.ietf.org/html/rfc4331</a> (quota)
<li class="item"> <a class="link blank" target="_blank" href="http://tools.ietf.org/html/rfc2518">http://tools.ietf.org/html/rfc2518</a> (obsoleted by RFC 4918)
</ul>

<li class="item"> WebDAV: Next-Generation Collaborative Web Authoring
<br>Lisa Dusseault, 2003  ISBN: 0130652083

<li class="item"> Using Expat by Clark Cooper:

<ul class="list simple list0">
<li class="item"> <a class="link blank" target="_blank" href="http://en.wikipedia.org/wiki/Expat_(XML)">http://en.wikipedia.org/wiki/Expat_(XML)</a>
<li class="item"> <a class="link blank" target="_blank" href="http://www.xml.com/pub/a/1999/09/expat/index.html">http://www.xml.com/pub/a/1999/09/expat/index.html</a>
<li class="item"> <a class="link blank" target="_blank" href="http://www.xml.com/lpt/a/47">http://www.xml.com/lpt/a/47</a>
</ul>

</ul>

<a id="6.7.0.0.1" href="#"></a>
<a id="6.7.clienttools" href="#"></a>
<a id="clienttools" href="#"></a>
<h5 class="head"><span class="text">Client Tools</span></h5>

<p> All these have been used during WASD WebDAV development.

<ul class="list">

<li class="item">A comprehensive but not exhaustive list
<br><a class="link blank" target="_blank" href="http://www.webdavsystem.com/server/access/">http://www.webdavsystem.com/server/access/</a>
<br><a class="link blank" target="_blank" href="http://www.webdavsystem.com/server/access/clients_comparison">http://www.webdavsystem.com/server/access/clients_comparison</a>

<li class="item">DAVExplorer - a Java-based GUI Explorer-style file navigation tool
<br><a class="link blank" target="_blank" href="http://www.davexplorer.org/">http://www.davexplorer.org/</a>

<li class="item">cadaver - a command-line WebDAV client for *x
<br><a class="link blank" target="_blank" href="http://www.webdav.org/cadaver/">http://www.webdav.org/cadaver/</a>

<li class="item">davfs2 - a mountable WebDAV file-system for Linux
<br><a class="link blank" target="_blank" href="http://savannah.nongnu.org/projects/davfs2">http://savannah.nongnu.org/projects/davfs2</a>

<li class="item">The WebDAV URL handling of KDE 4.2 Dolphin (v1.2)
<br><a class="link blank" target="_blank" href="http://www.webdavsystem.com/server/access/konqueror">http://www.webdavsystem.com/server/access/konqueror</a>  (yup, I know!)
<br>In contrast to Gnome as reported below, KDE and its KIO/Dolphin behave
extrordinarily well.

<li class="item">The WebDAV URL handling of Gnome Nautilus (2.26.2, gvfs/1.2.2)
<br><a class="link blank" target="_blank" href="http://www.webdavsystem.com/server/access/gnome_nautilus">http://www.webdavsystem.com/server/access/gnome_nautilus</a>
<br>As at publication, <span class="high bold">Gnome/gvfs/Nautilus has quite a number of
behavioural problems</span> with associated Bugzilla items.  Don't expect it
to behave reasonably!

<li class="item">The WebDAV handling of Apple Mac macOS X Finder
<br><a class="link blank" target="_blank" href="http://www.webdavsystem.com/server/access/macosx">http://www.webdavsystem.com/server/access/macosx</a>

<li class="item">Windows Explorer - and the associated mini-director, et.al., on XP (not Vista).
<br>See  below.

<li class="item">Another Windows option - try before you buy (i.e. commercial product).
<br>&quot;WebDrive is more than just an FTP Client.&quot; Indeed! It's
functional WebDAV drive-letter client.
<br><a class="link blank" target="_blank" href="http://www.webdrive.com/">http://www.webdrive.com/</a>

<li class="item"> <span class="high bold">And if you really need effective WebDAV on a Windows platform ...</span>
<br>&quot;BitKinex integrates the fuctionality of an innovative FTP, SFTP
and WebDAV client for Windows.&quot;
<br><span class="high bold">And it's FREEWARE!</span>
<br><a class="link blank" target="_blank" href="http://www.bitkinex.com/">http://www.bitkinex.com/</a>

</ul>

<!-- source:0700_PROXY.WASDOC -->

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="features005.html#5.">&#8598;&#xFE0E;</a>
<td><a href="features000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="features007.html#7.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>