SCCS-vsn: sbin/routed/trace.c 5.2
-static char sccsid[] = "@(#)trace.c 5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)trace.c 5.2 (Berkeley) %G%";
ifd->ifd_front = ifd->ifd_records;
if (ifd->ifd_count < NRECORDS)
ifd->ifd_count++;
ifd->ifd_front = ifd->ifd_records;
if (ifd->ifd_count < NRECORDS)
ifd->ifd_count++;
- if (t->ift_size > 0 && t->ift_packet)
+ if (t->ift_size > 0 && t->ift_size < len && t->ift_packet) {
t->ift_stamp = time(0);
t->ift_who = *who;
t->ift_stamp = time(0);
t->ift_who = *who;
+ if (len > 0 && t->ift_packet == 0) {
t->ift_packet = malloc(len);
t->ift_packet = malloc(len);
- if (t->ift_packet)
- bcopy(p, t->ift_packet, len);
- else
+ if (t->ift_packet == 0)
+ if (len > 0)
+ bcopy(p, t->ift_packet, len);
t->ift_size = len;
t->ift_metric = m;
}
t->ift_size = len;
t->ift_metric = m;
}
dumptrace(fd, "from", &ifp->int_input);
fprintf(fd, "*** end packet history ***\n");
}
dumptrace(fd, "from", &ifp->int_input);
fprintf(fd, "*** end packet history ***\n");
}
}
dumptrace(fd, dir, ifd)
}
dumptrace(fd, dir, ifd)
if (ifd->ifd_front == ifd->ifd_records &&
ifd->ifd_front->ift_size == 0) {
fprintf(fd, "%s: no packets.\n", cp);
if (ifd->ifd_front == ifd->ifd_records &&
ifd->ifd_front->ift_size == 0) {
fprintf(fd, "%s: no packets.\n", cp);
return;
}
fprintf(fd, "%s trace:\n", cp);
return;
}
fprintf(fd, "%s trace:\n", cp);
fprintf(fd, "Bad cmd 0x%x %s %x.%d\n", msg->rip_cmd,
dir, inet_ntoa(who->sin_addr), ntohs(who->sin_port));
fprintf(fd, "size=%d cp=%x packet=%x\n", size, cp, packet);
fprintf(fd, "Bad cmd 0x%x %s %x.%d\n", msg->rip_cmd,
dir, inet_ntoa(who->sin_addr), ntohs(who->sin_port));
fprintf(fd, "size=%d cp=%x packet=%x\n", size, cp, packet);
return;
}
switch (msg->rip_cmd) {
return;
}
switch (msg->rip_cmd) {
fprintf(fd, "\n");
break;
}
fprintf(fd, "\n");
break;
}