Revert the previous fix. As it turns out Warner Losh is

working a better fix.
This commit is contained in:
Steve Price 1998-05-25 06:53:17 +00:00
parent c2fd2f2c1b
commit dd033c223d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=36357

View File

@ -45,7 +45,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)ping.c 8.1 (Berkeley) 6/5/93"; static char sccsid[] = "@(#)ping.c 8.1 (Berkeley) 6/5/93";
*/ */
static const char rcsid[] = static const char rcsid[] =
"$Id: ping.c,v 1.34 1998/05/16 00:19:27 jb Exp $"; "$Id: ping.c,v 1.35 1998/05/25 03:50:51 steve Exp $";
#endif /* not lint */ #endif /* not lint */
/* /*
@ -161,7 +161,6 @@ double tsumsq = 0.0; /* sum of all times squared, for std. dev. */
volatile sig_atomic_t finish_up; /* nonzero if we've been told to finish up */ volatile sig_atomic_t finish_up; /* nonzero if we've been told to finish up */
int reset_kerninfo; int reset_kerninfo;
volatile sig_atomic_t siginfo_p; volatile sig_atomic_t siginfo_p;
volatile time_t lasttime;
static void fill(char *, char *); static void fill(char *, char *);
static u_short in_cksum(u_short *, int); static u_short in_cksum(u_short *, int);
@ -213,7 +212,6 @@ main(argc, argv)
uid = getuid(); uid = getuid();
preload = 0; preload = 0;
lasttime = 0;
datap = &outpack[8 + PHDR_LEN]; datap = &outpack[8 + PHDR_LEN];
while ((ch = getopt(argc, argv, "I:LQRT:c:adfi:l:np:qrs:v")) != -1) { while ((ch = getopt(argc, argv, "I:LQRT:c:adfi:l:np:qrs:v")) != -1) {
@ -523,29 +521,19 @@ catcher(int sig)
{ {
int waittime; int waittime;
struct sigaction si_sa; struct sigaction si_sa;
time_t timenow;
if (nreceived) {
waittime = 2 * tmax / 1000;
if (!waittime)
waittime = 1;
} else
waittime = MAXWAIT;
/*
* Die if SIGALRM is caught earlier than it should have been. This
* is usually the result of someone sending thousands of SIGALRMs
* in an attempt to simulate a ping -f (flood).
*/
if(time((time_t *)&timenow) < lasttime + waittime)
exit(0);
lasttime = timenow;
pinger(); pinger();
if (!npackets || ntransmitted < npackets) if (!npackets || ntransmitted < npackets)
(void)alarm((u_int)interval); (void)alarm((u_int)interval);
else { else {
if (nreceived) {
waittime = 2 * tmax / 1000;
if (!waittime)
waittime = 1;
} else
waittime = MAXWAIT;
si_sa.sa_handler = stopit; si_sa.sa_handler = stopit;
sigemptyset(&si_sa.sa_mask); sigemptyset(&si_sa.sa_mask);
si_sa.sa_flags = 0; si_sa.sa_flags = 0;