From 53d81dbecbca90b9b4715de3d895ea881725138e Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 9 Nov 2022 14:04:23 +0100 Subject: [PATCH 1/3] testprogs: Add testit_grep_count() helper Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher (cherry picked from commit 55feb593012fc5b24e795a00081666fca740429c) BUG: https://bugzilla.samba.org/show_bug.cgi?id=15243 BUG: https://bugzilla.samba.org/show_bug.cgi?id=15266 --- testprogs/blackbox/subunit.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/testprogs/blackbox/subunit.sh b/testprogs/blackbox/subunit.sh index 75a9b5ec7e3c..ba4e997c5253 100755 --- a/testprogs/blackbox/subunit.sh +++ b/testprogs/blackbox/subunit.sh @@ -121,6 +121,35 @@ testit_grep() return $status } +# This returns 0 if the command gave success and the grep value was found +# num times all other cases return != 0 +testit_grep_count() +{ + name="$1" + shift + grep="$1" + shift + num="$1" + shift + cmdline="$@" + subunit_start_test "$name" + output=$($cmdline 2>&1) + status=$? + if [ x$status != x0 ]; then + printf '%s' "$output" | subunit_fail_test "$name" + return $status + fi + found=$(printf '%s' "$output" | grep -c "$grep") + if [ x"$found" = x"$num" ]; then + subunit_pass_test "$name" + else + printf 'GREP: "%s" found "%d" times, expected "%d" in output:\n%s'\ + "$grep" "$found" "$num" "$output" | + subunit_fail_test "$name" + fi + return $status +} + testit_expect_failure() { name="$1" -- 2.34.1 From 1d6cc05bf6c231cf6d4bb46d2f1370f6a6c393d4 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 28 Dec 2022 16:18:40 +0100 Subject: [PATCH 2/3] selftest: add samba3.blackbox.registry_share This demonstrates the regression introduced by f03665bb7e8ea97699062630f2aa1bac4c5dfc7f, where registry shares are no longer listed. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15243 BUG: https://bugzilla.samba.org/show_bug.cgi?id=15266 Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Walker (cherry picked from commit a00c7395fbc7974a61a70ae54ea6ae6349933de2) --- selftest/knownfail.d/registry_share | 1 + selftest/target/Samba3.pm | 30 ++++++++++++++++ source3/script/tests/test_registry_share.sh | 39 +++++++++++++++++++++ source3/selftest/tests.py | 4 +++ 4 files changed, 74 insertions(+) create mode 100644 selftest/knownfail.d/registry_share create mode 100755 source3/script/tests/test_registry_share.sh diff --git a/selftest/knownfail.d/registry_share b/selftest/knownfail.d/registry_share new file mode 100644 index 000000000000..4adbf0915b87 --- /dev/null +++ b/selftest/knownfail.d/registry_share @@ -0,0 +1 @@ +^samba3.blackbox.registry_share.Test.for.share.enum.with.registry.share.clusteredmember diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 64374ab9bcde..72c8abac8670 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -532,6 +532,36 @@ sub setup_clusteredmember return undef; } + my $registry_share_template = "$node_ret->{SERVERCONFFILE}.registry_share_template"; + unless (open(REGISTRYCONF, ">$registry_share_template")) { + warn("Unable to open $registry_share_template"); + teardown_env($self, $node_ret); + teardown_env($self, $ctdb_data); + return undef; + } + + print REGISTRYCONF " +[registry_share] + copy = tmp + comment = smb username is [%U] +"; + + close(REGISTRYCONF); + + my $net = Samba::bindir_path($self, "net"); + my $cmd = ""; + + $cmd .= "UID_WRAPPER_ROOT=1 "; + $cmd .= "$net conf import $node_ret->{CONFIGURATION} ${registry_share_template}"; + + my $net_ret = system($cmd); + if ($net_ret != 0) { + warn("net conf import failed: $net_ret\n$cmd"); + teardown_env($self, $node_ret); + teardown_env($self, $ctdb_data); + return undef; + } + my $nmblookup = Samba::bindir_path($self, "nmblookup"); do { print "Waiting for the LOGON SERVER registration ...\n"; diff --git a/source3/script/tests/test_registry_share.sh b/source3/script/tests/test_registry_share.sh new file mode 100755 index 000000000000..22e9f732a58c --- /dev/null +++ b/source3/script/tests/test_registry_share.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# Blackbox tests for registry shares +# + +if [ $# -lt 3 ]; then + cat < Date: Wed, 28 Dec 2022 13:50:45 +0100 Subject: [PATCH 3/3] s3:rpc_server/srvsvc: make sure we (re-)load all shares as root. This fixes a regression in commit f03665bb7e8ea97699062630f2aa1bac4c5dfc7f The use of reload_services() has a lot of side effects, e.g. reopen of log files and other things, which are only useful in smbd, but not in rpcd_classic. It was also unloading the user and registry shares we loaded a few lines above. We need to do all (re-)loading as root, otherwise we won't be able to read root only smb.conf files, access registry shares, ... BUG: https://bugzilla.samba.org/show_bug.cgi?id=15243 BUG: https://bugzilla.samba.org/show_bug.cgi?id=15266 Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Walker Autobuild-User(master): Stefan Metzmacher Autobuild-Date(master): Thu Dec 29 21:14:02 UTC 2022 on sn-devel-184 (cherry picked from commit f28553105be7465026bcc0fcbbed6a1a8c2133dd) --- selftest/knownfail.d/registry_share | 1 - source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 28 +++++++++++++---------- 2 files changed, 16 insertions(+), 13 deletions(-) delete mode 100644 selftest/knownfail.d/registry_share diff --git a/selftest/knownfail.d/registry_share b/selftest/knownfail.d/registry_share deleted file mode 100644 index 4adbf0915b87..000000000000 --- a/selftest/knownfail.d/registry_share +++ /dev/null @@ -1 +0,0 @@ -^samba3.blackbox.registry_share.Test.for.share.enum.with.registry.share.clusteredmember diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c index 233718ff310c..5114ccbdad4d 100644 --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c @@ -628,30 +628,34 @@ static WERROR init_srv_share_info_ctr(struct pipes_struct *p, union srvsvc_NetShareCtr ctr; uint32_t resume_handle = resume_handle_p ? *resume_handle_p : 0; const char *unix_name = session_info->unix_info->unix_name; - int existing_home = lp_servicenumber(unix_name); + int existing_home = -1; int added_home = -1; WERROR ret = WERR_OK; DEBUG(5,("init_srv_share_info_ctr\n")); - /* Ensure all the usershares are loaded. */ + /* + * We need to make sure to reload the services for the connecting user. + * It is possible that we have includes with substitutions. + * + * include = /etc/samba/%U.conf + * + * We also need all printers and usershares. + * + * We need to be root in order to have access to registry shares + * and root only smb.conf files. + */ become_root(); + lp_kill_all_services(); + lp_load_with_shares(get_dyn_CONFIGFILE()); delete_and_reload_printers(); load_usershare_shares(NULL, connections_snum_used); load_registry_shares(); - unbecome_root(); - + existing_home = lp_servicenumber(unix_name); if (existing_home == -1) { added_home = register_homes_share(unix_name); } - - /* - * We need to make sure to reload the services for the connecting user. - * It is possible that the we have includes with substitutions. - * - * include = /etc/samba/%U.conf - */ - reload_services(NULL, NULL, false); + unbecome_root(); num_services = lp_numservices(); -- 2.34.1