Blame SOURCES/selinux-policy-migrate-local-changes.sh

0d3ecd
#!/bin/bash
0d3ecd
#===============================================================================
0d3ecd
#
0d3ecd
#          FILE: selinux-policy-migrate-local-changes.sh
0d3ecd
# 
0d3ecd
#         USAGE: ./selinux-policy-migrate-local-changes.sh <POLICYTYPE>
0d3ecd
# 
0d3ecd
#   DESCRIPTION: This script migrates local changes from pre-2.4 SELinux modules
0d3ecd
#                store structure to the new structure
0d3ecd
# 
0d3ecd
#        AUTHOR: Petr Lautrbach <plautrba@redhat.com>
0d3ecd
#===============================================================================
0d3ecd
0d3ecd
if [ ! -f /etc/selinux/config ]; then
0d3ecd
    SELINUXTYPE=none
0d3ecd
else
0d3ecd
    source /etc/selinux/config
0d3ecd
fi
0d3ecd
0d3ecd
REBUILD=0
0d3ecd
MIGRATE_SELINUXTYPE=$1
0d3ecd
0d3ecd
for local in booleans.local file_contexts.local ports.local users_extra.local users.local; do
0d3ecd
    if [ -e /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/$local ]; then
0d3ecd
        REBUILD=1
0d3ecd
        cp -v --preserve=mode,ownership,timestamps,links /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/$local /etc/selinux/$MIGRATE_SELINUXTYPE/active/$local
0d3ecd
    fi
0d3ecd
done
0d3ecd
if [ -e /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/seusers ]; then
0d3ecd
    REBUILD=1
0d3ecd
    cp -v --preserve=mode,ownership,timestamps,links /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/seusers /etc/selinux/$MIGRATE_SELINUXTYPE/active/seusers.local
0d3ecd
fi
0d3ecd
0d3ecd
INSTALL_MODULES=""
0d3ecd
for i in `find /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/modules/ -name \*disabled 2> /dev/null`; do
0d3ecd
    module=`basename $i | sed 's/\.pp\.disabled$//'`
0d3ecd
    if [ $module == "pkcsslotd" ] || [ $module == "vbetool" ] || [ $module == "ctdbd" ] || [ $module == "docker" ] || [ $module == "gear" ]; then
0d3ecd
        continue
0d3ecd
    fi
0d3ecd
    if [ -d /etc/selinux/$MIGRATE_SELINUXTYPE/active/modules/100/$module ]; then
0d3ecd
        touch /etc/selinux/$MIGRATE_SELINUXTYPE/active/modules/disabled/$module
0d3ecd
    fi
0d3ecd
done
0d3ecd
for i in `find /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/modules/ -name \*.pp 2> /dev/null`; do
0d3ecd
    module=`basename $i | sed 's/\.pp$//'`
0d3ecd
    if [  $module == "audioentropy" ] || [ $module == "pkcsslotd" ] || [ $module == "vbetool" ] || [ $module == "ctdbd" ] || [ $module == "docker" ] || [ $module == "gear" ]; then
0d3ecd
        continue
0d3ecd
    fi
0d3ecd
    if [ ! -d /etc/selinux/$MIGRATE_SELINUXTYPE/active/modules/100/$module ]; then
0d3ecd
        INSTALL_MODULES="${INSTALL_MODULES} $i"
0d3ecd
    fi
0d3ecd
done
0d3ecd
if [ -n "$INSTALL_MODULES" ]; then
0d3ecd
    semodule -s $MIGRATE_SELINUXTYPE -n -X 400 -i $INSTALL_MODULES
0d3ecd
    REBUILD=1
0d3ecd
fi
0d3ecd
0d3ecd
cat > /etc/selinux/$MIGRATE_SELINUXTYPE/modules/active/README.migrated <
0d3ecd
Your old modules store and local changes were migrated to the new structure in
0d3ecd
in the following directory:
0d3ecd
0d3ecd
/etc/selinux/$MIGRATE_SELINUXTYPE/active
0d3ecd
0d3ecd
WARNING: Do not remove this file or remove /etc/selinux/$MIGRATE_SELINUXTYPE/modules
0d3ecd
completely if you are confident that you don't need old files anymore.
0d3ecd
EOF
0d3ecd
0d3ecd
if [ ${DONT_REBUILD:-0} = 0 -a $REBUILD = 1 ]; then
0d3ecd
    semodule -B -n -s $MIGRATE_SELINUXTYPE
0d3ecd
    if [ "$MIGRATE_SELINUXTYPE" = "$SELINUXTYPE" ] && selinuxenabled; then
0d3ecd
        load_policy
0d3ecd
        if [ -x /usr/sbin/semanage ]; then
0d3ecd
            /usr/sbin/semanage export | /usr/sbin/semanage import
0d3ecd
        fi
0d3ecd
    fi
0d3ecd
fi