Blob Blame History Raw
From 644bcd954000b77fc8f49e3a7941de23ca869427 Mon Sep 17 00:00:00 2001
From: Anoop C S <anoopcs@redhat.com>
Date: Wed, 21 Mar 2018 13:09:01 +0530
Subject: [PATCH 481/493] extras/hooks: Do not blindly remove volume share from
 smb.conf

When Gluster volumes are shared via Samba, any extra smb.conf parameter
setting done by administrator to those shares are lost during restart
of the volume. Instead of removing the whole share completely from
smb.conf(via hook scripts during volume stop) it is better to make it
temporarily unavailable to end-users till the volume is started again.
Therefore we make use of a smb.conf parameter named 'available'[1] to
achieve the above intend.

[1] https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html

upstream ref: https://review.gluster.org/c/glusterfs/+/19750

Change-Id: I68a9055b50791f6ffd3b95a3c13d858a75fa6530
BUG: 1164778
Signed-off-by: Anoop C S <anoopcs@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/158495
Tested-by: RHGS Build Bot <nigelb@redhat.com>
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
---
 extras/hook-scripts/set/post/S30samba-set.sh     | 11 ++++++-----
 extras/hook-scripts/start/post/S30samba-start.sh |  4 +++-
 extras/hook-scripts/stop/pre/S30samba-stop.sh    |  6 +++---
 3 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/extras/hook-scripts/set/post/S30samba-set.sh b/extras/hook-scripts/set/post/S30samba-set.sh
index b93415b..c596db0 100755
--- a/extras/hook-scripts/set/post/S30samba-set.sh
+++ b/extras/hook-scripts/set/post/S30samba-set.sh
@@ -103,9 +103,9 @@ function sighup_samba () {
         fi
 }
 
-function del_samba_share () {
+function deactivate_samba_share () {
         volname=$1
-        sed -i "/\[gluster-$volname\]/,/^$/d" ${CONFIGFILE}
+        sed -i -e '/^\[gluster-'"$volname"'\]/{ :a' -e 'n; /available = no/H; /^$/!{$!ba;}; x; /./!{ s/^/available = no/; $!{G;x}; $H; }; s/.*//; x; };' ${CONFIGFILE}
 }
 
 function is_volume_started () {
@@ -140,12 +140,13 @@ if [ "$USERCIFS_SET" = "YES" ] || [ "$USERSMB_SET" = "YES" ]; then
     find_config_info
 
     if [ "$(get_smb "$VOL")" = "disable" ]; then
-        del_samba_share $VOL
-        sighup_samba
+        deactivate_samba_share $VOL
     else
         if ! grep --quiet "\[gluster-$VOL\]" ${CONFIGFILE} ; then
             add_samba_share $VOL
-            sighup_samba
+        else
+            sed -i '/\[gluster-'"$VOL"'\]/,/^$/!b;/available = no/d' ${CONFIGFILE}
         fi
     fi
+    sighup_samba
 fi
diff --git a/extras/hook-scripts/start/post/S30samba-start.sh b/extras/hook-scripts/start/post/S30samba-start.sh
index 92ddaf4..5d586ee 100755
--- a/extras/hook-scripts/start/post/S30samba-start.sh
+++ b/extras/hook-scripts/start/post/S30samba-start.sh
@@ -127,5 +127,7 @@ find_config_info
 
 if ! grep --quiet "\[gluster-$VOL\]" ${CONFIGFILE} ; then
         add_samba_share $VOL
-        sighup_samba
+else
+        sed -i '/\[gluster-'"$VOL"'\]/,/^$/!b;/available = no/d' ${CONFIGFILE}
 fi
+sighup_samba
diff --git a/extras/hook-scripts/stop/pre/S30samba-stop.sh b/extras/hook-scripts/stop/pre/S30samba-stop.sh
index 5e87845..ea79938 100755
--- a/extras/hook-scripts/stop/pre/S30samba-stop.sh
+++ b/extras/hook-scripts/stop/pre/S30samba-stop.sh
@@ -56,9 +56,9 @@ function find_config_info () {
         PIDDIR=`smbd -b | grep PIDDIR | awk '{print $2}'`
 }
 
-function del_samba_share () {
+function deactivate_samba_share () {
         volname=$1
-        sed -i "/\[gluster-$volname\]/,/^$/d" ${CONFIGFILE}
+        sed -i -e '/^\[gluster-'"$volname"'\]/{ :a' -e 'n; /available = no/H; /^$/!{$!ba;}; x; /./!{ s/^/available = no/; $!{G;x}; $H; }; s/.*//; x; };' ${CONFIGFILE}
 }
 
 function sighup_samba () {
@@ -73,5 +73,5 @@ function sighup_samba () {
 
 parse_args "$@"
 find_config_info
-del_samba_share $VOL
+deactivate_samba_share $VOL
 sighup_samba
-- 
1.8.3.1