#!/bin/bash
#
# This file is a part of ALT Linux SeLinux policy.
# Copyright (C) 2013 ALT Linux company
#
# Do automatic relabelling
#
# Taken from https://git.fedorahosted.org/cgit/initscripts.git/plain/systemd/fedora-autorelabel
#

. /etc/init.d/functions

relabel_selinux() {
  # if /sbin/init is not labeled correctly this process is running in the
  # wrong context, so a reboot will be required after relabel
  AUTORELABEL=
  . /etc/selinux/config
  echo "0" > /sys/fs/selinux/enforce
  [ -x /bin/plymouth ] && plymouth --hide-splash

  if [ "$AUTORELABEL" = "0" ]; then
    echo
    echo $"*** Warning -- SELinux ${SELINUXTYPE} policy relabel is required. "
    echo $"*** /etc/selinux/config indicates you want to manually fix labeling"
    echo $"*** problems. Dropping you to a shell; the system will reboot"
    echo $"*** when you leave the shell."
    sulogin

  else
    echo
    echo $"*** Warning -- SELinux ${SELINUXTYPE} policy relabel is required."
    echo $"*** Relabeling could take a very long time, depending on file"
    echo $"*** system size and speed of hard drives."

    FORCE=`cat /.autorelabel`
    /sbin/fixfiles $FORCE restore > /dev/null 2>&1
  fi
  rm -f  /.autorelabel
  systemctl --force reboot
}

# Check to see if a full relabel is needed
if [ "$READONLY" != "yes" ]; then
  restorecon $(awk '!/^#/ && $4 !~ /noauto/ && $2 ~ /^\// { print $2 }' /etc/fstab) >/dev/null 2>&1
  relabel_selinux
fi

# vim: ai ts=2 sw=2 et sts=2 ft=sh
# vim: autoindent tabstop=2 shiftwidth=2 expandtab softtabstop=2 filetype=sh
