diff options
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/lib/debug.c | 2 | ||||
-rw-r--r-- | source3/winbindd/winbindd.c | 5 | ||||
-rw-r--r-- | source3/winbindd/winbindd_dual.c | 34 | ||||
-rw-r--r-- | source3/winbindd/winbindd_proto.h | 5 |
5 files changed, 46 insertions, 1 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 13f392d544..e918b258c8 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -502,6 +502,7 @@ const char *debug_classname_from_index(int ndx); int debug_add_class(const char *classname); int debug_lookup_classname(const char *classname); bool debug_parse_levels(const char *params_str); +void debug_message(struct messaging_context *msg_ctx, void *private_data, uint32_t msg_type, struct server_id src, DATA_BLOB *data); void debug_init(void); void debug_register_msgs(struct messaging_context *msg_ctx); void setup_logging(const char *pname, bool interactive); diff --git a/source3/lib/debug.c b/source3/lib/debug.c index a76a8dbf53..2ded6bdc33 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -476,7 +476,7 @@ bool debug_parse_levels(const char *params_str) Receive a "set debug level" message. ****************************************************************************/ -static void debug_message(struct messaging_context *msg_ctx, +void debug_message(struct messaging_context *msg_ctx, void *private_data, uint32_t msg_type, struct server_id src, diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index ec3bf68e2a..4b7efe81eb 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -1249,6 +1249,11 @@ int main(int argc, char **argv, char **envp) MSG_WINBIND_DUMP_DOMAIN_LIST, winbind_msg_dump_domain_list); + /* Register handler for MSG_DEBUG. */ + messaging_register(winbind_messaging_context(), NULL, + MSG_DEBUG, + winbind_msg_debug); + netsamlogon_cache_init(); /* Non-critical */ /* clear the cached list of trusted domains */ diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c index 29849e9e78..c3bcb715bb 100644 --- a/source3/winbindd/winbindd_dual.c +++ b/source3/winbindd/winbindd_dual.c @@ -501,6 +501,36 @@ void winbindd_flush_negative_conn_cache(struct winbindd_domain *domain) } } +/* + * Parent winbindd process sets its own debug level first and then + * sends a message to all the winbindd children to adjust their debug + * level to that of parents. + */ + +void winbind_msg_debug(struct messaging_context *msg_ctx, + void *private_data, + uint32_t msg_type, + struct server_id server_id, + DATA_BLOB *data) +{ + struct winbindd_child *child; + + DEBUG(10,("winbind_msg_debug: got debug message.\n")); + + debug_message(msg_ctx, private_data, MSG_DEBUG, server_id, data); + + for (child = children; child != NULL; child = child->next) { + + DEBUG(10,("winbind_msg_debug: sending message to pid %u.\n", + (unsigned int)child->pid)); + + messaging_send_buf(msg_ctx, pid_to_procid(child->pid), + MSG_DEBUG, + data->data, + strlen((char *) data->data) + 1); + } +} + /* Set our domains as offline and forward the offline message to our children. */ void winbind_msg_offline(struct messaging_context *msg_ctx, @@ -1044,6 +1074,8 @@ static bool fork_domain_child(struct winbindd_child *child) MSG_DUMP_EVENT_LIST, NULL); messaging_deregister(winbind_messaging_context(), MSG_WINBIND_DUMP_DOMAIN_LIST, NULL); + messaging_deregister(winbind_messaging_context(), + MSG_DEBUG, NULL); /* Handle online/offline messages. */ messaging_register(winbind_messaging_context(), NULL, @@ -1054,6 +1086,8 @@ static bool fork_domain_child(struct winbindd_child *child) MSG_WINBIND_ONLINESTATUS, child_msg_onlinestatus); messaging_register(winbind_messaging_context(), NULL, MSG_DUMP_EVENT_LIST, child_msg_dump_event_list); + messaging_register(winbind_messaging_context(), NULL, + MSG_DEBUG, debug_message); if ( child->domain ) { child->domain->startup = True; diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index 84ea67b9ec..7f68cbfbc2 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -300,6 +300,11 @@ void setup_child(struct winbindd_child *child, const char *logname); void winbind_child_died(pid_t pid); void winbindd_flush_negative_conn_cache(struct winbindd_domain *domain); +void winbind_msg_debug(struct messaging_context *msg_ctx, + void *private_data, + uint32_t msg_type, + struct server_id server_id, + DATA_BLOB *data); void winbind_msg_offline(struct messaging_context *msg_ctx, void *private_data, uint32_t msg_type, |