1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

s3:rpc_server/srvsvc: make sure we (re-)load all shares as root.

This fixes a regression in commit f03665bb7e

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 <metze@samba.org>
Reviewed-by: Andrew Walker <awalker@ixsystems.com>

Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Thu Dec 29 21:14:02 UTC 2022 on sn-devel-184
This commit is contained in:
Stefan Metzmacher 2022-12-28 13:50:45 +01:00
parent a00c7395fb
commit f28553105b
2 changed files with 16 additions and 13 deletions

View File

@ -1 +0,0 @@
^samba3.blackbox.registry_share.Test.for.share.enum.with.registry.share.clusteredmember

View File

@ -644,30 +644,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();