wpa_debug: Support outputting hexdumps into syslog
authorNicolas Cavallari <Nicolas.Cavallari@lri.fr>
Sun, 29 Jan 2012 10:13:43 +0000 (12:13 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 29 Jan 2012 10:13:43 +0000 (12:13 +0200)
This patch allows to log hexdumps into syslog.

This is useful when testing, as syslog's network logging
helps to collect debug outputs from several machines.

Signed-hostapd: Nicolas Cavallari <cavallar@lri.fr>

src/utils/wpa_debug.c

index 5b56d83..c3fd4cf 100644 (file)
@@ -166,6 +166,38 @@ static void _wpa_hexdump(int level, const char *title, const u8 *buf,
        size_t i;
        if (level < wpa_debug_level)
                return;
+#ifdef CONFIG_DEBUG_SYSLOG
+       if (wpa_debug_syslog) {
+               const char *display;
+               char *strbuf = NULL;
+
+               if (buf == NULL) {
+                       display = " [NULL]";
+               } else if (len == 0) {
+                       display = "";
+               } else if (show && len) {
+                       strbuf = os_malloc(1 + 3 * len);
+                       if (strbuf == NULL) {
+                               wpa_printf(MSG_ERROR, "wpa_hexdump: Failed to "
+                                          "allocate message buffer");
+                               return;
+                       }
+
+                       for (i = 0; i < len; i++)
+                               os_snprintf(&strbuf[i * 3], 4, " %02x",
+                                           buf[i]);
+
+                       display = strbuf;
+               } else {
+                       display = " [REMOVED]";
+               }
+
+               syslog(syslog_priority(level), "%s - hexdump(len=%lu):%s",
+                      title, len, display);
+               os_free(strbuf);
+               return;
+       }
+#endif /* CONFIG_DEBUG_SYSLOG */
        wpa_debug_print_timestamp();
 #ifdef CONFIG_DEBUG_FILE
        if (out_file) {