1*b32fbb63SXin Li#!/bin/bash 2*b32fbb63SXin Li 3*b32fbb63SXin Li# Copyright (C) 2021 The Android Open Source Project 4*b32fbb63SXin Li# 5*b32fbb63SXin Li# Licensed under the Apache License, Version 2.0 (the "License"); 6*b32fbb63SXin Li# you may not use this file except in compliance with the License. 7*b32fbb63SXin Li# You may obtain a copy of the License at 8*b32fbb63SXin Li# 9*b32fbb63SXin Li# http://www.apache.org/licenses/LICENSE-2.0 10*b32fbb63SXin Li# 11*b32fbb63SXin Li# Unless required by applicable law or agreed to in writing, software 12*b32fbb63SXin Li# distributed under the License is distributed on an "AS IS" BASIS, 13*b32fbb63SXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b32fbb63SXin Li# See the License for the specific language governing permissions and 15*b32fbb63SXin Li# limitations under the License. 16*b32fbb63SXin Li 17*b32fbb63SXin Lireadme() { 18*b32fbb63SXin Li echo ''' 19*b32fbb63SXin Li check permissions xml from a apk bundle release aginast those on a device 20*b32fbb63SXin Li ./batch_check_permission.sh ~/Downloads/apk_bundle_dir ~/Downloads/override.csv 21*b32fbb63SXin Li''' 22*b32fbb63SXin Li} 23*b32fbb63SXin Li 24*b32fbb63SXin LiSECONDS=0 25*b32fbb63SXin LiMY_NAME=$0 26*b32fbb63SXin LiSCRIPT_NAME="${MY_NAME##*/}" 27*b32fbb63SXin LiSCRIPT_DIR="${MY_NAME%/$SCRIPT_NAME}" 28*b32fbb63SXin Liecho Running from $SCRIPT_DIR 29*b32fbb63SXin Li 30*b32fbb63SXin Liif [[ -z $OUT_DIR ]]; then 31*b32fbb63SXin Li OUT_DIR="${HOME}/Downloads" 32*b32fbb63SXin Lifi 33*b32fbb63SXin Li 34*b32fbb63SXin LiINPUT_DIR=$1 35*b32fbb63SXin Liif [[ -z "${INPUT_DIR}" ]]; then 36*b32fbb63SXin Li readme 37*b32fbb63SXin Li exit 38*b32fbb63SXin Lifi 39*b32fbb63SXin Li 40*b32fbb63SXin LiRENAME_CSV=$2 41*b32fbb63SXin Li# Read rename csv to create xmlRenameDic 42*b32fbb63SXin Lideclare -A xmlRenameDic 43*b32fbb63SXin Liif [[ -f ${RENAME_CSV} ]]; then 44*b32fbb63SXin Li while IFS=',' read -r name newName others || [ -n "${name}" ]; do 45*b32fbb63SXin Li if [[ "${name}" == "name" ]]; then 46*b32fbb63SXin Li # skip header 47*b32fbb63SXin Li header="${name},${newName}" 48*b32fbb63SXin Li else 49*b32fbb63SXin Li xmlRenameDic["${name}"]="${newName}" 50*b32fbb63SXin Li fi 51*b32fbb63SXin Li done < $RENAME_CSV 52*b32fbb63SXin Lifi 53*b32fbb63SXin Li 54*b32fbb63SXin Liecho "LOG=${LOG}" 55*b32fbb63SXin Lilog() { 56*b32fbb63SXin Li if [[ -n ${LOG} ]]; then 57*b32fbb63SXin Li echo $1 58*b32fbb63SXin Li fi 59*b32fbb63SXin Li} 60*b32fbb63SXin Li 61*b32fbb63SXin Liecho "Listing xmls in ${INPUT_DIR}" 62*b32fbb63SXin Lideclare -A relXmlDic 63*b32fbb63SXin Li 64*b32fbb63SXin Lideclare -A relXmlDic="$(${SCRIPT_DIR}/get_file_dir.sh ${INPUT_DIR} xml)" 65*b32fbb63SXin Liecho "Found: ${#relXmlDic[@]} xmls" 66*b32fbb63SXin Li 67*b32fbb63SXin Liecho "Listing xmls in the device" 68*b32fbb63SXin Lideclare -A deviceXmlDic 69*b32fbb63SXin LideviceXmlList=$(adb shell "find / -name *.xml" 2>/dev/null) 70*b32fbb63SXin Lifor xml in ${deviceXmlList}; do 71*b32fbb63SXin Li file=${xml##*/} 72*b32fbb63SXin Li fPath=${xml%/*} 73*b32fbb63SXin Li fParentPathPostfix=${fPath:(-11)} 74*b32fbb63SXin Li if [[ "permissions" == ${fParentPathPostfix} ]]; then 75*b32fbb63SXin Li deviceXmlDic[${file}]=${xml} 76*b32fbb63SXin Li log "${file} ${fPath} ${fParentPathPostfix}" 77*b32fbb63SXin Li fi 78*b32fbb63SXin Lidone 79*b32fbb63SXin Liecho "Found: ${#deviceXmlDic[@]} xmls" 80*b32fbb63SXin Li 81*b32fbb63SXin Liecho "Comparing xmls from ${INPUT_DIR} to those on the device." 82*b32fbb63SXin Lii=1 83*b32fbb63SXin Lifor xml in "${!relXmlDic[@]}"; do 84*b32fbb63SXin Li # relFile="...google/etc/permissions/privapp-permissions-car.xml" 85*b32fbb63SXin Li relFile=${relXmlDic[$xml]} 86*b32fbb63SXin Li # fPath="...google/etc/permissions" 87*b32fbb63SXin Li fPath=${relFile%/*} 88*b32fbb63SXin Li # fParentPathPostfix="permissions" 89*b32fbb63SXin Li fParentPathPostfix=${fPath:(-11)} 90*b32fbb63SXin Li log "${xml} ${fPath} ${fParentPathPostfix}" 91*b32fbb63SXin Li 92*b32fbb63SXin Li # Only care about permissions 93*b32fbb63SXin Li if [[ "permissions" == ${fParentPathPostfix} ]]; then 94*b32fbb63SXin Li echo "$i Comparing permission file: $xml" 95*b32fbb63SXin Li 96*b32fbb63SXin Li deviceFile=${deviceXmlDic[$xml]} 97*b32fbb63SXin Li if [[ -z ${deviceFile} ]]; then 98*b32fbb63SXin Li # Maybe it's renamed 99*b32fbb63SXin Li newXml=${xmlRenameDic[$xml]} 100*b32fbb63SXin Li log "Rename $xml to $newXml" 101*b32fbb63SXin Li deviceFile=${deviceXmlDic[$newXml]} 102*b32fbb63SXin Li if [[ -z ${deviceFile} ]]; then 103*b32fbb63SXin Li echo "Error: no ${xml} on the device." 104*b32fbb63SXin Li echo 105*b32fbb63SXin Li i=$(($i + 1)) 106*b32fbb63SXin Li continue 107*b32fbb63SXin Li fi 108*b32fbb63SXin Li fi 109*b32fbb63SXin Li 110*b32fbb63SXin Li # Pull the xml from device & diff 111*b32fbb63SXin Li adb pull "${deviceFile}" "${OUT_DIR}/${xml}" 112*b32fbb63SXin Li diff "${relXmlDic[$xml]}" "${OUT_DIR}/${xml}" 113*b32fbb63SXin Li i=$(($i + 1)) 114*b32fbb63SXin Li echo 115*b32fbb63SXin Li fi 116*b32fbb63SXin Lidone 117*b32fbb63SXin Liecho "Took ${SECONDS} seconds" 118