[PATCH] wpa_supplicant: Support 'relog' command to re-open log files.

Ben Greear greearb at candelatech.com
Mon Nov 29 14:41:56 EST 2010


This allows rolling log files:

mv log.txt log.txt.1
wpa_cli relog

Signed-off-by: Ben Greear <greearb at candelatech.com>
---
:100644 100644 6f6fc69... fb7811d... M	src/utils/wpa_debug.c
:100644 100644 f2e8646... fb59ea5... M	src/utils/wpa_debug.h
:100644 100644 2a635dd... db99351... M	wpa_supplicant/ctrl_iface.c
:100644 100644 2e2d3ab... 3577c68... M	wpa_supplicant/wpa_cli.c
 src/utils/wpa_debug.c       |   25 +++++++++++++++++++++++++
 src/utils/wpa_debug.h       |    1 +
 wpa_supplicant/ctrl_iface.c |    6 ++++++
 wpa_supplicant/wpa_cli.c    |    8 ++++++++
 4 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/src/utils/wpa_debug.c b/src/utils/wpa_debug.c
index 6f6fc69..fb7811d 100644
--- a/src/utils/wpa_debug.c
+++ b/src/utils/wpa_debug.c
@@ -272,12 +272,37 @@ void wpa_hexdump_ascii_key(int level, const char *title, const u8 *buf,
 	_wpa_hexdump_ascii(level, title, buf, len, wpa_debug_show_keys);
 }
 
+static char* last_path;
+
+int wpa_debug_reopen_file(void)
+{
+	int rv;
+	if (last_path) {
+		char* tmp = strdup(last_path);
+		wpa_debug_close_file();
+		rv = wpa_debug_open_file(tmp);
+		free(tmp);
+	}
+	else {
+		wpa_printf(MSG_ERROR, "Last-path was not set, cannot"
+			   " re-open log file.\n");
+		rv = -1;
+	}
+	return rv;
+}
+	
 
 int wpa_debug_open_file(const char *path)
 {
 #ifdef CONFIG_DEBUG_FILE
 	if (!path)
 		return 0;
+
+	/* Save our path to enable re-open */
+	if (last_path)
+		free(last_path);
+	last_path = strdup(path);
+	
 	out_file = fopen(path, "a");
 	if (out_file == NULL) {
 		wpa_printf(MSG_ERROR, "wpa_debug_open_file: Failed to open "
diff --git a/src/utils/wpa_debug.h b/src/utils/wpa_debug.h
index f2e8646..fb59ea5 100644
--- a/src/utils/wpa_debug.h
+++ b/src/utils/wpa_debug.h
@@ -40,6 +40,7 @@ enum {
 #else /* CONFIG_NO_STDOUT_DEBUG */
 
 int wpa_debug_open_file(const char *path);
+int wpa_debug_reopen_file(void);
 void wpa_debug_close_file(void);
 
 /**
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 2a635dd..db99351 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -2787,6 +2787,12 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
 	if (os_strcmp(buf, "PING") == 0) {
 		os_memcpy(reply, "PONG\n", 5);
 		reply_len = 5;
+	} else if (os_strncmp(buf, "RELOG", 5) == 0) {
+		if (wpa_debug_reopen_file() < 0) {
+			const char* msg = "ERROR:  Failed to reopen log file.\n";
+			reply_len = strlen(msg);
+			os_memcpy(reply, msg, reply_len);
+		}
 	} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
 		wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
 	} else if (os_strcmp(buf, "MIB") == 0) {
diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c
index 2e2d3ab..3577c68 100644
--- a/wpa_supplicant/wpa_cli.c
+++ b/wpa_supplicant/wpa_cli.c
@@ -277,6 +277,11 @@ static int wpa_cli_cmd_ping(struct wpa_ctrl *ctrl, int argc, char *argv[])
 	return wpa_ctrl_command(ctrl, "PING");
 }
 
+static int wpa_cli_cmd_relog(struct wpa_ctrl *ctrl, int argc, char *argv[])
+{
+	return wpa_ctrl_command(ctrl, "RELOG");
+}
+
 
 static int wpa_cli_cmd_note(struct wpa_ctrl *ctrl, int argc, char *argv[])
 {
@@ -2164,6 +2169,9 @@ static struct wpa_cli_cmd wpa_cli_commands[] = {
 	{ "ping", wpa_cli_cmd_ping,
 	  cli_cmd_flag_none,
 	  "= pings wpa_supplicant" },
+	{ "relog", wpa_cli_cmd_relog,
+	  cli_cmd_flag_none,
+	  "= re-open log-file (allow rolling logs)" },
 	{ "note", wpa_cli_cmd_note,
 	  cli_cmd_flag_none,
 	  "<text> = add a note to wpa_supplicant debug log" },
-- 
1.7.2.3



More information about the HostAP mailing list