sftp: .hidden

This commit is contained in:
ed 2026-03-22 15:40:04 +00:00
parent beb634dc54
commit 23545116af

View file

@ -30,6 +30,10 @@ from .util import (
Daemon, Daemon,
ODict, ODict,
Pebkac, Pebkac,
exclude_dotfiles,
exclude_dotfiles_ls,
exclude_dothidden,
exclude_dothidden_ls,
ipnorm, ipnorm,
min_ex, min_ex,
read_utf8, read_utf8,
@ -401,21 +405,27 @@ class SFTP_Srv(paramiko.SFTPServerInterface):
self.log("ls(%s): vfs-vols; |%d|" % (path, len(ret))) self.log("ls(%s): vfs-vols; |%d|" % (path, len(ret)))
return ret return ret
_, vfs_ls, vfs_virt = vn.ls( fsroot, vfs_ls, vfs_virt = vn.ls(
rem, rem,
self.uname, self.uname,
not self.args.no_scandir, not self.args.no_scandir,
[[True, False], [False, True]], [[True, False], [False, True]],
throw=True, throw=True,
) )
vnames = list(vfs_virt)
if self.uname not in vn.axs.udot:
if "dothidden" in vn.flags and ".hidden" in [x[0] for x in vfs_ls]:
vfs_ls = exclude_dothidden_ls(vfs_ls, fsroot)
vnames = exclude_dothidden(vnames, fsroot)
else:
vfs_ls = exclude_dotfiles_ls(vfs_ls)
vnames = exclude_dotfiles(vnames)
ret = [SATTR.from_stat(x[1], filename=x[0]) for x in vfs_ls] ret = [SATTR.from_stat(x[1], filename=x[0]) for x in vfs_ls]
for zs, vn2 in vfs_virt.items(): for zs, vn2 in vfs_virt.items():
if not vn2.realpath: if not vn2.realpath or zs not in vnames:
continue continue
st = bos.stat(vn2.realpath) st = bos.stat(vn2.realpath)
ret.append(SATTR.from_stat(st, filename=zs)) ret.append(SATTR.from_stat(st, filename=zs))
if self.uname not in vn.axs.udot:
ret = [x for x in ret if not x.filename.split("/")[-1].startswith(".")]
ret.sort(key=lambda x: x.filename) ret.sort(key=lambda x: x.filename)
self.log("ls(%s): |%d|" % (path, len(ret))) self.log("ls(%s): |%d|" % (path, len(ret)))
return ret return ret