From: Stefan Metzmacher Date: Wed, 28 Dec 2022 12:50:45 +0000 (+0100) Subject: s3:rpc_server/srvsvc: make sure we (re-)load all shares as root. X-Git-Tag: samba-4.16.9~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6434e2df11e7b5ee1d3dc11f35575808a1e6b50a;p=thirdparty%2Fsamba.git 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) --- diff --git a/selftest/knownfail.d/registry_share b/selftest/knownfail.d/registry_share deleted file mode 100644 index 4adbf0915b8..00000000000 --- 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 3f268d66080..332f5990078 100644 --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c @@ -637,30 +637,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();