/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
1
# Copyright (C) 2006-2009 Canonical Ltd
2070.5.1 by Andrew Bennetts
Add ChrootTransportDecorator.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2070.5.1 by Andrew Bennetts
Add ChrootTransportDecorator.
16
17
"""Implementation of Transport that prevents access to locations above a set
18
root.
19
"""
20
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
21
from bzrlib.transport import (
22
    get_transport,
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
23
    pathfilter,
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
24
    register_transport,
25
    Server,
26
    Transport,
27
    unregister_transport,
28
    )
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
29
30
31
class ChrootServer(pathfilter.PathFilteringServer):
2379.2.3 by Robert Collins
Review feedback.
32
    """User space 'chroot' facility.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
33
2379.2.3 by Robert Collins
Review feedback.
34
    The server's get_url returns the url for a chroot transport mapped to the
35
    backing transport. The url is of the form chroot-xxx:/// so parent
36
    directories of the backing transport are not visible. The chroot url will
37
    not allow '..' sequences to result in requests to the chroot affecting
38
    directories outside the backing transport.
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
39
40
    PathFilteringServer does all the path sanitation needed to enforce a
41
    chroot, so this is a simple subclass of PathFilteringServer that ignores
42
    filter_func.
2379.2.3 by Robert Collins
Review feedback.
43
    """
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
44
45
    def __init__(self, backing_transport):
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
46
        pathfilter.PathFilteringServer.__init__(self, backing_transport, None)
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
47
48
    def _factory(self, url):
49
        return ChrootTransport(self, url)
50
4934.3.3 by Martin Pool
Rename Server.setUp to Server.start_server
51
    def start_server(self):
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
52
        self.scheme = 'chroot-%d:///' % id(self)
53
        register_transport(self.scheme, self._factory)
54
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
55
56
class ChrootTransport(pathfilter.PathFilteringTransport):
2379.2.3 by Robert Collins
Review feedback.
57
    """A ChrootTransport.
58
59
    Please see ChrootServer for details.
60
    """
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
61
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
62
    def _filter(self, relpath):
63
        # A simplified version of PathFilteringTransport's _filter that omits
64
        # the call to self.server.filter_func.
65
        return self._relpath_from_server_root(relpath)
2018.5.104 by Andrew Bennetts
Completely rework chrooted transports.
66
67
68
class TestingChrootServer(ChrootServer):
69
70
    def __init__(self):
4934.3.3 by Martin Pool
Rename Server.setUp to Server.start_server
71
        """TestingChrootServer is not usable until start_server is called."""
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
72
        ChrootServer.__init__(self, None)
2379.2.2 by Robert Collins
Further test-usability for chroots.
73
4934.3.3 by Martin Pool
Rename Server.setUp to Server.start_server
74
    def start_server(self, backing_server=None):
2379.2.2 by Robert Collins
Further test-usability for chroots.
75
        """Setup the Chroot on backing_server."""
76
        if backing_server is not None:
77
            self.backing_transport = get_transport(backing_server.get_url())
78
        else:
79
            self.backing_transport = get_transport('.')
4934.3.3 by Martin Pool
Rename Server.setUp to Server.start_server
80
        ChrootServer.start_server(self)
2070.5.1 by Andrew Bennetts
Add ChrootTransportDecorator.
81
82
83
def get_test_permutations():
84
    """Return the permutations to be used in testing."""
4634.44.3 by Andrew Bennetts
Reimplement ChrootServer/ChrootTransport using bzrlib.transport.pathfilter.
85
    return [(ChrootTransport, TestingChrootServer)]