The branch, v4-22-stable has been updated
via ff3dd691f38 VERSION: Disable GIT_SNAPSHOT for the 4.22.10 release.
via ef25c3fcb9f WHATSNEW: Add release notes for Samba 4.22.9
via 27dad685330 rpc: Don't offer spoolss RPC with "disable spoolss =
yes"
via 3d467f5b859 s3/libsmb: block anon authentication fallback is
use-kerberos = desired
via 2358c39db5b s3/libsmb: cli_session_creds_init fails when kerberos
is desired
via b6d084e8e1e auth/credentials: Fix regression with
--use-kerberos=desired for smbclient
via c7adc83306a selftest: Update tests to use
--use-kereros=desired|required no creds
via 84cb6eb6ff3 ctdb-failover: Add sm-notify to statd_callout
via 8603eb0b7bd ctdb-scripts: Only send notifies for newly taken IPs
via 6a1ff6298fd ctdb-tests: Update statd-callout unit test
infrastructure
via 178c2130675 s3/librpc/crypto: Don't keep growing in memory keytab
via 4146d3a90aa selftest: mark "smb2.lease.rename_dir_openfile" as
flapping
via b4912756d28 VERSION: Bump version up to Samba 4.22.9...
from d0a814e3c26 VERSION: Disable GIT_SNAPSHOT for the upcoming release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-22-stable
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
VERSION | 2 +-
WHATSNEW.txt | 58 ++++++++++++++-
auth/gensec/gensec_util.c | 5 --
ctdb/config/events/legacy/60.nfs.script | 3 +
ctdb/failover/statd_callout.c | 21 +++++-
.../UNIT/eventscripts/scripts/statd-callout.sh | 84 +++++++++++++++-------
ctdb/tests/UNIT/eventscripts/statd-callout.001.sh | 2 +-
ctdb/tests/UNIT/eventscripts/statd-callout.002.sh | 2 +-
ctdb/tests/UNIT/eventscripts/statd-callout.004.sh | 8 ++-
ctdb/tests/UNIT/eventscripts/statd-callout.005.sh | 12 +++-
ctdb/tests/UNIT/eventscripts/statd-callout.006.sh | 12 +++-
.../{statd-callout.006.sh => statd-callout.008.sh} | 14 +++-
ctdb/tests/UNIT/eventscripts/statd-callout.050.sh | 11 +++
.../{statd-callout.101.sh => statd-callout.108.sh} | 2 +-
.../{statd-callout.101.sh => statd-callout.150.sh} | 2 +-
.../{statd-callout.201.sh => statd-callout.208.sh} | 2 +-
.../{statd-callout.101.sh => statd-callout.250.sh} | 2 +-
ctdb/tools/statd_callout_helper | 44 ++++++++++--
selftest/flapping.d/smb2.lease | 1 +
source3/librpc/crypto/gse_krb5.c | 18 ++++-
source3/libsmb/cliconnect.c | 2 +-
source3/libsmb/libsmb_server.c | 2 +
source3/rpc_server/rpcd_spoolss.c | 5 ++
source3/script/tests/test_smbclient_kerberos.sh | 12 ++++
24 files changed, 270 insertions(+), 56 deletions(-)
copy ctdb/tests/UNIT/eventscripts/{statd-callout.006.sh =>
statd-callout.008.sh} (60%)
create mode 100755 ctdb/tests/UNIT/eventscripts/statd-callout.050.sh
copy ctdb/tests/UNIT/eventscripts/{statd-callout.101.sh =>
statd-callout.108.sh} (70%)
copy ctdb/tests/UNIT/eventscripts/{statd-callout.101.sh =>
statd-callout.150.sh} (70%)
copy ctdb/tests/UNIT/eventscripts/{statd-callout.201.sh =>
statd-callout.208.sh} (69%)
copy ctdb/tests/UNIT/eventscripts/{statd-callout.101.sh =>
statd-callout.250.sh} (70%)
create mode 100644 selftest/flapping.d/smb2.lease
Changeset truncated at 500 lines:
diff --git a/VERSION b/VERSION
index c7a2fbc96f8..908c490ec5f 100644
--- a/VERSION
+++ b/VERSION
@@ -27,7 +27,7 @@ SAMBA_COPYRIGHT_STRING="Copyright Andrew Tridgell and the
Samba Team 1992-2025"
########################################################
SAMBA_VERSION_MAJOR=4
SAMBA_VERSION_MINOR=22
-SAMBA_VERSION_RELEASE=8
+SAMBA_VERSION_RELEASE=9
########################################################
# If a official release has a serious bug #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 008ca6b38e0..eebf43a9362 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,58 @@
+ ==============================
+ Release Notes for Samba 4.22.9
+ April 09, 2026
+ ==============================
+
+
+This is the latest stable release of the Samba 4.22 release series.
+
+
+Changes since 4.22.8
+--------------------
+
+o Ralph Boehme <[email protected]>
+ * BUG 15978: leases torture test flappy
+
+o Volker Lendecke <[email protected]>
+ * BUG 16019: incorrect behavior on rpcclient enumport with rpcd_spoolss
+
+o Noel Power <[email protected]>
+ * BUG 15789: "use-kerberos=desired" broken
+ * BUG 16042: rpc workers with long living clients grow server memory keytab
+
+o Peter Schwenke <[email protected]>
+ * BUG 15938: CTDB's statd_callout fails on sm-notify
+ * BUG 15939: CTDB statd_callout_notify notifies unnecessary clients and
loses
+ their state
+
+o Martin Schwenke <[email protected]>
+ * BUG 15939: CTDB statd_callout_notify notifies unnecessary clients and
loses
+ their state
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical:matrix.org matrix room, or
+#samba-technical IRC channel on irc.libera.chat.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored. All bug reports should
+be filed under the Samba 4.1 and newer product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
==============================
Release Notes for Samba 4.22.8
February 19, 2026
@@ -56,8 +111,7 @@ database (https://bugzilla.samba.org/).
======================================================================
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
==============================
Release Notes for Samba 4.22.7
December 18, 2025
diff --git a/auth/gensec/gensec_util.c b/auth/gensec/gensec_util.c
index 0c7688d33d2..af6d198d48f 100644
--- a/auth/gensec/gensec_util.c
+++ b/auth/gensec/gensec_util.c
@@ -362,7 +362,6 @@ char *gensec_get_unparsed_target_principal(struct
gensec_security *gensec_securi
NTSTATUS gensec_kerberos_possible(struct gensec_security *gensec_security)
{
struct cli_credentials *creds = gensec_get_credentials(gensec_security);
- bool auth_requested = cli_credentials_authentication_requested(creds);
enum credentials_use_kerberos krb5_state =
cli_credentials_get_kerberos_state(creds);
char *user_principal = NULL;
@@ -370,10 +369,6 @@ NTSTATUS gensec_kerberos_possible(struct gensec_security
*gensec_security)
const char *target_principal =
gensec_get_target_principal(gensec_security);
const char *hostname = gensec_get_target_hostname(gensec_security);
- if (!auth_requested) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
if (krb5_state == CRED_USE_KERBEROS_DISABLED) {
return NT_STATUS_INVALID_PARAMETER;
}
diff --git a/ctdb/config/events/legacy/60.nfs.script
b/ctdb/config/events/legacy/60.nfs.script
index b797ada9370..fa0d672aa8f 100755
--- a/ctdb/config/events/legacy/60.nfs.script
+++ b/ctdb/config/events/legacy/60.nfs.script
@@ -325,6 +325,9 @@ shutdown)
takeip)
nfs_callout "$@" || exit $?
+ if [ -x "${CTDB_HELPER_BINDIR}/statd_callout_helper" ] ; then
+ "${CTDB_HELPER_BINDIR}/statd_callout_helper" takeip "$3"
+ fi
ctdb_service_set_reconfigure
;;
diff --git a/ctdb/failover/statd_callout.c b/ctdb/failover/statd_callout.c
index 8064432b21f..4111d675100 100644
--- a/ctdb/failover/statd_callout.c
+++ b/ctdb/failover/statd_callout.c
@@ -353,10 +353,27 @@ static void del_client_shared_dir(const char *cip)
static void usage(void)
{
- printf("usage: %s: { add-client | del-client } <client-ip>\n",
progname);
+ printf("usage: %s { add-client | del-client } <client-ip>\n", progname);
+ printf(" %s sm-notify mon_name ip_addr state\n", progname);
exit(1);
}
+/**
+ * @brief To be used as the statd ha-callout program
+ *
+ * Examples
+ * progname add-client 192.168.10.94 nsds2
+ * progname del-client 192.168.10.94 nsds2
+ * progname sm-notify sitar1 192.168.10.94 127
+ *
+ * @param[in] event One of add-client, del-client, sm-notify
+ * @param[in] mon_name The client being monitored. For add-client, del-client
+ * this will be the IP address. For sm-notify it will
+ * be the hostname
+ * @param[in] other We don't actually use this. For add-client and
+ * del-client it will be NFS server hostname.
+ * For sm-notify, it will be the client's state number.
+ */
int main(int argc, const char *argv[])
{
const char *event = NULL;
@@ -394,6 +411,8 @@ int main(int argc, const char *argv[])
case CTDB_SC_MODE_NONE:
break;
}
+ } else if (strcmp(event, "sm-notify") == 0) {
+ exit(0);
} else {
usage();
}
diff --git a/ctdb/tests/UNIT/eventscripts/scripts/statd-callout.sh
b/ctdb/tests/UNIT/eventscripts/scripts/statd-callout.sh
index 10912c5d3e5..f34248b2f6c 100644
--- a/ctdb/tests/UNIT/eventscripts/scripts/statd-callout.sh
+++ b/ctdb/tests/UNIT/eventscripts/scripts/statd-callout.sh
@@ -23,13 +23,18 @@ setup()
if [ "$statd_callout_location" = "$CTDB_STATD_CALLOUT_SHARED_STORAGE"
]; then
statd_callout_location=""
fi
+
+ state_dir="${CTDB_TEST_TMP_DIR}/statd-callout-state"
+ mkdir -p "$state_dir"
}
-ctdb_catdb_format_pairs()
+ctdb_catdb_format()
{
_count=0
- while read -r _k _v; do
+ while read -r _sip_cip; do
+ _k="statd-state@${_sip_cip}"
+ _v="DATETIME"
_kn=$(printf '%s' "$_k" | wc -c)
_vn=$(printf '%s' "$_v" | wc -c)
cat <<EOF
@@ -50,17 +55,19 @@ result_filter()
sed -e 's|^\(data(10) = \)".........."$|data(8) = "DATETIME"|'
}
-check_ctdb_tdb_statd_state()
+ctdb_shared_state_list()
{
- ctdb_get_my_public_addresses |
- while read -r _ _sip _; do
- for _cip; do
- cat <<EOF
-statd-state@${_sip}@${_cip} DATETIME
-EOF
- done
+ find "$state_dir" -name "mon@*" |
+ while read -r _f; do
+ echo "${_f#*/mon@}"
done |
- ctdb_catdb_format_pairs | {
+ sort
+}
+
+check_ctdb_tdb_statd_state()
+{
+ ctdb_shared_state_list |
+ ctdb_catdb_format | {
ok
simple_test_command ctdb catdb "$statd_callout_location"
} || exit $?
@@ -68,13 +75,8 @@ EOF
check_shared_dir_statd_state()
{
- ctdb_get_my_public_addresses |
- while read -r _ _sip _; do
- for _cip; do
- echo "statd-state@${_sip}@${_cip}"
- done
- done |
- sort | {
+ ctdb_shared_state_list |
+ sed -e 's|^|statd-state@|' | {
ok
_dir="${CTDB_TEST_TMP_DIR}${statd_callout_location}"
mkdir -p "$_dir"
@@ -130,14 +132,20 @@ check_statd_callout_smnotify()
nfs_load_config
- ctdb_get_my_public_addresses |
- while read -r _ _sip _; do
- for _cip; do
- cat <<EOF
+ find "$state_dir" -name "takeip@${FAKE_CTDB_PNN}@*" |
+ while read -r _f; do
+ _sip="${_f##*@}"
+ _prefix="mon@${_sip}@"
+ find "$state_dir" -name "${_prefix}*" |
+ while read -r _f; do
+ _cip="${_f##*@}"
+ cat <<EOF
SM_NOTIFY: ${_sip} -> ${_cip}, MON_NAME=${FAKE_NFS_HOSTNAME}, STATE=${_state}
EOF
- done
- done | {
+ rm -f "$_f"
+ done
+ done |
+ sort | {
ok
simple_test_event "notify"
} || exit $?
@@ -180,9 +188,35 @@ EOF
export CTDB_STATD_CALLOUT_CONFIG_FILE
case "$event" in
- add-client | del-client)
+ add-client)
cmd="${CTDB_SCRIPTS_HELPER_BINDIR}/statd_callout"
unit_test "$cmd" "$event" "$@"
+ ctdb_get_my_public_addresses |
+ while read -r _ _sip _; do
+ touch "${state_dir}/mon@${_sip}@${1}"
+ done
+ ;;
+ del-client)
+ cmd="${CTDB_SCRIPTS_HELPER_BINDIR}/statd_callout"
+ unit_test "$cmd" "$event" "$@"
+ ctdb_get_my_public_addresses |
+ while read -r _ _sip _; do
+ rm -f "${state_dir}/mon@${_sip}@${1}"
+ done
+ ;;
+ sm-notify)
+ cmd="${CTDB_SCRIPTS_HELPER_BINDIR}/statd_callout"
+ unit_test "$cmd" "$event" "$@"
+ ;;
+ takeip)
+ cmd="${CTDB_SCRIPTS_TOOLS_HELPER_DIR}/statd_callout_helper"
+ script_test "$cmd" "$event" "$@"
+ touch "${state_dir}/takeip@${FAKE_CTDB_PNN}@${1}"
+ ;;
+ notify)
+ cmd="${CTDB_SCRIPTS_TOOLS_HELPER_DIR}/statd_callout_helper"
+ script_test "$cmd" "$event" "$@"
+ rm -f "${state_dir}/takeip@${FAKE_CTDB_PNN}@"*
;;
*)
cmd="${CTDB_SCRIPTS_TOOLS_HELPER_DIR}/statd_callout_helper"
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.001.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.001.sh
index 475750041c5..69de3c93b85 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.001.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.001.sh
@@ -16,4 +16,4 @@ simple_test_event "startup"
simple_test_event "add-client" "192.168.123.45"
simple_test_event "update"
-check_shared_storage_statd_state "192.168.123.45"
+check_shared_storage_statd_state
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.002.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.002.sh
index 7e5d7b23621..7d94d9ca881 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.002.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.002.sh
@@ -17,4 +17,4 @@ simple_test_event "add-client" "192.168.123.45"
simple_test_event "add-client" "192.168.123.46"
simple_test_event "update"
-check_shared_storage_statd_state "192.168.123.45" "192.168.123.46"
+check_shared_storage_statd_state
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.004.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.004.sh
index 1b1bc05490a..2ea80129446 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.004.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.004.sh
@@ -13,11 +13,15 @@ setup "$mode"
ok_null
simple_test_event "startup"
+ctdb_get_my_public_addresses |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.45"
simple_test_event "update"
-check_shared_storage_statd_state "192.168.123.45"
+check_shared_storage_statd_state
-check_statd_callout_smnotify "192.168.123.45"
+check_statd_callout_smnotify
check_shared_storage_statd_state
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.005.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.005.sh
index 5a9274b1402..b3dcfcad360 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.005.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.005.sh
@@ -13,6 +13,10 @@ setup "$mode"
ok_null
simple_test_event "startup"
+ctdb_get_my_public_addresses |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.45"
simple_test_event "update"
@@ -20,13 +24,17 @@ ctdb_set_pnn 1
ok_null
simple_test_event "startup"
+ctdb_get_my_public_addresses |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.46"
simple_test_event "update"
ctdb_set_pnn 0
-check_statd_callout_smnotify "192.168.123.45"
+check_statd_callout_smnotify
ctdb_set_pnn 1
-check_shared_storage_statd_state "192.168.123.46"
+check_shared_storage_statd_state
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
index 1721a5c50b3..35a7f6dcd81 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
@@ -13,6 +13,10 @@ setup "$mode"
ok_null
simple_test_event "startup"
+ctdb_get_my_public_addresses |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.45"
simple_test_event "update"
@@ -20,15 +24,19 @@ ctdb_set_pnn 1
ok_null
simple_test_event "startup"
+ctdb_get_my_public_addresses |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.46"
simple_test_event "update"
ctdb_set_pnn 0
-check_statd_callout_smnotify "192.168.123.45"
+check_statd_callout_smnotify
ctdb_set_pnn 1
-check_statd_callout_smnotify "192.168.123.46"
+check_statd_callout_smnotify
check_shared_storage_statd_state
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.008.sh
similarity index 60%
copy from ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
copy to ctdb/tests/UNIT/eventscripts/statd-callout.008.sh
index 1721a5c50b3..73e4c5b35d1 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.006.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.008.sh
@@ -7,12 +7,16 @@ if [ -z "$CTDB_STATD_CALLOUT_SHARED_STORAGE" ]; then
fi
mode="$CTDB_STATD_CALLOUT_SHARED_STORAGE"
-define_test "${mode} - 2 x add-client to different nodes, notify on both"
+define_test "${mode} - add-client on different nodes, take 1 IP, notify on
both"
setup "$mode"
ok_null
simple_test_event "startup"
+ctdb_get_1_public_address |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.45"
simple_test_event "update"
@@ -20,15 +24,19 @@ ctdb_set_pnn 1
ok_null
simple_test_event "startup"
+ctdb_get_1_public_address |
+ while read -r _ sip _; do
+ simple_test_event "takeip" "$sip"
+ done
simple_test_event "add-client" "192.168.123.46"
simple_test_event "update"
ctdb_set_pnn 0
-check_statd_callout_smnotify "192.168.123.45"
+check_statd_callout_smnotify
ctdb_set_pnn 1
-check_statd_callout_smnotify "192.168.123.46"
+check_statd_callout_smnotify
check_shared_storage_statd_state
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.050.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.050.sh
new file mode 100755
index 00000000000..54232a491c3
--- /dev/null
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.050.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "confirm sm-notify is ignored"
+
+setup
+
+ok_null
+simple_test_event "startup"
+simple_test_event "sm-notify" "192.168.10.104" "client10" "9999"
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.101.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.108.sh
similarity index 70%
copy from ctdb/tests/UNIT/eventscripts/statd-callout.101.sh
copy to ctdb/tests/UNIT/eventscripts/statd-callout.108.sh
index b57bd953f1b..224b58429d9 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.101.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.108.sh
@@ -3,4 +3,4 @@
CTDB_STATD_CALLOUT_SHARED_STORAGE="shared_dir"
_dir=$(dirname "$0")
-. "${_dir}/statd-callout.001.sh"
+. "${_dir}/statd-callout.008.sh"
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.101.sh
b/ctdb/tests/UNIT/eventscripts/statd-callout.150.sh
similarity index 70%
copy from ctdb/tests/UNIT/eventscripts/statd-callout.101.sh
copy to ctdb/tests/UNIT/eventscripts/statd-callout.150.sh
index b57bd953f1b..35c9a34ce44 100755
--- a/ctdb/tests/UNIT/eventscripts/statd-callout.101.sh
+++ b/ctdb/tests/UNIT/eventscripts/statd-callout.150.sh
@@ -3,4 +3,4 @@
CTDB_STATD_CALLOUT_SHARED_STORAGE="shared_dir"
--
Samba Shared Repository