#!/system/bin/sh
#
# Copyright (C) 2017 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.

# Set up or tear down subdirectories of vold-created directories.
#
# This is kept separate from vold because under the SELinux rules, it has privileges vold doesn't
# have. In particular, prepare_dir sets SELinux labels on subdirectories based on file_contexts,
# so this script has some relabelling privileges.


set -e
action="$1"
dirtype="$2"
volume_uuid="$3"
user_id="$4"
path="$5"

case "$user_id" in
    *[!0-9]* | '')
        echo "Invalid user id"
        exit -1
        ;;
esac

if [ x"$volume_uuid" != x ] ; then
    echo "Volume must be root volume"
    exit -1;
fi

case "$dirtype" in
    misc_de|misc_ce)
        computed_path="/data/$dirtype/$user_id"
        if [ x"$computed_path" != x"$path" ] ; then
            echo "Parameter path didn't match computed path: " $computed_path
            exit -1;
        fi
        case "$action" in
            prepare)
                /system/bin/prepare_dir --mode 700 --uid 0 --gid 0 -- "$computed_path"/vold
                ;;
            destroy)
                rm -rf "$computed_path"/*
                ;;
            *)
                echo "Unknown action: $action"
                exit -1
                ;;
        esac
        ;;
    *)
        echo "Unknown type: $dirtype"
        exit -1
        ;;
esac
