X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2Fallmydata%2Ffrontends%2Fftpd.py;h=dbcb8318a5a15658f4b52aa3fc9f59f730b6220d;hb=26c8abadece8de68c6e905d47ea31a479788ce47;hp=9922a86ad8b38429c1626af65b770f5eea80f364;hpb=96c55746577e89ec0243b1b3b4ad598b523b6d5d;p=tahoe-lafs%2Ftahoe-lafs.git diff --git a/src/allmydata/frontends/ftpd.py b/src/allmydata/frontends/ftpd.py index 9922a86a..dbcb8318 100644 --- a/src/allmydata/frontends/ftpd.py +++ b/src/allmydata/frontends/ftpd.py @@ -6,6 +6,7 @@ from twisted.application import service, strports from twisted.internet import defer from twisted.internet.interfaces import IConsumer from twisted.cred import portal +from twisted.python import filepath from twisted.protocols import ftp from allmydata.interfaces import IDirectoryNode, ExistingChildError, \ @@ -61,6 +62,19 @@ class WriteFile: class NoParentError(Exception): pass +if hasattr(filepath, "Permissions"): + # filepath.Permissions was added in Twisted-11.1.0, but we're compatible + # back to 11.0.0 (on windows). Fortunately we don't really need to + # provide anything more than an int until Twisted-15.0.0 . + class IntishPermissions(filepath.Permissions): + def __init__(self, statModeInt): + self.statModeInt = statModeInt + filepath.Permissions.__init__(self, statModeInt) + def __and__(self, other): + return self.statModeInt & other +else: + IntishPermissions = lambda statModeInt: statModeInt + class Handler: implements(ftp.IFTPShell) def __init__(self, client, rootnode, username, convergence): @@ -200,7 +214,11 @@ class Handler: elif key == "directory": value = isdir elif key == "permissions": - value = 0600 + # Twisted-14.0.2 expected an int, and used it in a rendering + # function that did (mode & NUMBER). Twisted-15.0.0 expects a + # twisted.python.filepath.Permissions , and calls its + # .shorthand() method. Try to provide both. + value = IntishPermissions(0600) elif key == "hardlinks": value = 1 elif key == "modified":