12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/usr/bin/env python
- #
- # Copyright (C) 2022 The Android Open Source Project
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- """A tool for modifying privileged permission allowlists."""
- from __future__ import print_function
- import argparse
- import sys
- from xml.dom import minidom
- class InvalidRootNodeException(Exception):
- pass
- class InvalidNumberOfPrivappPermissionChildren(Exception):
- pass
- def modify_allowlist(allowlist_dom, package_name):
- if allowlist_dom.documentElement.tagName != 'permissions':
- raise InvalidRootNodeException
- nodes = allowlist_dom.getElementsByTagName('privapp-permissions')
- if nodes.length != 1:
- raise InvalidNumberOfPrivappPermissionChildren
- privapp_permissions = nodes[0]
- privapp_permissions.setAttribute('package', package_name)
- def parse_args():
- """Parse commandline arguments."""
- parser = argparse.ArgumentParser()
- parser.add_argument('input', help='input allowlist template file')
- parser.add_argument(
- 'package_name', help='package name to use in the allowlist'
- )
- parser.add_argument('output', help='output allowlist file')
- return parser.parse_args()
- def main():
- try:
- args = parse_args()
- doc = minidom.parse(args.input)
- modify_allowlist(doc, args.package_name)
- with open(args.output, 'w') as output_file:
- doc.writexml(output_file, encoding='utf-8')
- except Exception as err:
- print('error: ' + str(err), file=sys.stderr)
- sys.exit(-1)
- if __name__ == '__main__':
- main()
|