From b706fd37f6d0e7e66718488d069053687ad0664c Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 10 Aug 2011 23:10:48 -0400 Subject: s3-messaging: Fix messaging classes. This has been broken since ff0ac5b0 (May 2007). Basically all messages were belonging to the General class except for CTDB messages. This fixed the message_send_all() function to correctly compute the class, and fixes registrations to include all they need to cope with the fact not all messages are of calss general (registrations rotted a bit because as long as FLAG_MSG_GENERAL was defined the process woould receive all messages). Signed-off-by: Andreas Schneider --- source3/include/messages.h | 2 +- source3/lib/messages.c | 19 +++++++++++-------- source3/librpc/idl/messaging.idl | 2 +- source3/nmbd/nmbd.c | 4 +++- source3/winbindd/winbindd.c | 4 +++- 5 files changed, 19 insertions(+), 12 deletions(-) (limited to 'source3') diff --git a/source3/include/messages.h b/source3/include/messages.h index 86402dc07b..8ea6c89640 100644 --- a/source3/include/messages.h +++ b/source3/include/messages.h @@ -42,7 +42,7 @@ #define FLAG_MSG_GENERAL 0x0001 #define FLAG_MSG_SMBD 0x0002 #define FLAG_MSG_NMBD 0x0004 -/* #define FLAG_MSG_PRINT_NOTIFY 0x0008 Obsolete */ +#define FLAG_MSG_WINBIND 0x0008 #define FLAG_MSG_PRINT_GENERAL 0x0010 /* dbwrap messages 4001-4999 */ #define FLAG_MSG_DBWRAP 0x0020 diff --git a/source3/lib/messages.c b/source3/lib/messages.c index 0cdef63fdc..57a2e22f72 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -146,18 +146,21 @@ bool message_send_all(struct messaging_context *msg_ctx, struct msg_all msg_all; msg_all.msg_type = msg_type; - if (msg_type < 1000) + if (msg_type < 0x100) { msg_all.msg_flag = FLAG_MSG_GENERAL; - else if (msg_type > 1000 && msg_type < 2000) + } else if (msg_type > 0x100 && msg_type < 0x200) { msg_all.msg_flag = FLAG_MSG_NMBD; - else if (msg_type > 2100 && msg_type < 3000) + } else if (msg_type > 0x200 && msg_type < 0x300) { msg_all.msg_flag = FLAG_MSG_PRINT_GENERAL; - else if (msg_type > 3000 && msg_type < 4000) + } else if (msg_type > 0x300 && msg_type < 0x400) { msg_all.msg_flag = FLAG_MSG_SMBD; - else if (msg_type > 4000 && msg_type < 5000) + } else if (msg_type > 0x400 && msg_type < 0x600) { + msg_all.msg_flag = FLAG_MSG_WINBIND; + } else if (msg_type > 4000 && msg_type < 5000) { msg_all.msg_flag = FLAG_MSG_DBWRAP; - else - return False; + } else { + return false; + } msg_all.buf = buf; msg_all.len = len; @@ -167,7 +170,7 @@ bool message_send_all(struct messaging_context *msg_ctx, serverid_traverse(traverse_fn, &msg_all); if (n_sent) *n_sent = msg_all.n_sent; - return True; + return true; } struct event_context *messaging_event_context(struct messaging_context *msg_ctx) diff --git a/source3/librpc/idl/messaging.idl b/source3/librpc/idl/messaging.idl index 8e15bcecc1..309f0bb9f0 100644 --- a/source3/librpc/idl/messaging.idl +++ b/source3/librpc/idl/messaging.idl @@ -94,7 +94,7 @@ interface messaging /* event messages */ MSG_DUMP_EVENT_LIST = 0x0500, - /* dbwrap messages 4001-4999 */ + /* dbwrap messages 4001-4999 (0x0FA0 - 0x1387) */ MSG_DBWRAP_TDB2_CHANGES = 4001, MSG_DBWRAP_G_LOCK_RETRY = 4002 } messaging_type; diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index ceec2fdf9d..08a5504be4 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -932,7 +932,9 @@ static bool open_sockets(bool isdaemon, int port) /* get broadcast messages */ if (!serverid_register(procid_self(), - FLAG_MSG_GENERAL|FLAG_MSG_DBWRAP)) { + FLAG_MSG_GENERAL | + FLAG_MSG_NMBD | + FLAG_MSG_DBWRAP)) { DEBUG(1, ("Could not register myself in serverid.tdb\n")); exit(1); } diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 0c07d4b1b6..cb9d70c5f3 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -1045,7 +1045,9 @@ void winbindd_register_handlers(void) /* get broadcast messages */ if (!serverid_register(procid_self(), - FLAG_MSG_GENERAL|FLAG_MSG_DBWRAP)) { + FLAG_MSG_GENERAL | + FLAG_MSG_WINBIND | + FLAG_MSG_DBWRAP)) { DEBUG(1, ("Could not register myself in serverid.tdb\n")); exit(1); } -- cgit