From 26e1556819fd061efaac88875980771d1ebeb727 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org>
Date: Tue, 25 Feb 2020 15:04:41 +0100
Subject: [PATCH] ctdb-scripts: add new 48.netbios script for starting nmbd

This change basically moves out nmbd references from 50.samba script to
a new 48.netbios script. Accordingly ctdb test scripts are tweaked to
cope with newly added script.

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Martin Schwenke <martin@meltin.net>
---
 ctdb/config/events/legacy/48.netbios.script   | 64 +++++++++++++++++++
 ctdb/config/events/legacy/50.samba.script     | 19 ------
 ctdb/doc/examples/config_migrate.sh           |  3 +-
 .../eventscripts/48.netbios.shutdown.011.sh   | 14 ++++
 .../eventscripts/48.netbios.startup.011.sh    | 14 ++++
 .../eventscripts/50.samba.shutdown.011.sh     |  1 -
 .../UNIT/eventscripts/50.samba.startup.011.sh |  1 -
 .../UNIT/eventscripts/scripts/48.netbios.sh   | 21 ++++++
 .../UNIT/eventscripts/scripts/50.samba.sh     |  4 +-
 9 files changed, 117 insertions(+), 24 deletions(-)
 create mode 100755 ctdb/config/events/legacy/48.netbios.script
 create mode 100755 ctdb/tests/UNIT/eventscripts/48.netbios.shutdown.011.sh
 create mode 100755 ctdb/tests/UNIT/eventscripts/48.netbios.startup.011.sh
 create mode 100644 ctdb/tests/UNIT/eventscripts/scripts/48.netbios.sh

diff --git a/ctdb/config/events/legacy/48.netbios.script b/ctdb/config/events/legacy/48.netbios.script
new file mode 100755
index 00000000000..bc4b9cb0ba9
--- /dev/null
+++ b/ctdb/config/events/legacy/48.netbios.script
@@ -0,0 +1,64 @@
+#!/bin/sh
+# ctdb event script for Netbios Name Services
+
+[ -n "$CTDB_BASE" ] || \
+    CTDB_BASE=$(d=$(dirname "$0") ; cd -P "$d" ; dirname "$PWD")
+
+. "${CTDB_BASE}/functions"
+
+detect_init_style
+
+case $CTDB_INIT_STYLE in
+	suse)
+		CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmb}
+		;;
+	debian)
+		CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmbd}
+		;;
+	*)
+		# Use redhat style as default:
+		CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
+		;;
+esac
+
+service_name="netbios"
+
+load_script_options
+
+ctdb_setup_state_dir "service" "$service_name"
+
+service_start ()
+{
+    # make sure nmbd is not already started
+    service "$CTDB_SERVICE_NMB" stop > /dev/null 2>&1
+    killall -0 -q nmbd && {
+	sleep 1
+	# make absolutely sure nmbd is dead
+	killall -q -9 nmbd
+    }
+
+    # start Samba nmbd service. Start it reniced, as under very heavy load
+    # the number of smbd processes will mean that it leaves few cycles
+    # for anything else
+    nice_service "$CTDB_SERVICE_NMB" start || die "Failed to start nmbd"
+}
+
+service_stop ()
+{
+    service "$CTDB_SERVICE_NMB" stop
+}
+
+###########################
+
+case "$1" in
+startup)
+	service_start
+	;;
+
+shutdown)
+	service_stop
+	;;
+
+esac
+
+exit 0
diff --git a/ctdb/config/events/legacy/50.samba.script b/ctdb/config/events/legacy/50.samba.script
index ce9e05f9756..b0e2fff1e09 100755
--- a/ctdb/config/events/legacy/50.samba.script
+++ b/ctdb/config/events/legacy/50.samba.script
@@ -11,16 +11,13 @@ detect_init_style
 case $CTDB_INIT_STYLE in
 	suse)
 		CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
-		CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmb}
 		;;
 	debian)
 		CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smbd}
-		CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmbd}
 		;;
 	*)
 		# Use redhat style as default:
 		CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
-		CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
 		;;
 esac
 
@@ -34,27 +31,14 @@ service_start ()
 {
     # make sure samba is not already started
     service "$CTDB_SERVICE_SMB" stop > /dev/null 2>&1
-    if [ -n "$CTDB_SERVICE_NMB" ] ; then
-	service "$CTDB_SERVICE_NMB" stop > /dev/null 2>&1
-    fi
     killall -0 -q smbd && {
 	sleep 1
 	# make absolutely sure samba is dead
 	killall -q -9 smbd
     }
-    killall -0 -q nmbd && {
-	sleep 1
-	# make absolutely sure samba is dead
-	killall -q -9 nmbd
-    }
-
     # start Samba service. Start it reniced, as under very heavy load
     # the number of smbd processes will mean that it leaves few cycles
     # for anything else
-    if [ -n "$CTDB_SERVICE_NMB" ] ; then
-	nice_service "$CTDB_SERVICE_NMB" start || die "Failed to start nmbd"
-    fi
-
     nice_service "$CTDB_SERVICE_SMB" start || die "Failed to start samba"
 }
 
@@ -62,9 +46,6 @@ service_stop ()
 {
     service "$CTDB_SERVICE_SMB" stop
     program_stack_traces "smbd" 5
-    if [ -n "$CTDB_SERVICE_NMB" ] ; then
-	service "$CTDB_SERVICE_NMB" stop
-    fi
 }
 
 ######################################################################
diff --git a/ctdb/doc/examples/config_migrate.sh b/ctdb/doc/examples/config_migrate.sh
index 8983105f1c9..2a63da0e952 100755
--- a/ctdb/doc/examples/config_migrate.sh
+++ b/ctdb/doc/examples/config_migrate.sh
@@ -241,12 +241,13 @@ CTDB_LVS_PUBLIC_IP
 CTDB_MONITOR_MPDEVICES
 # 31.clamd
 CTDB_CLAMD_SOCKET
+# 48.netbios
+CTDB_SERVICE_NMB
 # 49.winbind
 CTDB_SERVICE_WINBIND
 # 50.samba
 CTDB_SAMBA_CHECK_PORTS
 CTDB_SAMBA_SKIP_SHARE_CHECK
-CTDB_SERVICE_NMB
 CTDB_SERVICE_SMB
 # 60.nfs
 CTDB_NFS_CALLOUT
diff --git a/ctdb/tests/UNIT/eventscripts/48.netbios.shutdown.011.sh b/ctdb/tests/UNIT/eventscripts/48.netbios.shutdown.011.sh
new file mode 100755
index 00000000000..06498138577
--- /dev/null
+++ b/ctdb/tests/UNIT/eventscripts/48.netbios.shutdown.011.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "shutdown, Debian init style"
+
+setup
+
+export EVENTSCRIPT_TESTS_INIT_STYLE="debian"
+
+ok <<EOF
+Stopping nmbd: OK
+EOF
+simple_test
diff --git a/ctdb/tests/UNIT/eventscripts/48.netbios.startup.011.sh b/ctdb/tests/UNIT/eventscripts/48.netbios.startup.011.sh
new file mode 100755
index 00000000000..40b90a10e65
--- /dev/null
+++ b/ctdb/tests/UNIT/eventscripts/48.netbios.startup.011.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "shutdown, Debian init style"
+
+setup
+
+export EVENTSCRIPT_TESTS_INIT_STYLE="debian"
+
+ok <<EOF
+Starting nmbd: OK
+EOF
+simple_test
diff --git a/ctdb/tests/UNIT/eventscripts/50.samba.shutdown.011.sh b/ctdb/tests/UNIT/eventscripts/50.samba.shutdown.011.sh
index a64696bf723..94867e0a71f 100755
--- a/ctdb/tests/UNIT/eventscripts/50.samba.shutdown.011.sh
+++ b/ctdb/tests/UNIT/eventscripts/50.samba.shutdown.011.sh
@@ -10,6 +10,5 @@ export EVENTSCRIPT_TESTS_INIT_STYLE="debian"
 
 ok <<EOF
 Stopping smbd: OK
-Stopping nmbd: OK
 EOF
 simple_test
diff --git a/ctdb/tests/UNIT/eventscripts/50.samba.startup.011.sh b/ctdb/tests/UNIT/eventscripts/50.samba.startup.011.sh
index ce79767fb36..8c4699d45d2 100755
--- a/ctdb/tests/UNIT/eventscripts/50.samba.startup.011.sh
+++ b/ctdb/tests/UNIT/eventscripts/50.samba.startup.011.sh
@@ -9,7 +9,6 @@ setup
 export EVENTSCRIPT_TESTS_INIT_STYLE="debian"
 
 ok <<EOF
-Starting nmbd: OK
 Starting smbd: OK
 EOF
 simple_test
diff --git a/ctdb/tests/UNIT/eventscripts/scripts/48.netbios.sh b/ctdb/tests/UNIT/eventscripts/scripts/48.netbios.sh
new file mode 100644
index 00000000000..f578399a3cd
--- /dev/null
+++ b/ctdb/tests/UNIT/eventscripts/scripts/48.netbios.sh
@@ -0,0 +1,21 @@
+setup ()
+{
+	service_name="netbios"
+
+	if [ "$1" != "down" ] ; then
+
+		debug "Marking Netbios name services as up, listening and managed by CTDB"
+
+		# All possible service names for all known distros.
+		for i in "nmb" "nmbd" ; do
+			service "$i" force-started
+		done
+	else
+		debug "Marking Netbios name services as down, not listening and not managed by CTDB"
+
+		# All possible service names for all known distros.
+		for i in "nmb" "nmbd" ; do
+			service "$i" force-stopped
+		done
+	fi
+}
diff --git a/ctdb/tests/UNIT/eventscripts/scripts/50.samba.sh b/ctdb/tests/UNIT/eventscripts/scripts/50.samba.sh
index 3ffe18a201e..51175dbe84a 100644
--- a/ctdb/tests/UNIT/eventscripts/scripts/50.samba.sh
+++ b/ctdb/tests/UNIT/eventscripts/scripts/50.samba.sh
@@ -7,7 +7,7 @@ setup ()
 		debug "Marking Samba services as up, listening and managed by CTDB"
 
 		# All possible service names for all known distros.
-		for i in "smb" "nmb" "samba" "smbd" "nmbd" ; do
+		for i in "smb" "samba" "smbd" ; do
 			service "$i" force-started
 		done
 
@@ -21,7 +21,7 @@ setup ()
 		debug "Marking Samba services as down, not listening and not managed by CTDB"
 
 		# All possible service names for all known distros.
-		for i in "smb" "nmb" "samba" "smbd" "nmbd" ; do
+		for i in "smb" "samba" "smbd" ; do
 			service "$i" force-stopped
 		done