summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xctdb/Makefile.in1
-rwxr-xr-xctdb/config/events.d/49.winbind75
-rwxr-xr-xctdb/config/events.d/50.samba195
-rw-r--r--ctdb/packaging/RPM/ctdb.spec.in1
-rwxr-xr-xctdb/tests/eventscripts/49.winbind.monitor.001.sh11
-rwxr-xr-xctdb/tests/eventscripts/49.winbind.monitor.050.sh17
-rwxr-xr-xctdb/tests/eventscripts/49.winbind.monitor.051.sh18
-rwxr-xr-xctdb/tests/eventscripts/49.winbind.monitor.101.sh11
-rwxr-xr-xctdb/tests/eventscripts/49.winbind.monitor.102.sh (renamed from ctdb/tests/eventscripts/50.samba.monitor.102.sh)2
-rwxr-xr-xctdb/tests/eventscripts/50.samba.monitor.050.sh1
-rwxr-xr-xctdb/tests/eventscripts/50.samba.monitor.051.sh2
-rw-r--r--ctdb/tests/eventscripts/scripts/local.sh49
12 files changed, 225 insertions, 158 deletions
diff --git a/ctdb/Makefile.in b/ctdb/Makefile.in
index cbb987a57a..48cb57c5d6 100755
--- a/ctdb/Makefile.in
+++ b/ctdb/Makefile.in
@@ -341,6 +341,7 @@ install: all $(PMDA_INSTALL)
${INSTALLCMD} -m 755 config/events.d/40.vsftpd $(DESTDIR)$(etcdir)/ctdb/events.d
${INSTALLCMD} -m 644 config/events.d/40.fs_use $(DESTDIR)$(etcdir)/ctdb/events.d
${INSTALLCMD} -m 755 config/events.d/41.httpd $(DESTDIR)$(etcdir)/ctdb/events.d
+ ${INSTALLCMD} -m 755 config/events.d/49.winbind $(DESTDIR)$(etcdir)/ctdb/events.d
${INSTALLCMD} -m 755 config/events.d/50.samba $(DESTDIR)$(etcdir)/ctdb/events.d
${INSTALLCMD} -m 755 config/events.d/60.nfs $(DESTDIR)$(etcdir)/ctdb/events.d
${INSTALLCMD} -m 755 config/events.d/60.ganesha $(DESTDIR)$(etcdir)/ctdb/events.d
diff --git a/ctdb/config/events.d/49.winbind b/ctdb/config/events.d/49.winbind
new file mode 100755
index 0000000000..b67951ba15
--- /dev/null
+++ b/ctdb/config/events.d/49.winbind
@@ -0,0 +1,75 @@
+#!/bin/sh
+# ctdb event script for winbind
+
+. $CTDB_BASE/functions
+
+detect_init_style
+
+CTDB_SERVICE_WINBIND=${CTDB_SERVICE_WINBIND:-winbind}
+
+service_name="winbind"
+
+loadconfig
+
+ctdb_setup_service_state_dir
+
+service_start ()
+{
+ service "$CTDB_SERVICE_WINBIND" stop >/dev/null 2>&1
+ killall -0 -q winbindd && {
+ sleep 1
+ # make absolutely sure winbindd is dead
+ killall -q -9 winbindd
+ }
+
+ service "$CTDB_SERVICE_WINBIND" start || \
+ die "Failed to start winbind"
+}
+
+service_stop ()
+{
+ service "$CTDB_SERVICE_WINBIND" stop
+}
+
+service_reconfigure ()
+{
+ # winbind automatically reloads config - no restart needed.
+ :
+}
+
+###########################
+
+ctdb_start_stop_service
+
+is_ctdb_managed_service || exit 0
+
+ctdb_service_check_reconfigure
+
+###########################
+
+case "$1" in
+ startup)
+ ctdb_service_start
+ ;;
+
+ shutdown)
+ ctdb_service_stop
+ ;;
+
+ monitor)
+ ctdb_check_command "winbind" "wbinfo -p"
+ ;;
+
+ takeip|releaseip)
+ iface=$2
+ ip=$3
+ maskbits=$4
+
+ smbcontrol winbindd ip-dropped $ip >/dev/null 2>/dev/null
+ ;;
+ *)
+ ctdb_standard_event_handler "$@"
+ ;;
+esac
+
+exit 0
diff --git a/ctdb/config/events.d/50.samba b/ctdb/config/events.d/50.samba
index bf143bf26e..4d9f12165d 100755
--- a/ctdb/config/events.d/50.samba
+++ b/ctdb/config/events.d/50.samba
@@ -9,18 +9,15 @@ case $CTDB_INIT_STYLE in
suse)
CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmb}
- CTDB_SERVICE_WINBIND=${CTDB_SERVICE_WINBIND:-winbind}
;;
debian)
CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-samba}
CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
- CTDB_SERVICE_WINBIND=${CTDB_SERVICE_WINBIND:-winbind}
;;
*)
- # should not happen, but for now use redhat style as default:
+ # Use redhat style as default:
CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
- CTDB_SERVICE_WINBIND=${CTDB_SERVICE_WINBIND:-winbind}
;;
esac
@@ -32,89 +29,40 @@ ctdb_setup_service_state_dir
service_start ()
{
- # If set then we force-start the relevant service.
- _service_name="$1"
-
- # make sure samba is not already started
- if [ "$_service_name" = "samba" ] || \
- is_ctdb_managed_service "samba" ; then
- 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
- }
- fi
-
- # make sure winbind is not already started
- if [ "$_service_name" = "winbind" ] || \
- check_ctdb_manages_winbind ; then
- service "$CTDB_SERVICE_WINBIND" stop > /dev/null 2>&1
- killall -0 -q winbindd && {
- sleep 1
- # make absolutely sure winbindd is dead
- killall -q -9 winbindd
- }
+ # 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
+ }
- fi
+ # 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
+ net serverid wipe
- # start the winbind service
- if [ "$_service_name" = "winbind" ] || \
- check_ctdb_manages_winbind ; then
- service "$CTDB_SERVICE_WINBIND" start || {
- echo failed to start winbind
- exit 1
- }
- fi
+ if [ -n "$CTDB_SERVICE_NMB" ] ; then
+ nice_service "$CTDB_SERVICE_NMB" start || die "Failed to start nmbd"
+ fi
- # 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 [ "$_service_name" = "samba" ] || \
- is_ctdb_managed_service "samba" ; then
- net serverid wipe
-
- if [ -n "$CTDB_SERVICE_NMB" ] ; then
- nice_service "$CTDB_SERVICE_NMB" start || {
- echo failed to start nmbd
- exit 1
- }
- fi
- nice_service "$CTDB_SERVICE_SMB" start || {
- echo failed to start samba
- exit 1
- }
- fi
+ nice_service "$CTDB_SERVICE_SMB" start || die "Failed to start samba"
}
service_stop ()
{
- # If set then we force-stop the relevant service.
- _service_name="$1"
-
- # shutdown Samba when ctdb goes down
- if [ "$_service_name" = "samba" ] || \
- is_ctdb_managed_service "samba" ; then
- service "$CTDB_SERVICE_SMB" stop
- if [ -n "$CTDB_SERVICE_NMB" ] ; then
- service "$CTDB_SERVICE_NMB" stop
- fi
- fi
-
- # stop the winbind service
- if [ "$_service_name" = "winbind" ] || \
- check_ctdb_manages_winbind ; then
- service "$CTDB_SERVICE_WINBIND" stop
- fi
+ service "$CTDB_SERVICE_SMB" stop
+ if [ -n "$CTDB_SERVICE_NMB" ] ; then
+ service "$CTDB_SERVICE_NMB" stop
+ fi
}
service_reconfigure ()
@@ -148,7 +96,7 @@ testparm_background_update() {
# otherwise do a background update
(
tmpfile="${smbconf_cache}.$$"
- testparm -s > $tmpfile 2> /dev/null &
+ testparm -v -s > $tmpfile 2> /dev/null &
# remember the pid of the teamparm process
pid="$!"
# give it 10 seconds to run
@@ -195,30 +143,7 @@ testparm_cat() {
[ -f $smbconf_cache ] || {
testparm_foreground_update
}
- testparm -s "$smbconf_cache" "$@" 2>/dev/null
-}
-
-# function to see if ctdb manages winbind - this overrides with extra
-# logic if $CTDB_MANAGES_WINBIND is not set or null.
-check_ctdb_manages_winbind() {
- if is_ctdb_managed_service "winbind" ; then
- return 0
- elif [ -n "$CTDB_MANAGES_WINBIND" ] ; then
- # If this variable is set we want to respect it. We return
- # false here because we know it is not set to "yes" - if it
- # were then the 1st "if" above would have succeeded.
- return 1
- else
- _secmode=`testparm_cat --parameter-name=security`
- case "$_secmode" in
- ADS|DOMAIN)
- return 0
- ;;
- *)
- return 1
- ;;
- esac
- fi
+ testparm -v -s "$smbconf_cache" "$@" 2>/dev/null
}
list_samba_shares ()
@@ -241,9 +166,10 @@ periodic_cleanup() {
###########################
ctdb_start_stop_service
-ctdb_start_stop_service "winbind"
-is_ctdb_managed_service || is_ctdb_managed_service "winbind" || exit 0
+is_ctdb_managed_service || exit 0
+
+ctdb_service_check_reconfigure
###########################
@@ -269,46 +195,29 @@ case "$1" in
touch "$periodic_cleanup_file"
}
- is_ctdb_managed_service "samba" && {
- [ "$CTDB_SAMBA_SKIP_SHARE_CHECK" = "yes" ] || {
- testparm_background_update
-
- testparm_cat | egrep '^WARNING|^ERROR|^Unknown' && {
- testparm_foreground_update
- testparm_cat | egrep '^WARNING|^ERROR|^Unknown' && {
- echo "ERROR: testparm shows smb.conf is not clean"
- exit 1
- }
- }
-
- list_samba_shares |
- ctdb_check_directories_probe || {
- testparm_foreground_update
- list_samba_shares |
- ctdb_check_directories
- } || exit $?
- }
+ if [ "$CTDB_SAMBA_SKIP_SHARE_CHECK" != "yes" ] ; then
+ testparm_background_update
- smb_ports="$CTDB_SAMBA_CHECK_PORTS"
- [ -z "$smb_ports" ] && {
- smb_ports=`testparm_cat --parameter-name="smb ports"`
- }
- ctdb_check_tcp_ports $smb_ports || exit $?
- }
+ testparm_cat | egrep '^WARNING|^ERROR|^Unknown' && {
+ testparm_foreground_update
+ testparm_cat | egrep '^WARNING|^ERROR|^Unknown' && \
+ die "ERROR: testparm shows smb.conf is not clean"
+ }
+
+ list_samba_shares | ctdb_check_directories_probe || {
+ testparm_foreground_update
+ list_samba_shares |
+ ctdb_check_directories
+ } || exit $?
+ fi
- # check winbind is OK
- check_ctdb_manages_winbind && {
- ctdb_check_command "winbind" "wbinfo -p"
- }
+ smb_ports="$CTDB_SAMBA_CHECK_PORTS"
+ if [ -z "$smb_ports" ] ; then
+ smb_ports=`testparm_cat --parameter-name="smb ports"`
+ fi
+ ctdb_check_tcp_ports $smb_ports || exit $?
;;
- takeip|releaseip)
- iface=$2
- ip=$3
- maskbits=$4
-
- smbcontrol winbindd ip-dropped $ip >/dev/null 2>/dev/null
- ;;
*)
ctdb_standard_event_handler "$@"
;;
diff --git a/ctdb/packaging/RPM/ctdb.spec.in b/ctdb/packaging/RPM/ctdb.spec.in
index 381739ca96..6a6398bdc7 100644
--- a/ctdb/packaging/RPM/ctdb.spec.in
+++ b/ctdb/packaging/RPM/ctdb.spec.in
@@ -139,6 +139,7 @@ rm -rf $RPM_BUILD_ROOT
%{_sysconfdir}/ctdb/events.d/40.fs_use
%{_sysconfdir}/ctdb/events.d/40.vsftpd
%{_sysconfdir}/ctdb/events.d/41.httpd
+%{_sysconfdir}/ctdb/events.d/49.winbind
%{_sysconfdir}/ctdb/events.d/50.samba
%{_sysconfdir}/ctdb/events.d/60.nfs
%{_sysconfdir}/ctdb/events.d/60.ganesha
diff --git a/ctdb/tests/eventscripts/49.winbind.monitor.001.sh b/ctdb/tests/eventscripts/49.winbind.monitor.001.sh
new file mode 100755
index 0000000000..94253d82f6
--- /dev/null
+++ b/ctdb/tests/eventscripts/49.winbind.monitor.001.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "not managed, check no-op"
+
+setup_winbind "down"
+
+ok_null
+
+simple_test
diff --git a/ctdb/tests/eventscripts/49.winbind.monitor.050.sh b/ctdb/tests/eventscripts/49.winbind.monitor.050.sh
new file mode 100755
index 0000000000..448c2049aa
--- /dev/null
+++ b/ctdb/tests/eventscripts/49.winbind.monitor.050.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "auto-start, simple"
+
+setup_winbind "down"
+
+export CTDB_SERVICE_AUTOSTARTSTOP="yes"
+export CTDB_MANAGED_SERVICES="foo winbind bar"
+
+ok <<EOF
+Starting service "winbind" - now managed
+Starting winbind: OK
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/49.winbind.monitor.051.sh b/ctdb/tests/eventscripts/49.winbind.monitor.051.sh
new file mode 100755
index 0000000000..52f9fa2a9a
--- /dev/null
+++ b/ctdb/tests/eventscripts/49.winbind.monitor.051.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "auto-stop, simple"
+
+setup_winbind
+
+export CTDB_SERVICE_AUTOSTARTSTOP="yes"
+export CTDB_MANAGED_SERVICES="foo"
+unset CTDB_MANAGES_WINBIND
+
+ok <<EOF
+Stopping service "winbind" - no longer managed
+Stopping winbind: OK
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/49.winbind.monitor.101.sh b/ctdb/tests/eventscripts/49.winbind.monitor.101.sh
new file mode 100755
index 0000000000..ec2952b76b
--- /dev/null
+++ b/ctdb/tests/eventscripts/49.winbind.monitor.101.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "all OK"
+
+setup_winbind
+
+ok_null
+
+simple_test
diff --git a/ctdb/tests/eventscripts/50.samba.monitor.102.sh b/ctdb/tests/eventscripts/49.winbind.monitor.102.sh
index a2263f3c60..77e2a32d98 100755
--- a/ctdb/tests/eventscripts/50.samba.monitor.102.sh
+++ b/ctdb/tests/eventscripts/49.winbind.monitor.102.sh
@@ -4,7 +4,7 @@
define_test "winbind down"
-setup_samba
+setup_winbind
wbinfo_down
required_result 1 "ERROR: winbind - wbinfo -p returned error"
diff --git a/ctdb/tests/eventscripts/50.samba.monitor.050.sh b/ctdb/tests/eventscripts/50.samba.monitor.050.sh
index f6560d022a..e465add0b8 100755
--- a/ctdb/tests/eventscripts/50.samba.monitor.050.sh
+++ b/ctdb/tests/eventscripts/50.samba.monitor.050.sh
@@ -11,7 +11,6 @@ export CTDB_MANAGED_SERVICES="foo samba winbind bar"
ok <<EOF
Starting service "samba" - now managed
-Starting winbind: OK
Starting smb: OK
EOF
diff --git a/ctdb/tests/eventscripts/50.samba.monitor.051.sh b/ctdb/tests/eventscripts/50.samba.monitor.051.sh
index 4a66269b5d..b61046c53d 100755
--- a/ctdb/tests/eventscripts/50.samba.monitor.051.sh
+++ b/ctdb/tests/eventscripts/50.samba.monitor.051.sh
@@ -9,12 +9,10 @@ setup_samba
export CTDB_SERVICE_AUTOSTARTSTOP="yes"
export CTDB_MANAGED_SERVICES="foo"
unset CTDB_MANAGES_SAMBA
-unset CTDB_MANAGES_WINBIND
ok <<EOF
Stopping service "samba" - no longer managed
Stopping smb: OK
-Stopping winbind: OK
EOF
simple_test
diff --git a/ctdb/tests/eventscripts/scripts/local.sh b/ctdb/tests/eventscripts/scripts/local.sh
index e1ae84ceae..e572a5dba7 100644
--- a/ctdb/tests/eventscripts/scripts/local.sh
+++ b/ctdb/tests/eventscripts/scripts/local.sh
@@ -374,7 +374,7 @@ setup_ctdb_policy_routing ()
######################################################################
-# Samba fakery
+# Samba/winbind fakery
setup_samba ()
{
@@ -384,16 +384,15 @@ setup_samba ()
debug "Marking Samba services as up, listening and managed by CTDB"
# Get into known state.
- for i in "samba" "winbind" ; do
- eventscript_call ctdb_service_managed "$i"
- done
+ eventscript_call ctdb_service_managed "samba"
+
# All possible service names for all known distros.
- for i in "smb" "nmb" "winbind" "samba" ; do
+ for i in "smb" "nmb" "samba" ; do
service "$i" force-started
done
export CTDB_SAMBA_SKIP_SHARE_CHECK="no"
- export CTDB_MANAGED_SERVICES="foo samba winbind bar"
+ export CTDB_MANAGED_SERVICES="foo samba bar"
export FAKE_TCP_LISTEN="0.0.0.0:445 0.0.0.0:139"
export FAKE_WBINFO_FAIL="no"
@@ -405,18 +404,16 @@ setup_samba ()
else
debug "Marking Samba services as down, not listening and not managed by CTDB"
# Get into known state.
- for i in "samba" "winbind" ; do
- eventscript_call ctdb_service_unmanaged "$i"
- done
+ eventscript_call ctdb_service_unmanaged "samba"
+
# All possible service names for all known distros.
- for i in "smb" "nmb" "winbind" "samba" ; do
+ for i in "smb" "nmb" "samba" ; do
service "$i" force-stopped
done
export CTDB_SAMBA_SKIP_SHARE_CHECK="no"
export CTDB_MANAGED_SERVICES="foo bar"
unset CTDB_MANAGES_SAMBA
- unset CTDB_MANAGES_WINBIND
export FAKE_TCP_LISTEN=""
export FAKE_WBINFO_FAIL="yes"
@@ -427,6 +424,36 @@ setup_samba ()
rm -f "$CTDB_VARDIR/state/samba/smb.conf.cache"
}
+setup_winbind ()
+{
+ setup_ctdb
+
+ if [ "$1" != "down" ] ; then
+
+ debug "Marking Winbind service as up and managed by CTDB"
+ # Get into known state.
+ eventscript_call ctdb_service_managed "winbind"
+
+ service "winbind" force-started
+
+ export CTDB_MANAGED_SERVICES="foo winbind bar"
+
+ export FAKE_WBINFO_FAIL="no"
+
+ else
+ debug "Marking Winbind service as down and not managed by CTDB"
+ # Get into known state.
+ eventscript_call ctdb_service_unmanaged "winbind"
+
+ service "winbind" force-stopped
+
+ export CTDB_MANAGED_SERVICES="foo bar"
+ unset CTDB_MANAGES_WINBIND
+
+ export FAKE_WBINFO_FAIL="yes"
+ fi
+}
+
wbinfo_down ()
{
debug "Making wbinfo commands fail"