extras/hooks: syntactical errors in SELinux hooks, scipt logic improved

Fixes: bz#1701818
Change-Id: Ia5fa1df81bbaec3a84653d136a331c76b457f42c
Signed-off-by: Milan Zink <zeten30@gmail.com>
(cherry picked from commit 1ad201a9fd6748d7ef49fb073fcfe8c6858d557d)
This commit is contained in:
Milan Zink 2018-02-05 15:04:37 +01:00 committed by Shyamsundar Ranganathan
parent bf69fa4727
commit 2aa9898720
3 changed files with 45 additions and 30 deletions

View File

@ -34,18 +34,21 @@ parse_args () {
set_brick_labels() set_brick_labels()
{ {
volname=${1} volname="${1}"
# grab the path for each local brick # grab the path for each local brick
brickpath="/var/lib/glusterd/vols/${volname}/bricks/*" brickpath="/var/lib/glusterd/vols/${volname}/bricks/"
brickdirs=$(grep '^path=' "${brickpath}" | cut -d= -f 2 | sort -u) brickdirs=$(
find "${brickpath}" -type f -exec grep '^path=' {} \; | \
cut -d= -f 2 | \
sort -u
)
for b in ${brickdirs}; do for b in ${brickdirs}; do
# Add a file context for each brick path and associate with the # Add a file context for each brick path and associate with the
# glusterd_brick_t SELinux type. # glusterd_brick_t SELinux type.
pattern="${b}\(/.*\)?" pattern="${b}(/.*)?"
semanage fcontext --add -t glusterd_brick_t -r s0 "${pattern}" semanage fcontext --add -t glusterd_brick_t -r s0 "${pattern}"
# Set the labels on the new brick path. # Set the labels on the new brick path.
restorecon -R "${b}" restorecon -R "${b}"
done done

View File

@ -15,45 +15,55 @@ OPTSPEC="volname:"
VOL= VOL=
function parse_args () { function parse_args () {
ARGS=$(getopt -o '' -l $OPTSPEC -n $PROGNAME -- "$@") ARGS=$(getopt -o '' -l ${OPTSPEC} -n ${PROGNAME} -- "$@")
eval set -- "$ARGS" eval set -- "${ARGS}"
while true; do while true; do
case $1 in case ${1} in
--volname) --volname)
shift
VOL=$1
;;
*)
shift
break
;;
esac
shift shift
done VOL=${1}
;;
*)
shift
break
;;
esac
shift
done
} }
function delete_brick_fcontext() function delete_brick_fcontext()
{ {
volname=$1 volname="${1}"
# grab the path for each local brick # grab the path for each local brick
brickdirs=$(grep '^path=' /var/lib/glusterd/vols/${volname}/bricks/* | cut -d= -f 2) brickpath="/var/lib/glusterd/vols/${volname}/bricks/"
brickdirs=$(
find "${brickpath}" -type f -exec grep '^path=' {} \; | \
cut -d= -f 2 | \
sort -u
)
for b in ${brickdirs}
do
# remove the file context associated with the brick path
pattern="${b}(/.*)?"
semanage fcontext --delete "${pattern}"
# remove the labels on brick path.
restorecon -R "${b}"
done
for b in $brickdirs
do
# remove the file context associated with the brick path
semanage fcontext --delete $b\(/.*\)?
done
} }
SELINUX_STATE=$(which getenforce && getenforce) SELINUX_STATE=$(which getenforce && getenforce)
[ "${SELINUX_STATE}" = 'Disabled' ] && exit 0 [ "${SELINUX_STATE}" = 'Disabled' ] && exit 0
parse_args "$@" parse_args "$@"
[ -z "$VOL" ] && exit 1 [ -z "${VOL}" ] && exit 1
delete_brick_fcontext $VOL delete_brick_fcontext "${VOL}"
# failure to delete the fcontext is not fatal # failure to delete the fcontext is not fatal
exit 0 exit 0

View File

@ -46,7 +46,9 @@ TEST $CLI volume create $V0 $H0:$B0/${V0}1;
EXPECT "$V0" volinfo_field $V0 'Volume Name'; EXPECT "$V0" volinfo_field $V0 'Volume Name';
EXPECT 'Created' volinfo_field $V0 'Status'; EXPECT 'Created' volinfo_field $V0 'Status';
EXPECT 'createPre' cat /tmp/pre.out; EXPECT 'createPre' cat /tmp/pre.out;
EXPECT 'createPost' cat /tmp/post.out; # Spost.sh comes after S10selinux-label-brick.sh under create post hook script
# list. So consider the delay in setting SELinux context on bricks
EXPECT_WITHIN 5 'createPost' cat /tmp/post.out;
hooks_cleanup 'create' hooks_cleanup 'create'