mirror of
https://github.com/9001/copyparty.git
synced 2026-08-14 14:23:08 -06:00
ftp: logging + fix xbu log
This commit is contained in:
parent
b331bb1c8c
commit
9912a95166
|
|
@ -149,6 +149,7 @@ class FtpFs(AbstractedFS):
|
||||||
self.hub: "SvcHub" = cmd_channel.hub
|
self.hub: "SvcHub" = cmd_channel.hub
|
||||||
self.args = cmd_channel.args
|
self.args = cmd_channel.args
|
||||||
self.uname = cmd_channel.uname
|
self.uname = cmd_channel.uname
|
||||||
|
self.log_src = "%s:FTP" % (cmd_channel.cli_ip,)
|
||||||
|
|
||||||
self.cwd = "/" # pyftpdlib convention of leading slash
|
self.cwd = "/" # pyftpdlib convention of leading slash
|
||||||
self.root = "/var/lib/empty"
|
self.root = "/var/lib/empty"
|
||||||
|
|
@ -156,8 +157,8 @@ class FtpFs(AbstractedFS):
|
||||||
self.listdirinfo = self.listdir
|
self.listdirinfo = self.listdir
|
||||||
self.chdir(".")
|
self.chdir(".")
|
||||||
|
|
||||||
def log(self, msg: str, c: Union[int, str] = 0) -> None:
|
def clog(self, msg: str, c: Union[int, str] = 0) -> None:
|
||||||
self.hub.log("ftpd", msg, c)
|
self.hub.log(self.log_src, msg, c)
|
||||||
|
|
||||||
def v2a(
|
def v2a(
|
||||||
self,
|
self,
|
||||||
|
|
@ -238,6 +239,8 @@ class FtpFs(AbstractedFS):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def open(self, filename: str, mode: str) -> typing.IO[Any]:
|
def open(self, filename: str, mode: str) -> typing.IO[Any]:
|
||||||
|
self.clog("open(%r,%r) @%s" % (filename, mode, self.uname))
|
||||||
|
|
||||||
r = "r" in mode
|
r = "r" in mode
|
||||||
w = "w" in mode or "a" in mode or "+" in mode
|
w = "w" in mode or "a" in mode or "+" in mode
|
||||||
|
|
||||||
|
|
@ -255,7 +258,7 @@ class FtpFs(AbstractedFS):
|
||||||
xbu = vfs.flags.get("xbu")
|
xbu = vfs.flags.get("xbu")
|
||||||
if xbu:
|
if xbu:
|
||||||
hr = runhook(
|
hr = runhook(
|
||||||
self.log,
|
self.clog,
|
||||||
None,
|
None,
|
||||||
self.hub.up2k,
|
self.hub.up2k,
|
||||||
"xbu.ftp",
|
"xbu.ftp",
|
||||||
|
|
@ -275,7 +278,7 @@ class FtpFs(AbstractedFS):
|
||||||
if t or hr.get("rc") != 0:
|
if t or hr.get("rc") != 0:
|
||||||
if not t:
|
if not t:
|
||||||
t = "upload blocked by xbu server config: %r" % (filename,)
|
t = "upload blocked by xbu server config: %r" % (filename,)
|
||||||
self.log(t, 3)
|
self.clog(t, 3)
|
||||||
raise FSE(t)
|
raise FSE(t)
|
||||||
|
|
||||||
if w and need_unlink: # type: ignore # !rm
|
if w and need_unlink: # type: ignore # !rm
|
||||||
|
|
@ -300,12 +303,13 @@ class FtpFs(AbstractedFS):
|
||||||
|
|
||||||
# Don't unlink file for append mode
|
# Don't unlink file for append mode
|
||||||
elif "a" not in mode:
|
elif "a" not in mode:
|
||||||
wunlink(self.log, ap, VF_CAREFUL)
|
wunlink(self.clog, ap, VF_CAREFUL)
|
||||||
|
|
||||||
ret = open(fsenc(ap), mode, self.args.iobuf)
|
ret = open(fsenc(ap), mode, self.args.iobuf)
|
||||||
if w and "fperms" in vfs.flags:
|
if w and "fperms" in vfs.flags:
|
||||||
set_fperms(ret, vfs.flags)
|
set_fperms(ret, vfs.flags)
|
||||||
|
|
||||||
|
self.clog(" `-- %r" % (ap,))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def chdir(self, path: str) -> None:
|
def chdir(self, path: str) -> None:
|
||||||
|
|
@ -331,10 +335,12 @@ class FtpFs(AbstractedFS):
|
||||||
self.cwd = nwd
|
self.cwd = nwd
|
||||||
|
|
||||||
def mkdir(self, path: str) -> None:
|
def mkdir(self, path: str) -> None:
|
||||||
|
self.clog("mkdir(%r) @%s" % (path, self.uname))
|
||||||
ap, vfs, _ = self.rv2a(path, w=True)
|
ap, vfs, _ = self.rv2a(path, w=True)
|
||||||
bos.makedirs(ap, vf=vfs.flags) # filezilla expects this
|
bos.makedirs(ap, vf=vfs.flags) # filezilla expects this
|
||||||
|
|
||||||
def listdir(self, path: str) -> list[str]:
|
def listdir(self, path: str) -> list[str]:
|
||||||
|
self.clog("ls(%r) @%s" % (path, self.uname))
|
||||||
vpath = join(self.cwd, path)
|
vpath = join(self.cwd, path)
|
||||||
try:
|
try:
|
||||||
ap, vfs, rem = self.v2a(vpath, True, False)
|
ap, vfs, rem = self.v2a(vpath, True, False)
|
||||||
|
|
@ -384,6 +390,7 @@ class FtpFs(AbstractedFS):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def rmdir(self, path: str) -> None:
|
def rmdir(self, path: str) -> None:
|
||||||
|
self.clog("rmdir(%r) @%s" % (path, self.uname))
|
||||||
ap = self.rv2a(path, d=True)[0]
|
ap = self.rv2a(path, d=True)[0]
|
||||||
try:
|
try:
|
||||||
bos.rmdir(ap)
|
bos.rmdir(ap)
|
||||||
|
|
@ -392,6 +399,7 @@ class FtpFs(AbstractedFS):
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def remove(self, path: str) -> None:
|
def remove(self, path: str) -> None:
|
||||||
|
self.clog("rm(%r) @%s" % (path, self.uname))
|
||||||
if self.args.no_del:
|
if self.args.no_del:
|
||||||
raise FSE("The delete feature is disabled in server config")
|
raise FSE("The delete feature is disabled in server config")
|
||||||
|
|
||||||
|
|
@ -402,6 +410,7 @@ class FtpFs(AbstractedFS):
|
||||||
raise FSE(str(ex))
|
raise FSE(str(ex))
|
||||||
|
|
||||||
def rename(self, src: str, dst: str) -> None:
|
def rename(self, src: str, dst: str) -> None:
|
||||||
|
self.clog("mv(%r,%r) @%s" % (src, dst, self.uname))
|
||||||
if self.args.no_mv:
|
if self.args.no_mv:
|
||||||
raise FSE("The rename/move feature is disabled in server config")
|
raise FSE("The rename/move feature is disabled in server config")
|
||||||
|
|
||||||
|
|
@ -431,6 +440,7 @@ class FtpFs(AbstractedFS):
|
||||||
return st
|
return st
|
||||||
|
|
||||||
def utime(self, path: str, timeval: float) -> None:
|
def utime(self, path: str, timeval: float) -> None:
|
||||||
|
self.clog("utime(%r,%r) @%s" % (path, timeval, self.uname))
|
||||||
ap = self.rv2a(path, w=True)[0]
|
ap = self.rv2a(path, w=True)[0]
|
||||||
bos.utime_c(logging.warning, ap, int(timeval), False)
|
bos.utime_c(logging.warning, ap, int(timeval), False)
|
||||||
|
|
||||||
|
|
@ -438,6 +448,9 @@ class FtpFs(AbstractedFS):
|
||||||
ap = self.rv2a(path)[0]
|
ap = self.rv2a(path)[0]
|
||||||
return bos.stat(ap)
|
return bos.stat(ap)
|
||||||
|
|
||||||
|
def readlink(self, *a) -> None:
|
||||||
|
raise OSError(errno.EINVAL, "nope")
|
||||||
|
|
||||||
def isfile(self, path: str) -> bool:
|
def isfile(self, path: str) -> bool:
|
||||||
try:
|
try:
|
||||||
st = self.stat(path)
|
st = self.stat(path)
|
||||||
|
|
@ -480,11 +493,11 @@ class FtpFs(AbstractedFS):
|
||||||
def get_user_by_uid(self, uid: int) -> str:
|
def get_user_by_uid(self, uid: int) -> str:
|
||||||
return "root"
|
return "root"
|
||||||
|
|
||||||
def get_group_by_uid(self, gid: int) -> str:
|
def get_group_by_gid(self, gid: int) -> str:
|
||||||
return "root"
|
return "root"
|
||||||
|
|
||||||
def mkstemp(self, *a, **ka):
|
def mkstemp(self, *a, **ka):
|
||||||
self.log("mkstemp%r @%s" % (a, self.uname))
|
self.clog("mkstemp%r @%s" % (a, self.uname))
|
||||||
raise FSE("nope")
|
raise FSE("nope")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -515,6 +528,7 @@ class FtpHandler(FTPHandler):
|
||||||
return
|
return
|
||||||
|
|
||||||
self.cli_ip = cip
|
self.cli_ip = cip
|
||||||
|
self.log_src = "%s:FTP" % (cip,)
|
||||||
|
|
||||||
# abspath->vpath mapping to resolve log_transfer paths
|
# abspath->vpath mapping to resolve log_transfer paths
|
||||||
self.vfs_map: dict[str, str] = {}
|
self.vfs_map: dict[str, str] = {}
|
||||||
|
|
@ -522,6 +536,12 @@ class FtpHandler(FTPHandler):
|
||||||
# reduce non-debug logging
|
# reduce non-debug logging
|
||||||
self.log_cmds_list = [x for x in self.log_cmds_list if x not in ("CWD", "XCWD")]
|
self.log_cmds_list = [x for x in self.log_cmds_list if x not in ("CWD", "XCWD")]
|
||||||
|
|
||||||
|
def clog(self, msg: str, c: Union[int, str] = 0) -> None:
|
||||||
|
self.hub.log(self.log_src, msg, c)
|
||||||
|
|
||||||
|
def ftp_NOOP(self, *a) -> None:
|
||||||
|
self.respond("200 pong", logging.debug)
|
||||||
|
|
||||||
def ftp_STOU(self, *a) -> None:
|
def ftp_STOU(self, *a) -> None:
|
||||||
self.respond("550 nope", logging.warning)
|
self.respond("550 nope", logging.warning)
|
||||||
|
|
||||||
|
|
@ -537,7 +557,7 @@ class FtpHandler(FTPHandler):
|
||||||
xbu = vfs.flags.get("xbu")
|
xbu = vfs.flags.get("xbu")
|
||||||
if xbu:
|
if xbu:
|
||||||
hr = runhook(
|
hr = runhook(
|
||||||
None,
|
self.clog,
|
||||||
None,
|
None,
|
||||||
self.hub.up2k,
|
self.hub.up2k,
|
||||||
"xbu.ftpd",
|
"xbu.ftpd",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue