#! /bin/bash
#
# Copyright 2014 Red Hat
# All Rights Reserved.
#
# 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 -eux
set -o pipefail

function show_options() {
    echo "Usage: $0 SOURCE_PATH TARGET_PATH"
    echo
    echo "Context labeling for the TARGET_PATH is made equivalent"
    echo "to the SOURCE_PATH"
    echo
    echo "Can be used to relabel file contexts for files installed"
    echo "in non-standard locations. For example when nova is installed"
    echo "under /opt/stack/venvs/nova/bin (target) instead of /usr/bin/"
    echo "(source). Adding a path subsitution would correct the file"
    echo "contexts for files in /opt/stack/venvs/nova/bin. They would"
    echo "be labeled with the same contexts as if they had been installed"
    echo "at /usr/bin by a rpm package."
}

SOURCE_PATH=${1:-""}
TARGET_PATH=${2:-""}

if [ -z "$SOURCE_PATH" -o -z "$TARGET_PATH" ]; then
    show_options
fi

if [ ! -x /usr/sbin/semanage ]; then
    echo "SELinux not available"
    exit 0
fi

# Add the path if it doesn't already exist
if [ "`semanage fcontext -l | grep $TARGET_PATH`" == "" ]; then
    semanage fcontext -N -a -e $SOURCE_PATH $TARGET_PATH
fi

restorecon -Rv $TARGET_PATH
