X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/d77ac851c76ff95e6542e93715786d29ba86c51f..0f24a43a7e9fbdcff2baae3990939b2bc25d9fd1:/tcpdump.c diff --git a/tcpdump.c b/tcpdump.c index 65defd0d..1ed33461 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -74,14 +74,14 @@ The Regents of the University of California. All rights reserved.\n"; #ifdef HAVE_GETOPT_LONG #include #else -#include "getopt_long.h" +#include "missing/getopt_long.h" #endif /* Capsicum-specific code requires macros from , which will fail * to compile if has already been included; including the headers * in the opposite order works fine. */ #ifdef HAVE_CAPSICUM -#include +#include #include #include #include @@ -624,6 +624,10 @@ show_remote_devices_and_exit(void) #define J_FLAG #endif /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */ +#ifdef USE_LIBSMI +#define m_FLAG_USAGE "[ -m module ] ..." +#endif + #ifdef HAVE_PCAP_SETDIRECTION #define Q_FLAG "Q:" #define Q_FLAG_USAGE " [ -Q in|out|inout ]" @@ -713,7 +717,7 @@ static const struct option longopts[] = { }; #ifdef HAVE_PCAP_FINDALLDEVS_EX -#define LIST_REMOTE_INTERFACES_USAGE "[ --list-remote-interfaces remote-source ]" +#define LIST_REMOTE_INTERFACES_USAGE "[ --list-remote-interfaces remote-source ]" #else #define LIST_REMOTE_INTERFACES_USAGE #endif @@ -985,7 +989,7 @@ static char * copy_argv(char **argv) { char **p; - u_int len = 0; + size_t len = 0; char *buf; char *src, *dst; @@ -1156,6 +1160,9 @@ _U_ */ endp++; /* Include the trailing / in the URL; pcap_findalldevs_ex() requires it */ host_url = malloc(endp - url + 1); + if (host_url == NULL && (endp - url + 1) > 0) + error("Invalid allocation for host"); + memcpy(host_url, url, endp - url); host_url[endp - url] = '\0'; status = pcap_findalldevs_ex(host_url, NULL, &devlist, ebuf); @@ -1181,9 +1188,10 @@ _U_ #ifdef HAVE_PCAP_OPEN /* - * Prefix for rpcap URLs. + * Prefixes for rpcap URLs. */ static char rpcap_prefix[] = "rpcap://"; +static char rpcap_ssl_prefix[] = "rpcaps://"; #endif static pcap_t * @@ -1199,7 +1207,8 @@ open_interface(const char *device, netdissect_options *ndo, char *ebuf) /* * Is this an rpcap URL? */ - if (strncmp(device, rpcap_prefix, sizeof(rpcap_prefix) - 1) == 0) { + if (strncmp(device, rpcap_prefix, sizeof(rpcap_prefix) - 1) == 0 || + strncmp(device, rpcap_ssl_prefix, sizeof(rpcap_ssl_prefix) - 1) == 0) { /* * Yes. Open it with pcap_open(). */ @@ -1709,7 +1718,8 @@ main(int argc, char **argv) ndo->ndo_snaplen = strtol(optarg, &end, 0); if (optarg == end || *end != '\0' || ndo->ndo_snaplen < 0 || ndo->ndo_snaplen > MAXIMUM_SNAPLEN) - error("invalid snaplen %s", optarg); + error("invalid snaplen %s (must be >= 0 and <= %d)", + optarg, MAXIMUM_SNAPLEN); break; case 'S': @@ -1973,15 +1983,14 @@ main(int argc, char **argv) #endif dlt = pcap_datalink(pd); dlt_name = pcap_datalink_val_to_name(dlt); + fprintf(stderr, "reading from file %s", RFileName); if (dlt_name == NULL) { - fprintf(stderr, "reading from file %s, link-type %u\n", - RFileName, dlt); + fprintf(stderr, ", link-type %u", dlt); } else { - fprintf(stderr, - "reading from file %s, link-type %s (%s)\n", - RFileName, dlt_name, - pcap_datalink_val_to_description(dlt)); + fprintf(stderr, ", link-type %s (%s)", dlt_name, + pcap_datalink_val_to_description(dlt)); } + fprintf(stderr, ", snapshot length %d\n", pcap_snapshot(pd)); #ifdef DLT_LINUX_SLL2 if (dlt == DLT_LINUX_SLL2) fprintf(stderr, "Warning: interface names might be incorrect\n"); @@ -2261,7 +2270,7 @@ DIAG_ON_CLANG(assign-enum) if (pdd == NULL) error("%s", pcap_geterr(pd)); #ifdef HAVE_CAPSICUM - set_dumper_capsicum_rights(p); + set_dumper_capsicum_rights(pdd); #endif if (Cflag != 0 || Gflag != 0) { #ifdef HAVE_CAPSICUM @@ -2378,14 +2387,14 @@ DIAG_ON_CLANG(assign-enum) (void)fprintf(stderr, "%s: ", program_name); dlt = pcap_datalink(pd); dlt_name = pcap_datalink_val_to_name(dlt); + (void)fprintf(stderr, "listening on %s", device); if (dlt_name == NULL) { - (void)fprintf(stderr, "listening on %s, link-type %u, capture size %u bytes\n", - device, dlt, ndo->ndo_snaplen); + (void)fprintf(stderr, ", link-type %u", dlt); } else { - (void)fprintf(stderr, "listening on %s, link-type %s (%s), capture size %u bytes\n", - device, dlt_name, - pcap_datalink_val_to_description(dlt), ndo->ndo_snaplen); + (void)fprintf(stderr, ", link-type %s (%s)", dlt_name, + pcap_datalink_val_to_description(dlt)); } + (void)fprintf(stderr, ", snapshot length %d bytes\n", ndo->ndo_snaplen); (void)fflush(stderr); } @@ -2501,15 +2510,15 @@ DIAG_ON_CLANG(assign-enum) * Report the new file. */ dlt_name = pcap_datalink_val_to_name(dlt); + fprintf(stderr, "reading from file %s", RFileName); if (dlt_name == NULL) { - fprintf(stderr, "reading from file %s, link-type %u\n", - RFileName, dlt); + fprintf(stderr, ", link-type %u", dlt); } else { - fprintf(stderr, - "reading from file %s, link-type %s (%s)\n", - RFileName, dlt_name, - pcap_datalink_val_to_description(dlt)); + fprintf(stderr, ", link-type %s (%s)", + dlt_name, + pcap_datalink_val_to_description(dlt)); } + fprintf(stderr, ", snapshot length %d\n", pcap_snapshot(pd)); } } } @@ -3056,6 +3065,10 @@ print_usage(void) #ifdef HAVE_PCAP_FINDALLDEVS_EX (void)fprintf(stderr, "\t\t" LIST_REMOTE_INTERFACES_USAGE "\n"); +#endif +#ifdef USE_LIBSMI + (void)fprintf(stderr, +"\t\t" m_FLAG_USAGE "\n"); #endif (void)fprintf(stderr, "\t\t[ -M secret ] [ --number ] [ --print ]" Q_FLAG_USAGE "\n");