Re: snmptrapd.conf format1 and format2 tokens not being used?!

Dave Shield <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
On 6 April 2010 12:57, Dave Shield <[email protected]> wrote:
> There's something about specifying "logOption" in the config file that
> works in a different manner.   I'll investigate further, and get back to you.

OK - I think I've tracked down the problem.

If logging is specified on the command line, this is set up relatively
early (as part of the option processing - around line 837 of snmptrapd.c).

If logging is specified via the config file, this is set up by the library
config processing, which is triggered by "init_snmp()" - around line 1062

However, in between the two - immediately after the option processing
comes a block of code

    if (0 == snmp_get_do_logging()) {
        traph = netsnmp_add_global_traphandler(NETSNMPTRAPD_PRE_HANDLER,
                                               syslog_handler);
        traph->authtypes = TRAP_AUTH_LOG;
        snmp_enable_syslog();
    } else {
        traph = netsnmp_add_global_traphandler(NETSNMPTRAPD_PRE_HANDLER,
                                               print_handler);
        traph->authtypes = TRAP_AUTH_LOG;
    }

(lines 954-963).
This has the effect of defaulting to using the "syslog_handler" (which
ignores the
format1/format2 directives), rather than the "print_handler" (which
does use them).

I'm attaching a patch which seems to fix this problem,
though it would merit further study before we can apply it to the code.

Dave

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev

_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
trapd_log.patch (text/x-patch, 3.2 KB)
Index: apps/snmptrapd.c
===================================================================
--- apps/snmptrapd.c	(revision 18394)
+++ apps/snmptrapd.c	(working copy)
@@ -1078,40 +1078,6 @@
 
     SOCK_STARTUP;
 
-    /*
-     * I'm being lazy here, and not checking the
-     * return value from these registration calls.
-     * Don't try this at home, children!
-     */
-    if (0 == snmp_get_do_logging()) {
-        traph = netsnmp_add_global_traphandler(NETSNMPTRAPD_PRE_HANDLER,
-                                               syslog_handler);
-        traph->authtypes = TRAP_AUTH_LOG;
-        snmp_enable_syslog();
-    } else {
-        traph = netsnmp_add_global_traphandler(NETSNMPTRAPD_PRE_HANDLER,
-                                               print_handler);
-        traph->authtypes = TRAP_AUTH_LOG;
-    }
-
-    if (Event) {
-        traph = netsnmp_add_traphandler(event_handler, risingAlarm,
-                                        OID_LENGTH(risingAlarm));
-        traph->authtypes = TRAP_AUTH_LOG;
-
-        traph = netsnmp_add_traphandler(event_handler, fallingAlarm,
-                                        OID_LENGTH(fallingAlarm));
-        traph->authtypes = TRAP_AUTH_LOG;
-
-        traph = netsnmp_add_traphandler(event_handler, unavailableAlarm,
-                                        OID_LENGTH(unavailableAlarm));
-        traph->authtypes = TRAP_AUTH_LOG;
-	/* XXX - might be worth setting some "magic data"
-	 * in the traphandler structure that 'event_handler'
-	 * can use to avoid checking the trap OID values.
-	 */
-    }
-
 #if defined(USING_AGENTX_SUBAGENT_MODULE) && !defined(NETSNMP_SNMPTRAPD_DISABLE_AGENTX)
     /*
      * we're an agentx subagent? 
@@ -1231,17 +1197,45 @@
         netsnmp_running = 0;
     }
 
+
     /*
      * if no logging options on command line or in conf files, use syslog
      */
     if (0 == snmp_get_do_logging()) {
+        traph = netsnmp_add_global_traphandler(NETSNMPTRAPD_PRE_HANDLER,
+                                               syslog_handler);
+        traph->authtypes = TRAP_AUTH_LOG;
 #ifdef WIN32
         snmp_enable_syslog_ident(app_name_long, Facility);
 #else
         snmp_enable_syslog_ident(app_name, Facility);
 #endif        
+    } else {
+        traph = netsnmp_add_global_traphandler(NETSNMPTRAPD_PRE_HANDLER,
+                                               print_handler);
+        traph->authtypes = TRAP_AUTH_LOG;
     }
 
+
+    if (Event) {
+        traph = netsnmp_add_traphandler(event_handler, risingAlarm,
+                                        OID_LENGTH(risingAlarm));
+        traph->authtypes = TRAP_AUTH_LOG;
+
+        traph = netsnmp_add_traphandler(event_handler, fallingAlarm,
+                                        OID_LENGTH(fallingAlarm));
+        traph->authtypes = TRAP_AUTH_LOG;
+
+        traph = netsnmp_add_traphandler(event_handler, unavailableAlarm,
+                                        OID_LENGTH(unavailableAlarm));
+        traph->authtypes = TRAP_AUTH_LOG;
+	/* XXX - might be worth setting some "magic data"
+	 * in the traphandler structure that 'event_handler'
+	 * can use to avoid checking the trap OID values.
+	 */
+    }
+
+
 #ifndef WIN32
     /*
      * fork the process to the background if we are not printing to stderr
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.