]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
MSG_DEBUG now forwarded to all the winbindd children by parent.
authorDarshan Purandare <dpurandare@isilon.com>
Tue, 1 Jul 2008 18:37:13 +0000 (11:37 -0700)
committerJeremy Allison <jra@samba.org>
Wed, 2 Jul 2008 00:52:24 +0000 (17:52 -0700)
smbcontrol winbindd debug level would only set the debug level of the
parent winbindd process and not the child processes. This patch adds
the functionality of broadcasting the debug message to all winbindd
children. Now the debug level message is propagated to all the winbindd
processes that includes parent and children.

source/include/proto.h
source/lib/debug.c
source/winbindd/winbindd.c
source/winbindd/winbindd_dual.c
source/winbindd/winbindd_proto.h

index 13f392d5441d40e7e5da9837c2814b35a4232580..e918b258c8de9de99c28bc363081bad81479482e 100644 (file)
@@ -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);
index a76a8dbf539ac562e1596d7f6d8f2611fdb294b8..2ded6bdc333f111fcf11cc457d22b8b8b07e3dd4 100644 (file)
@@ -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,
index ec3bf68e2afb60252772a1db80e371d7f43586e0..4b7efe81ebe855cca80eb98607e5c51dd7473f65 100644 (file)
@@ -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 */
index 29849e9e78dbb5796e422aa501c1f5963fc44dbe..c3bcb715bb009044794512f697be9e3e8a151c40 100644 (file)
@@ -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;
index 84ea67b9ec802999e74f6c6c919abb4020bf9622..7f68cbfbc2b4b3cc62fd18e6eb498870b00c9729 100644 (file)
@@ -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,