Example #1
0
File: ftp.py Project: luotom/ftp
def main():
    users = DummyAuthorizer()
    handler = FTPHandler
    #增加被动端口
    handler.passive_ports = range(2022, 2024)
    users.add_anonymous("/home/teaching/app", perm="el")
    results = get_teacher_msgs()
    if results:
        for row in results:
            users.add_user(row[0], row[1], f"/home/teaching/app/{row[2]}", perm="elrwdmf")
            # 赋予匿名用户不同文件下不同的权限
            users.override_perm('anonymous', f"/home/teaching/app/{row[2]}/上传",
                                perm="elw", recursive=True)
            users.override_perm('anonymous', f"/home/teaching/app/{row[2]}/下载",
                                perm="elr", recursive=True)
    handler.authorizer = users
    return handler
Example #2
0
 def test_override_perm_interface(self):
     auth = DummyAuthorizer()
     auth.add_user(USER, PASSWD, HOME, perm='elr')
     # raise exc if user does not exists
     self.assertRaises(KeyError, auth.override_perm, USER + 'w', HOME,
                       'elr')
     # raise exc if path does not exist or it's not a directory
     self.assertRaisesRegex(ValueError, 'no such directory',
                            auth.override_perm, USER, '?:\\', 'elr')
     self.assertRaisesRegex(ValueError, 'no such directory',
                            auth.override_perm, USER, self.tempfile, 'elr')
     # raise on wrong permission
     self.assertRaisesRegex(ValueError,
                            "no such permission",
                            auth.override_perm,
                            USER,
                            HOME,
                            perm='?')
     # expect warning on write permissions assigned to anonymous user
     auth.add_anonymous(HOME)
     for p in "adfmw":
         self.assertRaisesRegex(
             RuntimeWarning,
             "write permissions assigned to anonymous user.",
             auth.override_perm, 'anonymous', HOME, p)
     # raise on attempt to override home directory permissions
     self.assertRaisesRegex(ValueError,
                            "can't override home directory permissions",
                            auth.override_perm,
                            USER,
                            HOME,
                            perm='w')
     # raise on attempt to override a path escaping home directory
     if os.path.dirname(HOME) != HOME:
         self.assertRaisesRegex(ValueError,
                                "path escapes user home directory",
                                auth.override_perm,
                                USER,
                                os.path.dirname(HOME),
                                perm='w')
     # try to re-set an overridden permission
     auth.override_perm(USER, self.tempdir, perm='w')
     auth.override_perm(USER, self.tempdir, perm='wr')
Example #3
0
    def test_override_perm_recursive_paths(self):
        auth = DummyAuthorizer()
        auth.add_user(USER, PASSWD, HOME, perm='elr')
        self.assertEqual(auth.has_perm(USER, 'w', self.tempdir), False)
        auth.override_perm(USER, self.tempdir, perm='w', recursive=True)
        self.assertEqual(auth.has_perm(USER, 'w', HOME), False)
        self.assertEqual(auth.has_perm(USER, 'w', self.tempdir), True)
        self.assertEqual(auth.has_perm(USER, 'w', self.tempfile), True)
        self.assertEqual(auth.has_perm(USER, 'w', self.subtempdir), True)
        self.assertEqual(auth.has_perm(USER, 'w', self.subtempfile), True)

        self.assertEqual(auth.has_perm(USER, 'w', HOME + '@'), False)
        self.assertEqual(auth.has_perm(USER, 'w', self.tempdir + '@'), False)
        path = os.path.join(self.tempdir + '@',
                            os.path.basename(self.tempfile))
        self.assertEqual(auth.has_perm(USER, 'w', path), False)
        # test case-sensitiveness
        if (os.name in ('nt', 'ce')) or (sys.platform == 'cygwin'):
            self.assertTrue(auth.has_perm(USER, 'w', self.tempdir.upper()))
    def test_override_perm_recursive_paths(self):
        auth = DummyAuthorizer()
        auth.add_user(USER, PASSWD, HOME, perm='elr')
        self.assertEqual(auth.has_perm(USER, 'w', self.tempdir), False)
        auth.override_perm(USER, self.tempdir, perm='w', recursive=True)
        self.assertEqual(auth.has_perm(USER, 'w', HOME), False)
        self.assertEqual(auth.has_perm(USER, 'w', self.tempdir), True)
        self.assertEqual(auth.has_perm(USER, 'w', self.tempfile), True)
        self.assertEqual(auth.has_perm(USER, 'w', self.subtempdir), True)
        self.assertEqual(auth.has_perm(USER, 'w', self.subtempfile), True)

        self.assertEqual(auth.has_perm(USER, 'w', HOME + '@'), False)
        self.assertEqual(auth.has_perm(USER, 'w', self.tempdir + '@'), False)
        path = os.path.join(self.tempdir + '@',
                            os.path.basename(self.tempfile))
        self.assertEqual(auth.has_perm(USER, 'w', path), False)
        # test case-sensitiveness
        if (os.name in ('nt', 'ce')) or (sys.platform == 'cygwin'):
            self.assertTrue(auth.has_perm(USER, 'w', self.tempdir.upper()))
Example #5
0
 def test_override_perm_interface(self):
     auth = DummyAuthorizer()
     auth.add_user(USER, PASSWD, HOME, perm='elr')
     # raise exc if user does not exists
     self.assertRaises(KeyError, auth.override_perm, USER + 'w',
                       HOME, 'elr')
     # raise exc if path does not exist or it's not a directory
     self.assertRaisesRegex(ValueError,
                            'no such directory',
                            auth.override_perm, USER, '?:\\', 'elr')
     self.assertRaisesRegex(ValueError,
                            'no such directory',
                            auth.override_perm, USER, self.tempfile, 'elr')
     # raise on wrong permission
     self.assertRaisesRegex(ValueError,
                            "no such permission", auth.override_perm,
                            USER, HOME, perm='?')
     # expect warning on write permissions assigned to anonymous user
     auth.add_anonymous(HOME)
     for p in "adfmw":
         self.assertRaisesRegex(
             RuntimeWarning,
             "write permissions assigned to anonymous user.",
             auth.override_perm, 'anonymous', HOME, p)
     # raise on attempt to override home directory permissions
     self.assertRaisesRegex(ValueError,
                            "can't override home directory permissions",
                            auth.override_perm, USER, HOME, perm='w')
     # raise on attempt to override a path escaping home directory
     if os.path.dirname(HOME) != HOME:
         self.assertRaisesRegex(ValueError,
                                "path escapes user home directory",
                                auth.override_perm, USER,
                                os.path.dirname(HOME), perm='w')
     # try to re-set an overridden permission
     auth.override_perm(USER, self.tempdir, perm='w')
     auth.override_perm(USER, self.tempdir, perm='wr')