updated the 3.0 branch from the head branch - ready for alpha18
[samba.git] / source3 / lib / debug.c
index dc1a55fb581e6926fd1b718d6745273c4c1233e1..f41c3b649760961fa8a4514036a3f731b4c9b1f8 100644 (file)
@@ -149,11 +149,12 @@ static const char *default_classname_table[] = {
        "printdrivers",      /* DBGC_PRINTDRIVERS */
        "lanman",            /* DBGC_LANMAN       */
        "smb",               /* DBGC_SMB          */
-       "rpc",               /* DBGC_RPC          */
-       "rpc_hdr",           /* DBGC_RPC_HDR      */
+       "rpc_parse",         /* DBGC_RPC_PARSE    */
+       "rpc_srv",           /* DBGC_RPC_SRV      */
+       "rpc_cli",           /* DBGC_RPC_CLI      */
        "passdb",            /* DBGC_PASSDB       */
        "auth",              /* DBGC_AUTH         */
-       "bdc",               /* DBGC_BDC          */
+       "winbind",           /* DBGC_WINBIND      */
        NULL
 };
 
@@ -171,7 +172,7 @@ utility lists registered debug class names's
 
 #define MAX_CLASS_NAME_SIZE 1024
 
-char *debug_list_class_names_and_levels(void)
+static char *debug_list_class_names_and_levels(void)
 {
        int i, dim;
        char **list;
@@ -416,19 +417,22 @@ BOOL debug_parse_levels(const char *params_str)
 {
        char **params;
 
+       /* Just in case */
+       debug_init();
+
        if (AllowDebugChange == False)
-        return True;
+               return True;
 
-       params = lp_list_make(params_str);
+       params = str_list_make(params_str);
 
        if (debug_parse_params(params, DEBUGLEVEL_CLASS,
                               DEBUGLEVEL_CLASS_ISSET))
        {
                debug_dump_status(5);
-               lp_list_free(&params);
+               str_list_free(&params);
                return True;
        } else {
-               lp_list_free(&params);
+               str_list_free(&params);
                return False;
        }
 }
@@ -467,6 +471,24 @@ void debug_message_send(pid_t pid, const char *params_str)
 }
 
 
+/****************************************************************************
+ Return current debug level.
+****************************************************************************/
+
+static void debuglevel_message(int msg_type, pid_t src, void *buf, size_t len)
+{
+       char *debug_level_classes;
+       DEBUG(1,("INFO: Received REQ_DEBUGLEVEL message from PID %u\n",(unsigned int)src));
+
+       if ((debug_level_classes = debug_list_class_names_and_levels())) {
+       /*{ debug_level_classes = "test:1000";*/
+               message_send_pid(src, MSG_DEBUGLEVEL, debug_level_classes, strlen(debug_level_classes) + 1, True);
+               SAFE_FREE(debug_level_classes);
+       } else {
+               DEBUG(0, ("debuglevel_message: error retrieving class levels!\n"));
+       }
+}
+
 /****************************************************************************
 Init debugging (one time stuff)
 ****************************************************************************/
@@ -481,6 +503,7 @@ void debug_init(void)
        initialised = True;
 
        message_register(MSG_DEBUG, debug_message);
+       message_register(MSG_REQ_DEBUGLEVEL, debuglevel_message);
 
        for(p = default_classname_table; *p; p++)
        {
@@ -493,7 +516,7 @@ void debug_init(void)
  * get ready for syslog stuff
  * ************************************************************************** **
  */
-void setup_logging(char *pname, BOOL interactive)
+void setup_logging(const char *pname, BOOL interactive)
 {
        debug_init();
 
@@ -508,7 +531,7 @@ void setup_logging(char *pname, BOOL interactive)
        }
 #ifdef WITH_SYSLOG
        else {
-               char *p = strrchr_m( pname,'/' );
+               const char *p = strrchr_m( pname,'/' );
                if (p)
                        pname = p + 1;
 #ifdef LOG_DAEMON