~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/ftp_server.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-06-27 22:53:15 UTC
  • mfrom: (3512.1.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20080627225315-j2xpbsvjyya1s97y
Fix ftp transport so that it handles the 'mode' parameter when
        provided

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
    )
38
38
 
39
39
 
 
40
class test_filesystem(medusa.filesys.os_filesystem):
 
41
    """A custom filesystem wrapper to add missing functionalities."""
 
42
 
 
43
    def chmod(self, path, mode):
 
44
        p = self.normalize(self.path_module.join (self.wd, path))
 
45
        return os.chmod(self.translate(p), mode)
 
46
 
 
47
 
40
48
class test_authorizer(object):
41
49
    """A custom Authorizer object for running the test suite.
42
50
 
64
72
            and password != self.secured_password):
65
73
            return 0, 'Password invalid.', None
66
74
        else:
67
 
            return 1, 'OK.', medusa.filesys.os_filesystem(self.root)
 
75
            return 1, 'OK.', test_filesystem(self.root)
68
76
 
69
77
 
70
78
class ftp_channel(medusa.ftp_server.ftp_channel):
153
161
            except:
154
162
                self.respond ('550 error creating directory.')
155
163
 
 
164
    def cmd_site(self, line):
 
165
        """Site specific commands."""
 
166
        command, args = line[1].split(' ', 1)
 
167
        if command.lower() == 'chmod':
 
168
            try:
 
169
                mode, path = args.split()
 
170
                mode = int(mode, 8)
 
171
            except ValueError:
 
172
                # We catch both malformed line and malformed mode with the same
 
173
                # ValueError.
 
174
                self.command_not_understood(' '.join(line))
 
175
                return
 
176
            try:
 
177
                # Yes path and mode are reversed
 
178
                self.filesystem.chmod(path, mode)
 
179
                self.respond('200 SITE CHMOD command successful')
 
180
            except AttributeError:
 
181
                # The chmod method is not available in read-only and will raise
 
182
                # AttributeError since a different filesystem is used in that
 
183
                # case
 
184
                self.command_not_authorized(' '.join(line))
 
185
        else:
 
186
            # Another site specific command was requested. We don't know that
 
187
            # one
 
188
            self.command_not_understood(' '.join(line))
 
189
 
156
190
 
157
191
class ftp_server(medusa.ftp_server.ftp_server):
158
192
    """Customize the behavior of the Medusa ftp_server.