X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/ccaf082ec23c28e10a28870f0ef2e4d48165ac0a..aa57a76df4b0a5861caefcbc0b500edc59253ee5:/tcpdump.c diff --git a/tcpdump.c b/tcpdump.c index ef3edc9e..a83be5de 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -30,7 +30,7 @@ static const char copyright[] = "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\ The Regents of the University of California. All rights reserved.\n"; static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.203 2003-02-11 08:04:18 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.211 2003-07-31 22:36:43 fenner Exp $ (LBL)"; #endif /* @@ -69,7 +69,6 @@ extern int SIZE_BUF; #include "gmt2local.h" #include "pcap-missing.h" -int aflag; /* translate network and broadcast addresses */ int dflag; /* print filter code */ int eflag; /* print ethernet header */ int fflag; /* don't translate "foreign" IP address */ @@ -147,9 +146,13 @@ static struct printer printers[] = { { cip_if_print, DLT_ATM_CLIP }, #endif { sl_if_print, DLT_SLIP }, +#ifdef DLT_SLIP_BSDOS { sl_bsdos_if_print, DLT_SLIP_BSDOS }, +#endif { ppp_if_print, DLT_PPP }, +#ifdef DLT_PPP_BSDOS { ppp_bsdos_if_print, DLT_PPP_BSDOS }, +#endif { fddi_if_print, DLT_FDDI }, { null_if_print, DLT_NULL }, #ifdef DLT_LOOP @@ -198,6 +201,9 @@ static struct printer printers[] = { #endif #ifdef DLT_IEEE802_11_RADIO { ieee802_11_radio_if_print, DLT_IEEE802_11_RADIO }, +#endif +#ifdef DLT_ENC + { enc_if_print, DLT_ENC }, #endif { NULL, 0 }, }; @@ -345,7 +351,7 @@ main(int argc, char **argv) switch (op) { case 'a': - ++aflag; + /* compatibility for old -a */ break; case 'A': @@ -535,6 +541,8 @@ main(int argc, char **argv) packettype = PT_SNMP; else if (strcasecmp(optarg, "cnfp") == 0) packettype = PT_CNFP; + else if (strcasecmp(optarg, "tftp") == 0) + packettype = PT_TFTP; else error("unknown packet type `%s'", optarg); break; @@ -592,25 +600,28 @@ main(int argc, char **argv) /* NOTREACHED */ } - if (aflag && nflag) - error("-a and -n options are incompatible"); - if (tflag > 0) thiszone = gmt2local(0); if (RFileName != NULL) { +#ifndef WIN32 /* - * We don't need network access, so set it back to the user id. - * Also, this prevents the user from reading anyone's - * trace file. + * We don't need network access, so relinquish any set-UID + * or set-GID privileges we have (if any). + * + * We do *not* want set-UID privileges when opening a + * trace file, as that might let the user read other + * people's trace files (especially if we're set-UID + * root). */ -#ifndef WIN32 setuid(getuid()); #endif /* WIN32 */ - pd = pcap_open_offline(RFileName, ebuf); if (pd == NULL) error("%s", ebuf); + printf("reading from file %s, link-type %u\n", + RFileName, + pcap_datalink(pd)); localnet = 0; netmask = 0; if (fflag != 0) @@ -688,6 +699,9 @@ main(int argc, char **argv) } init_addrtoname(localnet, netmask); +#ifndef WIN32 + (void)setsignal(SIGPIPE, cleanup); +#endif /* WIN32 */ (void)setsignal(SIGTERM, cleanup); (void)setsignal(SIGINT, cleanup); /* Cooperate with nohup(1) */ @@ -736,8 +750,8 @@ main(int argc, char **argv) program_name); } else (void)fprintf(stderr, "%s: ", program_name); - (void)fprintf(stderr, "listening on %s, capture size %u bytes\n", - device, snaplen); + (void)fprintf(stderr, "listening on %s, link-type %u, capture size %u bytes\n", + device, pcap_datalink(pd), snaplen); (void)fflush(stderr); } #endif /* WIN32 */