diff options
author | Guy Harris <guy@alum.mit.edu> | 2016-07-09 00:07:52 -0700 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2016-07-09 07:08:23 +0000 |
commit | 01c6483b45a91f8c03eeb4bf80a15a5e174ffb18 (patch) | |
tree | d2a47b486f5679197c9a9a76ba7a56759d679e79 /dumpcap.c | |
parent | 94c0f910855f45161d1bbe4bd51bd4ed131daa28 (diff) |
Check for pcapng files when reading from a pipe.
That way, people don't get confused by an "Unrecognized libpcap format"
error - it's *not* libpcap format!
Also, improve *that* message to say "...or not libpcap data", and put a
period at the end of the error messages.
Change-Id: I175f9399fe99ce424f1d83596b7330e1fa5c0625
Reviewed-on: https://code.wireshark.org/review/16349
Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'dumpcap.c')
-rw-r--r-- | dumpcap.c | 51 |
1 files changed, 29 insertions, 22 deletions
@@ -117,9 +117,11 @@ /* * Get information about libpcap format from "wiretap/libpcap.h". + * Get information about pcapng format from "wiretap/pcapng_module.h". * XXX - can we just use pcap_open_offline() to read the pipe? */ #include "wiretap/libpcap.h" +#include "wiretap/pcapng_module.h" /**#define DEBUG_DUMPCAP**/ /**#define DEBUG_CHILD_DUMPCAP**/ @@ -1503,7 +1505,7 @@ cap_pipe_open_live(char *pipename, else { g_snprintf(errmsg, errmsgl, "The capture session could not be initiated " - "due to error getting information on pipe/socket: %s", g_strerror(errno)); + "due to error getting information on pipe/socket: %s.", g_strerror(errno)); pcap_opts->cap_pipe_err = PIPERR; } return; @@ -1513,7 +1515,7 @@ cap_pipe_open_live(char *pipename, if (fd == -1) { g_snprintf(errmsg, errmsgl, "The capture session could not be initiated " - "due to error on pipe open: %s", g_strerror(errno)); + "due to error on pipe open: %s.", g_strerror(errno)); pcap_opts->cap_pipe_err = PIPERR; return; } @@ -1522,7 +1524,7 @@ cap_pipe_open_live(char *pipename, if (fd == -1) { g_snprintf(errmsg, errmsgl, "The capture session could not be initiated " - "due to error on socket create: %s", g_strerror(errno)); + "due to error on socket create: %s.", g_strerror(errno)); pcap_opts->cap_pipe_err = PIPERR; return; } @@ -1554,7 +1556,7 @@ cap_pipe_open_live(char *pipename, /* Path name too long */ g_snprintf(errmsg, errmsgl, "The capture session coud not be initiated " - "due to error on socket connect: Path name too long"); + "due to error on socket connect: Path name too long."); pcap_opts->cap_pipe_err = PIPERR; ws_close(fd); return; @@ -1563,7 +1565,7 @@ cap_pipe_open_live(char *pipename, if (b == -1) { g_snprintf(errmsg, errmsgl, "The capture session coud not be initiated " - "due to error on socket connect: %s", g_strerror(errno)); + "due to error on socket connect: %s.", g_strerror(errno)); pcap_opts->cap_pipe_err = PIPERR; ws_close(fd); return; @@ -1578,7 +1580,7 @@ cap_pipe_open_live(char *pipename, } else { g_snprintf(errmsg, errmsgl, "The capture session could not be initiated because\n" - "\"%s\" is neither an interface nor a socket nor a pipe", pipename); + "\"%s\" is neither an interface nor a socket nor a pipe.", pipename); pcap_opts->cap_pipe_err = PIPERR; } return; @@ -1600,7 +1602,7 @@ cap_pipe_open_live(char *pipename, if (!pos) { g_snprintf(errmsg, errmsgl, "The capture session could not be initiated because\n" - "\"%s\" is neither an interface nor a pipe", pipename); + "\"%s\" is neither an interface nor a pipe.", pipename); pcap_opts->cap_pipe_err = PIPNEXIST; return; } @@ -1631,7 +1633,7 @@ cap_pipe_open_live(char *pipename, NULL, GetLastError(), 0, (LPTSTR) &err_str, 0, NULL); g_snprintf(errmsg, errmsgl, "The capture session on \"%s\" could not be started " - "due to error on pipe open: %s (error %d)", + "due to error on pipe open: %s (error %d).", pipename, utf_16to8(err_str), GetLastError()); LocalFree(err_str); pcap_opts->cap_pipe_err = PIPERR; @@ -1643,7 +1645,7 @@ cap_pipe_open_live(char *pipename, NULL, GetLastError(), 0, (LPTSTR) &err_str, 0, NULL); g_snprintf(errmsg, errmsgl, "The capture session on \"%s\" timed out during " - "pipe open: %s (error %d)", + "pipe open: %s (error %d).", pipename, utf_16to8(err_str), GetLastError()); LocalFree(err_str); pcap_opts->cap_pipe_err = PIPERR; @@ -1663,14 +1665,14 @@ cap_pipe_open_live(char *pipename, bytes_read = 0; while (bytes_read < sizeof magic) { if (fd == -1) { - g_snprintf(errmsg, errmsgl, "Invalid file descriptor"); + g_snprintf(errmsg, errmsgl, "Invalid file descriptor."); goto error; } sel_ret = cap_pipe_select(fd); if (sel_ret < 0) { g_snprintf(errmsg, errmsgl, - "Unexpected error from select: %s", g_strerror(errno)); + "Unexpected error from select: %s.", g_strerror(errno)); goto error; } else if (sel_ret > 0) { b = cap_pipe_read(fd, ((char *)&magic)+bytes_read, @@ -1678,9 +1680,9 @@ cap_pipe_open_live(char *pipename, pcap_opts->from_cap_socket); if (b <= 0) { if (b == 0) - g_snprintf(errmsg, errmsgl, "End of file on pipe magic during open"); + g_snprintf(errmsg, errmsgl, "End of file on pipe magic during open."); else - g_snprintf(errmsg, errmsgl, "Error on pipe magic during open: %s", + g_snprintf(errmsg, errmsgl, "Error on pipe magic during open: %s.", g_strerror(errno)); goto error; } @@ -1704,9 +1706,9 @@ cap_pipe_open_live(char *pipename, g_async_queue_pop(pcap_opts->cap_pipe_done_q); if (pcap_opts->cap_pipe_bytes_read <= 0) { if (pcap_opts->cap_pipe_bytes_read == 0) - g_snprintf(errmsg, errmsgl, "End of file on pipe magic during open"); + g_snprintf(errmsg, errmsgl, "End of file on pipe magic during open."); else - g_snprintf(errmsg, errmsgl, "Error on pipe magic during open: %s", + g_snprintf(errmsg, errmsgl, "Error on pipe magic during open: %s.", g_strerror(errno)); goto error; } @@ -1744,9 +1746,14 @@ cap_pipe_open_live(char *pipename, pcap_opts->cap_pipe_byte_swapped = TRUE; pcap_opts->cap_pipe_modified = TRUE; break; + case BLOCK_TYPE_SHB: + /* This isn't pcap, it's pcapng. We don't yet support + reading it. */ + g_snprintf(errmsg, errmsgl, "Capturing from a pipe doesn't support pcapng format."); + goto error; default: - /* Not a "libpcap" type we know about. */ - g_snprintf(errmsg, errmsgl, "Unrecognized libpcap format"); + /* Not a pcap type we know about, or not pcap at all. */ + g_snprintf(errmsg, errmsgl, "Unrecognized libpcap format or not libpcap data."); goto error; } @@ -1760,7 +1767,7 @@ cap_pipe_open_live(char *pipename, sel_ret = cap_pipe_select(fd); if (sel_ret < 0) { g_snprintf(errmsg, errmsgl, - "Unexpected error from select: %s", g_strerror(errno)); + "Unexpected error from select: %s.", g_strerror(errno)); goto error; } else if (sel_ret > 0) { b = cap_pipe_read(fd, ((char *)hdr)+bytes_read, @@ -1768,9 +1775,9 @@ cap_pipe_open_live(char *pipename, pcap_opts->from_cap_socket); if (b <= 0) { if (b == 0) - g_snprintf(errmsg, errmsgl, "End of file on pipe header during open"); + g_snprintf(errmsg, errmsgl, "End of file on pipe header during open."); else - g_snprintf(errmsg, errmsgl, "Error on pipe header during open: %s", + g_snprintf(errmsg, errmsgl, "Error on pipe header during open: %s.", g_strerror(errno)); goto error; } @@ -1787,9 +1794,9 @@ cap_pipe_open_live(char *pipename, g_async_queue_pop(pcap_opts->cap_pipe_done_q); if (pcap_opts->cap_pipe_bytes_read <= 0) { if (pcap_opts->cap_pipe_bytes_read == 0) - g_snprintf(errmsg, errmsgl, "End of file on pipe header during open"); + g_snprintf(errmsg, errmsgl, "End of file on pipe header during open."); else - g_snprintf(errmsg, errmsgl, "Error on pipe header header during open: %s", + g_snprintf(errmsg, errmsgl, "Error on pipe header header during open: %s.", g_strerror(errno)); goto error; } |