mirror of
git://slackware.nl/current.git
synced 2024-12-27 09:59:16 +01:00
211 lines
5.7 KiB
Diff
211 lines
5.7 KiB
Diff
|
--- ./Makefile.orig 1995-08-17 05:44:54.000000000 -0500
|
||
|
+++ ./Makefile 2007-04-29 15:11:50.000000000 -0500
|
||
|
@@ -22,7 +22,7 @@
|
||
|
|
||
|
LDFLAGS= $(CFLAGS)
|
||
|
|
||
|
-OBJECTS= recvping.o print.o err.o icmpinfo.o
|
||
|
+OBJECTS= recvping.o print.o err.o icmpinfo.o pid.o
|
||
|
TARGET = icmpinfo
|
||
|
|
||
|
$(TARGET): $(OBJECTS)
|
||
|
--- ./icmpinfo.c.orig 1995-08-17 05:29:30.000000000 -0500
|
||
|
+++ ./icmpinfo.c 2007-04-29 15:11:50.000000000 -0500
|
||
|
@@ -60,7 +60,7 @@
|
||
|
* This program has to run SUID to ROOT to access the ICMP socket.
|
||
|
*/
|
||
|
|
||
|
-char usage[] = "Usage: icmpinfo [-v[v[v]]] [-s] [-n] [-p] [-l]\n -v : more and more info\n -s : show local interface address\n -n : no name query (dot ip only)\n -p : no port -> service name query\n -l : fork + syslog output\nv1.11 - 8/1995 - dl";
|
||
|
+char usage[] = "Usage: icmpinfo [-v[v[v]]] [-s] [-n] [-p] [-l] [-k]\n -v : more and more info\n -s : show local interface address\n -n : no name query (dot ip only)\n -p : no port -> service name query\n -l : fork + syslog output\n -k : kill background process\nv1.11 - 8/1995 - dl";
|
||
|
char *pname;
|
||
|
|
||
|
int main(argc, argv)
|
||
|
@@ -99,6 +99,10 @@
|
||
|
case 's':
|
||
|
showsrcip++;
|
||
|
break;
|
||
|
+ case 'k':
|
||
|
+ pid_kill();
|
||
|
+ exit(0);
|
||
|
+ break;
|
||
|
case 'h':
|
||
|
default :
|
||
|
err_quit(usage);
|
||
|
@@ -128,6 +132,7 @@
|
||
|
openlog("icmpinfo",0,LOG_DAEMON);
|
||
|
syslog(LOG_NOTICE,"started, PID=%d.",getpid());
|
||
|
setsid();
|
||
|
+ pid_file();
|
||
|
close(0);
|
||
|
close(1);
|
||
|
close(2);
|
||
|
--- ./icmpinfo.man.orig 1995-08-17 05:25:11.000000000 -0500
|
||
|
+++ ./icmpinfo.man 2007-04-29 15:12:35.000000000 -0500
|
||
|
@@ -6,7 +6,7 @@
|
||
|
.SH SYNOPSIS
|
||
|
|
||
|
.B icmpinfo
|
||
|
-[\-v[v[v]]] [\-n] [\-p] [\-s] [\-l]
|
||
|
+[\-v[v[v]]] [\-n] [\-p] [\-s] [\-l] [\-k]
|
||
|
|
||
|
.SH DESCRIPTION
|
||
|
.BR Icmpinfo
|
||
|
@@ -60,6 +60,13 @@
|
||
|
.I "\-l"
|
||
|
Forks and use the syslog(3) facility to record events (recomended use).
|
||
|
(root only option).
|
||
|
+
|
||
|
+.TP
|
||
|
+.I "\-k"
|
||
|
+Kills the background process started with the
|
||
|
+.I "\-l"
|
||
|
+option.
|
||
|
+
|
||
|
.SH WARNINGS
|
||
|
The packet decoding is planned for ICMP Unreachable outputs and might
|
||
|
not be significant for all other Icmp types. Output can be shorter
|
||
|
--- ./linux_ip_icmp.h.orig 1994-05-11 07:08:29.000000000 -0500
|
||
|
+++ ./linux_ip_icmp.h 2007-04-29 15:11:50.000000000 -0500
|
||
|
@@ -3,6 +3,8 @@
|
||
|
#ifndef _netinet_ip_icmp_h
|
||
|
#define _netinet_ip_icmp_h
|
||
|
|
||
|
+#include <netinet/ip.h>
|
||
|
+
|
||
|
struct icmp {
|
||
|
u_char icmp_type; /* type of message, see below */
|
||
|
u_char icmp_code; /* type sub code */
|
||
|
@@ -22,6 +24,7 @@
|
||
|
#define icmp_seq icmp_hun.ih_idseq.icd_seq
|
||
|
#define icmp_void icmp_hun.ih_void
|
||
|
|
||
|
+#if 0
|
||
|
struct ip {
|
||
|
u_char ip_hl:4, /* header length */
|
||
|
ip_v:4; /* version */
|
||
|
@@ -36,6 +39,7 @@
|
||
|
u_short ip_sum; /* checksum */
|
||
|
struct in_addr ip_src,ip_dst; /* source and dest address */
|
||
|
};
|
||
|
+#endif
|
||
|
|
||
|
|
||
|
union {
|
||
|
--- ./pid.c.orig 2007-04-29 15:11:50.000000000 -0500
|
||
|
+++ ./pid.c 2007-04-29 15:11:50.000000000 -0500
|
||
|
@@ -0,0 +1,52 @@
|
||
|
+#include <stdio.h>
|
||
|
+#include <signal.h>
|
||
|
+
|
||
|
+#define PIDFILE "/var/run/icmpinfo.pid"
|
||
|
+
|
||
|
+extern char *pname;
|
||
|
+
|
||
|
+void sig_handler(int);
|
||
|
+void pid_file(void);
|
||
|
+void pid_kill(void);
|
||
|
+
|
||
|
+void pid_file(void)
|
||
|
+{
|
||
|
+ FILE *fp;
|
||
|
+
|
||
|
+ if ((fp = fopen(PIDFILE, "w")) != (FILE *)NULL) {
|
||
|
+ fprintf(fp, "%d\n", getpid());
|
||
|
+ fclose(fp);
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ fprintf(stderr, "\n%s: Could not write PID file `%s', terminating.\n",
|
||
|
+ pname, PIDFILE);
|
||
|
+ exit(1);
|
||
|
+ }
|
||
|
+ signal(SIGHUP, sig_handler);
|
||
|
+ signal(SIGINT, sig_handler);
|
||
|
+ signal(SIGTERM, sig_handler);
|
||
|
+}
|
||
|
+
|
||
|
+void sig_handler(int sig)
|
||
|
+{
|
||
|
+ unlink(PIDFILE);
|
||
|
+ exit(0);
|
||
|
+}
|
||
|
+
|
||
|
+void pid_kill(void)
|
||
|
+{
|
||
|
+ FILE *fp;
|
||
|
+ int pid;
|
||
|
+
|
||
|
+ if ((fp = fopen(PIDFILE, "r")) != (FILE *)NULL)
|
||
|
+ {
|
||
|
+ if (fscanf(fp, "%d", &pid) == 1)
|
||
|
+ {
|
||
|
+ kill(pid, SIGHUP);
|
||
|
+ sleep(1);
|
||
|
+ }
|
||
|
+ fclose(fp);
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
--- ./print.c.orig 1995-08-25 08:37:53.000000000 -0500
|
||
|
+++ ./print.c 2007-04-29 15:11:50.000000000 -0500
|
||
|
@@ -14,6 +14,7 @@
|
||
|
* program to be run without having intermingled output (or statistics!).
|
||
|
*/
|
||
|
|
||
|
+#include <string.h>
|
||
|
#include "defs.h"
|
||
|
|
||
|
#ifndef ANSI_OFFSETOF
|
||
|
@@ -119,6 +120,29 @@
|
||
|
inet_ntoa(icp->icmp_ip.ip_dst),
|
||
|
hostent?hostent->h_name:NULL);
|
||
|
tp = (struct tcphdr *)((char *)&(icp->icmp_dun)+sizeof(struct ip)) ;
|
||
|
+#if defined(__GLIBC__) && (__GLIBC__ >= 2)
|
||
|
+ if (cc>=offsetof(struct icmp,icmp_dun)+sizeof(struct ip)+offsetof(struct tcphdr,seq)+sizeof(tp->seq))
|
||
|
+ {
|
||
|
+ if (noportquery) {
|
||
|
+ sprintf(prbuf+strlen(prbuf)," sp=%d dp=%d seq=0x%8.8x",
|
||
|
+ ntohs(tp->source),ntohs(tp->dest),
|
||
|
+ ntohl(tp->seq));
|
||
|
+ } else {
|
||
|
+ if ((servent=getservbyport(ntohs(tp->source),NULL)))
|
||
|
+ sprintf(prbuf+strlen(prbuf)," sp=%d [%s]",
|
||
|
+ ntohs(tp->source),servent->s_name);
|
||
|
+ else
|
||
|
+ sprintf(prbuf+strlen(prbuf)," sp=%d",tp->source);
|
||
|
+ if ((servent=getservbyport(ntohs(tp->dest),NULL)))
|
||
|
+ sprintf(prbuf+strlen(prbuf)," dp=%d [%s] seq=0x%8.8x",
|
||
|
+ ntohs(tp->dest),servent->s_name,
|
||
|
+ ntohl(tp->seq));
|
||
|
+ else
|
||
|
+ sprintf(prbuf+strlen(prbuf)," dp=%d seq=0x%8.8x",
|
||
|
+ ntohs(tp->dest),ntohl(tp->seq));
|
||
|
+ }
|
||
|
+ }
|
||
|
+#else
|
||
|
if (cc>=offsetof(struct icmp,icmp_dun)+sizeof(struct ip)+offsetof(struct tcphdr,th_seq)+sizeof(tp->th_seq))
|
||
|
{
|
||
|
if (noportquery) {
|
||
|
@@ -140,6 +164,7 @@
|
||
|
ntohs(tp->th_dport),ntohl(tp->th_seq));
|
||
|
}
|
||
|
}
|
||
|
+#endif
|
||
|
}
|
||
|
}
|
||
|
sprintf(prbuf+strlen(prbuf)," sz=%d(+%d)",cc,iphdrlen);
|
||
|
--- ./recvping.c.orig 1994-01-07 05:04:04.000000000 -0600
|
||
|
+++ ./recvping.c 2007-04-29 15:11:50.000000000 -0500
|
||
|
@@ -9,7 +9,11 @@
|
||
|
int recv_ping()
|
||
|
{
|
||
|
register int n;
|
||
|
+#if !defined(__GLIBC__)
|
||
|
int fromlen;
|
||
|
+#else /* __GLIBC__ */
|
||
|
+ socklen_t fromlen;
|
||
|
+#endif /* __GLIBC__ */
|
||
|
struct sockaddr_in from;
|
||
|
|
||
|
for ( ; ; ) {
|