#!/bin/bash # # Try really hard to rebuild SELinux policy # mark_bad() { echo "Avoiding: $1" echo $1 >> qarshd.bad-interfaces } lookup_rule() { lineno=`grep -B1 $1 tmp/qarshd.tmp | head -n 1 | awk '{print $NF}'`; head -n $lineno qarshd.te | tail -n 1 | sed -e 's/(qarshd_t)//' } make || exit 1 until make load > make.log 2>&1; do badtype=`cat make.log | perl -n -e'/^libsepol.print_missing_requirements.*attribute (\S+)/ && print "$1\n"'` if [ -z "$badtype" ]; then echo "Error not found in make.log" cat make.log exit 1 fi badint=`lookup_rule $badtype` if [ -z "$badint" ]; then echo "Interface not found from bad type $badtype" exit 1 fi mark_bad $badint done rm -f make.log