[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]
|set|toc2=next=cols=2,80|
|1WebDAV|

|^ Web-based Distributed Authoring and (not) Versioning for the WASD package.

|^ 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).

|^ 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.

|^ WASD proxy-serving supports WebDAV methods, header fields, etc.

|^ 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.

|^ 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.

|^ 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.

|^ 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.

|^ See sections below on file-system operation method restrictions.

|note|
|0Caution|
If using WebDAV in any serious fashion the likes of
|code|
$ HTTPD/DO=RESTART=NOW
|!code|

|^ during server WebDav file-system modifications is a recipe for
inconsistency and/or corruption!
|!note|

|2HTTP Methods Supported|

|^ A list of WebDAV methods, what WASD does with them, and any limitations or
restrictions.  Some of these are familiar HTTP/1.|/n| methods and other are
RFC 4981 specific.  Some of the HTTP/1.|/n| 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
"|...|Restrictions" below.

|table|
|~_ |: Method|: Description
|~
|~#* |. COPY** |. 
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.
|~ |. DELETE** |. deletes files and directory trees
|~ |. GET |. just the vanilla HTTP/1.1 behaviour
|~ |. HEAD |. ditto
|~ |. LOCK** |. see WEBDAV LOCKING below
|~ |. MKCOL** |. create a directory
|~ |. MOVE** |. 
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.
|~ |. OPTIONS |. 
If WebDAV is enabled and available for the path this reports the WebDAV
extension methods
|~ |. PROPFIND** |. 
Retrieves the requested file characteristics, DAV lock status and
'dead' properties for individual files, a directory and its child files, or a
directory tree.
|~ |. PROPPATCH** |. set and remove 'dead' meta-data properties
|~ |. PUT |. 
Against a WebDAV resource behaves a little differently to historical
WASD implementation of PUT.
|~ |. UNLOCK** |. see WebDAV locking below
|~#^* |.  |. **|/WebDAV RFC 4918 method||
|!table|

|^ WASD Statistics Reports gather WebDAV related data.  Where a method can be
used both for vanilla HTTP/1.|/n| and WebDAV purposes it is counted in
WebDAV statistics if the request header contains some other indication of a
WebDAV activity.

|3COPY Restrictions|

|^ 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.

|^ 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.

|3DELETE Restrictions|

|^ 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!

|^ 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!

|3MOVE Restrictions|

|^ 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.

|^ 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.

|^ 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.

|3If: Restrictions|

|^ The conditional "If:" 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 "If:" 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.

|2WebDAV Configuration|

|^ WebDAV and its features are globally enabled and configured using
directives contained in the WASD_CONFIG_GLOBAL configuration file.

|table|
|~_ |: Directive|: Description
|~
|~#* |. [PutMaxKBytes] |. maximum size of a file (PUT and POST)
|~ |. [WebDAV] |. This directive enables and disables WebDAV.
|~ |. [WebDAVlocking] |. Enables and disables WebDAV locking.
|~ |. [WebDAVlockTimeoutDefault] |. see |link|Locking Timeout|
|~ |. [WebDAVlockTimeoutMax] |. see |link|Locking Timeout|
|~ |. [WebDAVlockCollectionDepth] |. See |link|Locking Depth|
|~ |. [WebDAVmetaDir] |. see |link|WebDAV Metadata|
|~ |. [WebDAVquota] |. Enables and disables RFC 4331 functionality (disk quota
reporting).
|!table|

|^ In addition these and other configurations are provided on a per-path basis
using mapping rules.

|3WebDAV Set Rules|

|^ WASD request processing rules (see
|link%|../config/##Request Processing Configuration++of++WASD Configuration||)
may be used on a per-path basis to modify (some) global configuration settings
and provide other WevDAV configuation. 

|table|
|~_ |: Rule|: Description
|~
|~#* |. ODS=NAME=|/8BIT\|UTF8\|DEFAULT| |. 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 |link|File Naming||)
|~ |. PUT=MAX=<integer> \| * |. Maximum number of kilobytes file
size, if "*" then effectively unlimited (per-path equivalent of the global
directive [PutMaxKBytes]).
|~ |. WEBDAV=[NO]HIDDEN |. list (default) or hide U*x |/hidden||
files (i.e. those with names beginning with period)
|~ |. WEBDAV=[NO]LOCK |. allow/apply WebDAV locking to this path
|~ |. WEBDAV=[NO]PROFILE |. WebDAV access according to SYSUAF profile
|~ |. WEBDAV=[NO]PROP |. allow/apply WebDAV 'dead' property(ies) to this path
|~ |. WEBDAV=[NO]PUT=LOCK |. a resource must be locked before a PUT is allowed
|~ |. WEBDAV=[NO]READ |. WebDAV methods allowed read this tree
|~ |. WEBDAV=[NO]SERVER |. WebDAV access as server account (best effort)
|~ |. WEBDAV=[NO]WINPROP |. when NOWINPROP windows properties are ignored and emulated
|~ |. WEBDAV=[NO]WRITE |. WebDAV methods allowed write to this path (implied read)
|~ |. WEBDAV=LOCK=TIMEOUT=DEFAULT= |. hh:mm:ss
|~ |. WEBDAV=LOCK=TIMEOUT=MAX= |. hh:mm:ss
|~ |. WEBDAV=META=DIR= |. per-path equivalent of global [WevbDAVmetaDir]
(see |link|WebDAV Metadata||)
|!table|

|^ 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.

|3File Naming|

|^ 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.

|^ For example, the English language word "na\&#239;ve", having a diaeresis
mark over the "i" 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 ".TXT" by default would have the sequence of 8-bit
characters

|code|
0x6E 0x61 0xEF 0x76 0x65 0x2e 0x54 0x58 0x54
|!code|

and if the path had been set |/ods=name=utf8| the sequence would be

|code|
0x6E 0x61 0xC3 0xAF 0x76 0x65 0x2E 0x54 0x58 0x54
|!code|

|^ "Index of" (directory) listings will honour a path set |/ods=name=utf8| and
make the listing character set UTF-8 resulting in a browser correctly rendering
the name (WebDAV listings are by definition UTF-8).

|0File Name Ambiguity||

|^ 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.

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

|^ In addition, the two files
|
|code|
This^_is^_an^_EXAMPLE.txt;1
This^_is^_an^_EXAMPLE^.txt.;1
|!code|
|
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.
|
|code|
This is an EXAMPLE.txt
This is an EXAMPLE.txt
|!code|

|^ 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.

|note|
|0Avoid "Interesting" File Names|
While most of these are corner-cases it is best to try and avoid
|/interesting| 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.
|!note|

|3File-system Access|

|^ Is controlled using the mapping rules:

|table|
|~_ |: Rule|: Description
|~
|~ |. WEBDAV=PROFILE |. access using request SYSUAF-authenticated security
profile
|~ |. WEBDAV=WRITE |. unconditional permission to read/write
|~ |. WEBDAV=READ |. unconditional permission to read
|~ |. WEBDAV=SERVER |. access using server account permissions
|!table|

|^ All access by WebDAV operations |*must have at least one set| 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.

|^ 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. 

|^ In addition WebDAV access requires an authorisation rule against each path.

|3File-system Authorisation|

|^ All access by WebDAV operations |*must have one set| against the path.

|^ 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.

|^ These is the test-bench environment used during development:

|code|
# WASD_CONFIG_MAP
pass  /dweb/*  /dweb/*  ods=5 webdav=write webdav=nowinprop

# WASD_CONFIG_AUTH
["KLAATU"=WASD_VMS_RW=id]
/dweb/*  r+w
|!code|

|^ 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.

|^ For test-benching you could avoid authorisation issues completely with:

|code|
# WASD_CONFIG_AUTH
[world]
/dweb/*  r+w
|!code|

|3Concurrent Authorisation|

|^ 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.

|code|
# WASD_CONFIG_MAP
pass  /web/*    /web/*  ods=5
pass  /davweb/* /web/*  ods=5 webdav=profile webdav=nowinprop

# WASD_CONFIG_AUTH
["KLAATU"=WASD_VMS_RW=id]
/davweb/*  r+w
|!code|

|3Real-World Example|

|^ 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
|link%|../config/##Mapping User Directories (tilde character ("~"))++of++WASD Configuration||).
User Web areas are in the [.WWW] subdirectory of the account home area.

|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 && notepad:webdav)  pass  /~*/dav/*  /d1/*/www/*
if (pass:-1 && notepad:webdav)  pass  /~*/dav/*  /d2/*/www/*

user /~*/* /*/www/* dir=access
if (pass:-1)  pass  /~*/*  /d1/*/www/*
if (pass:-1)  pass  /~*/*  /d2/*/www/*
|!code|

|^ 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).

|^ The second pair of rules |/reverse-maps| the VMS file-system specifications
represented by the |/result| (right side) of the PASS rule into the path
represented by the |/template| (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.

|^ The use of the |/notepad| rule with a string of "webdav" (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 |/pass:-1| ensures the
rules are only applied during reverse-mapping, not during request mapping.

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

|^ The sixth and seventh rules |/reverse-map| 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.

|code|
# WASD_CONFIG_AUTH

["VMS username/password"=WASD_VMS_RW=id]
/~*/dav/*  read+write,profile,https:
/~*/dav    read+write,profile,https:
|!code|

|^ As noted above, WASD WebDAV requires both mapping and authorization rules
(even for "world" - or non-authenticated - access).

|^ 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.

|0Why use |...||

|^ |...| two rules for each location?  Why

|code|
user  /~*/dav/*  /*/www/*
user  /~*/dav    /*/www
|!code|
 rather than

|code|
user  /~*/dav*    /*/www*
|!code|

which would accomplish a |/similar| result?

|^ For finer control.  The first only matches requests with a path of
"/~user/dav/subdir/" and "/~user/dav", whereas the latter matches
"/~user/dav/subdir/" and "/~user/dav" and 
"/~user/david/" and "/~user/davros", etc.

|2WebDAV Metadata|

|^ Metadata is data (information) about data.  WebDAV uses the concept of a
resource |/property||.  There are "live" properties and "dead" 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 |link|WebDAV Locking||).

|0Metadata Files||

|^ 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. 

|number|

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

|code|
$ 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
|!code|

|item| An alternate but still |/local| location, is in the WASD_CONFIG_GLOBAL
[WebDAVmetadir] globally specified, or per-path |/SET /path webdav=meta=dir|
directives.  If specified as a subdirectory the metadata file is stored in a
subdirectory of the data file directory using the same name with "__wasdav"
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.

|^ For example, with the global directive

|code|
# WASD_CONFIG_GLOBAL
[WebDAVmetaDir] [.^.dav]
|!code|

specifying a subdirectory with a name containing a leading period (i.e. a
U*x |/hidden| file), the data files

|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
|!code|

would have the associated metadata files

|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
|!code|

|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.

|^ For example, with the global directive

|code|
# WASD_CONFIG_GLOBAL
[WebDAVmetaDir] DKA0:[WASDAVMETA]
|!code|

the data files

|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
|!code|

would have the associated metadata files

|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
|!code|

|!number|

|0Directory Metadata|

|^ 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 ".DIR__wasdav" (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 "New Folder".

|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
|!code|

|0Metadata XML|

|^ 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:

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

|^ This metadata example contains four properties; an exclusive write lock
owned by "MGD" and three set by a client in three different (contrived)
namespaces.

|note|
|0Metadata should not be edited manually ...|
|...| 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 "lost-update" and other
complications.  And, again of course, full metadata can be deleted at the
command-line.
|!note|

|0Microsoft Metadata|

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

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

|^ Every file written or modified by |/Windows Explorer| 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 |/live| properties when accessed
- often sufficient for purpose.  To suppress the actual processing of |/Windows
Explorer| metadata set a path using the WEBDAV=NOWINPROP in WASD_CONFIG_MAP.

|code|
set /webdav/* webdav=NOwinprop
|!code|

|2WebDAV Locking|

|^ 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.

|0Write Access Only|

|^ 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.

|0Locking Depth|

|^ 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.

|note|
|0Lock Depth 0|
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.
|!note|

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

|0Locking Timeout|

|^ 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.

|0VMS DLM Locking|

|^ WASD uses VMS locking to queue and arbitrate access to WebDAV resources
and meta-files.

|^ 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.

|^ 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.

|2Some Wrinkles|

|^ Some application/environment-specific considerations when using WASD WebDAV. 
Please report any you encounter for future inclusion in this section.  Also see
|link|Microsoft Miscellanea| immediately below.

|3OS X Finder|

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

|3Gnome/gvfs/Nautilus|

|^-As at publication, |/Gnome/gvfs/Nautilus| has quite a number of behavioural
problems with associated Bugzilla items.  Don't expect it to behave well!  This
has been my experience.

|3Dreamweaver|

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

|code|
redirect /webdav/**/./ /webdav/*/
|!code|

|2Microsoft Miscellanea|

|^ A cornucopia of of minor and major considerations!

|note|
|0much of this is pre- Windows 10| 
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.
|!note|

|^ 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.

|^ 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.

|^ Some general references:

|simple#|
|& |%http://greenbytes.de/tech/webdav/webdav-redirector-list.html|
|& |%http://greenbytes.de/tech/webdav/webfolder-client-list.html|
|& |%http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/|
|& |%http://www.webdavsystem.com/server/documentation/troubleshooting|
|& |%http://www.webdavsystem.com/documentation/troubleshooting|
|& |%http://code.google.com/p/sabredav/wiki/Windows|
|& |%http://ulihansen.kicks-ass.net/aero/webdav/|
|& |%http://chapters.marssociety.org/webdav/|
|!simple|

|^ DOS/Windows command-line network configuration:

|code|
C:\\> NET USE Z: http://the.host.name/folder/
C:\\> NET USE Z: /DELETE
|!code|

|3Mapping|

|^ 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

|code|
if (webdav:)
   if (request-method:OPTIONS) redirect / /dav-path/
endif
|!code|

or if only required for MS agents then something more specific

|code|
if (webdav:MSagent)
   if (request-method:OPTIONS) redirect / /dav-path/
endif
|!code|

|^ Subsequent rules will probably be required to map typeless directory
requests to the actual directory required.

|code|
redirect /dav-path /dav-path/
pass /dav-path/* /dav_root/* webdav=read
|!code|

|3FrontPage Extensions|

|^ 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:

|code|
pass /_vti_* "404 Not an MS platform!"
|!code|

|3Avoiding Microsoft Property Clutter|

|^ See |link|Microsoft Metadata||.

|3OPTIONS header "MS-Author-Via: DAV"|

|simple|
|& |%http://msdn2.microsoft.com/en-us/library/ms691698.aspx|
|!simple|

|^ 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, "Do you know how to
handle this URL?", specifying the exact URL passed in by the client. The first
protocol which responds "yes" is selected. If neither protocol driver responds
"yes" 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.

|3Repairing broken XP Web Folders|

|simple|
|& |%http://chapters.marssociety.org/webdav/|
|!simple|

|^ 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:

|number|
|& Click on the "Start" menu in the lower left corner, and select "Run..."
|& Type in "webfldrs.msi" and click the "OK" button.
|& Click on the "Select reinstall mode" button.
|& Select *ALL* of the checkboxes *except* for the second one
("Reinstall only if file is missing").
|& Click on the "OK" button.
|& Click on the "Reinstall" button.
|& After the reinstallation is complete, reboot the computer.
|!number|

|3Adding a port number to the webfolder-address|

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

|3Adding a number-sign ("#") to the webfolder-address|

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

|code|
http://the.host.name/folder#
|!code|

|3Force Windows XP to use Basic Authentication|

|^ 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
"Basic Auth" in his "Microsoft-WebDAV-MiniRedir/5.1.2600"-mechanism by default
for security reasons.  See description below.

|3Microsoft XP Explorer BASIC Authentication|

|simple|
|& |%http://www.microsoft.com/technet/prodtechnol/winxppro/\
maintain/sp2netwk.mspx|
|!simple|

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

|code|
HKEY_LOCAL_MACHINE\\SYSTEM
\\CurrentControlSet\\Services\\WebClient\\Parameters\\UseBasicAuth (DWORD)
|!code|

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

|^ Disabling Basic Authentication over a clear channel:

|^ 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.

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

|code|
HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion
\\InternetSettings\\DisableBasicOverClearChannel (DWORD)
|!code|

|^ This prevents WININET from attempting to use BasicAuth unless the channel
is secured (HTTPS or SSL).
	
|^ 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.

|^ |**** AND THEN RESTART WINDOWS ***||

|3Microsoft Windows 7 BASIC Authentication|

|^ You can enable BasicAuth by setting the following registry key to the value
3 and restarting the WebClient service:

|code|
HKEY_LOCAL_MACHINE\\SYSTEM
\\CurrentControlSet\\Services\\WebClient\\Parameters\\BasicAuthLevel (DWORD)
|!code|

|3Error 0x800700DF: The file size exceeds the limit allowed and cannot be
saved|

|^ "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."

|code|
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\WebClient\\Parameters
|!code|

|number|
|& Right click on the FileSizeLimitInBytes and click Modify
|& Click on Decimal
|& 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.
|!number|

|simple|
|& |%http://social.answers.microsoft.com\
/Forums/en/xphardware/thread/d208bba6-920c-4639-bd45-f345f462934f|
|!simple|

|2References||

|^ These are the resources used during WASD WebDAV development.

|bullet|

|item| WebDAV in general:

|simple#|
|& |%http://webdav.org/|
|& |%http://en.wikipedia.org/wiki/Webdav|
|& |%http://tools.ietf.org/html/rfc4918|
|& |%http://tools.ietf.org/html/rfc4331| (quota)
|& |%http://tools.ietf.org/html/rfc2518| (obsoleted by RFC 4918)
|!simple|

|item| WebDAV: Next-Generation Collaborative Web Authoring
|^-Lisa Dusseault, 2003  ISBN: 0130652083

|item| Using Expat by Clark Cooper:

|simple#|
|& |%http://en.wikipedia.org/wiki/Expat_(XML)|
|& |%http://www.xml.com/pub/a/1999/09/expat/index.html|
|& |%http://www.xml.com/lpt/a/47|
|!simple|

|!bullet|

|0Client Tools||

|^ All these have been used during WASD WebDAV development.

|bullet|

|item|A comprehensive but not exhaustive list
|^-|%http://www.webdavsystem.com/server/access/|
|^-|%http://www.webdavsystem.com/server/access/clients_comparison|

|item|DAVExplorer - a Java-based GUI Explorer-style file navigation tool
|^-|%http://www.davexplorer.org/|

|item|cadaver - a command-line WebDAV client for *x
|^-|%http://www.webdav.org/cadaver/|

|item|davfs2 - a mountable WebDAV file-system for Linux
|^-|%http://savannah.nongnu.org/projects/davfs2|

|item|The WebDAV URL handling of KDE 4.2 Dolphin (v1.2)
|^-|%http://www.webdavsystem.com/server/access/konqueror|  (yup, I know!)
|^-In contrast to Gnome as reported below, KDE and its KIO/Dolphin behave
extrordinarily well.

|item|The WebDAV URL handling of Gnome Nautilus (2.26.2, gvfs/1.2.2)
|^-|%http://www.webdavsystem.com/server/access/gnome_nautilus|
|^-As at publication, |*Gnome/gvfs/Nautilus has quite a number of
behavioural problems| with associated Bugzilla items.  Don't expect it
to behave reasonably!

|item|The WebDAV handling of Apple Mac macOS X Finder
|^-|%http://www.webdavsystem.com/server/access/macosx|

|item|Windows Explorer - and the associated mini-director, et.al., on XP (not Vista).
|^-See |\|link|<REFERENCE>(hd_webdav_microsoft_misc)| below.

|item|Another Windows option - try before you buy (i.e. commercial product).
|^-"WebDrive is more than just an FTP Client." Indeed! It's
functional WebDAV drive-letter client.
|^-|%http://www.webdrive.com/|

|item| |*And if you really need effective WebDAV on a Windows platform ...||
|^-"BitKinex integrates the fuctionality of an innovative FTP, SFTP
and WebDAV client for Windows."
|^-|*And it's FREEWARE!||
|^-|%http://www.bitkinex.com/|

|!bullet|