Ticket #2126: msniff.diff

File msniff.diff, 86.1 KB (added by jake1981@…, 9 years ago)

msniff.diff

  • packages/net/msniff/files/msniff

     
     1#!/bin/sh /etc/rc.common 
     2# Copyright (C) 2007 RoadRunner.cx 
     3 
     4START=90 
     5 
     6start() { 
     7        /usr/bin/msniff eth0.1 >/var/log/msniff.log & 
     8} 
     9 
     10stop() { 
     11        killall msniff 
     12} 
     13 
     14restart() { 
     15        killall msniff 
     16        sleep 2 
     17        /usr/bin/msniff eth0.1 >>/var/log/msniff.log & 
     18} 
  • packages/net/msniff/patches/msniff.patch

    Property changes on: packages/net/msniff/files/msniff
    ___________________________________________________________________
    Name: svn:executable
       + *
    
     
     1diff -Naur msniff-0.2.0.orig/Makefile msniff-0.2.0/Makefile 
     2--- msniff-0.2.0.orig/Makefile  2007-02-17 09:57:04.000000000 +0200 
     3+++ msniff-0.2.0/Makefile       2007-07-22 21:44:13.000000000 +0300 
     4@@ -12,8 +12,8 @@ 
     5  
     6  
     7 # where is libpcap, shhmsg and shhopt?? 
     8-INCDIR         = -I/usr/local/include 
     9-LIBDIR         = -L/usr/local/lib 
     10+INCDIR         = -I/usr/include 
     11+LIBDIR         = -L./shhmsg-1.4.1 -L./shhopt-1.1.7 
     12  
     13 INSTBASEDIR    = /usr/local 
     14 INSTBINDIR     = $(INSTBASEDIR)/bin 
     15@@ -28,11 +28,11 @@ 
     16  
     17 ########################################################################### 
     18  
     19-CC             = gcc 
     20+CC             = $(GCC) 
     21  
     22-OPTIM          = -O3 -fomit-frame-pointer 
     23-CCOPT          = -Wall $(OPTIM) $(INCDIR) $(DEFINES) $(CFLAGS) 
     24-LDOPT          = -s $(LIBDIR) $(LDFLAGS) 
     25+#OPTIM         = -O3 -fomit-frame-pointer 
     26+#CCOPT         = -Wall $(OPTIM) $(INCDIR) $(DEFINES) $(CFLAGS) 
     27+LDOPT          = -s $(LDFLAGS) $(LIBDIR) $(LDFLAGS) 
     28  
     29 LIBS           = -lpcap -lshhmsg -lshhopt 
     30 OBJS           = $(PROG).o 
     31@@ -44,10 +44,10 @@ 
     32 $(PROG): $(OBJS) 
     33  
     34 .o: $(OBJS) 
     35-       $(CC) $(CCOPT) -o $@ $(OBJS) $(LDOPT) $(LIBS) 
     36+       $(CC) $(CCOPT) $(DEFINES) -o $@ $(OBJS) $(LDOPT) $(LIBS) 
     37  
     38 .c.o: 
     39-       $(CC) -o $@ -c $(CCOPT) $< 
     40+       $(CC) -o $@ -c $(CCOPT) $(DEFINES) $< 
     41  
     42 clean: 
     43        rm -f *.o core depend *~ 
     44diff -Naur msniff-0.2.0.orig/msniff.c msniff-0.2.0/msniff.c 
     45--- msniff-0.2.0.orig/msniff.c  2007-02-22 20:39:54.000000000 +0200 
     46+++ msniff-0.2.0/msniff.c       2007-07-22 20:26:56.000000000 +0300 
     47@@ -25,8 +25,8 @@ 
     48 #include <netinet/ip.h> 
     49 #include <netinet/tcp.h> 
     50  
     51-#include <shhmsg.h> 
     52-#include <shhopt.h> 
     53+#include "shhmsg-1.4.1/shhmsg.h" 
     54+#include "shhopt-1.1.7/shhopt.h" 
     55  
     56 #include <pcap.h> 
     57  
     58@@ -126,20 +126,6 @@ 
     59     } 
     60 } 
     61  
     62-static void 
     63-makePrintable(char *s) 
     64-{ 
     65-    int c; 
     66- 
     67-    while (*s) { 
     68-        c = *s & 0xff; 
     69-        if (c < ' ' && c != '\r' && c != '\n') { 
     70-            *s = '.'; 
     71-        } 
     72-        ++s; 
     73-    } 
     74-} 
     75- 
     76 static char * 
     77 formatMessage(const char *s) 
     78 { 
     79diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/ChangeLog msniff-0.2.0/shhmsg-1.4.1/ChangeLog 
     80--- msniff-0.2.0.orig/shhmsg-1.4.1/ChangeLog    1970-01-01 02:00:00.000000000 +0200 
     81+++ msniff-0.2.0/shhmsg-1.4.1/ChangeLog 2002-03-02 17:36:04.000000000 +0200 
     82@@ -0,0 +1,95 @@ 
     83+2002-03-02  Sverre H. Huseby  <shh@thathost.com> 
     84+ 
     85+       * Release 1.4.1 
     86+ 
     87+       * Updated comment style to match the one I currently use. 
     88+ 
     89+       * errno.c (msgPerror, msgFatalPerror): Using strerror() instead of 
     90+       sys_errlist[].  Patch from Oohara Yuuma 
     91+       <oohara@libra.interq.or.jp>. 
     92+ 
     93+       * internal.h (GET_ERROR_STREAM): The macro would return the 
     94+       message stream instead of the error stream if not set by the 
     95+       programmer.  Patch from Oohara Yuuma. 
     96+ 
     97+       * Makefile: Cleaned up some whitespace mess.  Patch from Oohara 
     98+       Yuuma. 
     99+ 
     100+1998-10-13  Sverre H. Huseby  <shh@thathost.com> 
     101+ 
     102+       * Release 1.4.0 
     103+ 
     104+       * Changed internal stream variables to not be initialised to stdio 
     105+       etc, as this would not compile with glibc2 ("initializer element is 
     106+       not constant"). 
     107+ 
     108+1998-09-04  Sverre H. Huseby  <shh@thathost.com> 
     109+ 
     110+       * errno.c: Redefined sys_errlist to match GNU libc 2. 
     111+ 
     112+1998-07-05  Sverre H. Huseby  <shh@thathost.com> 
     113+ 
     114+       * Release 1.3.4 
     115+ 
     116+       * Updated author address. 
     117+ 
     118+Tue May 27 23:09:35 1997  Sverre H. Huseby  <s.h.huseby@usit.uio.no> 
     119+ 
     120+       * Release: 1.3.3 
     121+ 
     122+       * shhmsg.h: Added GNU C specials for checking format parameters to 
     123+       functions. 
     124+ 
     125+Sun Mar 23 09:34:43 1997  Sverre H. Huseby  <s.h.huseby@usit.uio.no> 
     126+ 
     127+       * Release: 1.3.2 
     128+ 
     129+       * Makefile: Creating lib*.so in addition to lib*.so.* 
     130+ 
     131+Tue Nov 12 09:01:40 1996  Sverre H. Huseby  <sverrehu@ifi.uio.no> 
     132+ 
     133+       * Version: 1.3.1 
     134+ 
     135+       * Minor code restructuring and documentation updates. 
     136+ 
     137+Mon Aug 14 16:50:04 1995  Sverre H. Huseby  <sverrehu@ender> 
     138+ 
     139+       * New version: 1.3 
     140+        
     141+       * Incorporated Louis' changes in the distribution, with some 
     142+       rewriting to match my coding style and preference. Any bugs are 
     143+       mine. 
     144+ 
     145+Sat Aug 13 21:46:00 1995  Louis W. Erickson <loue@skylight.com> 
     146+ 
     147+       * Added the msgSetShowNameAlways function, allowing a forcing of 
     148+       the display of the app's name. 
     149+ 
     150+       * Added the msgSetXxxStream functions, allowing streams to be 
     151+       redirected to other things, besides the defaults. 
     152+ 
     153+       * Added some MSG_ constants. 
     154+ 
     155+       * Added code to allow use of an environmental variable as the 
     156+       verbosity level for msgVerbose.  Setting a verbosity of 
     157+       MSG_VERBOSE_DEFAULT enables this. 
     158+ 
     159+       * Wrote a rudimentary quick reference. 
     160+ 
     161+Fri Aug 11 00:25:34 1995  Sverre H. Huseby  <sverrehu@ender> 
     162+ 
     163+       * Version 1.2 
     164+ 
     165+       * Updated README and INSTALL a bit. 
     166+ 
     167+Sun Jul 16 17:49:52 1995  Sverre H. Huseby  <sverrehu@ender> 
     168+ 
     169+       * Flushing stdout before writing anything, to avoid order 
     170+       corruption if stderr equals stdout. The idea is taken from 
     171+       W. Richard Stevens. 
     172+ 
     173+       * verbose.c/shhmsg.h: Added a verbosity level instead of just 
     174+       on/off. 
     175+ 
     176+       * Makefile: using -f when symlinking shared libraries.  Changed 
     177+       version number to 1.1.  Added ChangeLog to the DISTFILES. 
     178diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/CREDITS msniff-0.2.0/shhmsg-1.4.1/CREDITS 
     179--- msniff-0.2.0.orig/shhmsg-1.4.1/CREDITS      1970-01-01 02:00:00.000000000 +0200 
     180+++ msniff-0.2.0/shhmsg-1.4.1/CREDITS   2002-03-02 17:19:58.000000000 +0200 
     181@@ -0,0 +1,4 @@ 
     182+Louis W. Erickson <loue@skylight.com> added both nice functionality 
     183+and documentation. See the ChangeLog file for details. 
     184+ 
     185+Oohara Yuuma <oohara@libra.interq.or.jp> fixed a couple of bugs. 
     186diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/errno.c msniff-0.2.0/shhmsg-1.4.1/errno.c 
     187--- msniff-0.2.0.orig/shhmsg-1.4.1/errno.c      1970-01-01 02:00:00.000000000 +0200 
     188+++ msniff-0.2.0/shhmsg-1.4.1/errno.c   2002-03-02 21:37:36.000000000 +0200 
     189@@ -0,0 +1,111 @@ 
     190+/* $Id: errno.c,v 1.6 2002/03/02 19:37:36 sverrehu Exp $ */ 
     191+/*------------------------------------------------------------------------ 
     192+ |  FILE            errno.c 
     193+ |  MODULE OF       shhmsg - library for displaying messages. 
     194+ | 
     195+ |  DESCRIPTION     The functions in this file, are for displaying errno- 
     196+ |                  dependant error messages. 
     197+ | 
     198+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     199+ +----------------------------------------------------------------------*/ 
     200+ 
     201+#include <stdio.h> 
     202+#include <stdlib.h> 
     203+#include <stdarg.h> 
     204+#include <string.h> 
     205+#include <errno.h> 
     206+ 
     207+#include "internal.h" 
     208+#include "shhmsg.h" 
     209+ 
     210+#ifndef HAVE_STRERROR 
     211+extern const char *const sys_errlist[]; 
     212+#define strerror(x) sys_errlist[x] 
     213+#endif 
     214+ 
     215+/*-----------------------------------------------------------------------+ 
     216+|  PUBLIC FUNCTIONS                                                      | 
     217++-----------------------------------------------------------------------*/ 
     218+ 
     219+/*------------------------------------------------------------------------ 
     220+ | 
     221+ |  NAME          msgPerror 
     222+ | 
     223+ |  FUNCTION      Show an errno-dependant error message. 
     224+ | 
     225+ |  SYNOPSIS      #include "shhmsg.h" 
     226+ |                void msgPerror(const char *format, ...); 
     227+ | 
     228+ |  INPUT         format, ... 
     229+ |                        Arguments used as with printf(). If NULL, 
     230+ |                        the name of the program is printed. 
     231+ | 
     232+ |  DESCRIPTION   Prints the given text followed by ": " and the 
     233+ |                correct errormessage on the _msgErrorStream. 
     234+ |               May add the program name before anything is printed. 
     235+ | 
     236+ |                If errno indicates "no error", nothing is printed. 
     237+ */ 
     238+void 
     239+msgPerror(const char *format, ...) 
     240+{ 
     241+    va_list ap; 
     242+    int en; 
     243+ 
     244+    if (!(en = errno)) 
     245+        return; 
     246+    fflush(stdout); 
     247+    if (format && *format) { 
     248+       if (_msgShowNameAlways) 
     249+           fprintf(GET_ERROR_STREAM, "%s: ", msgGetName()); 
     250+       va_start(ap, format); 
     251+       vfprintf(GET_ERROR_STREAM, format, ap); 
     252+       va_end(ap); 
     253+    } else 
     254+       fprintf(GET_ERROR_STREAM, msgGetName()); 
     255+    fprintf(GET_ERROR_STREAM, ": %s\n", strerror(en)); 
     256+} 
     257+ 
     258+/*------------------------------------------------------------------------ 
     259+ | 
     260+ |  NAME          msgFatalPerror 
     261+ | 
     262+ |  FUNCTION      Show an errno-dependant error message and abort the program. 
     263+ | 
     264+ |  SYNOPSIS      #include "shhmsg.h" 
     265+ |                void msgFatalPerror(const char *format, ...); 
     266+ | 
     267+ |  INPUT         format, ... 
     268+ |                        Arguments used as with printf(). If NULL, 
     269+ |                        the name of the program is printed. 
     270+ | 
     271+ |  RETURNS       Nothing, never returns. 
     272+ | 
     273+ |  DESCRIPTION   Prints the given text followed by ": " and the 
     274+ |                correct errormessage on the _msgErrorStream, and then 
     275+ |                aborts the program. 
     276+ |               May add the program name before anything is printed. 
     277+ | 
     278+ |                If errno indicates "no error", nothing is printed, 
     279+ |                and the program keeps running. 
     280+ */ 
     281+void 
     282+msgFatalPerror(const char *format, ...) 
     283+{ 
     284+    va_list ap; 
     285+    int en; 
     286+ 
     287+    if (!(en = errno)) 
     288+        return; 
     289+    fflush(stdout); 
     290+    if (format && *format) { 
     291+       if (_msgShowNameAlways) 
     292+           fprintf(GET_ERROR_STREAM, "%s: ", msgGetName()); 
     293+       va_start(ap, format); 
     294+       vfprintf(GET_ERROR_STREAM, format, ap); 
     295+       va_end(ap); 
     296+    } else 
     297+       fprintf(GET_ERROR_STREAM, msgGetName()); 
     298+    fprintf(GET_ERROR_STREAM, ": %s\n", strerror(en)); 
     299+    exit(99); 
     300+} 
     301diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/error.c msniff-0.2.0/shhmsg-1.4.1/error.c 
     302--- msniff-0.2.0.orig/shhmsg-1.4.1/error.c      1970-01-01 02:00:00.000000000 +0200 
     303+++ msniff-0.2.0/shhmsg-1.4.1/error.c   2002-03-02 21:37:36.000000000 +0200 
     304@@ -0,0 +1,46 @@ 
     305+/* $Id: error.c,v 1.6 2002/03/02 19:37:36 sverrehu Exp $ */ 
     306+/*------------------------------------------------------------------------ 
     307+ |  FILE            error.c 
     308+ |  MODULE OF       shhmsg - library for displaying messages. 
     309+ | 
     310+ |  DESCRIPTION     Function for displaying a simple error message. 
     311+ | 
     312+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     313+ +----------------------------------------------------------------------*/ 
     314+ 
     315+#include <stdio.h> 
     316+#include <stdarg.h> 
     317+ 
     318+#include "internal.h" 
     319+#include "shhmsg.h" 
     320+ 
     321+/*-----------------------------------------------------------------------+ 
     322+|  PUBLIC FUNCTIONS                                                      | 
     323++-----------------------------------------------------------------------*/ 
     324+ 
     325+/*------------------------------------------------------------------------ 
     326+ | 
     327+ |  NAME          msgError 
     328+ | 
     329+ |  FUNCTION      Show given message on the _msgErrorStream. 
     330+ | 
     331+ |  SYNOPSIS      #include "shhmsg.h" 
     332+ |                void msgError(const char *format, ...); 
     333+ | 
     334+ |  INPUT         format, ... 
     335+ |                        Arguments used as with printf(). 
     336+ | 
     337+ |  DESCRIPTION   Prints the name of this program followed by ": " and the 
     338+ |                given message on the _msgErrorStream. 
     339+ */ 
     340+void 
     341+msgError(const char *format, ...) 
     342+{ 
     343+    va_list ap; 
     344+ 
     345+    fflush(stdout); 
     346+    fprintf(GET_ERROR_STREAM, "%s: ", msgGetName()); 
     347+    va_start(ap, format); 
     348+    vfprintf(GET_ERROR_STREAM, format, ap); 
     349+    va_end(ap); 
     350+} 
     351diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/fatal.c msniff-0.2.0/shhmsg-1.4.1/fatal.c 
     352--- msniff-0.2.0.orig/shhmsg-1.4.1/fatal.c      1970-01-01 02:00:00.000000000 +0200 
     353+++ msniff-0.2.0/shhmsg-1.4.1/fatal.c   2002-03-02 21:37:36.000000000 +0200 
     354@@ -0,0 +1,52 @@ 
     355+/* $Id: fatal.c,v 1.6 2002/03/02 19:37:36 sverrehu Exp $ */ 
     356+/*------------------------------------------------------------------------ 
     357+ |  FILE            fatal.c 
     358+ |  MODULE OF       shhmsg - library for displaying messages. 
     359+ | 
     360+ |  DESCRIPTION     Function for displaying an error message and 
     361+ |                  abort the program. 
     362+ | 
     363+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     364+ +----------------------------------------------------------------------*/ 
     365+ 
     366+#include <stdio.h> 
     367+#include <stdlib.h> 
     368+#include <stdarg.h> 
     369+ 
     370+#include "internal.h" 
     371+#include "shhmsg.h" 
     372+ 
     373+/*-----------------------------------------------------------------------+ 
     374+|  PUBLIC FUNCTIONS                                                      | 
     375++-----------------------------------------------------------------------*/ 
     376+ 
     377+/*------------------------------------------------------------------------ 
     378+ | 
     379+ |  NAME          msgFatal 
     380+ | 
     381+ |  FUNCTION      Show given message and abort the program. 
     382+ | 
     383+ |  SYNOPSIS      #include "shhmsg.h" 
     384+ |                void msgFatal(const char *format, ...); 
     385+ | 
     386+ |  INPUT         format, ... 
     387+ |                        Arguments used as with printf(). 
     388+ | 
     389+ |  RETURNS       Never returns. The program is aborted. 
     390+ | 
     391+ |  DESCRIPTION   Prints the name of this program followed by ": " and 
     392+ |                the given message on the _msgErrorStream, then aborts 
     393+ |                the program. 
     394+ */ 
     395+void 
     396+msgFatal(const char *format, ...) 
     397+{ 
     398+    va_list ap; 
     399+ 
     400+    fflush(stdout); 
     401+    fprintf(GET_ERROR_STREAM, "%s: ", msgGetName()); 
     402+    va_start(ap, format); 
     403+    vfprintf(GET_ERROR_STREAM, format, ap); 
     404+    va_end(ap); 
     405+    exit(99); 
     406+} 
     407diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/INSTALL msniff-0.2.0/shhmsg-1.4.1/INSTALL 
     408--- msniff-0.2.0.orig/shhmsg-1.4.1/INSTALL      1970-01-01 02:00:00.000000000 +0200 
     409+++ msniff-0.2.0/shhmsg-1.4.1/INSTALL   2002-03-02 21:37:59.000000000 +0200 
     410@@ -0,0 +1,25 @@ 
     411+Installing shhmsg 
     412+================= 
     413+ 
     414+If you don't have gcc, you'll have to edit the Makefile. If your 
     415+compiler is not ANSI, you'll have to change all files. 
     416+ 
     417+  1. Check the Makefile.  In particular, if you run Linux with ELF, 
     418+     you may want to make a shared library (search for SHARED). 
     419+ 
     420+  2. Build the library 
     421+ 
     422+       make dep 
     423+       make 
     424+ 
     425+  3. Install library and header file 
     426+ 
     427+       make install 
     428+ 
     429+By default, the library will be installed in /usr/local/lib, and the 
     430+header file in /usr/local/include. 
     431+ 
     432+ 
     433+If you happen to know how to make one of those fancy configure files, 
     434+and feel like making one for this library, please do so and send the 
     435+files to me (contact info in the README file). 
     436diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/internal.h msniff-0.2.0/shhmsg-1.4.1/internal.h 
     437--- msniff-0.2.0.orig/shhmsg-1.4.1/internal.h   1970-01-01 02:00:00.000000000 +0200 
     438+++ msniff-0.2.0/shhmsg-1.4.1/internal.h        2002-03-02 21:37:36.000000000 +0200 
     439@@ -0,0 +1,31 @@ 
     440+/* $Id: internal.h,v 1.4 2002/03/02 19:37:36 sverrehu Exp $ */ 
     441+#ifndef INTERNAL_SHHMSG_H 
     442+#define INTERNAL_SHHMSG_H 
     443+ 
     444+#include <stdio.h>  /* FILE */ 
     445+ 
     446+/* streams for error messages, verbose messages, and general messages. */ 
     447+#define MSG_DEFAULT_ERROR_STREAM stderr 
     448+#define MSG_DEFAULT_VERBOSE_STREAM stderr 
     449+#define MSG_DEFAULT_MESSAGE_STREAM stdout 
     450+ 
     451+extern FILE *_msgErrorStream; 
     452+extern FILE *_msgVerboseStream; 
     453+extern FILE *_msgMessageStream; 
     454+ 
     455+#define GET_ERROR_STREAM \ 
     456+    ((_msgErrorStream == NULL) \ 
     457+        ? MSG_DEFAULT_ERROR_STREAM \ 
     458+        : _msgErrorStream) 
     459+#define GET_VERBOSE_STREAM \ 
     460+    ((_msgVerboseStream == NULL) \ 
     461+        ? MSG_DEFAULT_VERBOSE_STREAM \ 
     462+        : _msgVerboseStream) 
     463+#define GET_MESSAGE_STREAM \ 
     464+    ((_msgMessageStream == NULL) \ 
     465+        ? MSG_DEFAULT_MESSAGE_STREAM \ 
     466+        : _msgMessageStream) 
     467+ 
     468+extern int _msgShowNameAlways; 
     469+ 
     470+#endif 
     471diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/Makefile msniff-0.2.0/shhmsg-1.4.1/Makefile 
     472--- msniff-0.2.0.orig/shhmsg-1.4.1/Makefile     1970-01-01 02:00:00.000000000 +0200 
     473+++ msniff-0.2.0/shhmsg-1.4.1/Makefile  2007-07-22 21:16:29.000000000 +0300 
     474@@ -0,0 +1,109 @@ 
     475+# $Id: Makefile,v 1.12 2002/03/02 19:37:36 sverrehu Exp $ 
     476+DIST           = shhmsg 
     477+VERMAJ         = 1 
     478+VERMIN         = 4 
     479+VERPAT         = 1 
     480+VERSION                = $(VERMAJ).$(VERMIN).$(VERPAT) 
     481+ 
     482+# Define SHARED as 1 for Linux shared ELF library 
     483+#SHARED                = 1 
     484+ 
     485+ifeq ($(SHARED),1) 
     486+LIBTARGET      = lib$(DIST).so.$(VERSION) 
     487+LIBTARGETSO    = lib$(DIST).so 
     488+LIBTARGETSOMAJ = $(LIBTARGETSO).$(VERMAJ) 
     489+CCSHRD         = -fPIC 
     490+else 
     491+LIBTARGET      = lib$(DIST).a 
     492+endif 
     493+ 
     494+LIBHEAD                = $(DIST).h 
     495+TARGETS                = $(LIBTARGET) 
     496+ 
     497+INSTBASEDIR    = /usr/local 
     498+INSTLIBDIR     = $(INSTBASEDIR)/lib 
     499+INSTINCDIR     = $(INSTBASEDIR)/include 
     500+INSTALL                = install -m 644 
     501+INSTALLPROG    = install -m 755 
     502+MKDIRP         = install -d -m 755 
     503+ 
     504+CC             = $(GCC) 
     505+OPTIM          = -O2 
     506+ 
     507+INCDIR         = -I. 
     508+ 
     509+#CCOPT         = -s -Wall $(OPTIM) $(INCDIR) -DHAVE_STRERROR 
     510+ 
     511+# Object files to store in the library 
     512+LIBOBJS                = vars.o streams.o progname.o \ 
     513+                 errno.o error.o fatal.o message.o verbose.o 
     514+ 
     515+ 
     516+all: $(TARGETS) 
     517+ 
     518+$(LIBTARGET): $(LIBOBJS) 
     519+ifeq ($(SHARED),1) 
     520+       $(CC) -shared -Wl,-soname,$(LIBTARGETSOMAJ) -o $(LIBTARGET) $(LIBOBJS) 
     521+else 
     522+       ar rcs $(LIBTARGET) $(LIBOBJS) 
     523+endif 
     524+ 
     525+.c.o: 
     526+       $(CC) $(CCSHRD) -o $@ -c $(CCOPT) $< 
     527+ 
     528+depend dep: 
     529+       $(CC) $(INCDIR) -MM *.c >depend 
     530+ 
     531+install: $(LIBTARGET) 
     532+       $(MKDIRP) $(INSTLIBDIR) $(INSTINCDIR) 
     533+       $(INSTALL) $(LIBTARGET) $(INSTLIBDIR) 
     534+       $(INSTALL) $(LIBHEAD) $(INSTINCDIR) 
     535+ifeq ($(SHARED),1) 
     536+       ln -sf $(LIBTARGET) $(INSTLIBDIR)/$(LIBTARGETSOMAJ) 
     537+       ln -sf $(LIBTARGETSOMAJ) $(INSTLIBDIR)/$(LIBTARGETSO) 
     538+       echo "Now run ldconfig if necessary." 
     539+endif 
     540+ 
     541+clean: 
     542+       rm -f *.o core *~ depend 
     543+ 
     544+chmod: 
     545+       chmod a+r * 
     546+ 
     547+# To let the author make a distribution. The rest of the Makefile 
     548+# should be used by the author only. 
     549+LSMFILE                = $(DIST)-$(VERSION).lsm 
     550+DISTDIR                = $(DIST)-$(VERSION) 
     551+DISTFILE       = $(DIST)-$(VERSION).tar.gz 
     552+DISTFILES      = README INSTALL shhmsg.txt CREDITS ChangeLog \ 
     553+                 Makefile $(LSMFILE) \ 
     554+                 $(LIBHEAD) \ 
     555+                 internal.h \ 
     556+                 errno.c \ 
     557+                 error.c \ 
     558+                 fatal.c \ 
     559+                 message.c \ 
     560+                 progname.c \ 
     561+                 streams.c \ 
     562+                 vars.c \ 
     563+                 verbose.c 
     564+ 
     565+$(LSMFILE): $(DIST).lsm.in 
     566+       VER=$(VERSION); \ 
     567+       DATE=`date "+%d%b%y"|tr '[a-z]' '[A-Z]'`; \ 
     568+       sed -e "s/VER/$$VER/g;s/DATE/$$DATE/g" $(DIST).lsm.in > $(LSMFILE) 
     569+ 
     570+veryclean: clean 
     571+       rm -f $(TARGETS) $(DISTFILE) $(LSMFILE) 
     572+ 
     573+dist: $(LSMFILE) chmod 
     574+       mkdir $(DISTDIR) 
     575+       chmod a+rx $(DISTDIR) 
     576+       ln $(DISTFILES) $(DISTDIR) 
     577+       tar -cvzf $(DISTFILE) $(DISTDIR) 
     578+       chmod a+r $(DISTFILE) 
     579+       rm -rf $(DISTDIR) 
     580+ 
     581+ifeq (depend,$(wildcard depend)) 
     582+include depend 
     583+endif 
     584diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/message.c msniff-0.2.0/shhmsg-1.4.1/message.c 
     585--- msniff-0.2.0.orig/shhmsg-1.4.1/message.c    1970-01-01 02:00:00.000000000 +0200 
     586+++ msniff-0.2.0/shhmsg-1.4.1/message.c 2002-03-02 21:37:36.000000000 +0200 
     587@@ -0,0 +1,78 @@ 
     588+/* $Id: message.c,v 1.6 2002/03/02 19:37:36 sverrehu Exp $ */ 
     589+/*------------------------------------------------------------------------ 
     590+ |  FILE            message.c 
     591+ |  MODULE OF       shhmsg - library for displaying messages. 
     592+ | 
     593+ |  DESCRIPTION     Routines for displaying messages unless "quiet mode" 
     594+ |                  is on. 
     595+ | 
     596+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     597+ +----------------------------------------------------------------------*/ 
     598+ 
     599+#include <stdio.h> 
     600+#include <stdarg.h> 
     601+ 
     602+#include "internal.h" 
     603+#include "shhmsg.h" 
     604+ 
     605+/*-----------------------------------------------------------------------+ 
     606+|  PUBLIC DATA                                                           | 
     607++-----------------------------------------------------------------------*/ 
     608+ 
     609+int msgBeQuiet = 0;             /* supress everything from msgMessage() ? */ 
     610+ 
     611+/*-----------------------------------------------------------------------+ 
     612+|  PUBLIC FUNCTIONS                                                      | 
     613++-----------------------------------------------------------------------*/ 
     614+ 
     615+/*------------------------------------------------------------------------ 
     616+ | 
     617+ |  NAME          msgSetQuiet 
     618+ | 
     619+ |  FUNCTION      Decide whether msgMessage() should display anything. 
     620+ | 
     621+ |  SYNOPSIS      #include "shhmsg.h" 
     622+ |                void msgSetQuiet(int onoff); 
     623+ | 
     624+ |  INPUT         onoff   1 to disable all messages, 0 to enable. 
     625+ | 
     626+ |  DESCRIPTION   Used in conjunction with the msgMessage() function. 
     627+ |                Note that changing the msgBeQuiet-variable directly 
     628+ |                is fully legal. 
     629+ */ 
     630+void 
     631+msgSetQuiet(int onoff) 
     632+{ 
     633+    msgBeQuiet = onoff; 
     634+} 
     635+ 
     636+/*------------------------------------------------------------------------ 
     637+ | 
     638+ |  NAME          msgMessage 
     639+ | 
     640+ |  FUNCTION      Show given message unless quiet mode is on. 
     641+ | 
     642+ |  SYNOPSIS      #include "shhmsg.h" 
     643+ |                void msgMessage(const char *format, ...); 
     644+ | 
     645+ |  INPUT         format, ... 
     646+ |                        Arguments used as with printf(). 
     647+ | 
     648+ |  DESCRIPTION   If msgSetQuiet(0) has been called, the given message is 
     649+ |                displayed on the _msgMessageStream. If msgSetQuiet(1) 
     650+ |                has been called, this function just returns. 
     651+ */ 
     652+void 
     653+msgMessage(const char *format, ...) 
     654+{ 
     655+    va_list ap; 
     656+ 
     657+    if (msgBeQuiet) 
     658+        return; 
     659+    fflush(stdout); 
     660+    if (_msgShowNameAlways) 
     661+       fprintf(GET_MESSAGE_STREAM, "%s: ", msgGetName()); 
     662+    va_start(ap, format); 
     663+    vfprintf(GET_MESSAGE_STREAM, format, ap); 
     664+    va_end(ap); 
     665+} 
     666diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/progname.c msniff-0.2.0/shhmsg-1.4.1/progname.c 
     667--- msniff-0.2.0.orig/shhmsg-1.4.1/progname.c   1970-01-01 02:00:00.000000000 +0200 
     668+++ msniff-0.2.0/shhmsg-1.4.1/progname.c        2002-03-02 21:37:36.000000000 +0200 
     669@@ -0,0 +1,121 @@ 
     670+/* $Id: progname.c,v 1.5 2002/03/02 19:37:36 sverrehu Exp $ */ 
     671+/*------------------------------------------------------------------------ 
     672+ |  FILE            progname.c 
     673+ |  MODULE OF       shhmsg - library for displaying messages. 
     674+ | 
     675+ |  DESCRIPTION     Routines for handling the name of the program. 
     676+ |                  This is used when displaying error messages, 
     677+ |                  according to the Unix tradition. 
     678+ | 
     679+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     680+ +----------------------------------------------------------------------*/ 
     681+ 
     682+#include <string.h> 
     683+ 
     684+#include "internal.h" 
     685+#include "shhmsg.h" 
     686+ 
     687+/*-----------------------------------------------------------------------+ 
     688+|  PRIVATE DATA                                                          | 
     689++-----------------------------------------------------------------------*/ 
     690+ 
     691+static char *Argv0 = NULL;      /* the name of the program. */ 
     692+ 
     693+/*-----------------------------------------------------------------------+ 
     694+|  PUBLIC DATA                                                           | 
     695++-----------------------------------------------------------------------*/ 
     696+ 
     697+int _msgShowNameAlways = 0;     /* show program name always */ 
     698+ 
     699+/*-----------------------------------------------------------------------+ 
     700+|  PUBLIC FUNCTIONS                                                      | 
     701++-----------------------------------------------------------------------*/ 
     702+ 
     703+/*------------------------------------------------------------------------ 
     704+ | 
     705+ |  NAME          msgSetName 
     706+ | 
     707+ |  FUNCTION      Specify the name of this program (from argv[0]). 
     708+ | 
     709+ |  SYNOPSIS      #include "shhmsg.h" 
     710+ |                void msgSetName(const char *name); 
     711+ | 
     712+ |  INPUT         name   Name of this program, possibly including path. 
     713+ | 
     714+ |  DESCRIPTION   The program name specified is used by the errorfunctions 
     715+ |                to identify this program. 
     716+ */ 
     717+void 
     718+msgSetName(const char *name) 
     719+{ 
     720+    Argv0 = (char *) name; 
     721+} 
     722+ 
     723+/*------------------------------------------------------------------------ 
     724+ | 
     725+ |  NAME          msgGetName 
     726+ | 
     727+ |  FUNCTION      Return the name of this program. 
     728+ | 
     729+ |  SYNOPSIS      #include "shhmsg.h" 
     730+ |                char *msgGetName(void); 
     731+ | 
     732+ |  RETURNS       Pointer to the name of this program, without any path. 
     733+ | 
     734+ |  DESCRIPTION   The name depends on the string passed to msgSetName(). 
     735+ */ 
     736+char * 
     737+msgGetName(void) 
     738+{ 
     739+    char *ret; 
     740+ 
     741+  #ifdef __MSDOS__ 
     742+    static char name[15]; 
     743+    #define PATHSEP '\\' 
     744+  #else 
     745+    #define PATHSEP '/' 
     746+  #endif 
     747+ 
     748+    if (!Argv0) 
     749+        return("!!!"); 
     750+ 
     751+  #ifdef __MSDOS__ 
     752+    if ((ret = strrchr(Argv0, PATHSEP)) == NULL) 
     753+        ret = Argv0; 
     754+    else 
     755+        ++ret; 
     756+    strcpy(name, ret); 
     757+    if ((ret = strchr(name, '.')) != NULL) 
     758+        *ret = '\0'; 
     759+    strlwr(name); 
     760+    ret = name; 
     761+ 
     762+  #else 
     763+    if ((ret = strrchr(Argv0, PATHSEP)) == NULL) 
     764+        ret = Argv0; 
     765+    else 
     766+        ++ret; 
     767+  #endif 
     768+ 
     769+    return ret; 
     770+} 
     771+ 
     772+/*------------------------------------------------------------------------ 
     773+ | 
     774+ |  NAME          msgSetShowNameAlways 
     775+ | 
     776+ |  FUNCTION      Enable or disable the name of the program in all output. 
     777+ | 
     778+ |  SYNOPSIS      #include "shhmsg.h" 
     779+ |                void msgSetShowNameAlways(int onoff); 
     780+ | 
     781+ |  INPUT         onoff   1 or 0, 1 to show name always. 
     782+ | 
     783+ |  DESCRIPTION   This enables or disables the forcing of the name to show 
     784+ |                in all output. 
     785+ */ 
     786+void 
     787+msgSetShowNameAlways(int onoff) 
     788+{ 
     789+    _msgShowNameAlways = onoff; 
     790+} 
     791diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/README msniff-0.2.0/shhmsg-1.4.1/README 
     792--- msniff-0.2.0.orig/shhmsg-1.4.1/README       1970-01-01 02:00:00.000000000 +0200 
     793+++ msniff-0.2.0/shhmsg-1.4.1/README    2002-03-02 21:25:24.000000000 +0200 
     794@@ -0,0 +1,94 @@ 
     795+shhmsg - library for displaying messages. 
     796+========================================= 
     797+ 
     798+This is a set of functions for very simple message handling in 
     799+terminal based programs.  To use these in your own programs, include 
     800+shhmsg.h, and link with the library.  You should also call the 
     801+function msgSetName at startup, to indicate what program 
     802+identification should be used in the error messages. 
     803+ 
     804+Most functions accept printf-like variable arguments. 
     805+ 
     806+ 
     807+Overview of files 
     808+----------------- 
     809+ 
     810+What follows is a brief overview.  Please refer to the C source files 
     811+for detailed descriptions.  There are no manual pages yet, and 
     812+probably will never be, unless someone writes them for me. 
     813+ 
     814+errno.c 
     815+       Functions for displaying messages depending on the current 
     816+       errno-value.   
     817+ 
     818+error.c 
     819+       Non-fatal (non-aborting) error message function. 
     820+ 
     821+fatal.c 
     822+       Fatal error message function.  Aborts the program. 
     823+ 
     824+message.c 
     825+       The function in this file works quite like printf, but it is 
     826+       possible to make this function silent by setting a flag. 
     827+ 
     828+progname.c 
     829+       For setting the name of the program.  This name is used in 
     830+       error messages, in the traditional Unix-ish way. 
     831+ 
     832+streams.c 
     833+       Handles the reassignment of streams, so that the functions can 
     834+       output to any user defined file stream. 
     835+ 
     836+verbose.c 
     837+       printf-like function that takes an additional parmeter 
     838+       specifying verbosity level of the message.  This lets the user 
     839+       filter less interresting messages. 
     840+ 
     841+ 
     842+Documentation 
     843+------------- 
     844+ 
     845+The file shhmsg.txt (contributed by Louis W. Erickson) describes the 
     846+use of the library. 
     847+ 
     848+ 
     849+Portability 
     850+----------- 
     851+ 
     852+The library has (more or less recently) been compiled and `tested' on 
     853+the following systems: 
     854+ 
     855+       IRIX Release 5.2 IP22 
     856+       GNU/Linux 2.4.17 with glibc 2.2.5 
     857+       SunOS Release 4.1.3_U1 
     858+       ULTRIX V4.4 (Rev.  69) 
     859+ 
     860+All compilations were done using GNU's gcc, and GNU's make. 
     861+ 
     862+ 
     863+Author 
     864+------ 
     865+ 
     866+The program is written by 
     867+ 
     868+        Sverre H. Huseby        shh@thathost.com 
     869+        Lofthusvn. 11 B         http://shh.thathost.com/ 
     870+        N-0587 Oslo 
     871+        Norway 
     872+ 
     873+ 
     874+License 
     875+------- 
     876+ 
     877+This program is released under the Artistic License: 
     878+ 
     879+  http://www.opensource.org/licenses/artistic-license.html 
     880+ 
     881+Comments (even as simple as "I use your program") are very welcome. 
     882+If you insist on paying something, please donate some money to an 
     883+organization that strives to make the world a better place for 
     884+everyone. 
     885+ 
     886+I don't like bugs, so please help me removing them by reporting 
     887+whatever you find! 
     888+ 
     889diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/shhmsg-1.4.1.lsm msniff-0.2.0/shhmsg-1.4.1/shhmsg-1.4.1.lsm 
     890--- msniff-0.2.0.orig/shhmsg-1.4.1/shhmsg-1.4.1.lsm     1970-01-01 02:00:00.000000000 +0200 
     891+++ msniff-0.2.0/shhmsg-1.4.1/shhmsg-1.4.1.lsm  2002-03-02 21:39:02.000000000 +0200 
     892@@ -0,0 +1,13 @@ 
     893+Begin3 
     894+Title:         shhmsg - library for displaying messages. 
     895+Version:       1.4.1 
     896+Entered-date:  02MAR02 
     897+Description:   C-functions for error messages, verbose messages and 
     898+                `normal' messages in terminalbased programs. 
     899+Keywords:      programming, library, lib, message, error 
     900+Author:        shh@thathost.com (Sverre H. Huseby) 
     901+Primary-site:  http://shh.thathost.com/pub-unix/ 
     902+Platforms:     Requires ANSI C-compiler. 
     903+Copying-policy:        Artistic License 
     904+               http://www.opensource.org/licenses/artistic-license.html 
     905+End 
     906diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/shhmsg.h msniff-0.2.0/shhmsg-1.4.1/shhmsg.h 
     907--- msniff-0.2.0.orig/shhmsg-1.4.1/shhmsg.h     1970-01-01 02:00:00.000000000 +0200 
     908+++ msniff-0.2.0/shhmsg-1.4.1/shhmsg.h  2002-03-02 17:19:58.000000000 +0200 
     909@@ -0,0 +1,63 @@ 
     910+/* $Id: shhmsg.h,v 1.5 1997/05/27 21:11:06 sverrehu Exp $ */ 
     911+#ifndef SHHMSG_H 
     912+#define SHHMSG_H 
     913+ 
     914+#include <stdio.h> /* FILE */ 
     915+ 
     916+#ifdef __cplusplus 
     917+extern "C" { 
     918+#endif 
     919+ 
     920+#ifdef __GNUC__ 
     921+#define MSG_NORET __attribute__ ((noreturn)) 
     922+#define MSG_FORMAT_1 __attribute__ ((format (printf, 1, 2))) 
     923+#define MSG_FORMAT_2 __attribute__ ((format (printf, 2, 3))) 
     924+#else 
     925+#define MSG_NORET 
     926+#define MSG_FORMAT_1 
     927+#define MSG_FORMAT_2 
     928+#endif 
     929+ 
     930+/* program name functions */ 
     931+void msgSetName(const char *s); 
     932+char *msgGetName(void); 
     933+ 
     934+/* error functions */ 
     935+void msgError(const char *format, ...) MSG_FORMAT_1 ; 
     936+void msgFatal(const char *format, ...) MSG_FORMAT_1 MSG_NORET ; 
     937+void msgPerror(const char *format, ...) MSG_FORMAT_1 ; 
     938+void msgFatalPerror(const char *format, ...) MSG_FORMAT_1 ; 
     939+ 
     940+/* message output functions */ 
     941+void msgMessage(const char *format, ...) MSG_FORMAT_1 ; 
     942+void msgVerbose(int level, const char *format, ...) MSG_FORMAT_2 ; 
     943+ 
     944+/* output control functions */ 
     945+void msgSetQuiet(int onoff); 
     946+void msgSetVerbose(int level); 
     947+void msgSetShowNameAlways(int onoff); 
     948+FILE *msgSetErrorStream(FILE *f); 
     949+FILE *msgSetVerboseStream(FILE *f); 
     950+FILE *msgSetMessageStream(FILE *f); 
     951+ 
     952+/* constants */ 
     953+#define MSG_VERBOSE_DEFAULT -1 
     954+#define MSG_VERBOSE_NONE     0 
     955+#define MSG_ON               1 
     956+#define MSG_OFF              0 
     957+#define MSG_QUIET            1 
     958+#define MSG_OUTPUT           0 
     959+ 
     960+/* variables that may be changed */ 
     961+extern int msgVerboseLevel; 
     962+extern int msgBeQuiet; 
     963+ 
     964+#undef MSG_NORET 
     965+#undef MSG_FORMAT_1 
     966+#undef MSG_FORMAT_2 
     967+ 
     968+#ifdef __cplusplus 
     969+} 
     970+#endif 
     971+ 
     972+#endif 
     973diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/shhmsg.txt msniff-0.2.0/shhmsg-1.4.1/shhmsg.txt 
     974--- msniff-0.2.0.orig/shhmsg-1.4.1/shhmsg.txt   1970-01-01 02:00:00.000000000 +0200 
     975+++ msniff-0.2.0/shhmsg-1.4.1/shhmsg.txt        2002-03-02 21:37:23.000000000 +0200 
     976@@ -0,0 +1,316 @@ 
     977+                      [Thanks to Louis W.  Erickson for contributing this file] 
     978+------------------------------------------------------------------------------ 
     979+ 
     980+INTRODUCTION: 
     981+ 
     982+This is a quick overview of all the functions included in this 
     983+library, with all their inputs and return values listed and defined in 
     984+one place, so you don't need to refer to the header and/or the sources 
     985+as much. 
     986+ 
     987+------------------------------------------------------------------------------ 
     988+ 
     989+USING THE LIBRARY: 
     990+ 
     991+Before calling the library, make and install it.  Include shhmsg.h in 
     992+every module that will make calls to the library.  You probably also 
     993+want to set the application name before using the output functions. 
     994+See msgSetName, below. 
     995+ 
     996+link with the library like so: 
     997+ 
     998+    cc foo.c -o foo -lshhmsg 
     999+ 
     1000+or, include it directly, if it's not in the system path: 
     1001+ 
     1002+    cc bar.c -o bar libshhmsg.a 
     1003+ 
     1004+------------------------------------------------------------------------------ 
     1005+ 
     1006+A word about streams: 
     1007+ 
     1008+This library uses three file streams.  One is used for error messages, 
     1009+one for informational messages, and one for verbose messages.  These 
     1010+normally default to stderr, stdout, and stderr, respectively.  They 
     1011+can, however be easily changed, by calling the stream management 
     1012+functions, and set to any stream the caller likes, including stdout, 
     1013+stderr, opened pipes, open files, an open to /dev/console, whatever. 
     1014+The documents refer to them as the "error stream", the "message 
     1015+stream", and the "verbose stream".  These names have nothing to do 
     1016+with what stream they may be actually pointing to. 
     1017+ 
     1018+------------------------------------------------------------------------------ 
     1019+ 
     1020+Controlling the library: 
     1021+ 
     1022+There is one initialization function, and several control functions. 
     1023+ 
     1024+------------------------------------------------------------------------------ 
     1025+ 
     1026+FUNCTION: void msgSetName(const char *s); 
     1027+ 
     1028+DESCRIPTION: 
     1029+ 
     1030+Call msgSetName with the name of the application as the parameter. 
     1031+Note that argv[0] is a perfectly valid (perhaps encouraged) place to 
     1032+get this, and all preceding path information to the program name will 
     1033+be stripped off before it is displayed. 
     1034+ 
     1035+SAMPLE: 
     1036+ 
     1037+    msgSetName(argv[0]); 
     1038+ 
     1039+========================== 
     1040+ 
     1041+FUNCTION: void msgSetQuiet(int onoff); 
     1042+ 
     1043+DESCRIPTION: 
     1044+ 
     1045+This function sets an internal flag with whatever you pass in.  It 
     1046+controls the behavior of msgMessage (see below).  A non-zero will 
     1047+silence msgMessage, and a zero value will make it produce output. 
     1048+ 
     1049+You can use the constants MSG_QUIET and MSG_OUTPUT, defined in the 
     1050+header file, if you want, or 0 or 1, or whatever. 
     1051+ 
     1052+SAMPLE: 
     1053+ 
     1054+    msgSetQuiet(MSG_OFF); 
     1055+ 
     1056+========================== 
     1057+ 
     1058+FUNCTION: void msgSetVerbose(int level); 
     1059+ 
     1060+DESCRIPTION: 
     1061+ 
     1062+This function controls what calls to the msgVerbose function occur. 
     1063+If the first parameter to that function is greater than the currently 
     1064+set level, the function produces output.  If you call this function 
     1065+from code, the value of what you pass becomes the currently set level. 
     1066+ 
     1067+If you pass MSG_VERBOSE_NONE, all calls to msgVerbose will produce no 
     1068+output, quieting your program a great deal. 
     1069+ 
     1070+The default value is MSG_VERBOSE_DEFAULT.  It has special behavior. 
     1071+If you do not call msgSetVerbose, or you call it with 
     1072+MSG_VERBOSE_DEFAULT, then the current verbosity level is read from an 
     1073+environmental variable.  The variable is based on the name set with 
     1074+msgSetName.  The program takes the first ten bytes, forces everything 
     1075+to upper case, and appends "_LEVEL" to it to make the name.  You can 
     1076+set this variable (export it if you're using bash or sh) and then the 
     1077+program will produce that much output.  Notice that this is a numeric 
     1078+value of -1, so all prompts will be suppressed if there is none set. 
     1079+Spaces in the name are NOT affected, and must be part of the 
     1080+environmental variable's name. 
     1081+ 
     1082+NOTE: Because the special values used to control the extended behavior 
     1083+are negative numbers, the user of negative levels is not recommended. 
     1084+Levels from 0 to MAX_INT should be ok. 
     1085+ 
     1086+SAMPLE: 
     1087+ 
     1088+    msgSetVerbose(2); 
     1089+ 
     1090+-or- 
     1091+ 
     1092+    msgSetVerbose(MSG_VERBOSE_DEFAULT); 
     1093+ 
     1094+========================== 
     1095+ 
     1096+FUNCTION: void msgSetShowNameAlways(int onoff) 
     1097+ 
     1098+DESCRIPTION: 
     1099+ 
     1100+Some of the functions in the library prepend the name of the 
     1101+application set with msgSetName to the strings they output.  Some 
     1102+functions do this SOMETIMES.  Calling this with a non-zero parameter 
     1103+will make ALL of the functions in the library do this.  Calling it 
     1104+with a 0 will return the default behavior.  When using this as a debug 
     1105+engine, having the name prepended is useful.  The default value is 
     1106+"off". 
     1107+ 
     1108+There are predefined constants, MSG_ON and MSG_OFF in the header file, 
     1109+if you want to use them. 
     1110+ 
     1111+SAMPLE: 
     1112+ 
     1113+    msgSetShowNameAlways(MSG_ON); 
     1114+ 
     1115+========================== 
     1116+ 
     1117+FUNCTION: FILE *msgSetErrorStream(FILE *f) 
     1118+ 
     1119+DESCRIPTION: 
     1120+ 
     1121+This function sets the file stream that the error functions (msgError, 
     1122+msgFatal, msgPerror, and msgFatalPerror) output to.  The return value 
     1123+is the old stream that was in use (to be closed, if needed).  No 
     1124+opening or closing of these streams is performed by the library. 
     1125+ 
     1126+Passing in NULL will return the library to it's default value (stderr) 
     1127+and return you the steam currently in use. 
     1128+ 
     1129+SAMPLE: 
     1130+ 
     1131+    FILE *fl; 
     1132+    fl = fopen("/dev/console", "w"); 
     1133+    msgSetErrorStream(fl); 
     1134+    ... 
     1135+    fclose(msgSetErrorStream(NULL)); 
     1136+ 
     1137+========================== 
     1138+ 
     1139+FUNCTION: FILE *msgSetMessageStream(FILE *f); 
     1140+ 
     1141+DESCRIPTION: 
     1142+ 
     1143+This function controls the stream that msgMessage outputs to.  It 
     1144+normally uses stdout, but this can be changed to anything you want. 
     1145+The library does no opening or closing of this stream, the application 
     1146+must do this. 
     1147+ 
     1148+Passing in a NULL returns the library to the default of stdout, and 
     1149+returns the current stream in use. 
     1150+ 
     1151+SAMPLE: 
     1152+ 
     1153+    FILE *fl; 
     1154+    fl = fopen("output", "w"); 
     1155+    msgSetMessageStream(fl); 
     1156+    ... 
     1157+    fclose(msgSetMessageStream(NULL)); 
     1158+ 
     1159+========================== 
     1160+ 
     1161+FUNCTION: FILE *msgSetVerboseStream(FILE *f); 
     1162+ 
     1163+DESCRIPTION: 
     1164+ 
     1165+This function controls what stream the msgVerbose function outputs to. 
     1166+The default value is stderr.  The library does no opening or closing 
     1167+of this file. 
     1168+ 
     1169+Passing in a NULL restores the library to the default of stderr, and 
     1170+returns the value currently in use. 
     1171+ 
     1172+SAMPLE: 
     1173+ 
     1174+    FILE *fl; 
     1175+    fl = fopen("output", "w"); 
     1176+    msgSetVerboseStream(fl); 
     1177+    ... 
     1178+    fclose(msgSetVerboseStream(NULL)); 
     1179+ 
     1180+------------------------------------------------------------------------------ 
     1181+ 
     1182+Using the library to report errors: 
     1183+ 
     1184+FUNCTION: void msgError(const char *format, ...) 
     1185+ 
     1186+DESCRIPTION: 
     1187+ 
     1188+Pass msgError printf-like arguments, and it will print the name of the 
     1189+program, followed by ": ", then your passed in arguments to whatever 
     1190+the error stream is set to. 
     1191+ 
     1192+SAMPLE: 
     1193+ 
     1194+    msgError("you need to have more than %d things!\n", iThings); 
     1195+ 
     1196+========================== 
     1197+ 
     1198+FUNCTION: void msgFatal(const char *fmt, ...) 
     1199+ 
     1200+DESCRIPTION: 
     1201+ 
     1202+This function, called with printf-like arguments, will print the name 
     1203+of the program, a ": ", then your output, to whatever the error stream 
     1204+is set to.  It will then exit the running program, with an exit code 
     1205+of 99. 
     1206+ 
     1207+SAMPLE: 
     1208+ 
     1209+    msgFatal("cannot open: %s\n", szFileName); 
     1210+ 
     1211+========================== 
     1212+ 
     1213+FUNCTION: void msgPerror(const char *fmt, ...) 
     1214+ 
     1215+DESCRIPTION: 
     1216+ 
     1217+msgPerror, named for the C library call perror, will print out your 
     1218+passed in, printf-like arguments, then a ": ", then the textual error 
     1219+code represented by the system global errno.  All output goes to the 
     1220+stream set as the current error stream. 
     1221+ 
     1222+If errno represents "no error", then the function returns, doing 
     1223+nothing. 
     1224+ 
     1225+The program name is not output, unless the msgSetShowNameAlways 
     1226+function has forced it to do so. 
     1227+ 
     1228+SAMPLE: 
     1229+ 
     1230+    msgPerror("can't open %s", filename); 
     1231+ 
     1232+========================== 
     1233+ 
     1234+FUNCTION: void msgFatalPerror(const char *fmt, ...) 
     1235+ 
     1236+DESCRIPTION: 
     1237+ 
     1238+Like msgPerror, this function accepts printf-like arguments, and 
     1239+displays those to the stream set as the error stream, followed by a 
     1240+": ", then the textual error string that the global errno indicates. 
     1241+ 
     1242+If errno is not reporting an error, the call returns, having done 
     1243+nothing. 
     1244+ 
     1245+The call normally does not output the program name, but a call to 
     1246+msgSetShowNameAlways can force this. 
     1247+ 
     1248+If an error is set, the function will not return, exiting with a 
     1249+return code of 99. 
     1250+ 
     1251+SAMPLE: 
     1252+ 
     1253+    msgFatalPerror("can't continue: %s file missing!", filename); 
     1254+ 
     1255+========================== 
     1256+ 
     1257+FUNCTION: void msgMessage(const char *format, ...) 
     1258+ 
     1259+DESCRIPTION: 
     1260+ 
     1261+msgMessage will take your output, format is as printf would, and 
     1262+output it to the message stream.  If quiet mode has been set with 
     1263+msgSetQuiet, nothing is output.  Normally, the program name is not 
     1264+output, but if msgSetShowNameAlways has been called, the name of the 
     1265+program, then a ": " will be prepended to the message. 
     1266+ 
     1267+SAMPLE: 
     1268+ 
     1269+    msgMessage("something went wrong!\n"); 
     1270+ 
     1271+========================== 
     1272+ 
     1273+FUNCTION: msgVerbose(int level, const char *fmt, ...) 
     1274+ 
     1275+DESCRIPTION: 
     1276+ 
     1277+msgVerbose accepts a "verbosity level", followed by printf-like 
     1278+arguments.  If the current verbosity level is greater than or equal to 
     1279+the passed in value, the output will be formatted, and sent to the 
     1280+verbose stream.  See above, in the msgSetVerbose description, for the 
     1281+different fixed values, and methods of getting them. 
     1282+ 
     1283+The program name is not automatically output, unless 
     1284+msgSetShowNameAlways has been called with a non-zero parameter. 
     1285+ 
     1286+Note that this can be quite useful to track program flow, if these are 
     1287+used liberally at function entry and exit points, with a high 
     1288+verbosity level. 
     1289+ 
     1290+SAMPLE: 
     1291+ 
     1292+    msgVerbose(5, "entering the CalcFooBar function!\n"); 
     1293diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/streams.c msniff-0.2.0/shhmsg-1.4.1/streams.c 
     1294--- msniff-0.2.0.orig/shhmsg-1.4.1/streams.c    1970-01-01 02:00:00.000000000 +0200 
     1295+++ msniff-0.2.0/shhmsg-1.4.1/streams.c 2002-03-02 21:37:36.000000000 +0200 
     1296@@ -0,0 +1,94 @@ 
     1297+/* $Id: streams.c,v 1.4 2002/03/02 19:37:36 sverrehu Exp $ */ 
     1298+/*------------------------------------------------------------------------ 
     1299+ |  FILE            streams.c 
     1300+ |  MODULE OF       shhmsg - library for displaying messages. 
     1301+ | 
     1302+ |  DESCRIPTION     Routines for handling the stream that output goes to. 
     1303+ |                  This allows using streams other than stderr and stdout. 
     1304+ | 
     1305+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     1306+ |                  This file is mainly contributed by 
     1307+ |                    Louis W. Erickson <loue@skylight.com> 
     1308+ +----------------------------------------------------------------------*/ 
     1309+ 
     1310+#include <stdio.h> 
     1311+#include <string.h> 
     1312+ 
     1313+#include "internal.h" 
     1314+#include "shhmsg.h" 
     1315+ 
     1316+/*-----------------------------------------------------------------------+ 
     1317+|  PUBLIC FUNCTIONS                                                      | 
     1318++-----------------------------------------------------------------------*/ 
     1319+ 
     1320+/*------------------------------------------------------------------------ 
     1321+ | 
     1322+ |  NAME          msgSetErrorStream 
     1323+ | 
     1324+ |  FUNCTION      Specify the file stream error values should go to. 
     1325+ | 
     1326+ |  SYNOPSIS      #include "shhmsg.h" 
     1327+ |                FILE *msgSetErrorStream(FILE *f); 
     1328+ | 
     1329+ |  INPUT         f       pointer to a FILE that holds stream to write to. 
     1330+ | 
     1331+ |  RETURNS       Pointer to the old stream used for output. 
     1332+ | 
     1333+ |  DESCRIPTION   The stream passed is used to write all errors to. 
     1334+ */ 
     1335+FILE * 
     1336+msgSetErrorStream(FILE *f) 
     1337+{ 
     1338+    FILE *ret = GET_ERROR_STREAM; 
     1339+ 
     1340+    _msgErrorStream = f ? f : MSG_DEFAULT_ERROR_STREAM; 
     1341+    return ret; 
     1342+} 
     1343+ 
     1344+/*------------------------------------------------------------------------ 
     1345+ | 
     1346+ |  NAME          msgSetVerboseStream 
     1347+ | 
     1348+ |  FUNCTION      Specify the file stream verbose output should go to. 
     1349+ | 
     1350+ |  SYNOPSIS      #include "shhmsg.h" 
     1351+ |                FILE *msgSetVerboseStream(FILE *f); 
     1352+ | 
     1353+ |  INPUT         f       pointer to a FILE that holds stream to write to. 
     1354+ | 
     1355+ |  RETURNS       Pointer to the old stream used for output. 
     1356+ | 
     1357+ |  DESCRIPTION   The stream passed is used to write all verbose output to. 
     1358+ */ 
     1359+FILE * 
     1360+msgSetVerboseStream(FILE *f) 
     1361+{ 
     1362+    FILE *ret = GET_VERBOSE_STREAM; 
     1363+ 
     1364+    _msgVerboseStream = f ? f : MSG_DEFAULT_VERBOSE_STREAM; 
     1365+    return ret; 
     1366+} 
     1367+ 
     1368+/*------------------------------------------------------------------------ 
     1369+ | 
     1370+ |  NAME          msgSetMessageStream 
     1371+ | 
     1372+ |  FUNCTION      Specify the file stream message output should go to. 
     1373+ | 
     1374+ |  SYNOPSIS      #include "shhmsg.h" 
     1375+ |                FILE *msgSetMessageStream(FILE *f); 
     1376+ | 
     1377+ |  INPUT         f       pointer to a FILE that holds stream to write to. 
     1378+ | 
     1379+ |  RETURNS       Pointer to the old stream used for output. 
     1380+ | 
     1381+ |  DESCRIPTION   The stream passed is used to write all "messages" to. 
     1382+ */ 
     1383+FILE * 
     1384+msgSetMessageStream(FILE *f) 
     1385+{ 
     1386+    FILE *ret = GET_MESSAGE_STREAM; 
     1387+ 
     1388+    _msgMessageStream = f ? f : MSG_DEFAULT_MESSAGE_STREAM; 
     1389+    return ret; 
     1390+} 
     1391diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/vars.c msniff-0.2.0/shhmsg-1.4.1/vars.c 
     1392--- msniff-0.2.0.orig/shhmsg-1.4.1/vars.c       1970-01-01 02:00:00.000000000 +0200 
     1393+++ msniff-0.2.0/shhmsg-1.4.1/vars.c    2002-03-02 21:37:36.000000000 +0200 
     1394@@ -0,0 +1,26 @@ 
     1395+/* $Id: vars.c,v 1.4 2002/03/02 19:37:36 sverrehu Exp $ */ 
     1396+/*------------------------------------------------------------------------ 
     1397+ |  FILE            vars.c 
     1398+ |  MODULE OF       shhmsg - library for displaying messages. 
     1399+ | 
     1400+ |  DESCRIPTION     Variables common to most of the source files. These 
     1401+ |                  are collected in a file of their own, to avoid linking 
     1402+ |                  in functions not used. 
     1403+ | 
     1404+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     1405+ +----------------------------------------------------------------------*/ 
     1406+ 
     1407+#include <stdio.h> 
     1408+ 
     1409+#include "internal.h" 
     1410+#include "shhmsg.h" 
     1411+ 
     1412+/*-----------------------------------------------------------------------+ 
     1413+|  PUBLIC DATA                                                           | 
     1414++-----------------------------------------------------------------------*/ 
     1415+ 
     1416+/* Actually, these are not public, as they're supposed to be used 
     1417+ * internally by this library only. */ 
     1418+FILE *_msgErrorStream = NULL; 
     1419+FILE *_msgVerboseStream = NULL; 
     1420+FILE *_msgMessageStream = NULL; 
     1421diff -Naur msniff-0.2.0.orig/shhmsg-1.4.1/verbose.c msniff-0.2.0/shhmsg-1.4.1/verbose.c 
     1422--- msniff-0.2.0.orig/shhmsg-1.4.1/verbose.c    1970-01-01 02:00:00.000000000 +0200 
     1423+++ msniff-0.2.0/shhmsg-1.4.1/verbose.c 2002-03-02 21:37:36.000000000 +0200 
     1424@@ -0,0 +1,132 @@ 
     1425+/* $Id: verbose.c,v 1.7 2002/03/02 19:37:36 sverrehu Exp $ */ 
     1426+/*------------------------------------------------------------------------ 
     1427+ |  FILE            verbose.c 
     1428+ |  MODULE OF       shhmsg - library for displaying messages. 
     1429+ | 
     1430+ |  DESCRIPTION     Routines for displaying text according to a verbosity 
     1431+ |                  level. All messages with a level less than or equal 
     1432+ |                  to the current level are displayed. 
     1433+ | 
     1434+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     1435+ +----------------------------------------------------------------------*/ 
     1436+ 
     1437+#include <stdlib.h> 
     1438+#include <stdio.h> 
     1439+#include <stdarg.h> 
     1440+#include <string.h> 
     1441+#include <ctype.h> 
     1442+ 
     1443+#include "internal.h" 
     1444+#include "shhmsg.h" 
     1445+ 
     1446+/*-----------------------------------------------------------------------+ 
     1447+|  PUBLIC DATA                                                           | 
     1448++-----------------------------------------------------------------------*/ 
     1449+ 
     1450+int msgVerboseLevel = 0;  /* current verbosity level */ 
     1451+ 
     1452+/*-----------------------------------------------------------------------+ 
     1453+|  PRIVATE FUNCTIONS                                                     | 
     1454++-----------------------------------------------------------------------*/ 
     1455+ 
     1456+/*------------------------------------------------------------------------ 
     1457+ | 
     1458+ |  NAME          msgLookupVerboseLevel 
     1459+ | 
     1460+ |  FUNCTION      Get a default verbose level from the environment. 
     1461+ | 
     1462+ |  RETURNS       Default verbosity level. 
     1463+ | 
     1464+ |  DESCRIPTION   The environment variable "APPNAME_LEVEL" is checked 
     1465+ |               for a numeric value, and that becomes the verbosity 
     1466+ |               level, if none has been set in code, or the code 
     1467+ |               has not set "default".  The APPNAME is truncated to 
     1468+ |               10 bytes, and converted to all upper case. 
     1469+ */ 
     1470+static int 
     1471+msgLookupVerboseLevel(void) 
     1472+{ 
     1473+    char envName[20]; 
     1474+    char *envVal; 
     1475+ 
     1476+    strncpy(envName, msgGetName(), 10); 
     1477+    envName[10] = '\0'; 
     1478+     
     1479+    /* force the string to upper case */ 
     1480+    for (envVal = envName; *envVal; envVal++) 
     1481+       if (islower(*envVal)) 
     1482+           *envVal = toupper(*envVal); 
     1483+ 
     1484+    strcat(envName, "_LEVEL"); 
     1485+    envVal = getenv(envName); 
     1486+    if (envVal == NULL || *envVal == '\0') 
     1487+       return MSG_VERBOSE_DEFAULT; 
     1488+    return atoi(envVal); 
     1489+} 
     1490+ 
     1491+/*-----------------------------------------------------------------------+ 
     1492+|  PUBLIC FUNCTIONS                                                      | 
     1493++-----------------------------------------------------------------------*/ 
     1494+ 
     1495+/*------------------------------------------------------------------------ 
     1496+ | 
     1497+ |  NAME          msgSetVerbose 
     1498+ | 
     1499+ |  FUNCTION      Set verbosity level. 
     1500+ | 
     1501+ |  SYNOPSIS      #include "shhmsg.h" 
     1502+ |                void msgSetVerbose(int level); 
     1503+ | 
     1504+ |  INPUT         level   The new verbosity level. Note that a negative 
     1505+ |                       value will make the system print nothing, assuming 
     1506+ |                       all comparisons passed in by the caller to 
     1507+ |                       msgVerbose are positive. A negative number will 
     1508+ |                       revert the code to the "Default" state of checking 
     1509+ |                       the environmental variable for it's verbosity level, 
     1510+ |                       allowing changes at run time, instead of compile 
     1511+ |                       time. 
     1512+ | 
     1513+ |  DESCRIPTION   Used in conjunction with the msgVerbose() function. 
     1514+ |                Note that changing the msgVerboseLevel-variable directly 
     1515+ |                is fully legal. 
     1516+ */ 
     1517+void 
     1518+msgSetVerbose(int level) 
     1519+{ 
     1520+    msgVerboseLevel = level; 
     1521+} 
     1522+ 
     1523+/*------------------------------------------------------------------------ 
     1524+ | 
     1525+ |  NAME          msgVerbose 
     1526+ | 
     1527+ |  FUNCTION      Show given message if allowed by the current verb. level. 
     1528+ | 
     1529+ |  SYNOPSIS      #include "shhmsg.h" 
     1530+ |                void msgVerbose(int level, const char *format, ...); 
     1531+ | 
     1532+ |  INPUT         level   The verbosity level of the message to display. 
     1533+ |                format, ... 
     1534+ |                        Arguments used as with printf(). 
     1535+ | 
     1536+ |  DESCRIPTION   The given message is displayed on the _msgVerboseStream if 
     1537+ |                it's level is less than or equal to the current verbosity 
     1538+ |                level. 
     1539+ */ 
     1540+void 
     1541+msgVerbose(int level, const char *format, ...) 
     1542+{ 
     1543+    int     lev; 
     1544+    va_list ap; 
     1545+ 
     1546+    if ((lev = msgVerboseLevel) == MSG_VERBOSE_DEFAULT) 
     1547+       lev = msgLookupVerboseLevel(); 
     1548+    if (level > lev) 
     1549+        return; 
     1550+    fflush(stdout); 
     1551+    if (_msgShowNameAlways) 
     1552+       fprintf(GET_VERBOSE_STREAM, "%s: ", msgGetName()); 
     1553+    va_start(ap, format); 
     1554+    vfprintf(GET_VERBOSE_STREAM, format, ap); 
     1555+    va_end(ap); 
     1556+} 
     1557diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/ChangeLog msniff-0.2.0/shhopt-1.1.7/ChangeLog 
     1558--- msniff-0.2.0.orig/shhopt-1.1.7/ChangeLog    1970-01-01 02:00:00.000000000 +0200 
     1559+++ msniff-0.2.0/shhopt-1.1.7/ChangeLog 2002-03-02 21:56:01.000000000 +0200 
     1560@@ -0,0 +1,91 @@ 
     1561+2002-03-02  Sverre H. Huseby  <shh@thathost.com> 
     1562+ 
     1563+       * Release: 1.1.7 
     1564+ 
     1565+       * All: Updated contact information. 
     1566+ 
     1567+2000-03-10  Sverre H. Huseby  <shh@thathost.com> 
     1568+ 
     1569+       * Release: 1.1.6 
     1570+ 
     1571+       * README: Moved license info links from metalab.unc.edu to 
     1572+       www.opensource.org.  Updated my snail mail address to where I'll 
     1573+       live from 2000-04-06 or so. 
     1574+ 
     1575+       * shhopt.lsm.in (Copying-policy): Pointed to opensource.org for 
     1576+       licensing info. 
     1577+ 
     1578+       * shhopt.h: Removed the trailing comma from the enum, on request 
     1579+       from <bryanh@giraffe-data.com>.  I always thought this was legal, 
     1580+       but after examining the K&R book more thoroughly, it seems it is 
     1581+       only legal for array initializers. 
     1582+ 
     1583+1999-09-10  Sverre H. Huseby  <shh@thathost.com> 
     1584+ 
     1585+       * Release 1.1.5 
     1586+ 
     1587+       * README: Added information on the Artistic license 
     1588+ 
     1589+       * shhopt.c (optMatch): Made the p variable const, as this compiles 
     1590+       more cleanly on Borland's compiler, according to Vladislav Papayan 
     1591+       <vlpa@daleen.com> 
     1592+ 
     1593+       * shhopt.c, example.c: Changed formatting of comments. 
     1594+ 
     1595+1998-07-05  Sverre H. Huseby  <shh@thathost.com> 
     1596+ 
     1597+       * Release 1.1.4 
     1598+ 
     1599+       * Updated author address. 
     1600+ 
     1601+Tue May 27 23:13:19 1997  Sverre H. Huseby  <s.h.huseby@usit.uio.no> 
     1602+ 
     1603+       * Version: 1.1.3 
     1604+ 
     1605+Sat May 17 21:56:36 1997  Sverre H. Huseby  <s.h.huseby@usit.uio.no> 
     1606+ 
     1607+       * shhopt.h: Added `extern "C"'. 
     1608+ 
     1609+Sun Mar 23 09:47:43 1997  Sverre H. Huseby  <s.h.huseby@usit.uio.no> 
     1610+ 
     1611+       * Release: 1.1.2 
     1612+ 
     1613+       * Makefile: Creating lib*.so in addition to lib*.so.* 
     1614+ 
     1615+Tue Nov 12 08:36:09 1996  Sverre H. Huseby  <sverrehu@ifi.uio.no> 
     1616+ 
     1617+       * Version: 1.1.1 
     1618+ 
     1619+       * shhopt.c: Minor restructuring, no code changes. 
     1620+ 
     1621+       * example.c: Restructured a bit, and added some comments. 
     1622+ 
     1623+Thu Jun  6 10:55:00 1996  Sverre H. Huseby  <sverrehu@ifi.uio.no> 
     1624+ 
     1625+       * Released version 1.1. 
     1626+ 
     1627+       * Makefile: Added example.o to the dependecy list of example. 
     1628+ 
     1629+       * README: Pointer to the double parsing in example.c 
     1630+ 
     1631+       * example.c: Added parsing of parameter taking a double value. 
     1632+ 
     1633+Thu Jun  6 01:38:00 1996  Sverre H. Huseby  <sverrehu@ifi.uio.no> 
     1634+ 
     1635+       * Released version 1.0. 
     1636+ 
     1637+        * Included patches from Andrew. 
     1638+ 
     1639+        * Did some minor cosmetic changes. 
     1640+ 
     1641+Wed May 22 15:05:00 1996  Andrew C. Feren   <feren@ctron.com> 
     1642+ 
     1643+       * Makefile: Changed from "ar rcs" to "ar rc" & ranlib.  
     1644+        
     1645+       * README: Improved the documentation. 
     1646+        
     1647+       * shhopt.c: Fixed bug for arguments of type unsigned int. 
     1648+ 
     1649+Fri Mar 15 15:00:30 1996  Sverre H. Huseby  <sverrehu@ender> 
     1650+ 
     1651+       * Released first BETA version: 0.1 
     1652diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/CREDITS msniff-0.2.0/shhopt-1.1.7/CREDITS 
     1653--- msniff-0.2.0.orig/shhopt-1.1.7/CREDITS      1970-01-01 02:00:00.000000000 +0200 
     1654+++ msniff-0.2.0/shhopt-1.1.7/CREDITS   2002-03-02 21:44:27.000000000 +0200 
     1655@@ -0,0 +1,12 @@ 
     1656+Thanks to (see ChangeLog for details): 
     1657+ 
     1658+    Andrew C. Feren <feren@ctron.com> 
     1659+ 
     1660+Your name may appear here too, if you 
     1661+ 
     1662+       * fix bugs 
     1663+       * write an even better documentation 
     1664+       * extend the functionality of the library 
     1665+       * do something nice 
     1666+       * all of the above 
     1667+ 
     1668diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/example.c msniff-0.2.0/shhopt-1.1.7/example.c 
     1669--- msniff-0.2.0.orig/shhopt-1.1.7/example.c    1970-01-01 02:00:00.000000000 +0200 
     1670+++ msniff-0.2.0/shhopt-1.1.7/example.c 2002-03-02 21:56:18.000000000 +0200 
     1671@@ -0,0 +1,137 @@ 
     1672+/* $Id: example.c,v 1.7 2002/03/02 19:56:18 sverrehu Exp $ */ 
     1673+/*------------------------------------------------------------------------ 
     1674+ |  FILE            example.c 
     1675+ | 
     1676+ |  DESCRIPTION     Sample source code using the shhopt-library to parse 
     1677+ |                  command line options. 
     1678+ | 
     1679+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     1680+ +----------------------------------------------------------------------*/ 
     1681+ 
     1682+#include <stdio.h> 
     1683+#include <stdlib.h> 
     1684+#include <errno.h>  /* needed in strToDouble only */ 
     1685+ 
     1686+#include "shhopt.h" 
     1687+ 
     1688+/*-----------------------------------------------------------------------+ 
     1689+|  PRIVATE DATA                                                          | 
     1690++-----------------------------------------------------------------------*/ 
     1691+ 
     1692+/* called by -N or --number-func */ 
     1693+static void 
     1694+numberFunc(int i) 
     1695+{ 
     1696+    printf("integer function called, i=%d\n", i); 
     1697+} 
     1698+ 
     1699+/* called by -S or --string-func */ 
     1700+static void 
     1701+stringFunc(char *s) 
     1702+{ 
     1703+    printf("string function called, s=\"%s\"\n", s); 
     1704+} 
     1705+ 
     1706+/* called by -F or --flag-func */ 
     1707+static void 
     1708+flagFunc(void) 
     1709+{ 
     1710+    printf("flag function called\n"); 
     1711+} 
     1712+ 
     1713+/* shhopt does not support double arguments, so we write our own 
     1714+ * handler for this. The trick is to create a function taking a string 
     1715+ * argument, and convert this string to a double. The following two 
     1716+ * functions handles this. */ 
     1717+ 
     1718+/* convert a string to a double value, with error checking */ 
     1719+static double 
     1720+strToDouble(char *s) 
     1721+{ 
     1722+    double d; 
     1723+    char *e; 
     1724+ 
     1725+    d = strtod(s, &e); 
     1726+    if (*e) { 
     1727+       fprintf(stderr, "invalid number `%s'\n", s); 
     1728+       exit(1); 
     1729+    } 
     1730+    if (errno == ERANGE) { 
     1731+       fprintf(stderr, "number `%s' out of range\n", s); 
     1732+       exit(1); 
     1733+    } 
     1734+    return d; 
     1735+} 
     1736+ 
     1737+/* called by -D or --double-func */ 
     1738+static void 
     1739+doubleFunc(char *s) 
     1740+{ 
     1741+    double d; 
     1742+ 
     1743+    d = strToDouble(s); 
     1744+    printf("double function called, d=\"%g\"\n", d); 
     1745+} 
     1746+ 
     1747+static void 
     1748+usage(void) 
     1749+{ 
     1750+    printf( 
     1751+      "usage: example [option ...] [other-arguments ...]\n" 
     1752+      "\n" 
     1753+      "  -n, --number=NUMBER       set value of variable `number'\n" 
     1754+      "  -N, --number-func=NUMBER  call function with given integer argument\n" 
     1755+      "  -D, --double-func=NUMBER  call function with given double argument\n" 
     1756+      "  -s, --string=STRING       set value of variable `string'\n" 
     1757+      "  -S, --string-func=STRING  call function with given string argument\n" 
     1758+      "  -f, --flag                set value of variable `flag' to 1\n" 
     1759+      "  -F, --flag-func           call a function with no argument\n" 
     1760+      "\n" 
     1761+      "A double-dash (`--') indicates that the rest of the line is not to\n" 
     1762+      "be scanned for options.\n" 
     1763+    ); 
     1764+    exit(1); 
     1765+} 
     1766+ 
     1767+/*-----------------------------------------------------------------------+ 
     1768+|  PUBLIC FUNCTIONS                                                      | 
     1769++-----------------------------------------------------------------------*/ 
     1770+ 
     1771+int 
     1772+main(int argc, char *argv[]) 
     1773+{ 
     1774+    int  q;                 /* counter */ 
     1775+    int  number = 0;        /* set to anything by -n or --number */ 
     1776+    int  flag = 0;          /* set to 1 by -f or --flag */ 
     1777+    char *string = "none";  /* set to anything by -s or --string */ 
     1778+    optStruct opt[] = { 
     1779+      /* short long              type        var/func       special       */ 
     1780+        { 'h', "help",           OPT_FLAG,   usage,         OPT_CALLFUNC }, 
     1781+        { 'n', "number",         OPT_INT,    &number,       0            }, 
     1782+        { 'N', "number-func",    OPT_INT,    numberFunc,    OPT_CALLFUNC }, 
     1783+        { 'D', "double-func",    OPT_STRING, doubleFunc,    OPT_CALLFUNC }, 
     1784+        { 's', "string",         OPT_STRING, &string,       0            }, 
     1785+        { 'S', "string-func",    OPT_STRING, stringFunc,    OPT_CALLFUNC }, 
     1786+        { 'f', "flag",           OPT_FLAG,   &flag,         0            }, 
     1787+        { 'F', "flag-func",      OPT_FLAG,   flagFunc,      OPT_CALLFUNC }, 
     1788+        { 0, 0, OPT_END, 0, 0 }  /* no more options */ 
     1789+    }; 
     1790+ 
     1791+    /* if you link with the shhmsg-library, you may wish to set the 
     1792+     * the error handling function by calling 
     1793+     * optSetFatalFunc(msgFatal); */ 
     1794+ 
     1795+    /* parse all options */ 
     1796+    optParseOptions(&argc, argv, opt, 0); 
     1797+ 
     1798+    /* display result */ 
     1799+    printf("number=%d, flag=%d, string=\"%s\"\n", number, flag, string); 
     1800+ 
     1801+    /* what's left in argv, are any non-optinons. */ 
     1802+    printf("remaining arguments: "); 
     1803+    for (q = 1; q < argc; q++) 
     1804+        printf("\"%s\" ", argv[q]); 
     1805+    printf("\n"); 
     1806+ 
     1807+    return 0; 
     1808+} 
     1809diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/INSTALL msniff-0.2.0/shhopt-1.1.7/INSTALL 
     1810--- msniff-0.2.0.orig/shhopt-1.1.7/INSTALL      1970-01-01 02:00:00.000000000 +0200 
     1811+++ msniff-0.2.0/shhopt-1.1.7/INSTALL   2002-03-02 21:44:27.000000000 +0200 
     1812@@ -0,0 +1,25 @@ 
     1813+Installing shhopt 
     1814+================= 
     1815+ 
     1816+If you don't have gcc, you'll have to edit the Makefile. If your 
     1817+compiler is not ANSI, you'll have to change all files. 
     1818+ 
     1819+  1. Check the Makefile.  In particular, if you run Linux with ELF, 
     1820+     you may want to make a shared library (search for SHARED). 
     1821+ 
     1822+  2. Build the library 
     1823+ 
     1824+       make dep 
     1825+       make 
     1826+ 
     1827+  3. Install library and header file 
     1828+ 
     1829+       make install 
     1830+ 
     1831+By default, the library will be installed in /usr/local/lib, and the 
     1832+header file in /usr/local/include. 
     1833+ 
     1834+ 
     1835+If you happen to know how to make one of those fancy configure files, 
     1836+and feel like making one for this library, please do so and send the 
     1837+files to me (contact info in the README file). 
     1838diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/Makefile msniff-0.2.0/shhopt-1.1.7/Makefile 
     1839--- msniff-0.2.0.orig/shhopt-1.1.7/Makefile     1970-01-01 02:00:00.000000000 +0200 
     1840+++ msniff-0.2.0/shhopt-1.1.7/Makefile  2007-07-22 21:16:40.000000000 +0300 
     1841@@ -0,0 +1,110 @@ 
     1842+# $Id: Makefile,v 1.12 2002/03/02 19:57:25 sverrehu Exp $ 
     1843+DIST           = shhopt 
     1844+VERMAJ         = 1 
     1845+VERMIN         = 1 
     1846+VERPAT         = 7 
     1847+VERSION                = $(VERMAJ).$(VERMIN).$(VERPAT) 
     1848+ 
     1849+# Define SHARED as 1 for Linux shared ELF library 
     1850+#SHARED                = 1 
     1851+ 
     1852+ifeq ($(SHARED),1) 
     1853+LIBTARGET      = lib$(DIST).so.$(VERSION) 
     1854+LIBTARGETSO    = lib$(DIST).so 
     1855+LIBTARGETSOMAJ = $(LIBTARGETSO).$(VERMAJ) 
     1856+CCSHRD         = -fPIC 
     1857+else 
     1858+LIBTARGET      = lib$(DIST).a 
     1859+endif 
     1860+ 
     1861+LIBHEAD                = $(DIST).h 
     1862+TARGETS                = $(LIBTARGET) 
     1863+ 
     1864+INSTBASEDIR    = /usr/local 
     1865+INSTLIBDIR     = $(INSTBASEDIR)/lib 
     1866+INSTINCDIR     = $(INSTBASEDIR)/include 
     1867+INSTALL                = install -m 644 
     1868+INSTALLPROG    = install -m 755 
     1869+MKDIRP         = install -d -m 755 
     1870+ 
     1871+CC             = $(GCC) 
     1872+OPTIM          = -O2 
     1873+ 
     1874+#INCDIR                = -I. 
     1875+ 
     1876+#CCOPT         = -s -Wall $(OPTIM) $(INCDIR) 
     1877+ 
     1878+# Object files to store in the library 
     1879+LIBOBJS                = shhopt.o 
     1880+ 
     1881+ 
     1882+all: $(TARGETS) 
     1883+ 
     1884+# don't worry if you get ranlib not found errors.  This probably means 
     1885+# that your ar does an implicit ranlib and you do not need to run ranlib 
     1886+# separately.  This error is harmless. 
     1887+$(LIBTARGET): $(LIBOBJS) 
     1888+ifeq ($(SHARED),1) 
     1889+       $(CC) -shared -Wl,-soname,$(LIBTARGETSOMAJ) -o $(LIBTARGET) $(LIBOBJS) 
     1890+else 
     1891+       ar rc $(LIBTARGET) $(LIBOBJS) 
     1892+       ranlib $(LIBTARGET) || true 
     1893+endif 
     1894+ 
     1895+# Note that you may need GNU's -liberty if your libc lacks strtoul 
     1896+example: $(LIBTARGET) example.o 
     1897+       $(CC) -o example example.c \ 
     1898+               -L. -I. -L$(INSTLIBDIR) -I$(INSTINCDIR) -lshhopt 
     1899+ 
     1900+.c.o: 
     1901+       $(CC) $(CCSHRD) -o $@ -c $(CCOPT) $< 
     1902+ 
     1903+depend dep: 
     1904+       $(CC) $(INCDIR) -MM *.c >depend 
     1905+ 
     1906+install: $(LIBTARGET) 
     1907+       $(MKDIRP) $(INSTLIBDIR) $(INSTINCDIR) 
     1908+       $(INSTALL) $(LIBTARGET) $(INSTLIBDIR) 
     1909+       $(INSTALL) $(LIBHEAD) $(INSTINCDIR) 
     1910+ifeq ($(SHARED),1) 
     1911+       ln -sf $(LIBTARGET) $(INSTLIBDIR)/$(LIBTARGETSOMAJ) 
     1912+       ln -sf $(LIBTARGETSOMAJ) $(INSTLIBDIR)/$(LIBTARGETSO) 
     1913+       echo "Now run ldconfig if necessary." 
     1914+endif 
     1915+ 
     1916+clean: 
     1917+       rm -f *.o core *~ depend 
     1918+ 
     1919+chmod: 
     1920+       chmod a+r * 
     1921+ 
     1922+# To let the author make a distribution. The rest of the Makefile 
     1923+# should be used by the author only. 
     1924+LSMFILE                = $(DIST)-$(VERSION).lsm 
     1925+DISTDIR                = $(DIST)-$(VERSION) 
     1926+DISTFILE       = $(DIST)-$(VERSION).tar.gz 
     1927+DISTFILES      = README INSTALL CREDITS ChangeLog TODO \ 
     1928+                 Makefile $(LSMFILE) \ 
     1929+                 $(LIBHEAD) \ 
     1930+                 shhopt.c \ 
     1931+                 example.c 
     1932+ 
     1933+$(LSMFILE): $(DIST).lsm.in 
     1934+       VER=$(VERSION); \ 
     1935+       DATE=`date "+%d%b%y"|tr '[a-z]' '[A-Z]'`; \ 
     1936+       sed -e "s/VER/$$VER/g;s/DATE/$$DATE/g" $(DIST).lsm.in > $(LSMFILE) 
     1937+ 
     1938+veryclean: clean 
     1939+       rm -f $(TARGETS) $(DISTFILE) $(LSMFILE) example 
     1940+ 
     1941+dist: $(LSMFILE) chmod 
     1942+       mkdir $(DISTDIR) 
     1943+       chmod a+rx $(DISTDIR) 
     1944+       ln $(DISTFILES) $(DISTDIR) 
     1945+       tar -cvzf $(DISTFILE) $(DISTDIR) 
     1946+       chmod a+r $(DISTFILE) 
     1947+       rm -rf $(DISTDIR) 
     1948+ 
     1949+ifeq (depend,$(wildcard depend)) 
     1950+include depend 
     1951+endif 
     1952diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/README msniff-0.2.0/shhopt-1.1.7/README 
     1953--- msniff-0.2.0.orig/shhopt-1.1.7/README       1970-01-01 02:00:00.000000000 +0200 
     1954+++ msniff-0.2.0/shhopt-1.1.7/README    2002-03-02 21:55:29.000000000 +0200 
     1955@@ -0,0 +1,158 @@ 
     1956+shhopt - library for parsing command line options 
     1957+================================================= 
     1958+ 
     1959+This is a set of functions for parsing command line options.  Both 
     1960+traditional one-character options, and GNU-style --long-options are 
     1961+supported. 
     1962+ 
     1963+ 
     1964+What separates this from traditional getopt? 
     1965+-------------------------------------------- 
     1966+ 
     1967+This library does more of the parsing for you.  You set up a special 
     1968+structure describing the names and types of the options you want your 
     1969+program to support.  In the structure you also give addresses of 
     1970+variables to update or functions to call for the various options.  By 
     1971+calling optParseOptions, all options in argv are parsed and removed 
     1972+from argv.  What is left are the non-optional arguments to your 
     1973+program. 
     1974+ 
     1975+The down-side is that you won't be able to make a program where the 
     1976+position of the options between the non-options are significant. 
     1977+ 
     1978+ 
     1979+Usage 
     1980+----- 
     1981+ 
     1982+To see how to use this library, take a look at the sample program 
     1983+example.c. 
     1984+ 
     1985+A brief explanation: 
     1986+ 
     1987+To parse your command line, you need to create and initialize an array 
     1988+of optStruct's.  Each element in the array describes a long and short 
     1989+version of an option and specifies what type of option it is and how 
     1990+to handle it. 
     1991+ 
     1992+The structure fields (see also shhopt.h): 
     1993+ 
     1994+  `shortName' is the short option name without the leading '-'. 
     1995+ 
     1996+  `longName' is the long option name without the leading "--". 
     1997+ 
     1998+  `type' specifies what type of option this is.  (Does it expect an 
     1999+      argument? Is it a flag? If it takes an argument, what type 
     2000+      should it be?) 
     2001+ 
     2002+  `arg' is either a function to be called with the argument from the 
     2003+      command line, or a pointer to a location in which to store the 
     2004+      value. 
     2005+ 
     2006+  `flags' indicates whether `arg' points to a function or a storage 
     2007+      location. 
     2008+ 
     2009+The different argument types: 
     2010+ 
     2011+  `OPT_END' flags this as the last element in the options array. 
     2012+ 
     2013+  `OPT_FLAG' indicates an option that takes no arguments.  If `arg' is 
     2014+      not a function pointer, the value of `arg' will be set to 1 if 
     2015+      this flag is found on the command line. 
     2016+ 
     2017+  `OPT_STRING' expects a string argument. 
     2018+ 
     2019+  `OPT_INT' expects an int argument. 
     2020+ 
     2021+  `OPT_UINT' expects an unsigned int argument. 
     2022+ 
     2023+  `OPT_LONG' expects a long argument. 
     2024+ 
     2025+  `OPT_ULONG' expects an unsigned long argument. 
     2026+ 
     2027+The different flag types: 
     2028+ 
     2029+  `OPT_CALLFUNC' indicates that `arg' is a function pointer.  If this 
     2030+      is not given, `arg' is taken as a pointer to a variable. 
     2031+ 
     2032+ 
     2033+Notes 
     2034+----- 
     2035+ 
     2036+* A dash (`-') by itself is not taken as any kind of an option, as 
     2037+  several programs use the dash to indicate the special files stdin 
     2038+  and stdout.  It is thus left as a normal argument to the program. 
     2039+ 
     2040+* Two dashes (`--') as an argument is taken to mean that the rest of 
     2041+  the arguments should not be scanned for options.  This simplifies 
     2042+  giving names of files that start with a dash. 
     2043+ 
     2044+* Short (one-character) options accept parameters in two ways, either 
     2045+  directly following the option in the same argv-entry, or in the next 
     2046+  argv-entry: 
     2047+ 
     2048+       -sPARAMETER 
     2049+       -s PARAMETER 
     2050+ 
     2051+* Long options accept parameters in two ways: 
     2052+ 
     2053+       --long-option=PARAMETER 
     2054+       --long-option PARAMETER 
     2055+ 
     2056+  To follow the GNU-tradition, your program documentation should use 
     2057+  the first form. 
     2058+ 
     2059+* Several one-character options may be combined after a single dash. 
     2060+  If any of the options requires a parameter, the rest of the string 
     2061+  is taken as this parameter.  If there is no "rest of the string", 
     2062+  the next argument is taken as the parameter. 
     2063+ 
     2064+* There is no support for floating point (double) arguments to 
     2065+  options.  This is to avoid unnecessary linking with the math 
     2066+  library.  See example.c for how to get around it by writing a 
     2067+  function converting a string argument to a double (functions 
     2068+  strToDouble and doubleFunc). 
     2069+ 
     2070+ 
     2071+Portability 
     2072+----------- 
     2073+ 
     2074+If your libc lacks strtoul, you will need to link with GNU's -liberty, 
     2075+that may be found by anonymous ftp to ftp://ftp.gnu.org/pub/gnu/ 
     2076+ 
     2077+The library has (more or less recently) been compiled and `tested' on 
     2078+the following systems: 
     2079+ 
     2080+       IRIX Release 5.3 IP22 
     2081+       GNU/Linux 2.4.17 with glibc 2.2.5 
     2082+       SunOS Release 4.1.3_U1 (-liberty needed) 
     2083+       ULTRIX V4.4 (Rev.  69) 
     2084+ 
     2085+All compilations were done using GNU's gcc, and GNU's make. 
     2086+ 
     2087+ 
     2088+Author 
     2089+------ 
     2090+ 
     2091+The program is written by 
     2092+ 
     2093+        Sverre H. Huseby        shh@thathost.com 
     2094+        Lofthusvn. 11 B         http://shh.thathost.com/ 
     2095+        N-0587 Oslo 
     2096+        Norway 
     2097+ 
     2098+ 
     2099+License 
     2100+------- 
     2101+ 
     2102+This program is released under the Artistic License: 
     2103+ 
     2104+  http://www.opensource.org/licenses/artistic-license.html 
     2105+ 
     2106+Comments (even as simple as "I use your program") are very welcome. 
     2107+If you insist on paying something, please donate some money to an 
     2108+organization that strives to make the world a better place for 
     2109+everyone. 
     2110+ 
     2111+I don't like bugs, so please help me removing them by reporting 
     2112+whatever you find! 
     2113+ 
     2114diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/shhopt-1.1.7.lsm msniff-0.2.0/shhopt-1.1.7/shhopt-1.1.7.lsm 
     2115--- msniff-0.2.0.orig/shhopt-1.1.7/shhopt-1.1.7.lsm     1970-01-01 02:00:00.000000000 +0200 
     2116+++ msniff-0.2.0/shhopt-1.1.7/shhopt-1.1.7.lsm  2002-03-02 21:57:27.000000000 +0200 
     2117@@ -0,0 +1,14 @@ 
     2118+Begin3 
     2119+Title:         shhopt - library for parsing command line options 
     2120+Version:       1.1.7 
     2121+Entered-date:  02MAR02 
     2122+Description:   C-functions for parsing command line options, both 
     2123+                traditional one-character options, and GNU'ish 
     2124+                --long-options. 
     2125+Keywords:      programming, library, lib, commandline, options 
     2126+Author:        shh@thathost.com (Sverre H. Huseby) 
     2127+Primary-site:  http://shh.thathost.com/pub-unix/ 
     2128+Platforms:     Requires ANSI C-compiler. 
     2129+Copying-policy:        Artistic License 
     2130+               http://www.opensource.org/licenses/artistic-license.html 
     2131+End 
     2132diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/shhopt.c msniff-0.2.0/shhopt-1.1.7/shhopt.c 
     2133--- msniff-0.2.0.orig/shhopt-1.1.7/shhopt.c     1970-01-01 02:00:00.000000000 +0200 
     2134+++ msniff-0.2.0/shhopt-1.1.7/shhopt.c  2002-03-02 21:56:18.000000000 +0200 
     2135@@ -0,0 +1,432 @@ 
     2136+/* $Id: shhopt.c,v 1.6 2002/03/02 19:56:18 sverrehu Exp $ */ 
     2137+/*------------------------------------------------------------------------ 
     2138+ |  FILE            shhopt.c 
     2139+ | 
     2140+ |  DESCRIPTION     Functions for parsing command line arguments. Values 
     2141+ |                  of miscellaneous types may be stored in variables, 
     2142+ |                  or passed to functions as specified. 
     2143+ | 
     2144+ |  REQUIREMENTS    Some systems lack the ANSI C -function strtoul. If 
     2145+ |                  your system is one of those, you'll ned to write 
     2146+ |                  one yourself, or get the GNU liberty-library (from 
     2147+ |                  ftp://ftp.gnu.org/pub/gnu/). 
     2148+ | 
     2149+ |  WRITTEN BY      Sverre H. Huseby <shh@thathost.com> 
     2150+ +----------------------------------------------------------------------*/ 
     2151+ 
     2152+#include <stdio.h> 
     2153+#include <stdlib.h> 
     2154+#include <stdarg.h> 
     2155+#include <string.h> 
     2156+#include <ctype.h> 
     2157+#include <limits.h> 
     2158+#include <errno.h> 
     2159+ 
     2160+#include "shhopt.h" 
     2161+ 
     2162+/*-----------------------------------------------------------------------+ 
     2163+|  PRIVATE DATA                                                          | 
     2164++-----------------------------------------------------------------------*/ 
     2165+ 
     2166+static void optFatalFunc(const char *, ...); 
     2167+static void (*optFatal)(const char *format, ...) = optFatalFunc; 
     2168+ 
     2169+/*-----------------------------------------------------------------------+ 
     2170+|  PRIVATE FUNCTIONS                                                     | 
     2171++-----------------------------------------------------------------------*/ 
     2172+ 
     2173+/*------------------------------------------------------------------------ 
     2174+ |  NAME          optFatalFunc 
     2175+ | 
     2176+ |  FUNCTION      Show given message and abort the program. 
     2177+ | 
     2178+ |  INPUT         format, ... 
     2179+ |                        Arguments used as with printf(). 
     2180+ | 
     2181+ |  RETURNS       Never returns. The program is aborted. 
     2182+ */ 
     2183+void 
     2184+optFatalFunc(const char *format, ...) 
     2185+{ 
     2186+    va_list ap; 
     2187+ 
     2188+    fflush(stdout); 
     2189+    va_start(ap, format); 
     2190+    vfprintf(stderr, format, ap); 
     2191+    va_end(ap); 
     2192+    exit(99); 
     2193+} 
     2194+ 
     2195+/*------------------------------------------------------------------------ 
     2196+ |  NAME          optStructCount 
     2197+ | 
     2198+ |  FUNCTION      Get number of options in a optStruct. 
     2199+ | 
     2200+ |  INPUT         opt     array of possible options. 
     2201+ | 
     2202+ |  RETURNS       Number of options in the given array. 
     2203+ | 
     2204+ |  DESCRIPTION   Count elements in an optStruct-array. The strcture must 
     2205+ |                be ended using an element of type OPT_END. 
     2206+ */ 
     2207+static int 
     2208+optStructCount(optStruct opt[]) 
     2209+{ 
     2210+    int ret = 0; 
     2211+ 
     2212+    while (opt[ret].type != OPT_END) 
     2213+        ++ret; 
     2214+    return ret; 
     2215+} 
     2216+ 
     2217+/*------------------------------------------------------------------------ 
     2218+ |  NAME          optMatch 
     2219+ | 
     2220+ |  FUNCTION      Find a matching option. 
     2221+ | 
     2222+ |  INPUT         opt     array of possible options. 
     2223+ |                s       string to match, without `-' or `--'. 
     2224+ |                lng     match long option, otherwise short. 
     2225+ | 
     2226+ |  RETURNS       Index to the option if found, -1 if not found. 
     2227+ | 
     2228+ |  DESCRIPTION   Short options are matched from the first character in 
     2229+ |                the given string. 
     2230+ */ 
     2231+static int 
     2232+optMatch(optStruct opt[], const char *s, int lng) 
     2233+{ 
     2234+    int        nopt, q, matchlen = 0; 
     2235+    const char *p; 
     2236+ 
     2237+    nopt = optStructCount(opt); 
     2238+    if (lng) { 
     2239+       if ((p = strchr(s, '=')) != NULL) 
     2240+           matchlen = p - s; 
     2241+       else 
     2242+           matchlen = strlen(s); 
     2243+    } 
     2244+    for (q = 0; q < nopt; q++) { 
     2245+       if (lng) { 
     2246+           if (!opt[q].longName) 
     2247+               continue; 
     2248+           if (strncmp(s, opt[q].longName, matchlen) == 0) 
     2249+               return q; 
     2250+       } else { 
     2251+           if (!opt[q].shortName) 
     2252+               continue; 
     2253+           if (*s == opt[q].shortName) 
     2254+               return q; 
     2255+       } 
     2256+    } 
     2257+    return -1; 
     2258+} 
     2259+ 
     2260+/*------------------------------------------------------------------------ 
     2261+ |  NAME          optString 
     2262+ | 
     2263+ |  FUNCTION      Return a (static) string with the option name. 
     2264+ | 
     2265+ |  INPUT         opt     the option to stringify. 
     2266+ |                lng     is it a long option? 
     2267+ | 
     2268+ |  RETURNS       Pointer to static string. 
     2269+ */ 
     2270+static char * 
     2271+optString(optStruct *opt, int lng) 
     2272+{ 
     2273+    static char ret[31]; 
     2274+ 
     2275+    if (lng) { 
     2276+       strcpy(ret, "--"); 
     2277+       strncpy(ret + 2, opt->longName, 28); 
     2278+    } else { 
     2279+       ret[0] = '-'; 
     2280+       ret[1] = opt->shortName; 
     2281+       ret[2] = '\0'; 
     2282+    } 
     2283+    return ret; 
     2284+} 
     2285+ 
     2286+/*------------------------------------------------------------------------ 
     2287+ |  NAME          optNeedsArgument 
     2288+ | 
     2289+ |  FUNCTION      Check if an option requires an argument. 
     2290+ | 
     2291+ |  INPUT         opt     the option to check. 
     2292+ | 
     2293+ |  RETURNS       Boolean value. 
     2294+ */ 
     2295+static int 
     2296+optNeedsArgument(optStruct *opt) 
     2297+{ 
     2298+    return opt->type == OPT_STRING 
     2299+       || opt->type == OPT_INT 
     2300+       || opt->type == OPT_UINT 
     2301+       || opt->type == OPT_LONG 
     2302+       || opt->type == OPT_ULONG; 
     2303+} 
     2304+ 
     2305+/*------------------------------------------------------------------------ 
     2306+ |  NAME          argvRemove 
     2307+ | 
     2308+ |  FUNCTION      Remove an entry from an argv-array. 
     2309+ | 
     2310+ |  INPUT         argc    pointer to number of options. 
     2311+ |                argv    array of option-/argument-strings. 
     2312+ |                i       index of option to remove. 
     2313+ | 
     2314+ |  OUTPUT        argc    new argument count. 
     2315+ |                argv    array with given argument removed. 
     2316+ */ 
     2317+static void 
     2318+argvRemove(int *argc, char *argv[], int i) 
     2319+{ 
     2320+    if (i >= *argc) 
     2321+        return; 
     2322+    while (i++ < *argc) 
     2323+        argv[i - 1] = argv[i]; 
     2324+    --*argc; 
     2325+} 
     2326+ 
     2327+/*------------------------------------------------------------------------ 
     2328+ |  NAME          optExecute 
     2329+ | 
     2330+ |  FUNCTION      Perform the action of an option. 
     2331+ | 
     2332+ |  INPUT         opt     array of possible options. 
     2333+ |                arg     argument to option, if it applies. 
     2334+ |                lng     was the option given as a long option? 
     2335+ | 
     2336+ |  RETURNS       Nothing. Aborts in case of error. 
     2337+ */ 
     2338+void 
     2339+optExecute(optStruct *opt, char *arg, int lng) 
     2340+{ 
     2341+    switch (opt->type) { 
     2342+      case OPT_FLAG: 
     2343+       if (opt->flags & OPT_CALLFUNC) 
     2344+           ((void (*)(void)) opt->arg)(); 
     2345+       else 
     2346+           *((int *) opt->arg) = 1; 
     2347+       break; 
     2348+ 
     2349+      case OPT_STRING: 
     2350+       if (opt->flags & OPT_CALLFUNC) 
     2351+           ((void (*)(char *)) opt->arg)(arg); 
     2352+       else 
     2353+           *((char **) opt->arg) = arg; 
     2354+       break; 
     2355+ 
     2356+      case OPT_INT: 
     2357+      case OPT_LONG: { 
     2358+         long tmp; 
     2359+         char *e; 
     2360+          
     2361+         tmp = strtol(arg, &e, 10); 
     2362+         if (*e) 
     2363+             optFatal("invalid number `%s'\n", arg); 
     2364+         if (errno == ERANGE 
     2365+             || (opt->type == OPT_INT && (tmp > INT_MAX || tmp < INT_MIN))) 
     2366+             optFatal("number `%s' to `%s' out of range\n", 
     2367+                      arg, optString(opt, lng)); 
     2368+         if (opt->type == OPT_INT) { 
     2369+             if (opt->flags & OPT_CALLFUNC) 
     2370+                 ((void (*)(int)) opt->arg)((int) tmp); 
     2371+             else 
     2372+                 *((int *) opt->arg) = (int) tmp; 
     2373+         } else /* OPT_LONG */ { 
     2374+             if (opt->flags & OPT_CALLFUNC) 
     2375+                 ((void (*)(long)) opt->arg)(tmp); 
     2376+             else 
     2377+                 *((long *) opt->arg) = tmp; 
     2378+         } 
     2379+         break; 
     2380+      } 
     2381+        
     2382+      case OPT_UINT: 
     2383+      case OPT_ULONG: { 
     2384+         unsigned long tmp; 
     2385+         char *e; 
     2386+          
     2387+         tmp = strtoul(arg, &e, 10); 
     2388+         if (*e) 
     2389+             optFatal("invalid number `%s'\n", arg); 
     2390+         if (errno == ERANGE 
     2391+             || (opt->type == OPT_UINT && tmp > UINT_MAX)) 
     2392+             optFatal("number `%s' to `%s' out of range\n", 
     2393+                      arg, optString(opt, lng)); 
     2394+         if (opt->type == OPT_UINT) { 
     2395+             if (opt->flags & OPT_CALLFUNC) 
     2396+                 ((void (*)(unsigned)) opt->arg)((unsigned) tmp); 
     2397+             else 
     2398+                 *((unsigned *) opt->arg) = (unsigned) tmp; 
     2399+         } else /* OPT_ULONG */ { 
     2400+             if (opt->flags & OPT_CALLFUNC) 
     2401+                 ((void (*)(unsigned long)) opt->arg)(tmp); 
     2402+             else 
     2403+                 *((unsigned long *) opt->arg) = tmp; 
     2404+         } 
     2405+         break; 
     2406+      } 
     2407+ 
     2408+      default: 
     2409+       break; 
     2410+    } 
     2411+} 
     2412+ 
     2413+/*-----------------------------------------------------------------------+ 
     2414+|  PUBLIC FUNCTIONS                                                      | 
     2415++-----------------------------------------------------------------------*/ 
     2416+ 
     2417+/*------------------------------------------------------------------------ 
     2418+ |  NAME          optSetFatalFunc 
     2419+ | 
     2420+ |  FUNCTION      Set function used to display error message and exit. 
     2421+ | 
     2422+ |  SYNOPSIS      #include "shhopt.h" 
     2423+ |                void optSetFatalFunc(void (*f)(const char *, ...)); 
     2424+ | 
     2425+ |  INPUT         f       function accepting printf()'like parameters, 
     2426+ |                        that _must_ abort the program. 
     2427+ */ 
     2428+void 
     2429+optSetFatalFunc(void (*f)(const char *, ...)) 
     2430+{ 
     2431+    optFatal = f; 
     2432+} 
     2433+ 
     2434+/*------------------------------------------------------------------------ 
     2435+ |  NAME          optParseOptions 
     2436+ | 
     2437+ |  FUNCTION      Parse commandline options. 
     2438+ | 
     2439+ |  SYNOPSIS      #include "shhopt.h" 
     2440+ |                void optParseOptions(int *argc, char *argv[], 
     2441+ |                                     optStruct opt[], int allowNegNum); 
     2442+ | 
     2443+ |  INPUT         argc    Pointer to number of options. 
     2444+ |                argv    Array of option-/argument-strings. 
     2445+ |                opt     Array of possible options. 
     2446+ |                allowNegNum 
     2447+ |                        a negative number is not to be taken as 
     2448+ |                        an option. 
     2449+ | 
     2450+ |  OUTPUT        argc    new argument count. 
     2451+ |                argv    array with arguments removed. 
     2452+ | 
     2453+ |  RETURNS       Nothing. Aborts in case of error. 
     2454+ | 
     2455+ |  DESCRIPTION   This function checks each option in the argv-array 
     2456+ |                against strings in the opt-array, and `executes' any 
     2457+ |                matching action. Any arguments to the options are 
     2458+ |                extracted and stored in the variables or passed to 
     2459+ |                functions pointed to by entries in opt. 
     2460+ | 
     2461+ |                Options and arguments used are removed from the argv- 
     2462+ |                array, and argc is decreased accordingly. 
     2463+ | 
     2464+ |                Any error leads to program abortion. 
     2465+ */ 
     2466+void 
     2467+optParseOptions(int *argc, char *argv[], optStruct opt[], int allowNegNum) 
     2468+{ 
     2469+    int  ai,        /* argv index. */ 
     2470+         optarg,    /* argv index of option argument, or -1 if none. */ 
     2471+         mi,        /* Match index in opt. */ 
     2472+         done; 
     2473+    char *arg,      /* Pointer to argument to an option. */ 
     2474+         *o,        /* pointer to an option character */ 
     2475+         *p; 
     2476+ 
     2477+    /* 
     2478+     *  Loop through all arguments. 
     2479+     */ 
     2480+    for (ai = 0; ai < *argc; ) { 
     2481+       /* 
     2482+        *  "--" indicates that the rest of the argv-array does not 
     2483+        *  contain options. 
     2484+        */ 
     2485+       if (strcmp(argv[ai], "--") == 0) { 
     2486+            argvRemove(argc, argv, ai); 
     2487+           break; 
     2488+       } 
     2489+ 
     2490+       if (allowNegNum && argv[ai][0] == '-' && isdigit(argv[ai][1])) { 
     2491+           ++ai; 
     2492+           continue; 
     2493+       } else if (strncmp(argv[ai], "--", 2) == 0) { 
     2494+           /* long option */ 
     2495+           /* find matching option */ 
     2496+           if ((mi = optMatch(opt, argv[ai] + 2, 1)) < 0) 
     2497+               optFatal("unrecognized option `%s'\n", argv[ai]); 
     2498+ 
     2499+           /* possibly locate the argument to this option. */ 
     2500+           arg = NULL; 
     2501+           if ((p = strchr(argv[ai], '=')) != NULL) 
     2502+               arg = p + 1; 
     2503+            
     2504+           /* does this option take an argument? */ 
     2505+           optarg = -1; 
     2506+           if (optNeedsArgument(&opt[mi])) { 
     2507+               /* option needs an argument. find it. */ 
     2508+               if (!arg) { 
     2509+                   if ((optarg = ai + 1) == *argc) 
     2510+                       optFatal("option `%s' requires an argument\n", 
     2511+                                optString(&opt[mi], 1)); 
     2512+                   arg = argv[optarg]; 
     2513+               } 
     2514+           } else { 
     2515+               if (arg) 
     2516+                   optFatal("option `%s' doesn't allow an argument\n", 
     2517+                            optString(&opt[mi], 1)); 
     2518+           } 
     2519+           /* perform the action of this option. */ 
     2520+           optExecute(&opt[mi], arg, 1); 
     2521+           /* remove option and any argument from the argv-array. */ 
     2522+            if (optarg >= 0) 
     2523+                argvRemove(argc, argv, ai); 
     2524+            argvRemove(argc, argv, ai); 
     2525+       } else if (*argv[ai] == '-') { 
     2526+           /* A dash by itself is not considered an option. */ 
     2527+           if (argv[ai][1] == '\0') { 
     2528+               ++ai; 
     2529+               continue; 
     2530+           } 
     2531+           /* Short option(s) following */ 
     2532+           o = argv[ai] + 1; 
     2533+           done = 0; 
     2534+           optarg = -1; 
     2535+           while (*o && !done) { 
     2536+               /* find matching option */ 
     2537+               if ((mi = optMatch(opt, o, 0)) < 0) 
     2538+                   optFatal("unrecognized option `-%c'\n", *o); 
     2539+ 
     2540+               /* does this option take an argument? */ 
     2541+               optarg = -1; 
     2542+               arg = NULL; 
     2543+               if (optNeedsArgument(&opt[mi])) { 
     2544+                   /* option needs an argument. find it. */ 
     2545+                   arg = o + 1; 
     2546+                   if (!*arg) { 
     2547+                       if ((optarg = ai + 1) == *argc) 
     2548+                           optFatal("option `%s' requires an argument\n", 
     2549+                                    optString(&opt[mi], 0)); 
     2550+                       arg = argv[optarg]; 
     2551+                   } 
     2552+                   done = 1; 
     2553+               } 
     2554+               /* perform the action of this option. */ 
     2555+               optExecute(&opt[mi], arg, 0); 
     2556+               ++o; 
     2557+           } 
     2558+           /* remove option and any argument from the argv-array. */ 
     2559+            if (optarg >= 0) 
     2560+                argvRemove(argc, argv, ai); 
     2561+            argvRemove(argc, argv, ai); 
     2562+       } else { 
     2563+           /* a non-option argument */ 
     2564+           ++ai; 
     2565+       } 
     2566+    } 
     2567+} 
     2568diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/shhopt.h msniff-0.2.0/shhopt-1.1.7/shhopt.h 
     2569--- msniff-0.2.0.orig/shhopt-1.1.7/shhopt.h     1970-01-01 02:00:00.000000000 +0200 
     2570+++ msniff-0.2.0/shhopt-1.1.7/shhopt.h  2002-03-02 21:44:27.000000000 +0200 
     2571@@ -0,0 +1,41 @@ 
     2572+/* $Id: shhopt.h,v 1.5 2000/03/10 08:32:39 sverrehu Exp $ */ 
     2573+#ifndef SHHOPT_H 
     2574+#define SHHOPT_H 
     2575+ 
     2576+#ifdef __cplusplus 
     2577+extern "C" { 
     2578+#endif 
     2579+ 
     2580+/* constants for recognized option types. */ 
     2581+typedef enum { 
     2582+    OPT_END,               /* nothing. used as ending element. */ 
     2583+    OPT_FLAG,              /* no argument following. sets variable to 1. */ 
     2584+    OPT_STRING,            /* string argument. */ 
     2585+    OPT_INT,               /* signed integer argument. */ 
     2586+    OPT_UINT,              /* unsigned integer argument. */ 
     2587+    OPT_LONG,              /* signed long integer argument. */ 
     2588+    OPT_ULONG              /* unsigned long integer argument. */ 
     2589+} optArgType; 
     2590+ 
     2591+/* flags modifying the default way options are handeled. */ 
     2592+#define OPT_CALLFUNC  1    /* pass argument to a function. */ 
     2593+ 
     2594+typedef struct { 
     2595+    char       shortName;  /* short option name. */ 
     2596+    char       *longName;  /* long option name, no including '--'. */ 
     2597+    optArgType type;       /* option type. */ 
     2598+    void       *arg;       /* pointer to variable to fill with argument, 
     2599+                            * or pointer to function if type == OPT_FUNC. */ 
     2600+    int        flags;      /* modifier flags. */ 
     2601+} optStruct; 
     2602+ 
     2603+ 
     2604+void optSetFatalFunc(void (*f)(const char *, ...)); 
     2605+void optParseOptions(int *argc, char *argv[], 
     2606+                    optStruct opt[], int allowNegNum); 
     2607+ 
     2608+#ifdef __cplusplus 
     2609+} 
     2610+#endif 
     2611+ 
     2612+#endif 
     2613diff -Naur msniff-0.2.0.orig/shhopt-1.1.7/TODO msniff-0.2.0/shhopt-1.1.7/TODO 
     2614--- msniff-0.2.0.orig/shhopt-1.1.7/TODO 1970-01-01 02:00:00.000000000 +0200 
     2615+++ msniff-0.2.0/shhopt-1.1.7/TODO      2002-03-02 21:44:27.000000000 +0200 
     2616@@ -0,0 +1,20 @@ 
     2617+From: bryanh@giraffe-data.com (Bryan Henderson) 
     2618+Subject: shhopt: extra comma 
     2619+Date: Wed, 8 Mar 2000 18:39:01 -0800 
     2620+To: shh@thathost.com 
     2621+ 
     2622+[...] 
     2623+ 
     2624+Here's an idea for an enhancement: supply functions to allocate and 
     2625+fill the optStruct dynamically.  Not because I see a need to change 
     2626+the command line syntax on the fly, but because this would allow one to 
     2627+include pointers to non-static storage in the optStruct.  I did this 
     2628+manually, with a macro, but the time I spent working out the details 
     2629+defied the spirit of shhopt! 
     2630+ 
     2631+And one more: Add an option to parse syntax like get_long_opt_only() 
     2632+(as opposed to get_long_opt()).  I.e. allow long options with only one 
     2633+hyphen.  That way we can have the two keystroke options that people 
     2634+enjoy so much without having to have two completely separate option 
     2635+syntaxes. 
     2636+======================================================================= 
  • packages/net/msniff/Makefile

     
     1#  
     2# Copyright (C) 2007 RoadRunner.cx 
     3# 
     4 
     5include $(TOPDIR)/rules.mk 
     6 
     7PKG_NAME:=msniff 
     8PKG_VERSION:=0.2.0 
     9PKG_RELEASE:=1 
     10 
     11PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz 
     12PKG_SOURCE_URL:=http://shh.thathost.com/pub-unix/files/ 
     13PKG_MD5SUM:=6efefdba17f092e8cee93fc44216b3df 
     14PKG_CAT:=zcat 
     15 
     16PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) 
     17 
     18include $(INCLUDE_DIR)/package.mk 
     19 
     20define Package/msniff 
     21  SECTION:=net 
     22  CATEGORY:=Network 
     23  DEPENDS:=+libpcap 
     24  TITLE:=simple sniffer for MSN Messenger messages 
     25  URL:=http://shh.thathost.com/pub-unix 
     26endef 
     27 
     28define Build/Compile 
     29        $(MAKE) -C $(PKG_BUILD_DIR)/shhmsg-1.4.1 \ 
     30                GCC="$(TARGET_CC)" \ 
     31                CCOPT="$(TARGET_CFLAGS) -I. -DHAVE_STRERROR" \ 
     32                dep all 
     33        $(MAKE) -C $(PKG_BUILD_DIR)/shhopt-1.1.7 \ 
     34                GCC="$(TARGET_CC)" \ 
     35                CCOPT="$(TARGET_CFLAGS) -I." \ 
     36                dep all 
     37        $(MAKE) -C $(PKG_BUILD_DIR) \ 
     38                GCC="$(TARGET_CC)" \ 
     39                LDFLAGS="$(TARGET_LDFLAGS)" \ 
     40                CCOPT="-I$(STAGING_DIR)/usr/include -DVERSION=\"0.2.0\" -DCOMPILED_DATE=\"`date '+%Y-%m-%d %H:%M:%S'`\" -DCOMPILED_BY=\"`whoami`\" $(TARGET_CFLAGS)" \ 
     41                all 
     42endef 
     43 
     44define Package/msniff/install 
     45        $(INSTALL_DIR) $(1)/usr/bin 
     46        $(CP) $(PKG_BUILD_DIR)/msniff $(1)/usr/bin/ 
     47        $(INSTALL_DIR) $(1)/etc/init.d 
     48        $(CP) ./files/msniff $(1)/etc/init.d 
     49endef 
     50 
     51$(eval $(call BuildPackage,msniff))