summaryrefslogblamecommitdiffstats
path: root/source/n/icmpinfo/icmpinfo-1.11.diff
blob: 0ecc05adeb89b530e621af0c9e3d80f1adfd1f56 (plain) (tree)

















































































































































































































                                                                                                                                                                                                                                                                                                           
--- ./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 ( ; ; ) {