This file is indexed.

/usr/share/pyshared/txaws/s3/acls.py is in python-txaws 0.2.3-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
from txaws.util import XML


PERMISSIONS = ("FULL_CONTROL",
               "WRITE",
               "WRITE_ACP",
               "READ",
               "READ_ACP")


class XMLMixin(object):

    def to_xml(self):
        return "".join(self._to_xml())


class AccessControlPolicy(XMLMixin):

    def __init__(self, owner=None, access_control_list=()):
        self.owner = owner
        self.access_control_list = access_control_list

    def _to_xml(self, buffer=None):
        if buffer is None:
            buffer = []
        buffer.append("<AccessControlPolicy>\n")
        if self.owner:
            self.owner._to_xml(buffer=buffer, indent=1)
        buffer.append("  <AccessControlList>\n")
        for grant in self.access_control_list:
            grant._to_xml(buffer=buffer, indent=2)
        buffer.append("  </AccessControlList>\n"
                   "</AccessControlPolicy>")
        return buffer

    @classmethod
    def from_xml(cls, xml_bytes):
        root = XML(xml_bytes)
        owner_node = root.find("Owner")
        owner = Owner(owner_node.findtext("ID"),
                      owner_node.findtext("DisplayName"))
        acl_node = root.find("AccessControlList")
        acl = []
        for grant_node in acl_node.findall("Grant"):
            grantee_node = grant_node.find("Grantee")
            grantee = Grantee(grantee_node.findtext("ID"),
                              grantee_node.findtext("DisplayName"))
            permission = grant_node.findtext("Permission")
            acl.append(Grant(grantee, permission))
        return cls(owner, acl)


class Grant(XMLMixin):

    def __init__(self, grantee, permission=None):
        self.grantee = grantee
        self.permission = permission

    def _set_permission(self, perm):
        if perm not in PERMISSIONS:
            raise ValueError("Invalid permission '%s'. Must be one of %s" %
                             (perm, ",".join(PERMISSIONS)))
        self._permission = perm

    def _get_permission(self):
        return self._permission

    permission = property(_get_permission, _set_permission)

    def _to_xml(self, buffer=None, indent=0):
        if buffer is None:
            buffer = []
        ws = " " * (indent * 2)
        buffer.append(ws + "<Grant>\n")
        if self.grantee:
            self.grantee._to_xml(buffer, indent + 1)
        if self.permission:
            buffer.append("%s  <Permission>%s</Permission>\n" % (
                          ws, self.permission))
        buffer.append(ws + "</Grant>\n")
        return buffer


class Owner(XMLMixin):

    def __init__(self, id, display_name):
        self.id = id
        self.display_name = display_name

    def _to_xml(self, buffer=None, indent=0):
        if buffer is None:
            buffer = []
        ws = " " * (indent * 2)
        buffer.append("%s<Owner>\n"
                      "%s  <ID>%s</ID>\n"
                      "%s  <DisplayName>%s</DisplayName>\n"
                      "%s</Owner>\n" % (ws, ws, self.id, ws, self.display_name,
                                        ws))
        return buffer


class Grantee(XMLMixin):

    def __init__(self, id="", display_name="", email_address="", uri=""):
        if id or display_name:
            msg = "Both 'id' and 'display_name' must be provided."
            if not (id and display_name):
                raise ValueError(msg)
        self.id = id
        self.display_name = display_name
        self.email_address = email_address
        self.uri = uri

    def _to_xml(self, buffer=None, indent=0):
        if buffer is None:
            buffer = []
        ws = " " * (indent * 2)
        if self.id and self.display_name:
            xsi_type = "CanonicalUser"
            value = ("%s  <ID>%s</ID>\n"
                     "%s  <DisplayName>%s</DisplayName>\n" % (
                        ws, self.id, ws, self.display_name))
        elif self.email_address:
            xsi_type = "AmazonCustomerByEmail"
            value = "%s  <EmailAddress>%s</EmailAddress>\n" % (
                ws, self.email_address)
        elif self.uri:
            xsi_type = "Group"
            value = "%s  <URI>%s</URI>\n" % (ws, self.uri)
        buffer.append("%s<Grantee "
                      'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
                      ' xsi:type="%s">\n'
                      "%s%s</Grantee>\n" % (ws, xsi_type, value, ws))
        return buffer