summaryrefslogtreecommitdiffstats
path: root/extras/hook-scripts/create/post/S10selinux-label-brick.sh
diff options
context:
space:
mode:
Diffstat (limited to 'extras/hook-scripts/create/post/S10selinux-label-brick.sh')
-rwxr-xr-xextras/hook-scripts/create/post/S10selinux-label-brick.sh61
1 files changed, 61 insertions, 0 deletions
diff --git a/extras/hook-scripts/create/post/S10selinux-label-brick.sh b/extras/hook-scripts/create/post/S10selinux-label-brick.sh
new file mode 100755
index 00000000000..d69a938123e
--- /dev/null
+++ b/extras/hook-scripts/create/post/S10selinux-label-brick.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+#
+# Install to hooks/<HOOKS_VER>/create/post
+#
+# Add an SELinux file context for each brick using the glusterd_brick_t type.
+# This ensures that the brick is relabeled correctly on an SELinux restart or
+# restore. Subsequently, run a restore on the brick path to set the selinux
+# labels.
+#
+###
+
+PROGNAME="Sselinux"
+OPTSPEC="volname:"
+VOL=
+
+function parse_args () {
+ ARGS=$(getopt -l $OPTSPEC -name $PROGNAME $@)
+ eval set -- "$ARGS"
+
+ while true; do
+ case $1 in
+ --volname)
+ shift
+ VOL=$1
+ ;;
+ *)
+ shift
+ break
+ ;;
+ esac
+ shift
+ done
+}
+
+function set_brick_labels()
+{
+ volname=$1
+
+ # grab the path for each local brick
+ brickdirs=$(grep '^path=' /var/lib/glusterd/vols/${volname}/bricks/* | cut -d= -f 2)
+
+ for b in $brickdirs
+ do
+ # Add a file context for each brick path and associate with the
+ # glusterd_brick_t SELinux type.
+ semanage fcontext --add -t glusterd_brick_t -r s0 $b(/.*)?
+
+ # Set the labels on the new brick path.
+ restorecon -R $b
+ done
+}
+
+SELINUX_STATE=$(which getenforce && getenforce)
+[ "${SELINUX_STATE}" = 'Disabled' ] && exit 0
+
+parse_args $@
+[ -z "$VOL" ] && exit 1
+
+set_brick_labels $VOL
+
+exit 0