[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]
<!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; Utilities and Facilities</title>
<a id="13." href="#"></a>
<a id="13.utilitiesandfacilities" href="#"></a>
<a id="utilitiesandfacilities" href="#"></a>
<h1 class="head chunk">WASD Features and Facilities</h1>
<h1 class="head"><span class="numb">13.</span><span class="text">Utilities and Facilities</span></h1>

<div class="TOC2cols2">
<table class="TOC2table">
<tr><td><a href="features013.html#13.1.echofacility"><span class="numb">13.1</span><span class="text">Echo Facility</span></a>
<tr><td><a href="features013.html#13.2.hissfacility"><span class="numb">13.2</span><span class="text">Hiss Facility</span></a>
<tr><td><a href="features013.html#13.3.streamfacility"><span class="numb">13.3</span><span class="text">Stream Facility</span></a>
<tr><td><a href="features013.html#13.4.wherefacility"><span class="numb">13.4</span><span class="text">Where Facility</span></a>
<tr><td><a href="features013.html#13.5.xrayfacility"><span class="numb">13.5</span><span class="text">Xray Facility</span></a>
<tr><td><a href="features013.html#13.6.calogs"><span class="numb">13.6</span><span class="text">CALogs</span></a>
<tr><td><a href="features013.html#13.7.cspreporter"><span class="numb">13.7</span><span class="text">CSPreport[er]</span></a>
<tr><td><a href="features013.html#13.8.htadmin"><span class="numb">13.8</span><span class="text">HTAdmin</span></a>
<tr><td><a href="features013.html#13.9.httpdmonitor"><span class="numb">13.9</span><span class="text">HTTPd Monitor</span></a>
<tr><td><a href="features013.html#13.10.md5digest"><span class="numb">13.10</span><span class="text">MD5digest</span></a>
<tr><td><a href="features013.html#13.11.qdlogstats"><span class="numb">13.11</span><span class="text">QDLogStats</span></a>
<tr><td><a href="features013.html#13.12.sechanutility"><span class="numb">13.12</span><span class="text">SECHAN Utility</span></a>
<tr><td><a href="features013.html#13.13.streamlfutility"><span class="numb">13.13</span><span class="text">StreamLF Utility</span></a>
<tr><td><a href="features013.html#13.14.wasteeutility"><span class="numb">13.14</span><span class="text">WAStee Utility</span></a>
<tr><td><a href="features013.html#13.15.wotsuputility"><span class="numb">13.15</span><span class="text">WOTSUP Utility</span></a>
</table>
</div>

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

<p> Foreign commands for external utilities (and the HTTPD control
functionality) will need to be assigned from the adminstration users' LOGIN.COM
either explicitly or by calling the
<a class="link blank" target="_blank" href="/wasd_root/example/wasdverbs.com">WASD_ROOT:[EXAMPLE]WASDVERBS.COM</a>
procedure.

<div class="blockof code">&dollar; AB == &quot;&dollar;WASD_EXE:AB&quot;
&dollar; HTTPD == &quot;&dollar;WASD_EXE:HTTPD&quot;
&dollar; HTTPDMON == &quot;&dollar;WASD_EXE:HTTPDMON&quot;
&dollar; MD5DIGEST == &quot;&dollar;WASD_EXE:MD5DIGEST&quot;
&dollar; QDLOGSTATS == &quot;&dollar;WASD_EXE:QDLOGSTATS&quot;
&dollar; SECHAN == &quot;&dollar;WASD_EXE:SECHAN&quot;
&dollar; STREAMLF == &quot;@WASD_EXE:STREAMLF&quot;
&dollar; WB == &quot;&dollar;WASD_EXE:WB&quot;
</div>

<a id="13.1" href="#"></a>
<a id="13.1.echofacility" href="#"></a>
<a id="echofacility" href="#"></a>
<h2 class="head"><span class="numb">13.1</span><span class="text">Echo Facility</span></h2>


<p> Ever had to go to extraordinary lengths to find out exactly what your
browser is sending to the server? The server provides a request echo facility.
This merely returns the complete request as a plain-text document. This can be
used for for checking the request header lines being provided by the browser,
and can be valuable in the diagnosis of POSTed forms, etc.

<p> This facility must be enabled through a mapping rule entry.

<div class="blockof code">script /echo/* /echo/*
</div>

<p> It may then be used with any request merely by inserting &quot;/echo&quot; at
the start of the path, as in the following example.

<div class="blockof code">http://www.example.com/echo/wasd_root/
</div>

<a id="13.2" href="#"></a>
<a id="13.2.hissfacility" href="#"></a>
<a id="hissfacility" href="#"></a>
<h2 class="head"><span class="numb">13.2</span><span class="text">Hiss Facility</span></h2>

<p> The <span class="high italic">hiss</span> facility provides a response stream made up of random
alpha-numeric characters (a sort of alpha-numeric white-noise).  No response
header is generated and the stream will continue (by default) up to one
megabyte of output, or until the client closes the connection. This maximum may
be controlled my appending an integer representing the number of kilobytes
maximum to the mapping. This facility must be enabled through a mapping rule
entry and may then be used for specific requests. 

<div class="blockof code">map /**.dll* /hiss/64/*.dll*
map /**/system32/* /hiss/64/*/system32/*
map /**default.ida* /hiss/64/*default.ida*
script /hiss/* /hiss/*
</div>

<p> Usage details are described in
<a class="link blank" target="_blank" href="../config/#securityconsiderations">Security Considerations</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).

<a id="13.3" href="#"></a>
<a id="13.3.streamfacility" href="#"></a>
<a id="streamfacility" href="#"></a>
<h2 class="head"><span class="numb">13.3</span><span class="text">Stream Facility</span></h2>

<p> The <span class="high italic">stream</span> facility provides a quantified or unlimited response
stream of printable or binary octets.  It is intended as a light-weight data
source delivering content at the maximum throughput capable by the server and
platform.  This can be used as a test source or for end-to-end metrics. This
facility must be enabled through a mapping rule.

<div class="blockof code">script /stream/* /stream/*
</div>

<p> It may then be used to generate streams of data with various
characteristics and sizes by including parameters in the URL.

<ul class="list">

<li class="item"> Without parameters it produces a text/plain response header with unlimited
stream of random 8 bit printable and newline characters.  The stream ceases at
client disconnection.

<div class="blockof code">http://www.example.com/stream/
</div>

<li class="item"> With an integer parameter the stream ceases when the response has
delivered that many kilobytes (1024) of characters.

<div class="blockof code">http://www.example.com/stream/50/
</div>

<li class="item"> A 100 kilobyte stream of repeated 80 column, newline terminated characters
in the range &quot;+&quot; (0x2b) to &quot;z&quot; (ox7a).  Intended to provide an
entirely predictable sequence for testing purposes.

<div class="blockof code">http://www.example.com/stream/text:100/
</div>

<li class="item"> The following produces an application/binary response header with
unlimited stream of random octets.

<div class="blockof code">http://www.example.com/stream/binary/
</div>

<li class="item"> One megabyte of random octets.

<div class="blockof code">http://www.example.com/stream/binary:1024/
</div>

<li class="item"> An unlimited stream of octets cycling from 0x00 to 0xff.   Intended to
provide an entirely predictable sequence for testing purposes.

<div class="blockof code">http://www.example.com/stream/octets/
</div>

</ul>

<a id="13.4" href="#"></a>
<a id="13.4.wherefacility" href="#"></a>
<a id="wherefacility" href="#"></a>
<h2 class="head"><span class="numb">13.4</span><span class="text">Where Facility</span></h2>

<p> Need to locate where VMS has the HTTPd files?  This simple facility maps
the supplied path then parses it to obtain a resulting VMS file specification.
<span class="high bold">This does not demonstrate whether the path actually exists!</span>

<p> This facility must be enabled through a mapping rule entry.

<div class="blockof code">script /where/* /where/*
</div>

<p> It may then be used with any request merely by inserting &quot;/where&quot; at
the start of the path, as in the following example.

<div class="blockof code">http://www.example.com/where/wasd_root/
</div>

<a id="13.5" href="#"></a>
<a id="13.5.xrayfacility" href="#"></a>
<a id="xrayfacility" href="#"></a>
<h2 class="head"><span class="numb">13.5</span><span class="text">Xray Facility</span></h2>


<p> The Xray facility returns a request's complete response, <span class="high bold">both
header and body</span>, as a plain text document.  Being able to <span class="high italic">see</span>
the internals of the response header as well as the contents of the body
rendered in plain text can often be valuable when developing scripts, etc.

<p> This facility must be enabled through a mapping rule entry.

<div class="blockof code">script /Xray/* /Xray/*
</div>

<p> It may then be used with any request merely by inserting &quot;/xray&quot; at
the start of the path, as in the following example.

<div class="blockof code">http://www.example.com/xray/wasd_root/
</div>

<a id="13.6" href="#"></a>
<a id="13.6.calogs" href="#"></a>
<a id="calogs" href="#"></a>
<h2 class="head"><span class="numb">13.6</span><span class="text">CALogs</span></h2>

<p> The Consolidate Access LOGS utility (pronounced similar to the breakfast
cereal brand :-) merges multiple HTTP server common and combined format access
logs into a single log file with records in time-order.  Due to the granularity
of HTTP server entry timestamps (one second) the records are sorted to the one
second but not within the one second.

<p> It uses RMS and the VMS sort-merge routines to provide the basic
consolidation functionality.  An RMS search uses the supplied wildcard log file
specification.  Matching files are opened and each record read.  The date/time
field is parsed and a binary timestamp generated.  Records with formats or
date/time fields that do not make sense to the utility are discarded.  When all
files have been   processed the sort-merge is  performed using the timestamp as
the key.  The sorted records are then written to the specified output file.

<p> <span class="high bold">&dollar; calogs &lt;log-file-spec&gt; [&lt;output-file-name&gt;] [&lt;qualifiers&gt;]</span>

<p> 
<a id="13.6.0.0.1" href="#"></a>
<a id="13.6.parametersandqualifiers" href="#"></a>
<a id="parametersandqualifiers" href="#"></a>
<h5 class="head"><span class="text">Parameters and Qualifiers</span></h5>
<table class="tabl">
<tr class="tabr under">
<th class="tabh">Parameter
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd">/HELP
<td class="tabd">basic usage information
<tr class="tabr">
<td class="tabd">/NOPROXY
<td class="tabd">discard proxy service records
<tr class="tabr backlight">
<td class="tabd">/NOWASD
<td class="tabd">discard WASD server status/timestamp entries
<tr class="tabr">
<td class="tabd">/OUTPUT=
<td class="tabd">alternate method of specifying merged file name
<tr class="tabr backlight">
<td class="tabd">/PROXY
<td class="tabd">discard non-proxy service records
<tr class="tabr">
<td class="tabd">/QUIET
<td class="tabd">no messages apart from errors
<tr class="tabr backlight">
<td class="tabd">/VERBOSE
<td class="tabd">per-file progress messages
<tr class="tabr">
<td class="tabd">/VERSION
<td class="tabd">display the utility version and copyright message
</table>

<a id="13.6.0.0.2" href="#"></a>
<a id="13.6.usageexamples" href="#"></a>
<a id="usageexamples" href="#"></a>
<h5 class="head"><span class="text">Usage Examples</span></h5>

<div class="blockof code">&dollar; CALOGS == &quot;&dollar;WASD_EXE:CALOGS&quot;
&dollar; CALOGS WASD_LOGS:*200205*.LOG 2002_MAY.LOG
&dollar; CALOGS /VERBOSE WASD_LOGS:
&dollar; CALOGS /NOWASD WASD_LOGS:*200206*.LOG_* /OUTPUT=2002_JUNE.LOG
&dollar; CALOGS /PROXY /NOWASD WASD_LOGS:*2002*.LOG 2002_PROXY.LOG
</div>

<a id="13.7" href="#"></a>
<a id="13.7.cspreporter" href="#"></a>
<a id="cspreporter" href="#"></a>
<h2 class="head"><span class="numb">13.7</span><span class="text">CSPreport[er]</span></h2>

<p> Content Security Policy (CSP) is an added layer of security that helps to
detect and mitigate certain types of attacks, including Cross Site Scripting
(XSS) and data injection attacks.

<p class="indent"> <a class="link blank" target="_blank" href="https://en.wikipedia.org/wiki/Content_Security_Policy">https://en.wikipedia.org/wiki/Content_Security_Policy</a>
<br> <a class="link blank" target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP">https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP</a>

<p> WASD provides CSP support using mapping rules.  See
<a class="link blank" target="_blank" href="../config/#contentsecuritypolicycsp">Content Security Policy (CSP)</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>.

<p> When POSTed to, this utility appends a timestamp and CSP report JSON to the
file specified by the CSPREPORT_FILE logical name.  This file must be located
somewhere the scripting account has read+write access to.  When accessed using
a GET the utility accesses the stored CSP reports and returns a formatted HTML
report listing each.  GET requests (reporting) must be subject to
authentication and authorisation.

<p> For further infomation check the descriptive prologue in the
<a class="link blank" target="_blank" href="/wasd_root/src/utils/cspreport.c">WASD_ROOT:[SRC.UTILS]CSPREPORT.C</a> source
code.

<a id="13.8" href="#"></a>
<a id="13.8.htadmin" href="#"></a>
<a id="htadmin" href="#"></a>
<h2 class="head"><span class="numb">13.8</span><span class="text">HTAdmin</span></h2>

<p> The HTAdmin utility assists in with the command-line maintenance of &dollar;HTA
authorization databases.  See 
<a class="link blank" target="_blank" href="../config/#authorizationconfigurationbasics">Authorization Configuration (Basics)</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>
and <a class="link" href="features003.html#3.authenticationandauthorization">3. Authentication and Authorization</a>.

<p> <span class="high bold"> htadmin &lt;database&gt; [&lt;username&gt;] [&lt;qualifiers&gt;]</span>

<a id="13.8.0.0.1" href="#"></a>
<a id="13.8.parametersandqualifiers" href="#"></a>
<a id="parametersandqualifiers" href="#"></a>
<h5 class="head"><span class="text">Parameters and Qualifiers</span></h5>

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Parameter
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd">/ADD
<td class="tabd">add a new record
<tr class="tabr">
<td class="tabd">/CONFIRM
<td class="tabd">confirm deletion of database
<tr class="tabr backlight">
<td class="tabd">/CONTACT=&quot;&lt;string&gt;&quot;
<td class="tabd">contact information for record
<tr class="tabr">
<td class="tabd">/CREATE
<td class="tabd">create a new database
<tr class="tabr backlight">
<td class="tabd">/CSV[=TAB&verbar;char]
<td class="tabd">comma-separated listing (optional character)
<tr class="tabr">
<td class="tabd">/DATABASE=
<td class="tabd">database name (or as command-line parameter)
<tr class="tabr backlight">
<td class="tabd">/DELETE
<td class="tabd">delete a database or username record from a database
<tr class="tabr">
<td class="tabd">/DISABLED
<td class="tabd">username record is disabled (cannot be used)
<tr class="tabr backlight">
<td class="tabd">/EMAIL=&quot;&lt;string&gt;&quot;
<td class="tabd">email address for record
<tr class="tabr">
<td class="tabd">/ENABLED
<td class="tabd">username record is enabled (can be used)
<tr class="tabr backlight">
<td class="tabd">/FULL
<td class="tabd">listing showing full details
<tr class="tabr">
<td class="tabd">/GENERATE
<td class="tabd">generate a six character password
<tr class="tabr backlight">
<td class="tabd">/HELP
<td class="tabd">basic usage information
<tr class="tabr">
<td class="tabd">/[NO]HTTPS
<td class="tabd">synonym for /SSL
<tr class="tabr backlight">
<td class="tabd">/LIST
<td class="tabd">listing (brief by default, see /FULL and /CSV)
<tr class="tabr">
<td class="tabd">/MODIFY
<td class="tabd">synonym for /UPDATE
<tr class="tabr backlight">
<td class="tabd">/NAME=&quot;&lt;string&gt;&quot;
<td class="tabd">full name for username record
<tr class="tabr">
<td class="tabd">/OUTPUT=
<td class="tabd">alternate output for database listing
<tr class="tabr backlight">
<td class="tabd">/PASSWORD[=&lt;string&gt;]
<td class="tabd">username record password (prompts if not supplied)
<tr class="tabr">
<td class="tabd">/PIN
<td class="tabd">generate four-digit &quot;PIN number&quot; for password
<tr class="tabr backlight">
<td class="tabd">/[NO]READ
<td class="tabd">username can/can't read
<tr class="tabr">
<td class="tabd">/SORT[=&lt;parameters&gt;]
<td class="tabd">sort the records into a new/another database
<tr class="tabr backlight">
<td class="tabd">/[NO]SSL
<td class="tabd">user can only authenticate via SSL (&quot;https:&quot;)
<tr class="tabr">
<td class="tabd">/[NO]WRITE
<td class="tabd">username can/can't write
<tr class="tabr backlight">
<td class="tabd">/UPDATE
<td class="tabd">update an existing username record
<tr class="tabr">
<td class="tabd">/USER=&lt;string&gt;
<td class="tabd">username
<tr class="tabr backlight">
<td class="tabd">/VERSION
<td class="tabd">display version of HTADMIN
</table>

<a id="13.8.0.0.2" href="#"></a>
<a id="13.8.usageexamples" href="#"></a>
<a id="usageexamples" href="#"></a>
<h5 class="head"><span class="text">Usage Examples</span></h5>

<ul class="list">

<li class="item"> To create a new database named EXAMPLE.&dollar;HTA (in the current directory)

<div class="blockof code">&dollar; HTADMIN EXAMPLE /CREATE
</div>

<li class="item"> Delete an existing database

<div class="blockof code">&dollar; HTADMIN EXAMPLE /DELETE /CONFIRM
</div>

<li class="item"> List (briefly) the records

<div class="blockof code">&dollar; HTADMIN EXAMPLE
</div>

<li class="item"> List (briefly) the specific user record DANIEL

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL
</div>

<li class="item"> List all detail (132 colums) of the specified user record

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /FULL
</div>

<li class="item"> To add the new record DANIEL with default read access

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /ADD /NAME=&quot;Mark Daniel&quot; 
</div>

<li class="item"> Add the new record DANIEL with contact details and read+write access

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /ADD /WRITE /CONTACT=&quot;Postal Address&quot;
</div>

<li class="item"> Add the new record DANIEL and be prompted for a password, or to specify the
password on the command-line, or have the utility generate a password or
four-digit PIN style password (which is displayed after the record is
sucessfully added)

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /ADD /NAME=&quot;Mark Daniel&quot; /PASSWORD
&dollar; HTADMIN EXAMPLE DANIEL /ADD /NAME=&quot;Mark Daniel&quot; /PASSWORD=cher10s
&dollar; HTADMIN EXAMPLE DANIEL /ADD /NAME=&quot;Mark Daniel&quot; /GENERATE
&dollar; HTADMIN EXAMPLE DANIEL /ADD /NAME=&quot;Mark Daniel&quot; /PIN
</div>

<li class="item"> To update an existing record

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /UPDATE /EMAIL=&quot;Mark.Daniel@wasd.vsm.com.au&quot;
</div>

<li class="item"> Update the specified record's password (interactively) then to generate a four
digit PIN for a password (which is then displayed)

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /UPDATE /PASSWORD
&dollar; HTADMIN EXAMPLE DANIEL /UPDATE /GENERATE
&dollar; HTADMIN EXAMPLE DANIEL /UPDATE /PIN
</div>

<li class="item"> Disable then enable an existing user record without changing anything else

<div class="blockof code">&dollar; HTADMIN EXAMPLE DANIEL /UPDATE /DISABLE
&dollar; HTADMIN EXAMPLE DANIEL /UPDATE /ENABLE
</div>

<li class="item"> To list the entire database, first briefly, then in 132 column mode (with all
detail), then finally as a comma-separated listing

<div class="blockof code">&dollar; HTADMIN EXAMPLE
&dollar; HTADMIN EXAMPLE /FULL
&dollar; HTADMIN EXAMPLE /CSV
</div>

</ul>

<a id="13.8.0.0.3" href="#"></a>
<a id="13.8.sortdetails" href="#"></a>
<a id="sortdetails" href="#"></a>
<h5 class="head"><span class="text">Sort Details</span></h5>

<p> The /SORT qualifier sorts the current database records according to the
/SORT= parameters.  It can be used with the /LIST qualifier to produce ordered
reports or will output the records into another authentication file.  By
default it sorts ascending by username.  Qualifier parameters allow a sort by
DATE or COUNT.  Each of these allows the further specification of which date or
count; ACCESS, CHANGE or FAILURE.

<ul class="list">


<li class="item"> Generating a listing with specified order

<div class="blockof code">&dollar; HTADMIN EXAMPLE /LIST /SORT=DATE=ACCESS
&dollar; HTADMIN EXAMPLE /LIST /SORT=COUNT=FAILURE /OUTPUT=EXAMPLE.LIS
</div>

<li class="item"> Sort descending by username into a higher version of EXAMPLE.&dollar;HTA

<div class="blockof code">&dollar; HTADMIN EXAMPLE /SORT
</div>

<li class="item"> To sort by username into another .&dollar;HTA file

<div class="blockof code">&dollar; HTADMIN EXAMPLE /SORT /OUTPUT=ANOTHER
</div>

<li class="item"> List by most-recently accessed

<div class="blockof code">&dollar; HTADMIN EXAMPLE /LIST /SORT=DATE
</div>

<li class="item"> List by most-recently failed to authenticate

<div class="blockof code">&dollar; HTADMIN EXAMPLE /LIST /SORT=DATE=FAILURE
</div>

<li class="item"> Sort file into order by most frequently authenticated (accessed)

<div class="blockof code">&dollar; HTADMIN EXAMPLE /SORT=COUNT
</div>

</ul>

<a id="13.9" href="#"></a>
<a id="13.9.httpdmonitor" href="#"></a>
<a id="httpdmonitor" href="#"></a>
<h2 class="head"><span class="numb">13.9</span><span class="text">HTTPd Monitor</span></h2>

<p> The HTTP server may be monitored in real-time using the HTTPDMON utility.

<a class="imglink" target="_blank" href="./httpdmon.png"><img class="image" src="./httpdmon.png"></a>

<p> This utility continuously displays a screen of information comprising four
or five of the following sections: 

<ol class="list">


<li class="item"> <span class="high bold">System Information</span>
<br>
The nodename, instance number(s), monitor version and current date/time.

<li class="item"> <span class="high bold">Process Information</span>
<br>
HTTPd process information includes its up-time, CPU-time consumed (excluding 
any subprocesses), I/O counts, and memory utilization.  The &quot;Servers:&quot;
item shows how many servers are currently running on the node/cluster.  Changes
in this count are indicated by the second, parenthesized number.

<li class="item"> <span class="high bold">General Server Counters</span>
<br>
The server counters keep track of the total connections received, accepted, 
rejected, etc., totals for each request type (file transfer, directory 
listing, image mapping, etc.).

<br> <sup>**</sup> The request count of 3.8M is a real value, as are the
others, with the screenshot taken during x86-64 (V9.1-A) testing using OWASP
ZAP.

<li class="item"> <span class="high bold">Proxy Serving Counters</span>
<br>
The server counters keep track of proxy serving connections, network and cache
traffic, cache status, etc.

<li class="item"> <span class="high bold">Latest Request</span>
<br>
This section provides the response status code, and some transaction
statistics, the service being accessed, originating host and HTTP request. 
Note that long request strings may be truncated (indicated by a bolded
ellipsis).

<li class="item"> <span class="high bold">Status Message</span>
<br>
If the server is in an exceptional condition, for example exited after a fatal
error, starting up, etc., a textual message may be displayed in place of the
the request information.  This may be used to initiate remedial actions, etc.

</ol>

<p> The &quot;/HELP&quot; qualifier provides a brief usage summary.

<p> The server counter values are carried over when a server (re)starts 
(provided the system has stayed up).  To reset the counters use the online
Server Administration facility (<a class="link" href="features009.html#9.serveradministration">9. Server Administration</a>).

<p> If [DNSlookup] is disabled for the HTTP server the HTTPDMON utility
attempts to resolve the literal address into a host name. This may be disabled
using the /NORESOLVE qualifier.

<a id="13.10" href="#"></a>
<a id="13.10.md5digest" href="#"></a>
<a id="md5digest" href="#"></a>
<h2 class="head"><span class="numb">13.10</span><span class="text">MD5digest</span></h2>

<p> From RFC1321 &hellip;

<p> &quot; The [MD5] algorithm takes as input a message of arbitrary length
and produces as output a  128-bit &quot;fingerprint&quot; or &quot;message digest&quot; of the
input. It is conjectured that it is computationally infeasible to produce two
messages having the same message digest, or to produce any message having a
given prespecified target message digest. &quot;

<p> The MD5DIGEST utility is primarily provided with WASD for verifying kits
as unchanged from the originals released.  With the proliferation of mirror
sites and other distribution resources it has become good practice to ensure
kits remain unchanged from release, to distribution, to installation site
(changes due to to data corruption or malicious intent - as remote a
possibility as that may seem).  Of course it may also be used for any other
purpose where the MD5 hash is useful.

<p> For verifying the contents of a WASD release connect to the
<span class="high bold">original</span> WASD distribution site, refer to the download page,
and make a comparison between the release MD5 hash found against the list of
all archive hashes and the MD5 hash of your archive.  That can be done as
follows

<div class="blockof code">&dollar; MD5DIGEST == &quot;&dollar;WASD_EXE:MD5DIGEST&quot;
&dollar; MD5DIGEST device:[dir]archive.ZIP
</div>
 The result will look similar to

<div class="blockof code">MD5 (kits:[000000]htroot710.zip;1) = 404bbdfe0f847c597b034feef2d13d2d
</div>

<p> Of course, if you have not yet installed your first WASD distribution using
the MD5DIGEST utility that is part of it is not feasable.  The original site
can provide kits and pre-built executables for this purpose.

<a id="13.11" href="#"></a>
<a id="13.11.qdlogstats" href="#"></a>
<a id="qdlogstats" href="#"></a>
<h2 class="head"><span class="numb">13.11</span><span class="text">QDLogStats</span></h2>

<p> <span class="high bold">Quick-and-Dirty LOG STATisticS</span> is a utility to extract
very elementary statistics from Web server common/combined format log files. 
It is intended for those moments when we think &quot;I wonder how many times
that new archive has been downloaded?&quot;, &quot;How much data was transfered
during November?&quot;, &quot;How often is <span class="high italic">such-and-such</span> a client
using the authenticated <span class="high italic">so-and-so</span> service?&quot;, &quot;How much has
the mail service been used?&quot; &hellip; and want the results in a matter of
seconds (or at least a few tens of seconds ;-)   It is available at the
command-line and as a CGI script.

<a class="imglink" target="_blank" href="./qdlogstats.png"><img class="image" src="./qdlogstats.png"></a>

<p> For QDLOGSTATS to be available as a CGI script it <span class="high bold">must</span> have authorization
enabled against it (to prevent potential ad hoc browsing of a site's logs). 
The following provides some indication of this configuration, although of
course it requires tailoring for any given site.

<div class="blockof code">[VMS]
/cgi-bin/qdlogstats ~webadmin,131.185.250.*,r+w ;
</div>

<p> It could then be accessed using

<div class="blockof code">http://the.host.name/cgi-bin/qdlogstats
</div>

<p> The initial access provides a form allowing the various filters and other
behaviours to be selected.  The CGI form basically parallels the command-line
behaviour described below.

<a id="13.11.0.0.1" href="#"></a>
<a id="13.11.filters" href="#"></a>
<a id="filters" href="#"></a>
<h5 class="head"><span class="text">Filters</span></h5>

<p> A number of filters allow subsets of the log contents to be selected. 
These filters support the same string matching expressions as the server (see
<a class="link blank" target="_blank" href="../config/#stringmatching">String Matching</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).

<p> A knowlege of the format and contents of the <span class="high italic">common</span> and
<span class="high italic">combined</span> log formats will assist in deciding which and to what
purpose filters should be used.  Record filtering is done in the same order as
is finally displayed, so <span class="high italic">method</span> would be processed before
<span class="high italic">user-agent</span> for instance.  Normally a record match terminates on the
first non-matched filter (to expedite processing).  To compare and report each
filter for every record apply the /ALL qualifier.  To view records as they are
processed use the /VIEW qualifier.  This by default displays all matched
records, but the optional =ALL or =NOMATCH parameters will display all records, 
or all those but the matches.

<p> <span class="high bold"> QDLOGSTATS log-file-spec [pattern qualifiers]
[other qualifiers]</span>

<a id="13.11.0.0.2" href="#"></a>
<a id="13.11.parametersandqualifiers" href="#"></a>
<a id="parametersandqualifiers" href="#"></a>
<h5 class="head"><span class="text">Parameters and Qualifiers</span></h5>

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Parameter
<th class="tabh">Description
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd">/ALL
<td class="tabd">compare and report on all supplied filters
<tr class="tabr">
<td class="tabd">/AUTHUSER=
<td class="tabd">pattern (any authenticated username)
<tr class="tabr backlight">
<td class="tabd">/BEFORE=
<td class="tabd">log files before this VMS date/time
<tr class="tabr">
<td class="tabd">/CLIENT=
<td class="tabd">pattern (client host name or IP address)
<tr class="tabr backlight">
<td class="tabd">/DATETIME=
<td class="tabd">pattern (&quot;11/Jun/1999:14:08:49 +0930&quot;)
<tr class="tabr">
<td class="tabd">/DECODE[=<span class="high italic">keyword</span>]
<td class="tabd">URL-decode PATH, QUERY,
REFERER before match
<tr class="tabr backlight">
<td class="tabd">/METHOD=
<td class="tabd">pattern (HTTP &quot;GET&quot;, &quot;POST&quot;, etc.)
<tr class="tabr">
<td class="tabd">/OUTPUT=
<td class="tabd">file specification
<tr class="tabr backlight">
<td class="tabd">/PATH=
<td class="tabd">pattern (URL path component only)
<tr class="tabr">
<td class="tabd">/PROGRESS
<td class="tabd">show progress during processing; a &quot;+&quot; for each
file started, a &quot;.&quot; for each 1000 records processed
<tr class="tabr backlight">
<td class="tabd">/QUERY=
<td class="tabd">pattern (URL query component only)
<tr class="tabr">
<td class="tabd">/REFERER=
<td class="tabd">pattern (HTTP &quot;Referer:&quot; field, COMBINED only)
<tr class="tabr backlight">
<td class="tabd">/REMOTEID=
<td class="tabd">pattern (RFC819 file)
<tr class="tabr">
<td class="tabd">/RESPONSE=
<td class="tabd">pattern (HTTP response code)
<tr class="tabr backlight">
<td class="tabd">/SINCE=
<td class="tabd">log files after this VMS date/time
<tr class="tabr">
<td class="tabd">/SIZE[=<span class="high italic">keyword</span>]
<td class="tabd">response size (in bytes)
MIN=<span class="high italic">integer</span> MAX=<span class="high italic">integer</span>
<tr class="tabr backlight">
<td class="tabd">/USERAGENT=
<td class="tabd">pattern (HTTP &quot;User-Agent:&quot; field, COMBINED
only)
<tr class="tabr">
<td class="tabd">/VIEW[=type]
<td class="tabd">display matching log records (ALL, NOMATCH, MATCH)
</table>


<a id="13.11.0.0.3" href="#"></a>
<a id="13.11.usageexamples" href="#"></a>
<a id="usageexamples" href="#"></a>
<h5 class="head"><span class="text">Usage Examples</span></h5>

<ul class="list">

<li class="item"> Records from September 1999.
<div class="blockof code">&dollar; QDLOGSTATS WASD_LOGS:*1999*.LOG /DATE=&quot;*/SEP/1999*&quot;
</div>

<li class="item"> Records where the browser was an X-based Netscape Navigator
<div class="blockof code">&dollar; QDLOGSTATS WASD_LOGS:*.LOG /USERAGENT=*MOZILLA*X11*
</div>

<li class="item"> Records of POST method requests
<div class="blockof code">&dollar; QDLOGSTATS WASD_LOGS:*.LOG /METHOD=POST
</div>

<li class="item"> Records requesting a particular path
<div class="blockof code">&dollar; QDLOGSTATS WASD_LOGS:*.LOG /PATH=&quot;/cgi-bin/*&quot;
</div>

<li class="item"> Select proxy records requesting (a) particular site(s)
<div class="blockof code">&dollar; QDLOGSTATS WASD_LOGS:*8080*.LOG /PATH=&quot;http://*.compaq.com*&quot;
&dollar; QDLOGSTATS WASD_LOGS:*8080*.LOG /METHOD=POST /PATH=&quot;http://*sex*.*/*&quot; /VIEW
</div>

<li class="item"> Records where the request was authenticated
<div class="blockof code">&dollar; QDLOGSTATS WASD_LOGS:*.LOG /AUTHUSER=DANIEL
</div>

</ul>

<a id="13.12" href="#"></a>
<a id="13.12.sechanutility" href="#"></a>
<a id="sechanutility" href="#"></a>
<h2 class="head"><span class="numb">13.12</span><span class="text">SECHAN Utility</span></h2>

<p> The SECHAN utility (pronounced &quot;session&quot;) is used by
[INSTALL]SECURE.COM and associated procedures to make file system security
settings.  It is also available for direct use by the site administrator.  See
<a class="link blank" target="_blank" href="../config/#securityconsiderations">Security Considerations</a> of <a class="link blank" target="_blank" href="../config/#0.">WASD Configuration</a>).

<a id="13.13" href="#"></a>
<a id="13.13.streamlfutility" href="#"></a>
<a id="streamlfutility" href="#"></a>
<h2 class="head"><span class="numb">13.13</span><span class="text">StreamLF Utility</span></h2>

<p> This simple procedure used the FDL facility to convert files to STREAM_LF
format. The WASD HTTPd  server access STREAM_LF files in block/IO-mode, far
more efficiently that the record-mode required by variable-record format files.

<p> <span class="high bold">NOTE: </span> The server can also be configured to automatically
convert any VARIABLE record format files it encounters to STREAM_LF.

<a id="13.14" href="#"></a>
<a id="13.14.wasteeutility" href="#"></a>
<a id="wasteeutility" href="#"></a>
<h2 class="head"><span class="numb">13.14</span><span class="text">WAStee Utility</span></h2>

<p> WAStee is a utility to generate time-stamped log files containing intervals
of a long-lived WASD server process, and/or to consolidate all process log
files generated during the defined period.  It is the tee in a PIPE sequence.

<p> This utility is UNSUITABLE for sites using multiple instances and/or
environments on a node.  Only the first of multiple server processes will have
the log teed.

<p> For further information check the descriptive prologue in the
<a class="link blank" target="_blank" href="/wasd_root/src/utils/wastee.c">WASD_ROOT:[SRC.UTILS]WASTEE.C</a> source code.

<a id="13.15" href="#"></a>
<a id="13.15.wotsuputility" href="#"></a>
<a id="wotsuputility" href="#"></a>
<h2 class="head"><span class="numb">13.15</span><span class="text">WOTSUP Utility</span></h2>

<p> The &quot;WASD Over-The-Shoulder Uptime Picket&quot; is designed to monitor
WASD in a production environment for the purpose of alerting operations staff
to conditions which might cause that production to be adversely impacted.

<p> Alert triggers include:

<ul class="list list0">
<li class="item"> server image exit and/or startup (default)
<li class="item"> server process non-existent or suspended (default)
<li class="item"> percentage thresholds on process quotas (optional)
<li class="item"> rates of HTTP status counter change (optional)
<li class="item"> maximum period without request processing (optional)
</ul>

<p> Alert reports can be delivered via any combination of:

<ul class="list list0">
<li class="item"> OPCOM message
<li class="item"> MAIL
<li class="item"> site-specific DCL command executed in a spawned subprocess
<li class="item"> log file entry
</ul>

<p> The utility runs in a detached process and monitors the server environment
by periodically polling various server data at a default interval is 15
seconds.  As the utility requires access to global memory accounting a
per-system WOTSUP is required for each node to be monitored.

<p> The following (somewhat contrived) example illustrates the format and
content of a WOTSUP report delivered via OPCOM.  Reports delivered via other
mechanisms have the same content and similar format.

<div class="blockof code">%%%%%%%%%%  WOTSUP  24-OCT-2006 13:32:56.44  %%%%%%%%%%%
Message from user SYSTEM on KLAATU
Over-The-Shoulder (WASD_WOTSUP) reports:
1. server PID 001C0950 exit %X00000001 (%SYSTEM-S-NORMAL)
2. server STARTUP (10)
3. server PIDs are 0018C14F (HTTPd:80), 001C0950 (HTTPe:80)
4. pagfilcnt:395432 pgflquota:500000 79% &lt;= 80%
</div>

<p> For further information check the descriptive prologue in the
<a class="link blank" target="_blank" href="/wasd_root/src/utils/wotsup.c">WASD_ROOT:[SRC.UTILS]WOTSUP.C</a> source code.
<!-- source:1400_INDEX.WASDOC -->

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