What to do when smb.conf is updated.
********************************************************************/
-static void smb_conf_updated(int msg_type, struct server_id src,
- void *buf, size_t len, void *private_data)
+static void smb_conf_updated(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id server_id,
+ DATA_BLOB *data)
{
- DEBUG(10,("smb_conf_updated: Got message saying smb.conf was updated. Reloading.\n"));
+ DEBUG(10,("smb_conf_updated: Got message saying smb.conf was "
+ "updated. Reloading.\n"));
reload_services(False);
}
Delete a statcache entry.
********************************************************************/
-static void smb_stat_cache_delete(int msg_type, struct server_id src,
- void *buf, size_t len, void *private_data)
+static void smb_stat_cache_delete(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_tnype,
+ struct server_id server_id,
+ DATA_BLOB *data)
{
- const char *name = (const char *)buf;
+ const char *name = (const char *)data->data;
DEBUG(10,("smb_stat_cache_delete: delete name %s\n", name));
stat_cache_delete(name);
}
somewhere else.
****************************************************************************/
-static void msg_sam_sync(int UNUSED(msg_type), struct server_id UNUSED(pid),
- void *UNUSED(buf), size_t UNUSED(len),
- void *private_data)
+static void msg_sam_sync(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id server_id,
+ DATA_BLOB *data)
{
DEBUG(10, ("** sam sync message received, ignoring\n"));
}
somewhere else.
****************************************************************************/
-static void msg_sam_repl(int msg_type, struct server_id pid,
- void *buf, size_t len, void *private_data)
+static void msg_sam_repl(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id server_id,
+ DATA_BLOB *data)
{
uint32 low_serial;
- if (len != sizeof(uint32))
+ if (data->length != sizeof(low_serial))
return;
- low_serial = *((uint32 *)buf);
+ low_serial = *((uint32 *)data->data);
DEBUG(3, ("received sam replication message, serial = 0x%04x\n",
low_serial));
return True;
}
-static void msg_exit_server(int msg_type, struct server_id src,
- void *buf, size_t len, void *private_data)
+static void msg_exit_server(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id server_id,
+ DATA_BLOB *data)
{
DEBUG(3, ("got a SHUTDOWN message\n"));
exit_server_cleanly(NULL);
}
#ifdef DEVELOPER
-static void msg_inject_fault(int msg_type, struct server_id src,
- void *buf, size_t len, void *private_data)
+static void msg_inject_fault(struct messaging_context *msg,
+ void *private_data,
+ uint32_t msg_type,
+ struct server_id src,
+ DATA_BLOB *data)
{
int sig;
- if (len != sizeof(int)) {
+ if (data->length != sizeof(sig)) {
- DEBUG(0, ("Process %llu sent bogus signal injection request\n",
- (unsigned long long)src.pid));
+ DEBUG(0, ("Process %s sent bogus signal injection request\n",
+ procid_str_static(&src)));
return;
}
- sig = *(int *)buf;
+ sig = *(int *)data->data;
if (sig == -1) {
exit_server("internal error injected");
return;
}
#if HAVE_STRSIGNAL
- DEBUG(0, ("Process %llu requested injection of signal %d (%s)\n",
- (unsigned long long)src.pid, sig, strsignal(sig)));
+ DEBUG(0, ("Process %s requested injection of signal %d (%s)\n",
+ procid_str_static(&src), sig, strsignal(sig)));
#else
- DEBUG(0, ("Process %llu requested injection of signal %d\n",
- (unsigned long long)src.pid, sig));
+ DEBUG(0, ("Process %s requested injection of signal %d\n",
+ procid_str_static(&src), sig));
#endif
kill(sys_getpid(), sig);
/* Listen to messages */
- message_register(MSG_SMB_SAM_SYNC, msg_sam_sync, NULL);
- message_register(MSG_SMB_SAM_REPL, msg_sam_repl, NULL);
- message_register(MSG_SHUTDOWN, msg_exit_server, NULL);
- message_register(MSG_SMB_FILE_RENAME, msg_file_was_renamed, NULL);
- message_register(MSG_SMB_CONF_UPDATED, smb_conf_updated, NULL);
- message_register(MSG_SMB_STAT_CACHE_DELETE, smb_stat_cache_delete,
- NULL);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_SAM_SYNC, msg_sam_sync);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_SAM_REPL, msg_sam_repl);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SHUTDOWN, msg_exit_server);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_FILE_RENAME, msg_file_was_renamed);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_CONF_UPDATED, smb_conf_updated);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_STAT_CACHE_DELETE, smb_stat_cache_delete);
+ brl_register_msgs(smbd_messaging_context());
#ifdef DEVELOPER
- message_register(MSG_SMB_INJECT_FAULT, msg_inject_fault, NULL);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_INJECT_FAULT, msg_inject_fault);
#endif
/* now accept incoming connections - forking a new process
for each incoming connection */
DEBUG(2,("waiting for a connection\n"));
while (1) {
- fd_set lfds;
+ struct timeval now;
+ fd_set r_fds, w_fds;
int num;
/* Free up temporary memory from the main smbd. */
lp_TALLOC_FREE();
/* Ensure we respond to PING and DEBUG messages from the main smbd. */
- message_dispatch();
+ message_dispatch(smbd_messaging_context());
if (got_sig_cld) {
pid_t pid;
}
}
- memcpy((char *)&lfds, (char *)&listen_set,
+ memcpy((char *)&r_fds, (char *)&listen_set,
sizeof(listen_set));
+ FD_ZERO(&w_fds);
+ GetTimeOfDay(&now);
- num = sys_select(maxfd+1,&lfds,NULL,NULL,
+ event_add_to_select_args(smbd_event_context(), &now,
+ &r_fds, &w_fds, &idle_timeout,
+ &maxfd);
+
+ num = sys_select(maxfd+1,&r_fds,&w_fds,NULL,
timeval_is_zero(&idle_timeout) ?
NULL : &idle_timeout);
continue;
}
+ if (run_events(smbd_event_context(), num, &r_fds, &w_fds)) {
+ continue;
+ }
+
+#if 0
+ Deactivated for now, this needs to become a timed event
+ vl
+
/* If the idle timeout fired and we don't have any connected
* users, exit gracefully. We should be running under a process
* controller that will restart us if necessry.
if (num == 0 && count_all_current_connections() == 0) {
exit_server_cleanly("idle timeout");
}
+#endif
/* check if we need to reload services */
check_reload(time(NULL));
s = -1;
for(i = 0; i < num_sockets; i++) {
- if(FD_ISSET(fd_listenset[i],&lfds)) {
+ if(FD_ISSET(fd_listenset[i],&r_fds)) {
s = fd_listenset[i];
/* Clear this so we don't look
at it again. */
- FD_CLR(fd_listenset[i],&lfds);
+ FD_CLR(fd_listenset[i],&r_fds);
break;
}
}
}
/* Setup all the TDB's - including CLEAR_IF_FIRST tdb's. */
- if (!message_init())
+
+ if (smbd_messaging_context() == NULL)
exit(1);
/* Initialise the password backed before the global_sam_sid
exit(1);
#endif
- if (!print_backend_init())
+ if (!print_backend_init(smbd_messaging_context()))
exit(1);
if (!init_guest_info()) {
/* Setup the main smbd so that we can get messages. */
/* don't worry about general printing messages here */
- claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD);
+ claim_connection(NULL,"",FLAG_MSG_GENERAL|FLAG_MSG_SMBD);
/* only start the background queue daemon if we are
running as a daemon -- bad things will happen if
initialize_async_io_handler();
/* register our message handlers */
- message_register(MSG_SMB_FORCE_TDIS, msg_force_tdis, NULL);
+ messaging_register(smbd_messaging_context(), NULL,
+ MSG_SMB_FORCE_TDIS, msg_force_tdis);
if ((lp_keepalive() != 0)
&& !(event_add_idle(smbd_event_context(), NULL,