mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-26 11:35:35 +00:00
50fb8b9123
Instead of modeling remote WebDAV servers as actual webdav.FS instances, we now just proxy traffic to them. This not only simplifies the code, but it also allows WebDAV locking to work correctly by making sure locks are handled by the servers that need to (i.e. the ones actually serving the files). Updates tailscale/corp#16827 Signed-off-by: Percy Wegmann <percy@tailscale.com>
31 lines
795 B
Go
31 lines
795 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package dirfs
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"tailscale.com/tailfs/tailfsimpl/shared"
|
|
)
|
|
|
|
// Mkdir implements webdav.FileSystem. All attempts to Mkdir a directory that
|
|
// already exists will succeed. All other attempts will fail with
|
|
// os.ErrPermission.
|
|
func (dfs *FS) Mkdir(ctx context.Context, name string, perm os.FileMode) error {
|
|
nameWithoutStaticRoot, isStaticRoot := dfs.trimStaticRoot(name)
|
|
if isStaticRoot || shared.IsRoot(name) {
|
|
// root directory already exists, consider this okay
|
|
return nil
|
|
}
|
|
|
|
child := dfs.childFor(nameWithoutStaticRoot)
|
|
if child != nil {
|
|
// child already exists, consider this okay
|
|
return nil
|
|
}
|
|
|
|
return &os.PathError{Op: "mkdir", Path: name, Err: os.ErrPermission}
|
|
}
|