/****************************************************************************
****************************************************************************/
+static bool spoolss_conn_snum_used(struct smbd_server_connection *sconn,
+ int snum)
+{
+ /*
+ * As we do not know if we are embedded in the file server process
+ * or not, we have to pretend that all shares are in use.
+ */
+ return true;
+}
+
static bool add_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
struct spoolss_SetPrinterInfo2 *info2,
const char *remote_machine,
/* reload our services immediately */
become_root();
- reload_services(msg_ctx, -1, false);
+ reload_services(NULL, spoolss_conn_snum_used, false);
unbecome_root();
numlines = 0;
}
/* possibly reload - change of architecture */
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
/* moved from the netbios session setup code since we don't have that
when the client connects to port 445. Of course there is a small
if(choice != -1) {
fstrcpy(remote_proto,supported_protocols[protocol].short_name);
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
supported_protocols[protocol].proto_reply_fn(req, choice);
DEBUG(3,("Selected protocol %s\n",supported_protocols[protocol].proto_name));
} else {
change_to_root_user();
DEBUG(1,("Reloading services after SIGHUP\n"));
- reload_services(sconn->msg_ctx, sconn->sock, false);
+ reload_services(sconn, conn_snum_used, false);
}
void smbd_setup_sig_hup_handler(struct smbd_server_connection *sconn)
DEBUG(10,("smbd_conf_updated: Got message saying smb.conf was "
"updated. Reloading.\n"));
change_to_root_user();
- reload_services(sconn->msg_ctx, sconn->sock, False);
+ reload_services(sconn, conn_snum_used, false);
}
static NTSTATUS smbd_server_connection_loop_once(struct tevent_context *ev_ctx,
}
if (t >= last_smb_conf_reload_time+SMBD_RELOAD_CHECK) {
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
last_smb_conf_reload_time = t;
}
}
/* this is needed so that we get decent entries
in smbstatus for port 445 connects */
set_remote_machine_name(remaddr, false);
- reload_services(sconn->msg_ctx, sconn->sock, true);
+ reload_services(sconn, conn_snum_used, true);
/*
* Before the first packet, check the global hosts allow/ hosts deny
struct memcache *smbd_memcache(void);
void delete_and_reload_printers(struct tevent_context *ev,
struct messaging_context *msg_ctx);
-bool reload_services(struct messaging_context *msg_ctx, int smb_sock,
+bool reload_services(struct smbd_server_connection *sconn,
+ bool (*snumused) (struct smbd_server_connection *, int),
bool test);
void exit_server(const char *const explanation);
void exit_server_cleanly(const char *const explanation);
add_session_user(sconn, get_remote_machine_name());
}
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
reopen_logs();
sconn->nbt.got_session = true;
DEBUG(10,("smbd_parent_conf_updated: Got message saying smb.conf was "
"updated. Reloading.\n"));
change_to_root_user();
- reload_services(msg, -1, false);
+ reload_services(NULL, NULL, false);
printing_subsystem_update(ev_ctx, msg, false);
}
change_to_root_user();
DEBUG(1,("parent: Reloading services after SIGHUP\n"));
- reload_services(parent->msg_ctx, -1, false);
+ reload_services(NULL, NULL, false);
printing_subsystem_update(parent->ev_ctx, parent->msg_ctx, true);
}
* Reloading of the printers will not work here as we don't have a
* server info and rpc services set up. It will be called later.
*/
- if (!reload_services(NULL, -1, False)) {
+ if (!reload_services(NULL, NULL, false)) {
exit(1);
}
Reload the services file.
**************************************************************************/
-bool reload_services(struct messaging_context *msg_ctx, int smb_sock,
+bool reload_services(struct smbd_server_connection *sconn,
+ bool (*snumused) (struct smbd_server_connection *, int),
bool test)
{
bool ret;
if (test && !lp_file_list_changed())
return(True);
- if (msg_ctx) {
- lp_killunused(msg_ctx_to_sconn(msg_ctx), conn_snum_used);
- } else {
- lp_killunused(NULL, NULL);
- }
+ lp_killunused(sconn, snumused);
ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
/* perhaps the config filename is now set */
- if (!test)
- reload_services(msg_ctx, smb_sock, True);
+ if (!test) {
+ reload_services(sconn, snumused, true);
+ }
reopen_logs();
load_interfaces();
- if (smb_sock != -1) {
- set_socket_options(smb_sock,"SO_KEEPALIVE");
- set_socket_options(smb_sock, lp_socket_options());
+ if (sconn != NULL) {
+ set_socket_options(sconn->sock, "SO_KEEPALIVE");
+ set_socket_options(sconn->sock, lp_socket_options());
}
mangle_reset_cache();
sub_set_smb_name(real_username);
/* reload services so that the new %U is taken into account */
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
ret = make_session_info_krb5(mem_ctx,
user, domain, real_username, pw,
ret = NT_STATUS_LOGON_FAILURE;
} else {
/* current_user_info is changed on new vuid */
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
SSVAL(req->outbuf, smb_vwv3, 0);
}
/* current_user_info is changed on new vuid */
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
SSVAL(req->outbuf, smb_vwv3, 0);
sub_set_smb_name(sub_user);
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
if (lp_security() == SEC_SHARE) {
char *sub_user_mapped = NULL;
}
/* current_user_info is changed on new vuid */
- reload_services(sconn->msg_ctx, sconn->sock, True);
+ reload_services(sconn, conn_snum_used, true);
}
data_blob_free(&nt_resp);
sub_set_smb_name(real_username);
/* reload services so that the new %U is taken into account */
- reload_services(smb2req->sconn->msg_ctx, smb2req->sconn->sock, true);
+ reload_services(smb2req->sconn, conn_snum_used, true);
status = make_session_info_krb5(session,
user, domain, real_username, pw,
lp_load_initial_only(get_dyn_CONFIGFILE());
/* TODO: check output */
- reload_services(NULL, -1, False);
+ reload_services(NULL, NULL, false);
/* the following functions are part of the Samba debugging
facilities. See lib/debug.c */