]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1167. [contrib] nslint-2.1a3 (from author).
authorMark Andrews <marka@isc.org>
Fri, 21 Dec 2001 04:12:05 +0000 (04:12 +0000)
committerMark Andrews <marka@isc.org>
Fri, 21 Dec 2001 04:12:05 +0000 (04:12 +0000)
25 files changed:
CHANGES
contrib/nslint-2.1a3/CHANGES [new file with mode: 0644]
contrib/nslint-2.1a3/FILES [new file with mode: 0644]
contrib/nslint-2.1a3/INSTALL [new file with mode: 0644]
contrib/nslint-2.1a3/Makefile.in [new file with mode: 0644]
contrib/nslint-2.1a3/README [new file with mode: 0644]
contrib/nslint-2.1a3/VERSION [new file with mode: 0644]
contrib/nslint-2.1a3/aclocal.m4 [new file with mode: 0644]
contrib/nslint-2.1a3/config.guess [new file with mode: 0644]
contrib/nslint-2.1a3/config.sub [new file with mode: 0644]
contrib/nslint-2.1a3/configure [new file with mode: 0644]
contrib/nslint-2.1a3/configure.in [new file with mode: 0644]
contrib/nslint-2.1a3/install-sh [new file with mode: 0644]
contrib/nslint-2.1a3/lbl/gnuc.h [new file with mode: 0644]
contrib/nslint-2.1a3/lbl/os-irix5.h [new file with mode: 0644]
contrib/nslint-2.1a3/lbl/os-osf3.h [new file with mode: 0644]
contrib/nslint-2.1a3/lbl/os-solaris2.h [new file with mode: 0644]
contrib/nslint-2.1a3/lbl/os-sunos4.h [new file with mode: 0644]
contrib/nslint-2.1a3/lbl/os-ultrix4.h [new file with mode: 0644]
contrib/nslint-2.1a3/mkdep [new file with mode: 0644]
contrib/nslint-2.1a3/nslint.8 [new file with mode: 0644]
contrib/nslint-2.1a3/nslint.c [new file with mode: 0644]
contrib/nslint-2.1a3/savestr.c [new file with mode: 0644]
contrib/nslint-2.1a3/savestr.h [new file with mode: 0644]
contrib/nslint-2.1a3/strerror.c [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 9575ac4bf144e7ac9e663e32d34468937597b2ae..031d22a80e5997891d94d12878a26aba4d10d968 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+1167.  [contrib]       nslint-2.1a3 (from author).
+
 1166.  [bug]           "Not Implemented" should be reported as NOTIMP,
                        not NOTIMPL. [RT #2281]
 
diff --git a/contrib/nslint-2.1a3/CHANGES b/contrib/nslint-2.1a3/CHANGES
new file mode 100644 (file)
index 0000000..c425e01
--- /dev/null
@@ -0,0 +1,191 @@
+@(#) $Id: CHANGES,v 1.1 2001/12/21 04:12:02 marka Exp $ (LBL)
+
+v2.1 Wed Aug 22 18:30:35 PDT 2001
+
+- Handle "srv" records.
+
+- Fix some ttl parsing problems.
+
+- Add "ignore" option
+
+v2.0.2 Tue Mar 20 17:49:13 PST 2001
+
+- Allow missing trailing dot in certain special cases.
+
+- Include zone names when checking NS records.
+
+- Document nslint.conf network keyword.
+
+v2.0.1 Tue Dec 14 11:24:31 PST 1999
+
+- Handle $ttl.
+
+- Fix some minor portability/compiler problems for OSF 4.
+
+- Correctly detect mx records that point to themselves but not a
+  real "a" record.
+
+- Fix file descriptor leak in doconf(). Thanks to Paul McIlfatrick
+  (paul.mcilfatrick@bt.com)
+
+v2.0 Wed Dec  9 16:48:54 PST 1998
+
+- Add support for BIND 8 named.conf file.
+
+- Support protocols in addition to tcp and udp for WKS records.
+  Resulted from a bug report from Petter Reinholdtsen (pere@td.org.uit.no)
+
+- Support dotted serial numbers in SOA records. Resulted from a
+  bug report from Frank Ederveen (frank@our.domaintje.com)
+
+- Ignore unknown statements and options in named.boot and named.conf
+  (instead of issuing warnings).
+
+- Handle '#' and C style named.conf comments.
+
+- Handle optional "in" in named.conf zone statements. Reported by
+  DJ Coster (djc@discoverbrokerage.com)
+
+- Add support for include directives in named.boot and named.conf.
+
+- Redo differing ttls check and do mx records in addition to a
+  records. Change place where soa values gets zeroed so they don't
+  get clobbered when we use includes.
+
+- Allow "@" abbr. for ptr, mx, cname and ns records.
+
+- Detect cname referenced by another cname or mx record.
+
+- Handle chaos records (to some minor extent).
+
+v1.7 Tue Jul 22 14:26:21 PDT 1997
+
+- Report differing ttls in A records. Check SOA records.
+
+- Detect hosts with more than one ip address on a subnet.
+
+v1.6.1 Sat Jun  7 03:12:01 PDT 1997
+
+- Fix "unknown service" printf format.
+
+- Fix off-by-one error in the ptr parsing code. Thanks to Andreas
+  Lamprecht (andreas.lamprecht@siemens.at)
+
+- Fix broken $origin code.
+
+v1.6 Mon Apr  7 19:09:52 PDT 1997
+
+- Add support for classless delegation.
+
+- Fix some case sensitive bugs.
+
+- Report domain names outside the current zone.
+
+- Fixed off-by-one bug that broke single character hostnames.
+
+- Increase size of hash table.
+
+- Make tcp and udp service name tables dynamic.
+
+- Improved error message for garbage in /etc/services.
+
+v1.5.1 Thu Jul 18 21:44:44 PDT 1996
+
+- Use $CC when checking gcc version. Thanks to Carl Lindberg
+  (carl_lindberg@blacksmith.com)
+
+- Raise size of hash table to 65K.
+
+v1.5 Fri Jul 12 18:58:47 PDT 1996
+
+- Detect extra octets and other garbage in PTR records.
+
+- Handle multi-line WKS records.
+
+- Allow multple WKS records (since we can have udp and tcp).
+
+- Convert to autoconf.
+
+- Declare optarg, optind and opterr extern. Thanks to Howard Moftich
+  (howardm@lsil.com).
+
+- BS/DOS does not have malloc.h. Thanks to Jordan Hayes
+  (jordan@thinkbank.com).
+
+- Correctly handle named.boot comments with leading whitespace.
+
+- Handle fully specified in-addr.arpa records. Resulted from a bug
+  report from Joe Kelly (joe@gol.com).
+
+- Fix endian problems. Thanks to Carl Lindberg (carl_lindberg@blacksmith.com).
+
+- Fixed some mixed case problems.
+
+- Update man page to describe how nslint.boot works.
+
+v1.4 Sat Jun  3 23:38:14 PDT 1995
+
+- Allow TXT records to exist with no other records.
+
+- Full system prototypes.
+
+- Complain about extra arguments.
+
+- Detect MX record chains.
+
+- Handle single line SOA records correctly. Thanks to Edward J. O'Brien
+  (ejobrie@sam.wal-mart.com)
+
+v1.3 Wed Mar  8 17:27:20 PST 1995
+
+- Add "allowdupa" record type for use with nslint.boot. This allows ip
+  addresses to have multiple A records.
+
+- Fixed bug that caused dangling cname references to not be reported
+  properly. Thanks to Edward J. O'Brien (ejobrie@sam.wal-mart.com).
+
+v1.2 Thu Sep  1 15:55:38 PDT 1994
+
+- Allow hostnames with a leading numeric as per rfc1123. Thanks to Bill
+  Gianopoulos (wag@sccux1.msd.ray.com).
+
+- Remove (undocumented) -u flag and allow uppercase.
+
+- Support TXT records. Thanks to Paul Pomes (paul@uxc.cso.uiuc.edu).
+
+- Support RP records.
+
+- Ignore new bind keywords.
+
+- Fix bug where we could exit with a zero status even though errors had
+  been detected
+
+- Complain about hosts that have smtp/tcp WKS entries but no MX records.
+
+- Add -B flag to handle PTR records that point outside the domains
+  listed in named.boot.
+
+v1.1 Sun May 22 20:43:03 PDT 1994
+
+- Allow ns records with no a records (the preferred way to go).
+
+- Fix typos in the sawstr array.
+
+- Use string.h instead of strings.h and add rindex(), index() and
+  bzero() macros for SYSV compatibility. Thanks to Bill King
+  (wrk@cle.ab.com).
+
+- Handle $origin directives. Thanks to Bill Gianopoulos
+  (wag@sccux1.msd.ray.com).
+
+- Fix add_domain() to work for the root. Thanks to Bill Gianopoulos.
+
+- Handle quotes in hinfo records. Thanks to Bill Gianopoulos.
+
+- Fix endian problems in parseinaddr() and parseptr().
+
+- Check non in-addr.arpa names for cname conflicts.
+
+v1.0 Thu Apr 21 11:02:59 PDT 1994
+
+- Initial release.
diff --git a/contrib/nslint-2.1a3/FILES b/contrib/nslint-2.1a3/FILES
new file mode 100644 (file)
index 0000000..ddb8d44
--- /dev/null
@@ -0,0 +1,24 @@
+CHANGES
+FILES
+INSTALL
+Makefile.in
+README
+VERSION
+aclocal.m4
+config.guess
+config.sub
+configure
+configure.in
+install-sh
+lbl/gnuc.h
+lbl/os-irix5.h
+lbl/os-osf3.h
+lbl/os-solaris2.h
+lbl/os-sunos4.h
+lbl/os-ultrix4.h
+mkdep
+nslint.8
+nslint.c
+savestr.c
+savestr.h
+strerror.c
diff --git a/contrib/nslint-2.1a3/INSTALL b/contrib/nslint-2.1a3/INSTALL
new file mode 100644 (file)
index 0000000..d451a97
--- /dev/null
@@ -0,0 +1,42 @@
+@(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/INSTALL,v 1.1 2001/12/21 04:12:02 marka Exp $ (LBL)
+
+You will need an ANSI C compiler to build nslint. The configure
+script will abort if your compiler is not ANSI compliant. If this
+happens, use the GNU C compiler, available via anonymous ftp:
+
+       ftp://prep.ai.mit.edu/pub/gnu/gcc.tar.gz
+
+If necessary, edit the BINDEST and MANDEST paths in Makefile.in
+and run ./configure (a shell script). "configure" will determine
+your system attributes and generate an appropriate Makefile from
+Makefile.in.  Now build nslint by running "make".
+
+If everything builds ok, su and type "make install" (and optionally
+"make install-man). This will install nslint and its manual entry.
+
+If your system is not one which we have tested nslint on, you may
+have to modify the configure script and Makefile.in. Please send
+us patches for any modifications you need to make.
+
+FILES
+-----
+CHANGES                - description of differences between releases
+FILES          - list of files exported as part of the distribution
+INSTALL                - this file
+Makefile.in    - compilation rules (input to the configure script)
+README         - description of distribution
+VERSION                - version of this release
+aclocal.m4     - autoconf macros
+config.guess   - autoconf support
+config.sub     - autoconf support
+configure      - configure script (run this first)
+configure.in   - configure script source
+install-sh     - BSD style install script
+lbl/gnuc.h     - gcc macros and defines
+lbl/os-*.h     - os dependent defines and prototypes
+mkdep          - construct Makefile dependency list
+nslint.8       - manual entry
+nslint.c       - main program
+savestr.c      - strdup() replacement
+savestr.h      - savestr prototypes
+strerror.c     - missing routine
diff --git a/contrib/nslint-2.1a3/Makefile.in b/contrib/nslint-2.1a3/Makefile.in
new file mode 100644 (file)
index 0000000..5f21cc4
--- /dev/null
@@ -0,0 +1,122 @@
+#  Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 2000
+#      The Regents of the University of California.  All rights reserved.
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that: (1) source code distributions
+#  retain the above copyright notice and this paragraph in its entirety, (2)
+#  distributions including binary code include the above copyright notice and
+#  this paragraph in its entirety in the documentation or other materials
+#  provided with the distribution, and (3) all advertising materials mentioning
+#  features or use of this software display the following acknowledgement:
+#  ``This product includes software developed by the University of California,
+#  Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+#  the University nor the names of its contributors may be used to endorse
+#  or promote products derived from this software without specific prior
+#  written permission.
+#  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+#  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+#
+# @(#) $Id: Makefile.in,v 1.1 2001/12/21 04:12:02 marka Exp $ (LBL)
+
+#
+# Various configurable paths (remember to edit Makefile.in, not Makefile)
+#
+
+# Top level hierarchy
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+# Pathname of directory to install the binary
+BINDEST = @bindir@
+# Pathname of directory to install the man page
+MANDEST = @mandir@
+
+# VPATH
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+#
+# You shouldn't need to edit anything below here.
+#
+
+PROG = nslint
+CC = @CC@
+CCOPT = @V_CCOPT@
+INCLS = @V_INCLS@
+DEFS = @DEFS@
+
+# Standard CFLAGS
+CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
+
+# Standard LIBS
+LIBS = @LIBS@
+
+INSTALL = @INSTALL@
+
+# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
+# Also, gcc does not remove the .o before forking 'as', which can be a
+# problem if you don't own the file but can write to the directory.
+.c.o:
+       @rm -f $@
+       $(CC) $(CFLAGS) -c $(srcdir)/$*.c
+
+CSRC = nslint.c savestr.c
+GENSRC = version.c
+
+SRC =  $(CSRC) $(GENSRC)
+
+# We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
+# hack the extra indirection
+OBJ =   $(CSRC:.c=.o) $(GENSRC:.c=.o) @LIBOBJS@
+
+TAGHDR = \
+       /usr/include/sys/types.h \
+       /usr/include/netinet/in.h
+
+TAGFILES = $(SRC) $(TAGHDR)
+
+CLEANFILES = $(PROG) $(OBJ) $(GENSRC)
+
+$(PROG): $(OBJ)
+       @rm -f $@
+       $(CC) $(CFLAGS) -o $@ $(OBJ) $(LIBS)
+
+version.o: version.c
+version.c: $(srcdir)/VERSION
+       @rm -f $@
+       sed -e 's/.*/char version[] = "&";/' $(srcdir)/VERSION > $@
+
+install: force
+       $(INSTALL) -m 555 -o bin -g bin $(PROG) $(DESTDIR)$(BINDEST)/$(PROG)
+
+install-man: force
+       $(INSTALL) -m 444 -o bin -g bin $(srcdir)/$(PROG).8 \
+           $(DESTDIR)$(MANDEST)/man8/$(PROG).8
+
+clean: force
+       rm -f $(CLEANFILES)
+
+distclean: force
+       rm -f $(CLEANFILES) Makefile config.cache config.log config.status \
+           gnuc.h os-proto.h
+
+tags:  $(TAGFILES)
+       ctags -wtd $(TAGFILES)
+
+tar: force
+       @cwd=`pwd` ; name=$(PROG)-`cat VERSION` ; \
+           list="" ; tar="tar chf" ; temp="$$name.tar.gz" ; \
+           for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
+           echo \
+           "rm -f $$name; ln -s . $$name" ; \
+            rm -f $$name; ln -s . $$name ; \
+           echo \
+           "$$tar - [lots of files] | gzip > $$temp" ; \
+            $$tar - $$list | gzip > $$temp ; \
+           echo \
+           "rm -f $$name" ; \
+            rm -f $$name
+
+force: /tmp
+depend:        $(GENSRC) force
+       ./mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
diff --git a/contrib/nslint-2.1a3/README b/contrib/nslint-2.1a3/README
new file mode 100644 (file)
index 0000000..39f0202
--- /dev/null
@@ -0,0 +1,14 @@
+@(#) $Id: README,v 1.1 2001/12/21 04:12:02 marka Exp $ (LBL)
+
+NSLINT 2.0
+Lawrence Berkeley National Laboratory
+Network Research Group
+nslint@ee.lbl.gov
+ftp://ftp.ee.lbl.gov/nslint.tar.gz
+
+This directory contains source code for nslint, a lint program for dns
+files.
+
+Please send bugs and comments to nslint@ee.lbl.gov.
+
+ - Craig Leres
diff --git a/contrib/nslint-2.1a3/VERSION b/contrib/nslint-2.1a3/VERSION
new file mode 100644 (file)
index 0000000..375279c
--- /dev/null
@@ -0,0 +1 @@
+2.1a3
diff --git a/contrib/nslint-2.1a3/aclocal.m4 b/contrib/nslint-2.1a3/aclocal.m4
new file mode 100644 (file)
index 0000000..a5e3035
--- /dev/null
@@ -0,0 +1,765 @@
+dnl @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/aclocal.m4,v 1.1 2001/12/21 04:12:03 marka Exp $ (LBL)
+dnl
+dnl Copyright (c) 1995, 1996, 1997, 1998, 1999
+dnl    The Regents of the University of California.  All rights reserved.
+dnl
+dnl Redistribution and use in source and binary forms, with or without
+dnl modification, are permitted provided that: (1) source code distributions
+dnl retain the above copyright notice and this paragraph in its entirety, (2)
+dnl distributions including binary code include the above copyright notice and
+dnl this paragraph in its entirety in the documentation or other materials
+dnl provided with the distribution, and (3) all advertising materials mentioning
+dnl features or use of this software display the following acknowledgement:
+dnl ``This product includes software developed by the University of California,
+dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+dnl the University nor the names of its contributors may be used to endorse
+dnl or promote products derived from this software without specific prior
+dnl written permission.
+dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+dnl
+dnl LBL autoconf macros
+dnl
+
+dnl
+dnl Determine which compiler we're using (cc or gcc)
+dnl If using gcc, determine the version number
+dnl If using cc, require that it support ansi prototypes
+dnl If using gcc, use -O2 (otherwise use -O)
+dnl If using cc, explicitly specify /usr/local/include
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_C_INIT(copt, incls)
+dnl
+dnl results:
+dnl
+dnl    $1 (copt set)
+dnl    $2 (incls set)
+dnl    CC
+dnl    LDFLAGS
+dnl    LBL_CFLAGS
+dnl
+AC_DEFUN(AC_LBL_C_INIT,
+    [AC_PREREQ(2.12)
+    AC_BEFORE([$0], [AC_PROG_CC])
+    AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
+    AC_BEFORE([$0], [AC_LBL_DEVEL])
+    AC_ARG_WITH(gcc, [  --without-gcc           don't use gcc])
+    $1="-O"
+    $2=""
+    if test "${srcdir}" != "." ; then
+           $2="-I\$\(srcdir\)"
+    fi
+    if test "${CFLAGS+set}" = set; then
+           LBL_CFLAGS="$CFLAGS"
+    fi
+    if test -z "$CC" ; then
+           case "$target_os" in
+
+           bsdi*)
+                   AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
+                   if test $SHLICC2 = yes ; then
+                           CC=shlicc2
+                           export CC
+                   fi
+                   ;;
+           esac
+    fi
+    if test -z "$CC" -a "$with_gcc" = no ; then
+           CC=cc
+           export CC
+    fi
+    AC_PROG_CC
+    if test "$GCC" != yes ; then
+           AC_MSG_CHECKING(that $CC handles ansi prototypes)
+           AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes,
+               AC_TRY_COMPILE(
+                   [#include <sys/types.h>],
+                   [int frob(int, char *)],
+                   ac_cv_lbl_cc_ansi_prototypes=yes,
+                   ac_cv_lbl_cc_ansi_prototypes=no))
+           AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes)
+           if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
+                   case "$target_os" in
+
+                   hpux*)
+                           AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
+                           savedcflags="$CFLAGS"
+                           CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
+                           AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa,
+                               AC_TRY_COMPILE(
+                                   [#include <sys/types.h>],
+                                   [int frob(int, char *)],
+                                   ac_cv_lbl_cc_hpux_cc_aa=yes,
+                                   ac_cv_lbl_cc_hpux_cc_aa=no))
+                           AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa)
+                           if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
+                                   AC_MSG_ERROR(see the INSTALL doc for more info)
+                           fi
+                           CFLAGS="$savedcflags"
+                           $1="-Aa $$1"
+                           AC_DEFINE(_HPUX_SOURCE)
+                           ;;
+
+                   *)
+                           AC_MSG_ERROR(see the INSTALL doc for more info)
+                           ;;
+                   esac
+           fi
+           $2="$$2 -I/usr/local/include"
+           LDFLAGS="$LDFLAGS -L/usr/local/lib"
+
+           case "$target_os" in
+
+           irix*)
+                   $1="$$1 -xansi -signed -g3"
+                   ;;
+
+           osf*)
+                   $1="$$1 -std1 -g3"
+                   ;;
+
+           ultrix*)
+                   AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
+                   AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
+                       AC_TRY_COMPILE(
+                           [#include <sys/types.h>],
+                           [struct a { int b; };
+                           void c(const struct a *)],
+                           ac_cv_lbl_cc_const_proto=yes,
+                           ac_cv_lbl_cc_const_proto=no))
+                   AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
+                   if test $ac_cv_lbl_cc_const_proto = no ; then
+                           AC_DEFINE(const,)
+                   fi
+                   ;;
+           esac
+    fi
+])
+
+dnl
+dnl Use pfopen.c if available and pfopen() not in standard libraries
+dnl Require libpcap
+dnl Look for libpcap in ..
+dnl Use the installed libpcap if there is no local version
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_LIBPCAP(pcapdep, incls)
+dnl
+dnl results:
+dnl
+dnl    $1 (pcapdep set)
+dnl    $2 (incls appended)
+dnl    LIBS
+dnl    LDFLAGS
+dnl    LBL_LIBS
+dnl
+AC_DEFUN(AC_LBL_LIBPCAP,
+    [AC_REQUIRE([AC_LBL_LIBRARY_NET])
+    dnl
+    dnl save a copy before locating libpcap.a
+    dnl
+    LBL_LIBS="$LIBS"
+    pfopen=/usr/examples/packetfilter/pfopen.c
+    if test -f $pfopen ; then
+           AC_CHECK_FUNCS(pfopen)
+           if test $ac_cv_func_pfopen = "no" ; then
+                   AC_MSG_RESULT(Using $pfopen)
+                   LIBS="$LIBS $pfopen"
+           fi
+    fi
+    AC_MSG_CHECKING(for local pcap library)
+    libpcap=FAIL
+    lastdir=FAIL
+    places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
+       egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
+    for dir in $places ../libpcap libpcap ; do
+           basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
+           if test $lastdir = $basedir ; then
+                   dnl skip alphas when an actual release is present
+                   continue;
+           fi
+           lastdir=$dir
+           if test -r $dir/pcap.c ; then
+                   libpcap=$dir/libpcap.a
+                   d=$dir
+                   dnl continue and select the last one that exists
+           fi
+    done
+    if test "x$libpcap" = xFAIL ; then
+           AC_MSG_RESULT(not found)
+           unset ac_cv_lbl_lib_pcap_pcap_open_live_
+           AC_LBL_CHECK_LIB(pcap, pcap_open_live, libpcap="-lpcap")
+           if test "x$libpcap" = xFAIL ; then
+                   unset ac_cv_lbl_lib_pcap_pcap_open_live_
+                   CFLAGS="$CFLAGS -I/usr/local/include"
+                   LIBS="$LIBS -L/usr/local/lib"
+                   AC_LBL_CHECK_LIB(pcap, pcap_open_live, libpcap="-lpcap")
+                   if test "x$libpcap" = xFAIL ; then
+                           AC_MSG_ERROR(see the INSTALL doc for more info)
+                   fi
+                   $2="$$2 -I/usr/local/include"
+           fi
+           LIBS="$LIBS -lpcap"
+    else
+           $1=$libpcap
+           $2="-I$d $$2"
+           AC_MSG_RESULT($libpcap)
+    fi
+    if test "x$libpcap" != "x-lpcap" ; then
+           LIBS="$libpcap $LIBS"
+    fi
+    case "$target_os" in
+
+    aix*)
+           pseexe="/lib/pse.exp"
+           AC_MSG_CHECKING(for $pseexe)
+           if test -f $pseexe ; then
+                   AC_MSG_RESULT(yes)
+                   LIBS="$LIBS -I:$pseexe"
+           fi
+           ;;
+    esac])
+
+dnl
+dnl Define RETSIGTYPE and RETSIGVAL
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_TYPE_SIGNAL
+dnl
+dnl results:
+dnl
+dnl    RETSIGTYPE (defined)
+dnl    RETSIGVAL (defined)
+dnl
+AC_DEFUN(AC_LBL_TYPE_SIGNAL,
+    [AC_BEFORE([$0], [AC_LBL_LIBPCAP])
+    AC_TYPE_SIGNAL
+    if test "$ac_cv_type_signal" = void ; then
+           AC_DEFINE(RETSIGVAL,)
+    else
+           AC_DEFINE(RETSIGVAL,(0))
+    fi
+    case "$target_os" in
+
+    irix*)
+           AC_DEFINE(_BSD_SIGNALS)
+           ;;
+
+    *)
+           dnl prefer sigset() to sigaction()
+           AC_CHECK_FUNCS(sigset)
+           if test $ac_cv_func_sigset = yes ; then
+                   AC_DEFINE(signal,sigset)
+           else
+                   AC_CHECK_FUNCS(sigaction)
+           fi
+           ;;
+    esac])
+
+dnl
+dnl If using gcc, make sure we have ANSI ioctl definitions
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_FIXINCLUDES
+dnl
+AC_DEFUN(AC_LBL_FIXINCLUDES,
+    [if test "$GCC" = yes ; then
+           AC_MSG_CHECKING(for ANSI ioctl definitions)
+           AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
+               AC_TRY_COMPILE(
+                   [/*
+                    * This generates a "duplicate case value" when fixincludes
+                    * has not be run.
+                    */
+#              include <sys/types.h>
+#              include <sys/time.h>
+#              include <sys/ioctl.h>
+#              ifdef HAVE_SYS_IOCCOM_H
+#              include <sys/ioccom.h>
+#              endif],
+                   [switch (0) {
+                   case _IO('A', 1):;
+                   case _IO('B', 1):;
+                   }],
+                   ac_cv_lbl_gcc_fixincludes=yes,
+                   ac_cv_lbl_gcc_fixincludes=no))
+           AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
+           if test $ac_cv_lbl_gcc_fixincludes = no ; then
+                   # Don't cache failure
+                   unset ac_cv_lbl_gcc_fixincludes
+                   AC_MSG_ERROR(see the INSTALL for more info)
+           fi
+    fi])
+
+dnl
+dnl Check for flex, default to lex
+dnl Require flex 2.4 or higher
+dnl Check for bison, default to yacc
+dnl Default to lex/yacc if both flex and bison are not available
+dnl Define the yy prefix string if using flex and bison
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
+dnl
+dnl results:
+dnl
+dnl    $1 (lex set)
+dnl    $2 (yacc appended)
+dnl    $3 (optional flex and bison -P prefix)
+dnl
+AC_DEFUN(AC_LBL_LEX_AND_YACC,
+    [AC_ARG_WITH(flex, [  --without-flex          don't use flex])
+    AC_ARG_WITH(bison, [  --without-bison         don't use bison])
+    if test "$with_flex" = no ; then
+           $1=lex
+    else
+           AC_CHECK_PROGS($1, flex, lex)
+    fi
+    if test "$$1" = flex ; then
+           # The -V flag was added in 2.4
+           AC_MSG_CHECKING(for flex 2.4 or higher)
+           AC_CACHE_VAL(ac_cv_lbl_flex_v24,
+               if flex -V >/dev/null 2>&1; then
+                       ac_cv_lbl_flex_v24=yes
+               else
+                       ac_cv_lbl_flex_v24=no
+               fi)
+           AC_MSG_RESULT($ac_cv_lbl_flex_v24)
+           if test $ac_cv_lbl_flex_v24 = no ; then
+                   s="2.4 or higher required"
+                   AC_MSG_WARN(ignoring obsolete flex executable ($s))
+                   $1=lex
+           fi
+    fi
+    if test "$with_bison" = no ; then
+           $2=yacc
+    else
+           AC_CHECK_PROGS($2, bison, yacc)
+    fi
+    if test "$$2" = bison ; then
+           $2="$$2 -y"
+    fi
+    if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
+           AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
+           $1=lex
+           $2=yacc
+    fi
+    if test "$$1" = flex -a -n "$3" ; then
+           $1="$$1 -P$3"
+           $2="$$2 -p $3"
+    fi])
+
+dnl
+dnl Checks to see if union wait is used with WEXITSTATUS()
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_UNION_WAIT
+dnl
+dnl results:
+dnl
+dnl    DECLWAITSTATUS (defined)
+dnl
+AC_DEFUN(AC_LBL_UNION_WAIT,
+    [AC_MSG_CHECKING(if union wait is used)
+    AC_CACHE_VAL(ac_cv_lbl_union_wait,
+       AC_TRY_COMPILE([
+#      include <sys/types.h>
+#      include <sys/wait.h>],
+           [int status;
+           u_int i = WEXITSTATUS(status);
+           u_int j = waitpid(0, &status, 0);],
+           ac_cv_lbl_union_wait=no,
+           ac_cv_lbl_union_wait=yes))
+    AC_MSG_RESULT($ac_cv_lbl_union_wait)
+    if test $ac_cv_lbl_union_wait = yes ; then
+           AC_DEFINE(DECLWAITSTATUS,union wait)
+    else
+           AC_DEFINE(DECLWAITSTATUS,int)
+    fi])
+
+dnl
+dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_SOCKADDR_SA_LEN
+dnl
+dnl results:
+dnl
+dnl    HAVE_SOCKADDR_SA_LEN (defined)
+dnl
+AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
+    [AC_MSG_CHECKING(if sockaddr struct has sa_len member)
+    AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
+       AC_TRY_COMPILE([
+#      include <sys/types.h>
+#      include <sys/socket.h>],
+       [u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
+       ac_cv_lbl_sockaddr_has_sa_len=yes,
+       ac_cv_lbl_sockaddr_has_sa_len=no))
+    AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
+    if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
+           AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
+    fi])
+
+dnl
+dnl Checks to see if the IFF_LOOPBACK exists as a define or enum
+dnl
+dnl   (stupidly some versions of linux use an enum...)
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_IFF_LOOPBACK
+dnl
+dnl results:
+dnl
+dnl    HAVE_IFF_LOOPBACK (defined)
+dnl
+AC_DEFUN(AC_LBL_IFF_LOOPBACK,
+    [AC_MSG_CHECKING(for IFF_LOOPBACK define/enum)
+    AC_CACHE_VAL(ac_cv_lbl_have_iff_loopback,
+       AC_TRY_COMPILE([
+#      include <sys/param.h>
+#      include <sys/file.h>
+#      include <sys/ioctl.h>
+#      include <sys/socket.h>
+#      ifdef HAVE_SYS_SOCKIO_H
+#      include <sys/sockio.h>
+#      endif
+#      include <sys/time.h>
+#      include <net/if.h>
+#      include <netinet/in.h>],
+       [int i = IFF_LOOPBACK],
+       ac_cv_lbl_have_iff_loopback=yes,
+       ac_cv_lbl_have_iff_loopback=no))
+    AC_MSG_RESULT($ac_cv_lbl_have_iff_loopback)
+    if test $ac_cv_lbl_have_iff_loopback = yes ; then
+           AC_DEFINE(HAVE_IFF_LOOPBACK)
+    fi])
+
+dnl
+dnl Checks to see if -R is used
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_HAVE_RUN_PATH
+dnl
+dnl results:
+dnl
+dnl    ac_cv_lbl_have_run_path (yes or no)
+dnl
+AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
+    [AC_MSG_CHECKING(for ${CC-cc} -R)
+    AC_CACHE_VAL(ac_cv_lbl_have_run_path,
+       [echo 'main(){}' > conftest.c
+       ${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
+       if test ! -s conftest.out ; then
+               ac_cv_lbl_have_run_path=yes
+       else
+               ac_cv_lbl_have_run_path=no
+       fi
+       rm -f conftest*])
+    AC_MSG_RESULT($ac_cv_lbl_have_run_path)
+    ])
+
+dnl
+dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless.
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_CHECK_TYPE
+dnl
+dnl results:
+dnl
+dnl    int32_t (defined)
+dnl    u_int32_t (defined)
+dnl
+AC_DEFUN(AC_LBL_CHECK_TYPE,
+    [AC_MSG_CHECKING(for $1 using $CC)
+    AC_CACHE_VAL(ac_cv_lbl_have_$1,
+       AC_TRY_COMPILE([
+#      include "confdefs.h"
+#      include <sys/types.h>
+#      if STDC_HEADERS
+#      include <stdlib.h>
+#      include <stddef.h>
+#      endif],
+       [$1 i],
+       ac_cv_lbl_have_$1=yes,
+       ac_cv_lbl_have_$1=no))
+    AC_MSG_RESULT($ac_cv_lbl_have_$1)
+    if test $ac_cv_lbl_have_$1 = no ; then
+           AC_DEFINE($1, $2)
+    fi])
+
+dnl
+dnl Checks to see if unaligned memory accesses fail
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_UNALIGNED_ACCESS
+dnl
+dnl results:
+dnl
+dnl    LBL_ALIGN (DEFINED)
+dnl
+AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
+    [AC_MSG_CHECKING(if unaligned accesses fail)
+    AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
+       [case "$target_cpu" in
+
+       alpha|hp*|mips|sparc)
+               ac_cv_lbl_unaligned_fail=yes
+               ;;
+
+       *)
+               cat >conftest.c <<EOF
+#              include <sys/types.h>
+#              include <sys/wait.h>
+#              include <stdio.h>
+               unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
+               main() {
+               unsigned int i;
+               pid_t pid;
+               int status;
+               /* avoid "core dumped" message */
+               pid = fork();
+               if (pid <  0)
+                       exit(2);
+               if (pid > 0) {
+                       /* parent */
+                       pid = waitpid(pid, &status, 0);
+                       if (pid < 0)
+                               exit(3);
+                       exit(!WIFEXITED(status));
+               }
+               /* child */
+               i = *(unsigned int *)&a[[1]];
+               printf("%d\n", i);
+               exit(0);
+               }
+EOF
+               ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
+                   conftest.c $LIBS >/dev/null 2>&1
+               if test ! -x conftest ; then
+                       dnl failed to compile for some reason
+                       ac_cv_lbl_unaligned_fail=yes
+               else
+                       ./conftest >conftest.out
+                       if test ! -s conftest.out ; then
+                               ac_cv_lbl_unaligned_fail=yes
+                       else
+                               ac_cv_lbl_unaligned_fail=no
+                       fi
+               fi
+               rm -f conftest* core core.conftest
+               ;;
+       esac])
+    AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
+    if test $ac_cv_lbl_unaligned_fail = yes ; then
+           AC_DEFINE(LBL_ALIGN)
+    fi])
+
+dnl
+dnl add all warning option to CFLAGS
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_CHECK_WALL(copt)
+dnl
+dnl results:
+dnl
+dnl    $1 (copt appended)
+dnl    ac_cv_lbl_gcc_vers
+dnl
+AC_DEFUN(AC_LBL_CHECK_WALL,
+    [ if test "$GCC" = yes ; then
+           if test "$SHLICC2" = yes ; then
+                   ac_cv_lbl_gcc_vers=2
+                   $1="`echo $$1 | sed -e 's/-O/-O2/'`"
+           else
+                   AC_MSG_CHECKING(gcc version)
+                   AC_CACHE_VAL(ac_cv_lbl_gcc_vers,
+                       ac_cv_lbl_gcc_vers=`$CC --version 2>&1 | \
+                           sed -e 's/\..*//'`)
+                   AC_MSG_RESULT($ac_cv_lbl_gcc_vers)
+                   if test $ac_cv_lbl_gcc_vers -gt 1 ; then
+                           $1="`echo $$1 | sed -e 's/-O/-O2/'`"
+                   fi
+           fi
+           if test "${LBL_CFLAGS+set}" != set; then
+                   if test "$ac_cv_prog_cc_g" = yes ; then
+                           $1="-g $$1"
+                   fi
+                   $1="$$1 -Wall"
+                   if test $ac_cv_lbl_gcc_vers -gt 1 ; then
+                           $1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
+                   fi
+           fi
+    else
+           case "$target_os" in
+
+           irix6*)
+                   $1="$$1 -fullwarn -n32"
+                   ;;
+
+           *)
+                   ;;
+           esac
+    fi])
+
+dnl
+dnl If using gcc and the file .devel exists:
+dnl    Compile with -g (if supported) and -Wall
+dnl    If using gcc 2, do extra prototype checking
+dnl    If an os prototype include exists, symlink os-proto.h to it
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_DEVEL(copt)
+dnl
+dnl results:
+dnl
+dnl    $1 (copt appended)
+dnl    HAVE_OS_PROTO_H (defined)
+dnl    os-proto.h (symlinked)
+dnl
+AC_DEFUN(AC_LBL_DEVEL,
+    [rm -f os-proto.h
+    if test "${LBL_CFLAGS+set}" = set; then
+           $1="$$1 ${LBL_CFLAGS}"
+    fi
+    if test -f .devel ; then
+           AC_LBL_CHECK_WALL($1)
+           os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
+           name="lbl/os-$os.h"
+           if test -f $name ; then
+                   ln -s $name os-proto.h
+                   AC_DEFINE(HAVE_OS_PROTO_H)
+           else
+                   AC_MSG_WARN(can't find $name)
+           fi
+    fi])
+
+dnl
+dnl Improved version of AC_CHECK_LIB
+dnl
+dnl Thanks to John Hawkinson (jhawk@mit.edu)
+dnl
+dnl usage:
+dnl
+dnl    AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
+dnl        ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
+dnl
+dnl results:
+dnl
+dnl    LIBS
+dnl
+
+define(AC_LBL_CHECK_LIB,
+[AC_MSG_CHECKING([for $2 in -l$1])
+dnl Use a cache variable name containing both the library and function name,
+dnl because the test really is for library $1 defining function $2, not
+dnl just for library $1.  Separate tests with the same $1 and different $2's
+dnl may have different results.
+ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
+AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
+[ac_save_LIBS="$LIBS"
+LIBS="-l$1 $5 $LIBS"
+AC_TRY_LINK(dnl
+ifelse([$2], [main], , dnl Avoid conflicting decl of main.
+[/* Override any gcc2 internal prototype to avoid an error.  */
+]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
+extern "C"
+#endif
+])dnl
+[/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $2();
+]),
+           [$2()],
+           eval "ac_cv_lbl_lib_$ac_lib_var=yes",
+           eval "ac_cv_lbl_lib_$ac_lib_var=no")
+LIBS="$ac_save_LIBS"
+])dnl
+if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
+  AC_MSG_RESULT(yes)
+  ifelse([$3], ,
+[changequote(, )dnl
+  ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+changequote([, ])dnl
+  AC_DEFINE_UNQUOTED($ac_tr_lib)
+  LIBS="-l$1 $LIBS"
+], [$3])
+else
+  AC_MSG_RESULT(no)
+ifelse([$4], , , [$4
+])dnl
+fi
+])
+
+dnl
+dnl AC_LBL_LIBRARY_NET
+dnl
+dnl This test is for network applications that need socket() and
+dnl gethostbyname() -ish functions.  Under Solaris, those applications
+dnl need to link with "-lsocket -lnsl".  Under IRIX, they need to link
+dnl with "-lnsl" but should *not* link with "-lsocket" because
+dnl libsocket.a breaks a number of things (for instance:
+dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
+dnl versions of IRIX).
+dnl
+dnl Unfortunately, many application developers are not aware of this,
+dnl and mistakenly write tests that cause -lsocket to be used under
+dnl IRIX.  It is also easy to write tests that cause -lnsl to be used
+dnl under operating systems where neither are necessary (or useful),
+dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
+dnl
+dnl This test exists so that every application developer does not test
+dnl this in a different, and subtly broken fashion.
+
+dnl It has been argued that this test should be broken up into two
+dnl seperate tests, one for the resolver libraries, and one for the
+dnl libraries necessary for using Sockets API. Unfortunately, the two
+dnl are carefully intertwined and allowing the autoconf user to use
+dnl them independantly potentially results in unfortunate ordering
+dnl dependancies -- as such, such component macros would have to
+dnl carefully use indirection and be aware if the other components were
+dnl executed. Since other autoconf macros do not go to this trouble,
+dnl and almost no applications use sockets without the resolver, this
+dnl complexity has not been implemented.
+dnl
+dnl The check for libresolv is in case you are attempting to link
+dnl statically and happen to have a libresolv.a lying around (and no
+dnl libnsl.a).
+dnl
+AC_DEFUN(AC_LBL_LIBRARY_NET, [
+    # Most operating systems have gethostbyname() in the default searched
+    # libraries (i.e. libc):
+    AC_CHECK_FUNC(gethostbyname, ,
+       # Some OSes (eg. Solaris) place it in libnsl:
+       AC_LBL_CHECK_LIB(nsl, gethostbyname, , 
+           # Some strange OSes (SINIX) have it in libsocket:
+           AC_LBL_CHECK_LIB(socket, gethostbyname, ,
+               # Unfortunately libsocket sometimes depends on libnsl.
+               # AC_CHECK_LIB's API is essentially broken so the
+               # following ugliness is necessary:
+               AC_LBL_CHECK_LIB(socket, gethostbyname,
+                   LIBS="-lsocket -lnsl $LIBS",
+                   AC_CHECK_LIB(resolv, gethostbyname),
+                   -lnsl))))
+    AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
+       AC_LBL_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
+           -lnsl)))
+    # DLPI needs putmsg under HPUX so test for -lstr while we're at it
+    AC_CHECK_LIB(str, putmsg)
+    ])
diff --git a/contrib/nslint-2.1a3/config.guess b/contrib/nslint-2.1a3/config.guess
new file mode 100644 (file)
index 0000000..e9e4455
--- /dev/null
@@ -0,0 +1,693 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    alpha:OSF1:*:*)
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
+       exit 0 ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-cbm-sysv4
+       exit 0;;
+    amiga:NetBSD:*:*)
+      echo m68k-cbm-netbsd${UNAME_RELEASE}
+      exit 0 ;;
+    amiga:OpenBSD:*:*)
+      echo m68k-cbm-openbsd${UNAME_RELEASE}
+      exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit 0;;
+    Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit 0 ;;
+    NILE:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit 0 ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:NetBSD:*:*)
+       echo m68k-atari-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:OpenBSD:*:*)
+       echo m68k-atari-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sun3*:NetBSD:*:*)
+       echo m68k-sun-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sun3*:OpenBSD:*:*)
+       echo m68k-sun-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:NetBSD:*:*)
+       echo m68k-apple-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:OpenBSD:*:*)
+       echo m68k-apple-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit 0 ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit 0 ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       sed 's/^        //' << EOF >dummy.c
+       int main (argc, argv) int argc; char **argv; {
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       ${CC-cc} dummy.c -o dummy \
+         && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+         && rm dummy.c dummy && exit 0
+       rm -f dummy.c dummy
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit 0 ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit 0 ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit 0 ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+       if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+            -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+       else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+       fi
+        else echo i586-dg-dgux${UNAME_RELEASE}
+        fi
+       exit 0 ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit 0 ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit 0 ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i?86:AIX:*:*)
+       echo i386-ibm-aix
+       exit 0 ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               sed 's/^                //' << EOF >dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+               rm -f dummy.c dummy
+               echo rs6000-ibm-aix3.2.5
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit 0 ;;
+    *:AIX:*:4)
+       if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=4.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit 0 ;;
+    9000/[3478]??:HP-UX:*:*)
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
+           9000/8?? )            HP_ARCH=hppa1.0 ;;
+       esac
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    3050*:HI-UX:*:*)
+       sed 's/^        //' << EOF >dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+       rm -f dummy.c dummy
+       echo unknown-hitachi-hiuxwe2
+       exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit 0 ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit 0 ;;
+    i?86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit 0 ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*X-MP:*:*:*)
+       echo xmp-cray-unicos
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+       exit 0 ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY-2:*:*:*)
+       echo cray2-cray-unicos
+        exit 0 ;;
+    F300:UNIX_System_V:*:*)
+        FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    F301:UNIX_System_V:*:*)
+       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+       exit 0 ;;
+    hp3[0-9][05]:NetBSD:*:*)
+       echo m68k-hp-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hp3[0-9][05]:OpenBSD:*:*)
+       echo m68k-hp-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    i?86:BSD/386:*:* | *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:FreeBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit 0 ;;
+    *:NetBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    *:OpenBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    i*:CYGWIN*:*)
+       echo i386-pc-cygwin32
+       exit 0 ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin32
+       exit 0 ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    *:GNU:*:*)
+       echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit 0 ;;
+    *:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us.
+       ld_help_string=`ld --help 2>&1`
+       if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
+         echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
+       elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
+         echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
+       elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
+         echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
+       elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
+         echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
+       elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
+         echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
+       elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
+         echo "powerpc-unknown-linux-gnu" ; exit 0
+       elif test "${UNAME_MACHINE}" = "alpha" ; then
+         echo alpha-unknown-linux-gnu ; exit 0
+       elif test "${UNAME_MACHINE}" = "sparc" ; then
+         echo sparc-unknown-linux-gnu ; exit 0
+       else
+         # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
+         # useful --help.  Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
+         test ! -d /usr/lib/ldscripts/. \
+           && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+         # Determine whether the default compiler is a.out or elf
+         cat >dummy.c <<EOF
+main(argc, argv)
+int argc;
+char *argv[];
+{
+#ifdef __ELF__
+  printf ("%s-pc-linux-gnu\n", argv[1]);
+#else
+  printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+         ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+         rm -f dummy.c dummy
+       fi ;;
+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
+# are messed up and put the nodename in both sysname and nodename.
+    i?86:DYNIX/ptx:4*:*)
+       echo i386-sequent-sysv4
+       exit 0 ;;
+    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+       fi
+       exit 0 ;;
+    i?86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit 0 ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit 0 ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit 0 ;;
+    M68*:*:R3V[567]*:*)
+       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit 0 ;;
+    i?86:LynxOS:2.*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit 0 ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit 0 ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit 0 ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit 0 ;;
+    R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit 0 ;;
+    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                           # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+  printf ("vax-dec-bsd\n"); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
+rm -f dummy.c dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit 0 ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit 0 ;;
+    c34*)
+       echo c34-convex-bsd
+       exit 0 ;;
+    c38*)
+       echo c38-convex-bsd
+       exit 0 ;;
+    c4*)
+       echo c4-convex-bsd
+       exit 0 ;;
+    esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
diff --git a/contrib/nslint-2.1a3/config.sub b/contrib/nslint-2.1a3/config.sub
new file mode 100644 (file)
index 0000000..0432524
--- /dev/null
@@ -0,0 +1,927 @@
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+#   Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+if [ x$1 = x ]
+then
+       echo Configuration name missing. 1>&2
+       echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+       echo "or     $0 ALIAS" 1>&2
+       echo where ALIAS is a recognized configuration type. 1>&2
+       exit 1
+fi
+
+# First pass through any local machine types.
+case $1 in
+       *local*)
+               echo $1
+               exit 0
+               ;;
+       *)
+       ;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  linux-gnu*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple)
+               os=
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco5)
+               os=sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
+               | arme[lb] | pyramid \
+               | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
+               | alpha | we32k | ns16k | clipper | i370 | sh \
+               | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
+               | pdp11 | mips64el | mips64orion | mips64orionel \
+               | sparc | sparclet | sparclite | sparc64)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i[3456]86)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
+             | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
+             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
+             | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
+             | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
+             | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
+             | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
+             | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-cbm
+               ;;
+       amigados)
+               basic_machine=m68k-cbm
+               os=-amigados
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-cbm
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       cray2)
+               basic_machine=cray2-cray
+               os=-unicos
+               ;;
+       [ctj]90-cray)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i[3456]86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i[3456]86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i[3456]86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i[3456]86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+        pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5)
+               basic_machine=i586-intel
+               ;;
+       pentiumpro | p6)
+               basic_machine=i686-intel
+               ;;
+       pentium-* | p5-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       k5)
+               # We don't have specific support for AMD's K5 yet, so just call it a Pentium
+               basic_machine=i586-amd
+               ;;
+       nexen)
+               # We don't have specific support for Nexgen yet, so just call it a Pentium
+               basic_machine=i586-nexgen
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=rs6000-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       xmp)
+               basic_machine=xmp-cray
+               os=-unicos
+               ;;
+        xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       mips)
+               basic_machine=mips-mips
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sparc)
+               basic_machine=sparc-sun
+               ;;
+        cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -unixware* | svr4*)
+               os=-sysv4
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -linux-gnu* | -uxpv*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigados
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+        *-gould)
+               os=-sysv
+               ;;
+        *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+        *-sgi)
+               os=-irix
+               ;;
+        *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f301-fujitsu)
+               os=-uxpv
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -vxsim* | -vxworks*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
diff --git a/contrib/nslint-2.1a3/configure b/contrib/nslint-2.1a3/configure
new file mode 100644 (file)
index 0000000..db5c53e
--- /dev/null
@@ -0,0 +1,1905 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --without-gcc           don't use gcc"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=nslint.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Do some error checking and defaulting for the host and target type.
+# The inputs are:
+#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
+#
+# The rules are:
+# 1. You are not allowed to specify --host, --target, and nonopt at the
+#    same time.
+# 2. Host defaults to nonopt.
+# 3. If nonopt is not specified, then host defaults to the current host,
+#    as determined by config.guess.
+# 4. Target and build default to nonopt.
+# 5. If nonopt is not specified, then target and build default to host.
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+case $host---$target---$nonopt in
+NONE---*---* | *---NONE---* | *---*---NONE) ;;
+*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+esac
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:575: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+echo $ac_n "checking target system type""... $ac_c" 1>&6
+echo "configure:596: checking target system type" >&5
+
+target_alias=$target
+case "$target_alias" in
+NONE)
+  case $nonopt in
+  NONE) target_alias=$host_alias ;;
+  *) target_alias=$nonopt ;;
+  esac ;;
+esac
+
+target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
+target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$target" 1>&6
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:614: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+  case $nonopt in
+  NONE) build_alias=$host_alias ;;
+  *) build_alias=$nonopt ;;
+  esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+test "$host_alias" != "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+
+umask 002
+
+if test -z "$PWD" ; then
+       PWD=`pwd`
+fi
+
+
+    
+    
+    
+    # Check whether --with-gcc or --without-gcc was given.
+if test "${with_gcc+set}" = set; then
+  withval="$with_gcc"
+  :
+fi
+
+    V_CCOPT="-O"
+    V_INCLS=""
+    if test "${srcdir}" != "." ; then
+           V_INCLS="-I\$\(srcdir\)"
+    fi
+    if test "${CFLAGS+set}" = set; then
+           LBL_CFLAGS="$CFLAGS"
+    fi
+    if test -z "$CC" ; then
+           case "$target_os" in
+
+           bsdi*)
+                   # Extract the first word of "shlicc2", so it can be a program name with args.
+set dummy shlicc2; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:668: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_SHLICC2'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$SHLICC2"; then
+  ac_cv_prog_SHLICC2="$SHLICC2" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_SHLICC2="yes"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_SHLICC2" && ac_cv_prog_SHLICC2="no"
+fi
+fi
+SHLICC2="$ac_cv_prog_SHLICC2"
+if test -n "$SHLICC2"; then
+  echo "$ac_t""$SHLICC2" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+                   if test $SHLICC2 = yes ; then
+                           CC=shlicc2
+                           export CC
+                   fi
+                   ;;
+           esac
+    fi
+    if test -z "$CC" -a "$with_gcc" = no ; then
+           CC=cc
+           export CC
+    fi
+    # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:709: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:739: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:790: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:822: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 833 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:864: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:869: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:897: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+
+    if test "$GCC" != yes ; then
+           echo $ac_n "checking that $CC handles ansi prototypes""... $ac_c" 1>&6
+echo "configure:930: checking that $CC handles ansi prototypes" >&5
+           if eval "test \"`echo '$''{'ac_cv_lbl_cc_ansi_prototypes'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 935 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+int frob(int, char *)
+; return 0; }
+EOF
+if { (eval echo configure:942: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_lbl_cc_ansi_prototypes=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_lbl_cc_ansi_prototypes=no
+fi
+rm -f conftest*
+fi
+
+           echo "$ac_t""$ac_cv_lbl_cc_ansi_prototypes" 1>&6
+           if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
+                   case "$target_os" in
+
+                   hpux*)
+                           echo $ac_n "checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)""... $ac_c" 1>&6
+echo "configure:960: checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)" >&5
+                           savedcflags="$CFLAGS"
+                           CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
+                           if eval "test \"`echo '$''{'ac_cv_lbl_cc_hpux_cc_aa'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 967 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+int frob(int, char *)
+; return 0; }
+EOF
+if { (eval echo configure:974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_lbl_cc_hpux_cc_aa=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_lbl_cc_hpux_cc_aa=no
+fi
+rm -f conftest*
+fi
+
+                           echo "$ac_t""$ac_cv_lbl_cc_hpux_cc_aa" 1>&6
+                           if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
+                                   { echo "configure: error: see the INSTALL doc for more info" 1>&2; exit 1; }
+                           fi
+                           CFLAGS="$savedcflags"
+                           V_CCOPT="-Aa $V_CCOPT"
+                           cat >> confdefs.h <<\EOF
+#define _HPUX_SOURCE 1
+EOF
+
+                           ;;
+
+                   *)
+                           { echo "configure: error: see the INSTALL doc for more info" 1>&2; exit 1; }
+                           ;;
+                   esac
+           fi
+           V_INCLS="$V_INCLS -I/usr/local/include"
+           LDFLAGS="$LDFLAGS -L/usr/local/lib"
+
+           case "$target_os" in
+
+           irix*)
+                   V_CCOPT="$V_CCOPT -xansi -signed -g3"
+                   ;;
+
+           osf*)
+                   V_CCOPT="$V_CCOPT -std1 -g3"
+                   ;;
+
+           ultrix*)
+                   echo $ac_n "checking that Ultrix $CC hacks const in prototypes""... $ac_c" 1>&6
+echo "configure:1018: checking that Ultrix $CC hacks const in prototypes" >&5
+                   if eval "test \"`echo '$''{'ac_cv_lbl_cc_const_proto'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1023 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+struct a { int b; };
+                           void c(const struct a *)
+; return 0; }
+EOF
+if { (eval echo configure:1031: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_lbl_cc_const_proto=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_lbl_cc_const_proto=no
+fi
+rm -f conftest*
+fi
+
+                   echo "$ac_t""$ac_cv_lbl_cc_const_proto" 1>&6
+                   if test $ac_cv_lbl_cc_const_proto = no ; then
+                           cat >> confdefs.h <<\EOF
+#define const 
+EOF
+
+                   fi
+                   ;;
+           esac
+    fi
+
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1056: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1071 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1077: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1088 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1105 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+for ac_hdr in fcntl.h malloc.h memory.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1139: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1144 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+for ac_func in strerror
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1179: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1184 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
+fi
+done
+
+
+echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
+echo "configure:1234: checking for main in -lnsl" >&5
+ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lnsl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1242 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:1249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lnsl $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6
+echo "configure:1277: checking for main in -lsocket" >&5
+ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lsocket  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1285 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:1292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lsocket $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1321: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1326 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1351 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1369 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1390 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+echo $ac_n "checking for int32_t""... $ac_c" 1>&6
+echo "configure:1425: checking for int32_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_int32_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1430 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_int32_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_int32_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_int32_t" 1>&6
+if test $ac_cv_type_int32_t = no; then
+  cat >> confdefs.h <<\EOF
+#define int32_t int
+EOF
+
+fi
+
+echo $ac_n "checking for u_int32_t""... $ac_c" 1>&6
+echo "configure:1458: checking for u_int32_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_u_int32_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1463 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_u_int32_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_u_int32_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_u_int32_t" 1>&6
+if test $ac_cv_type_u_int32_t = no; then
+  cat >> confdefs.h <<\EOF
+#define u_int32_t u_int
+EOF
+
+fi
+
+
+rm -f os-proto.h
+    if test "${LBL_CFLAGS+set}" = set; then
+           V_CCOPT="$V_CCOPT ${LBL_CFLAGS}"
+    fi
+    if test -f .devel ; then
+            if test "$GCC" = yes ; then
+           if test "$SHLICC2" = yes ; then
+                   ac_cv_lbl_gcc_vers=2
+                   V_CCOPT="`echo $V_CCOPT | sed -e 's/-O/-O2/'`"
+           else
+                   echo $ac_n "checking gcc version""... $ac_c" 1>&6
+echo "configure:1502: checking gcc version" >&5
+                   if eval "test \"`echo '$''{'ac_cv_lbl_gcc_vers'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_cv_lbl_gcc_vers=`$CC --version 2>&1 | \
+                           sed -e 's/\..*//'`
+fi
+
+                   echo "$ac_t""$ac_cv_lbl_gcc_vers" 1>&6
+                   if test $ac_cv_lbl_gcc_vers -gt 1 ; then
+                           V_CCOPT="`echo $V_CCOPT | sed -e 's/-O/-O2/'`"
+                   fi
+           fi
+           if test "${LBL_CFLAGS+set}" != set; then
+                   if test "$ac_cv_prog_cc_g" = yes ; then
+                           V_CCOPT="-g $V_CCOPT"
+                   fi
+                   V_CCOPT="$V_CCOPT -Wall"
+                   if test $ac_cv_lbl_gcc_vers -gt 1 ; then
+                           V_CCOPT="$V_CCOPT -Wmissing-prototypes -Wstrict-prototypes"
+                   fi
+           fi
+    else
+           case "$target_os" in
+
+           irix6*)
+                   V_CCOPT="$V_CCOPT -fullwarn -n32"
+                   ;;
+
+           *)
+                   ;;
+           esac
+    fi
+           os=`echo $target_os | sed -e 's/\([0-9][0-9]*\)[^0-9].*$/\1/'`
+           name="lbl/os-$os.h"
+           if test -f $name ; then
+                   ln -s $name os-proto.h
+                   cat >> confdefs.h <<\EOF
+#define HAVE_OS_PROTO_H 1
+EOF
+
+           else
+                   echo "configure: warning: can't find $name" 1>&2
+           fi
+    fi
+
+if test -r lbl/gnuc.h ; then
+       rm -f gnuc.h
+       ln -s lbl/gnuc.h gnuc.h
+fi
+
+
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1568: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[    `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@target@%$target%g
+s%@target_alias@%$target_alias%g
+s%@target_cpu@%$target_cpu%g
+s%@target_vendor@%$target_vendor%g
+s%@target_os@%$target_os%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@SHLICC2@%$SHLICC2%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+s%@LIBOBJS@%$LIBOBJS%g
+s%@V_CCOPT@%$V_CCOPT%g
+s%@V_INCLS@%$V_INCLS%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+
+if test -f .devel ; then
+       make depend
+fi
+exit 0
diff --git a/contrib/nslint-2.1a3/configure.in b/contrib/nslint-2.1a3/configure.in
new file mode 100644 (file)
index 0000000..2bbb614
--- /dev/null
@@ -0,0 +1,47 @@
+dnl @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/configure.in,v 1.1 2001/12/21 04:12:03 marka Exp $ (LBL)
+dnl
+dnl Copyright (c) 1995, 1996, 1997
+dnl    The Regents of the University of California.  All rights reserved.
+dnl
+dnl Process this file with autoconf to produce a configure script.
+dnl
+
+AC_INIT(nslint.c)
+
+AC_CANONICAL_SYSTEM
+
+umask 002
+
+if test -z "$PWD" ; then
+       PWD=`pwd`
+fi
+
+AC_LBL_C_INIT(V_CCOPT, V_INCLS)
+
+AC_CHECK_HEADERS(fcntl.h malloc.h memory.h)
+
+AC_REPLACE_FUNCS(strerror)
+AC_CHECK_LIB(nsl, main)
+AC_CHECK_LIB(socket, main)
+
+AC_CHECK_TYPE(int32_t, int)
+AC_CHECK_TYPE(u_int32_t, u_int)
+
+AC_LBL_DEVEL(V_CCOPT)
+
+if test -r lbl/gnuc.h ; then
+       rm -f gnuc.h
+       ln -s lbl/gnuc.h gnuc.h
+fi
+
+AC_SUBST(V_CCOPT)
+AC_SUBST(V_INCLS)
+
+AC_PROG_INSTALL
+
+AC_OUTPUT(Makefile)
+
+if test -f .devel ; then
+       make depend
+fi
+exit 0
diff --git a/contrib/nslint-2.1a3/install-sh b/contrib/nslint-2.1a3/install-sh
new file mode 100644 (file)
index 0000000..ebc6691
--- /dev/null
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/contrib/nslint-2.1a3/lbl/gnuc.h b/contrib/nslint-2.1a3/lbl/gnuc.h
new file mode 100644 (file)
index 0000000..aa56c3d
--- /dev/null
@@ -0,0 +1,43 @@
+/* @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/lbl/gnuc.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL) */
+
+/* Define __P() macro, if necessary */
+#ifndef __P
+#if __STDC__
+#define __P(protos) protos
+#else
+#define __P(protos) ()
+#endif
+#endif
+
+/* inline foo */
+#ifdef __GNUC__
+#define inline __inline
+#else
+#define inline
+#endif
+
+/*
+ * Handle new and old "dead" routine prototypes
+ *
+ * For example:
+ *
+ *     __dead void foo(void) __attribute__((volatile));
+ *
+ */
+#ifdef __GNUC__
+#ifndef __dead
+#define __dead volatile
+#endif
+#if __GNUC__ < 2  || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#ifndef __attribute__
+#define __attribute__(args)
+#endif
+#endif
+#else
+#ifndef __dead
+#define __dead
+#endif
+#ifndef __attribute__
+#define __attribute__(args)
+#endif
+#endif
diff --git a/contrib/nslint-2.1a3/lbl/os-irix5.h b/contrib/nslint-2.1a3/lbl/os-irix5.h
new file mode 100644 (file)
index 0000000..238bdd8
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 1994, 1995, 1996
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/lbl/os-irix5.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL)
+ */
+
+/* Prototypes missing in IRIX 5 */
+#ifdef __STDC__
+struct ether_addr;
+#endif
+int    ether_hostton(char *, struct ether_addr *);
+char   *ether_ntoa(struct ether_addr *);
+#ifdef __STDC__
+struct utmp;
+#endif
+void   login(struct utmp *);
+int    setenv(const char *, const char *, int);
+int    sigblock(int);
+int    sigsetmask(int);
+int    snprintf(char *, size_t, const char *, ...);
+time_t time(time_t *);
diff --git a/contrib/nslint-2.1a3/lbl/os-osf3.h b/contrib/nslint-2.1a3/lbl/os-osf3.h
new file mode 100644 (file)
index 0000000..b3f1964
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1995, 1996
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/lbl/os-osf3.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL)
+ */
+
+/* Prototypes missing in osf3 */
+int    flock(int, int);
+int    ioctl(int, int, caddr_t);
+int    iruserok(u_int, int, char *, char *);
+int    pfopen(char *, int);
+int    rcmd(char **, u_short, const char *, const char *, const char *, int *);
+int    rresvport(int *);
+int    snprintf(char *, size_t, const char *, ...);
+void   sync(void);
diff --git a/contrib/nslint-2.1a3/lbl/os-solaris2.h b/contrib/nslint-2.1a3/lbl/os-solaris2.h
new file mode 100644 (file)
index 0000000..ba91e71
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997, 2000
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#) $Id: os-solaris2.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL)
+ */
+
+/* Prototypes missing in SunOS 5 */
+int    daemon(int, int);
+int    dn_expand(const u_char *, const u_char *, const u_char *, char *, int);
+int    dn_skipname(const u_char *, const u_char *);
+int    flock(int, int);
+int    getdtablesize(void);
+int    gethostname(char *, int);
+int    getpagesize(void);
+char   *getusershell(void);
+char   *getwd(char *);
+int    iruserok(u_int, int, char *, char *);
+#ifdef __STDC__
+struct utmp;
+void   login(struct utmp *);
+#endif
+int    logout(const char *);
+int    res_query(const char *, int, int, u_char *, int);
+int    setenv(const char *, const char *, int);
+#if defined(_STDIO_H) && defined(HAVE_SETLINEBUF)
+int    setlinebuf(FILE *);
+#endif
+int    sigblock(int);
+int    sigsetmask(int);
+char    *strerror(int);
+int    snprintf(char *, size_t, const char *, ...);
+int    strcasecmp(const char *, const char *);
+void   unsetenv(const char *);
diff --git a/contrib/nslint-2.1a3/lbl/os-sunos4.h b/contrib/nslint-2.1a3/lbl/os-sunos4.h
new file mode 100644 (file)
index 0000000..47b022a
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 1989, 1990, 1993, 1994, 1995, 1996
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/lbl/os-sunos4.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL)
+ */
+
+/* Prototypes missing in SunOS 4 */
+#ifdef FILE
+int    _filbuf(FILE *);
+int    _flsbuf(u_char, FILE *);
+int    fclose(FILE *);
+int    fflush(FILE *);
+int    fgetc(FILE *);
+int    fprintf(FILE *, const char *, ...);
+int    fputc(int, FILE *);
+int    fputs(const char *, FILE *);
+u_int  fread(void *, u_int, u_int, FILE *);
+int    fseek(FILE *, long, int);
+u_int  fwrite(const void *, u_int, u_int, FILE *);
+int    pclose(FILE *);
+void   rewind(FILE *);
+void   setbuf(FILE *, char *);
+int    setlinebuf(FILE *);
+int    ungetc(int, FILE *);
+int    vfprintf(FILE *, const char *, ...);
+int    vprintf(const char *, ...);
+#endif
+
+#if __GNUC__ <= 1
+int    read(int, char *, u_int);
+int    write(int, char *, u_int);
+#endif
+
+long   a64l(const char *);
+#ifdef __STDC__
+struct sockaddr;
+#endif
+int    accept(int, struct sockaddr *, int *);
+int    bind(int, struct sockaddr *, int);
+int    bcmp(const void *, const void *, u_int);
+void   bcopy(const void *, void *, u_int);
+void   bzero(void *, int);
+int    chroot(const char *);
+int    close(int);
+void   closelog(void);
+int    connect(int, struct sockaddr *, int);
+char   *crypt(const char *, const char *);
+int    daemon(int, int);
+int    fchmod(int, int);
+int    fchown(int, int, int);
+void   endgrent(void);
+void   endpwent(void);
+void   endservent(void);
+#ifdef __STDC__
+struct ether_addr;
+#endif
+struct ether_addr *ether_aton(const char *);
+int    flock(int, int);
+#ifdef __STDC__
+struct stat;
+#endif
+int    fstat(int, struct stat *);
+#ifdef __STDC__
+struct statfs;
+#endif
+int    fstatfs(int, struct statfs *);
+int    fsync(int);
+#ifdef __STDC__
+struct timeb;
+#endif
+int    ftime(struct timeb *);
+int    ftruncate(int, off_t);
+int    getdtablesize(void);
+long   gethostid(void);
+int    gethostname(char *, int);
+int    getopt(int, char * const *, const char *);
+int    getpagesize(void);
+char   *getpass(char *);
+int    getpeername(int, struct sockaddr *, int *);
+int    getpriority(int, int);
+#ifdef __STDC__
+struct rlimit;
+#endif
+int    getrlimit(int, struct rlimit *);
+int    getsockname(int, struct sockaddr *, int *);
+int    getsockopt(int, int, int, char *, int *);
+#ifdef __STDC__
+struct timeval;
+struct timezone;
+#endif
+int    gettimeofday(struct timeval *, struct timezone *);
+char   *getusershell(void);
+char   *getwd(char *);
+int    initgroups(const char *, int);
+int    ioctl(int, int, caddr_t);
+int    iruserok(u_long, int, char *, char *);
+int    isatty(int);
+int    killpg(int, int);
+int    listen(int, int);
+#ifdef __STDC__
+struct utmp;
+#endif
+void   login(struct utmp *);
+int    logout(const char *);
+off_t  lseek(int, off_t, int);
+int    lstat(const char *, struct stat *);
+int    mkstemp(char *);
+char   *mktemp(char *);
+int    munmap(caddr_t, int);
+void   openlog(const char *, int, int);
+void   perror(const char *);
+int    printf(const char *, ...);
+int    puts(const char *);
+long   random(void);
+int    readlink(const char *, char *, int);
+#ifdef __STDC__
+struct iovec;
+#endif
+int    readv(int, struct iovec *, int);
+int    recv(int, char *, u_int, int);
+int    recvfrom(int, char *, u_int, int, struct sockaddr *, int *);
+int    rename(const char *, const char *);
+int    rcmd(char **, u_short, char *, char *, char *, int *);
+int    rresvport(int *);
+int    send(int, char *, u_int, int);
+int    sendto(int, char *, u_int, int, struct sockaddr *, int);
+int    setenv(const char *, const char *, int);
+int    seteuid(int);
+int    setpriority(int, int, int);
+int    select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+int    setpgrp(int, int);
+void   setpwent(void);
+int    setrlimit(int, struct rlimit *);
+void   setservent(int);
+int    setsockopt(int, int, int, char *, int);
+int    shutdown(int, int);
+int    sigblock(int);
+void   (*signal (int, void (*) (int))) (int);
+int    sigpause(int);
+int    sigsetmask(int);
+#ifdef __STDC__
+struct sigvec;
+#endif
+int    sigvec(int, struct sigvec *, struct sigvec*);
+int    snprintf(char *, size_t, const char *, ...);
+int    socket(int, int, int);
+int    socketpair(int, int, int, int *);
+int    symlink(const char *, const char *);
+void   srandom(int);
+int    sscanf(char *, const char *, ...);
+int    stat(const char *, struct stat *);
+int    statfs(char *, struct statfs *);
+char   *strerror(int);
+int    strcasecmp(const char *, const char *);
+#ifdef __STDC__
+struct tm;
+#endif
+int    strftime(char *, int, char *, struct tm *);
+int    strncasecmp(const char *, const char *, int);
+long   strtol(const char *, char **, int);
+void   sync(void);
+void   syslog(int, const char *, ...);
+int    system(const char *);
+long   tell(int);
+time_t time(time_t *);
+char   *timezone(int, int);
+int    tolower(int);
+int    toupper(int);
+int    truncate(char *, off_t);
+void   unsetenv(const char *);
+int    vfork(void);
+int    vsprintf(char *, const char *, ...);
+int    writev(int, struct iovec *, int);
+#ifdef __STDC__
+struct rusage;
+#endif
+int    utimes(const char *, struct timeval *);
+#if __GNUC__ <= 1
+int    wait(int *);
+pid_t  wait3(int *, int, struct rusage *);
+#endif
+
+/* Ugly signal hacking */
+#ifdef SIG_ERR
+#undef SIG_ERR
+#define SIG_ERR                (void (*)(int))-1
+#undef SIG_DFL
+#define SIG_DFL                (void (*)(int))0
+#undef SIG_IGN
+#define SIG_IGN                (void (*)(int))1
+
+#ifdef KERNEL
+#undef SIG_CATCH
+#define SIG_CATCH      (void (*)(int))2
+#endif
+#undef SIG_HOLD
+#define SIG_HOLD       (void (*)(int))3
+#endif
diff --git a/contrib/nslint-2.1a3/lbl/os-ultrix4.h b/contrib/nslint-2.1a3/lbl/os-ultrix4.h
new file mode 100644 (file)
index 0000000..f1ad707
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 1990, 1993, 1994, 1995, 1996
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/lbl/os-ultrix4.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL)
+ */
+
+/* Prototypes missing in Ultrix 4 */
+int    bcmp(const char *, const char *, u_int);
+void   bcopy(const void *, void *, u_int);
+void   bzero(void *, u_int);
+void   endservent(void);
+int    getopt(int, char * const *, const char *);
+#ifdef __STDC__
+struct timeval;
+struct timezone;
+#endif
+int    gettimeofday(struct timeval *, struct timezone *);
+int    ioctl(int, int, caddr_t);
+int    pfopen(char *, int);
+int    setlinebuf(FILE *);
+int    socket(int, int, int);
+int    strcasecmp(const char *, const char *);
diff --git a/contrib/nslint-2.1a3/mkdep b/contrib/nslint-2.1a3/mkdep
new file mode 100644 (file)
index 0000000..2a9c221
--- /dev/null
@@ -0,0 +1,109 @@
+#!/bin/sh -
+#
+# Copyright (c) 1994, 1996
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms are permitted
+# provided that this notice is preserved and that due credit is given
+# to the University of California at Berkeley. The name of the University
+# may not be used to endorse or promote products derived from this
+# software without specific prior written permission. This software
+# is provided ``as is'' without express or implied warranty.
+#
+#      @(#)mkdep.sh    5.11 (Berkeley) 5/5/88
+#
+
+PATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/bin
+export PATH
+
+MAKE=Makefile                  # default makefile name is "Makefile"
+CC=cc                          # default C compiler is "cc"
+
+while :
+       do case "$1" in
+               # -c allows you to specify the C compiler
+               -c)
+                       CC=$2
+                       shift; shift ;;
+
+               # -f allows you to select a makefile name
+               -f)
+                       MAKE=$2
+                       shift; shift ;;
+
+               # the -p flag produces "program: program.c" style dependencies
+               # so .o's don't get produced
+               -p)
+                       SED='s;\.o;;'
+                       shift ;;
+               *)
+                       break ;;
+       esac
+done
+
+if [ $# = 0 ] ; then
+       echo 'usage: mkdep [-p] [-c cc] [-f makefile] [flags] file ...'
+       exit 1
+fi
+
+if [ ! -w $MAKE ]; then
+       echo "mkdep: no writeable file \"$MAKE\""
+       exit 1
+fi
+
+TMP=/tmp/mkdep$$
+
+trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
+
+cp $MAKE ${MAKE}.bak
+
+sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
+
+cat << _EOF_ >> $TMP
+# DO NOT DELETE THIS LINE -- mkdep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+_EOF_
+
+# If your compiler doesn't have -M, add it.  If you can't, the next two
+# lines will try and replace the "cc -M".  The real problem is that this
+# hack can't deal with anything that requires a search path, and doesn't
+# even try for anything using bracket (<>) syntax.
+#
+# egrep '^#include[    ]*".*"' /dev/null $* |
+# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
+
+# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
+$CC -M $* |
+sed "
+       s; \./; ;g
+       $SED" |
+awk '{
+       if ($1 != prev) {
+               if (rec != "")
+                       print rec;
+               rec = $0;
+               prev = $1;
+       }
+       else {
+               if (length(rec $2) > 78) {
+                       print rec;
+                       rec = $0;
+               }
+               else
+                       rec = rec " " $2
+       }
+}
+END {
+       print rec
+}' >> $TMP
+
+cat << _EOF_ >> $TMP
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
+_EOF_
+
+# copy to preserve permissions
+cp $TMP $MAKE
+rm -f ${MAKE}.bak $TMP
+exit 0
diff --git a/contrib/nslint-2.1a3/nslint.8 b/contrib/nslint-2.1a3/nslint.8
new file mode 100644 (file)
index 0000000..98c1ebe
--- /dev/null
@@ -0,0 +1,451 @@
+.\" @(#) $Id: nslint.8,v 1.1 2001/12/21 04:12:03 marka Exp $ (LBL)
+.\"
+.\" Copyright (c) 1994, 1996, 1997, 1999, 2001
+.\"    The Regents of the University of California.  All rights reserved.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that: (1) source code distributions
+.\" retain the above copyright notice and this paragraph in its entirety, (2)
+.\" distributions including binary code include the above copyright notice and
+.\" this paragraph in its entirety in the documentation or other materials
+.\" provided with the distribution, and (3) all advertising materials mentioning
+.\" features or use of this software display the following acknowledgement:
+.\" ``This product includes software developed by the University of California,
+.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+.\" the University nor the names of its contributors may be used to endorse
+.\" or promote products derived from this software without specific prior
+.\" written permission.
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+.\"
+.TH nslint 8 "20 March 2001"
+.UC 4
+.SH NAME
+nslint - perform consistency checks on dns files
+.SH SYNOPSIS
+.B nslint
+[
+.B -d
+] [
+.B -b
+.I named.boot
+] [
+.B -B
+.I nslint.boot
+]
+.br
+.B nslint
+[
+.B -d
+] [
+.B -c
+.I named.conf
+] [
+.B -C
+.I nslint.conf
+]
+.SH DESCRIPTION
+.B Nslint
+reads the nameserver configuration files and performs a number of
+consistency checks on the dns records. If any problems are discovered,
+error messages are displayed on
+.I stderr
+and
+.B nslint
+exits with a non-zero status.
+.LP
+Here is a short list of errors
+.B nslint
+detects:
+.IP
+Records that are malformed.
+.IP
+Names that contain dots but are missing a trailing dot.
+.IP
+.B PTR
+records with names that are missing a trailing dot.
+.IP
+Names that contain illegal characters (rfc1034).
+.IP
+.B A
+records
+without matching
+.B PTR
+records
+.IP
+.B PTR
+records
+without matching
+.B A
+records
+.IP
+Names with more than one address on the same subnet.
+.IP
+Addresses in use by more than one name.
+.IP
+Names with
+.B CNAME
+and other records (rfc1033).
+.IP
+Unknown service and/or protocol keywords in
+.B WKS
+records.
+.IP
+Missing quotes.
+.LP
+.SH OPTIONS
+.TP
+.B -b
+Specify an alternate
+.I named.boot
+file. The default is
+.IR /etc/named.boot .
+.TP
+.TP
+.B -c
+Specify an alternate
+.I named.conf
+file. The default is
+.IR /etc/named.conf .
+.TP
+.B -B
+Specify an alternate
+.I nslint.boot
+file. The default is
+.I nslint.boot
+in the last
+.B directory
+line processed in
+.I named.boot
+(or the current working directory).
+This file is processed like a second
+.IR named.boot .
+The most common use is to tell
+.B nslint
+about
+.B A
+records that match
+.B PTR
+records that point outside the domains listed in
+.IR named.boot .
+.TP
+.B -C
+Specify an alternate
+.I nslint.conf
+file. The default is
+.I nslint.conf
+in the last
+.B directory
+line processed in
+.I named.conf
+(or the current working directory).
+This file is processed like a second
+.IR named.conf .
+.TP
+.B -d
+Raise the debugging level. Debugging information is
+displayed on
+.IR stdout .
+.LP
+.B Nslint
+knows how to read old style
+.I named.boot
+and BIND 8's new
+.I named.conf
+files. If both files exist,
+.B nslint
+will prefer
+.I named.conf
+(on the theory that you forgot to delete
+.I named.boot
+when you upgraded to BIND 8).
+.LP
+.SH "ADVANCED CONFIGURATION"
+There are some cases where it is necessary to use the
+advanced configuration features of
+.BR nslint .
+Advanced configuration is done with the
+.I nslint.boot
+file.
+.LP
+The most common is when a site has a demilitarized zone (DMZ).
+The problem here is that the DMZ network will have
+.B PTR
+records for hosts outside its domain. For example lets say
+we have
+.I 128.0.rev
+with:
+.LP
+.RS
+.nf
+.sp .5
+1.1     604800  in      ptr     gateway.lbl.gov.
+2.1     604800  in      ptr     gateway.es.net.
+.sp .5
+.fi
+.RE
+.LP
+Obviously we will define an
+.B A
+record for
+.I gateway.lbl.gov
+pointing to
+.I 128.0.1.1
+but we will get errors because there is no
+.B A
+record defined for
+.IR gateway.es.net .
+The solution is to create a
+.I nslint.boot
+file (in the same directory as the other dns files)
+with:
+.LP
+.RS
+.nf
+.sp .5
+primary es.net                  nslint.es.net
+.sp .5
+.fi
+.RE
+.LP
+And then create the file
+.I nslint.es.net
+with:
+.LP
+.RS
+.nf
+.sp .5
+gateway 1       in      a       128.0.1.2
+.sp .5
+.fi
+.RE
+.LP
+Another problem occurs when there is a
+.B CNAME
+that points to a host outside the local domains. Let's say we have
+.I info.lbl.gov
+pointing to
+.IR larry.es.net :
+.LP
+.RS
+.nf
+.sp .5
+info    604800  in      cname   larry.es.net.
+.sp .5
+.fi
+.RE
+.LP
+In this case we would need:
+.LP
+.RS
+.nf
+.sp .5
+primary es.net                  nslint.es.net
+.sp .5
+.fi
+.RE
+.LP
+in
+.I nslint.boot
+and:
+.LP
+.RS
+.nf
+.sp .5
+larry   1       in      txt     "place holder"
+.sp .5
+.fi
+.RE
+.LP
+.IR nslint.es.net .
+.LP
+One last problem
+when a pseudo host is setup to allow two more
+more actual hosts provide a service. For, let's say that
+.I lbl.gov
+contains:
+.LP
+.RS
+.nf
+.sp .5
+server  604800  in      a       128.0.6.6
+server  604800  in      a       128.0.6.94
+;
+tom     604800  in      a       128.0.6.6
+tom     604800  in      mx 0    lbl.gov.
+;
+jerry   604800  in      a       128.0.6.94
+jerry   604800  in      mx 0    lbl.gov.
+.sp .5
+.fi
+.RE
+.LP
+In this case
+.B nslint
+would complain about missing
+.B PTR
+records and ip addresses in use by more than one host.
+To suppress these warnings, add you would the lines:
+.LP
+.RS
+.nf
+.sp .5
+primary lbl.gov                 nslint.lbl.gov
+primary 0.128.in-addr.arpa      nslint.128.0.rev
+.sp .5
+.fi
+.RE
+.LP
+to
+.I nslint.boot
+and create
+.I nslint.lbl.gov
+with:
+.LP
+.RS
+.nf
+.sp .5
+server  1       in      allowdupa       128.0.6.6
+server  1       in      allowdupa       128.0.6.94
+.sp .5
+.fi
+.RE
+.LP
+and create
+.I nslint.128.0.rev
+with:
+.LP
+.RS
+.nf
+.sp .5
+6.6     604800  in      ptr     server.lbl.gov.
+94.6    604800  in      ptr     server.lbl.gov.
+.sp .5
+.fi
+.RE
+.LP
+In this example, the
+.B allowdupa
+keyword tells
+.B nslint
+that it's ok for
+.I 128.0.6.6
+and
+.I 128.0.6.94
+to be shared by
+.IR server.lbl.gov ,
+.IR tom.lbl.gov ,
+and
+.IR jerry.lbl.gov .
+.LP
+One last
+.B nslint
+feature helps detect hosts that have mistakenly had two ip addresses
+assigned on the same subnet. This can happen when two different
+people request an ip address for the same hostname or when someone
+forgets an address has been assigned and requests a new number.
+.LP
+To detect such
+.B A
+records, add a
+.B nslint
+section to your
+.I nslint.conf
+containing something similar to:
+.LP
+.RS
+.nf
+.sp .5
+nslint {
+.RS
+network "128.0.6/22";
+network "128.0.6 255.255.252.0";
+.RE
+};
+.sp .5
+.fi
+.RE
+.LP
+The two network lines in this example are equivalent ways of saying the same
+thing; that subnet
+.I 128.0.6
+has a 22 bit wide subnet mask.
+.LP
+If you are using
+.IR nslint.boot ,
+the syntax would be:
+.LP
+.RS
+.nf
+.sp .5
+network 128.0.6/22
+network 128.0.6 255.255.252.0
+.sp .5
+.fi
+.RE
+.LP
+Again this shows two ways of saying the same thing.
+.LP
+Using information from the above
+.B network
+statement,
+.B nslint
+would would flag the following
+.B A
+records as being in error:
+.LP
+.RS
+.nf
+.sp .5
+server  1       in      a       128.0.6.48
+server  1       in      a       128.0.7.16
+.sp .5
+.fi
+.RE
+.LP
+Note that if you specify any
+.B network
+lines in your
+.I nslint.conf
+or
+.I nslint.boot
+files,
+.B nslint
+requires you to include lines for all networks;
+otherwise you might forget to add
+.B network
+lines for new networks.
+.LP
+.SH FILES
+.na
+.nh
+.nf
+/etc/named.boot - default named configuration file
+nslint.boot - default nslint configuration file
+.ad
+.hy
+.fi
+.LP
+.SH "SEE ALSO"
+.na
+.nh
+.IR named (8),
+rfc1033,
+rfc1034
+.ad
+.hy
+.SH AUTHOR
+Craig Leres of the
+Lawrence Berkeley National Laboratory, University of California, Berkeley, CA.
+.LP
+The current version is available via anonymous ftp:
+.LP
+.RS
+.I ftp://ftp.ee.lbl.gov/nslint.tar.gz
+.RE
+.SH BUGS
+Please send bug reports to nslint@ee.lbl.gov.
+.LP
+Not everyone is guaranteed to agree with all the checks done.
diff --git a/contrib/nslint-2.1a3/nslint.c b/contrib/nslint-2.1a3/nslint.c
new file mode 100644 (file)
index 0000000..8ce9505
--- /dev/null
@@ -0,0 +1,2382 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+#ifndef lint
+static const char copyright[] =
+    "@(#) Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001\n\
+The Regents of the University of California.  All rights reserved.\n";
+static const char rcsid[] =
+    "@(#) $Id: nslint.c,v 1.1 2001/12/21 04:12:04 marka Exp $ (LBL)";
+#endif
+/*
+ * nslint - perform consistency checks on dns files
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <netinet/in.h>
+
+#include <arpa/inet.h>
+
+#include <ctype.h>
+#include <errno.h>
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "savestr.h"
+
+#include "gnuc.h"
+#ifdef HAVE_OS_PROTO_H
+#include "os-proto.h"
+#endif
+
+#define NSLINTBOOT "nslint.boot"       /* default nslint.boot file */
+#define NSLINTCONF "nslint.conf"       /* default nslint.conf file */
+
+/* item struct */
+struct item {
+       char *host;             /* pointer to hostname */
+       u_int32_t addr;         /* ip address */
+       u_int ttl;              /* ttl of A records */
+       int records;            /* resource records seen */
+       int flags;              /* flags word */
+};
+
+/* Resource records seen */
+#define REC_A          0x0001
+#define REC_PTR                0x0002
+#define REC_WKS                0x0004
+#define REC_HINFO      0x0008
+#define REC_MX         0x0010
+#define REC_CNAME      0x0020
+#define REC_NS         0x0040
+#define REC_SOA                0x0080
+#define REC_RP         0x0100
+#define REC_TXT                0x0200
+#define REC_SRV                0x0400
+
+/* These aren't real records */
+#define REC_OTHER      0x0800
+#define REC_REF                0x1000
+#define REC_UNKNOWN    0x2000
+
+/* Test for records we want to map to REC_OTHER */
+#define MASK_TEST_REC (REC_WKS | REC_HINFO | \
+    REC_MX | REC_SOA | REC_RP | REC_TXT | REC_SRV | REC_UNKNOWN)
+
+/* Mask away records we don't care about in the final processing to REC_OTHER */
+#define MASK_CHECK_REC \
+    (REC_A | REC_PTR | REC_CNAME | REC_REF | REC_OTHER)
+
+/* Test for records we want to check for duplicate name detection */
+#define MASK_TEST_DUP \
+    (REC_A | REC_HINFO)
+
+/* Flags */
+#define FLG_SELFMX     0x001   /* mx record refers to self */
+#define FLG_MXREF      0x002   /* this record referred to by a mx record */
+#define FLG_SMTPWKS    0x004   /* saw wks with smtp/tcp */
+#define FLG_ALLOWDUPA  0x008   /* allow duplicate a records */
+
+/* Test for smtp problems */
+#define MASK_TEST_SMTP \
+    (FLG_SELFMX | FLG_SMTPWKS)
+
+
+#define ITEMSIZE (1 << 17)     /* power of two */
+#define ITEMHASH(str, h, p) \
+    for (p = str, h = 0; *p != '.' && *p != '\0';) h = (h << 5) - h + *p++
+
+struct item items[ITEMSIZE];
+int    itemcnt;                /* count of items */
+
+/* Hostname string storage */
+#define STRSIZE 8192;          /* size to malloc when more space is needed */
+char   *strptr;                /* pointer to string pool */
+int    strsize;                /* size of space left in pool */
+
+int    debug;
+int    errors;
+char   *bootfile = "/etc/named.boot";
+char   *conffile = "/etc/named.conf";
+char   *nslintboot;
+char   *nslintconf;
+char   *prog;
+char   *cwd = ".";
+
+char **protoserv;              /* valid protocol/service names */
+int protoserv_init;
+int protoserv_last;
+int protoserv_len;
+
+static char inaddr[] = ".in-addr.arpa.";
+
+/* SOA record */
+#define SOA_SERIAL     0
+#define SOA_REFRESH    1
+#define SOA_RETRY      2
+#define SOA_EXPIRE     3
+#define SOA_MINIMUM    4
+
+static u_int soaval[5];
+static int nsoaval;
+#define NSOAVAL (sizeof(soaval) / sizeof(soaval[0]))
+
+/* Forwards */
+static inline void add_domain(char *, const char *);
+int    checkdots(const char *);
+void   checkdups(struct item *, int);
+int    checkserv(const char *, char **p);
+int    checkwks(FILE *, char *, int *, char **);
+int    cmpaddr(const void *, const void *);
+int    cmphost(const void *, const void *);
+int    doboot(const char *, int);
+int    doconf(const char *, int);
+void   initprotoserv(void);
+char   *intoa(u_int32_t);
+int    main(int, char **);
+int    nslint(void);
+int    parseinaddr(const char *, u_int32_t *, u_int32_t *);
+int    parsenetwork(const char *, char **);
+u_int32_t parseptr(const char *, u_int32_t, u_int32_t, char **);
+char   *parsequoted(char *);
+int    parsesoa(const char *, char **);
+void   process(const char *, const char *, const char *);
+int    rfc1034host(const char *, int);
+int    updateitem(const char *, u_int32_t, int, u_int, int);
+__dead void usage(void) __attribute__((volatile));
+
+extern char *optarg;
+extern int optind, opterr;
+
+/* add domain if necessary */
+static inline void
+add_domain(register char *name, register const char *domain)
+{
+       register char *cp;
+
+       /* Kill trailing white space and convert to lowercase */
+       for (cp = name; *cp != '\0' && !isspace(*cp); ++cp)
+               if (isupper(*cp))
+                       *cp = tolower(*cp);
+       *cp-- = '\0';
+       /* If necessary, append domain */
+       if (cp >= name && *cp++ != '.') {
+               if (*domain != '.')
+                       *cp++ = '.';
+               (void)strcpy(cp, domain);
+       }
+       /* XXX should we insure a trailing dot? */
+}
+
+int
+main(int argc, char **argv)
+{
+       register char *cp;
+       register int op, status, i, donamedboot, donamedconf;
+
+       if ((cp = strrchr(argv[0], '/')) != NULL)
+               prog = cp + 1;
+       else
+               prog = argv[0];
+
+       donamedboot = 0;
+       donamedconf = 0;
+       while ((op = getopt(argc, argv, "b:c:B:C:d")) != -1)
+               switch (op) {
+
+               case 'b':
+                       bootfile = optarg;
+                       ++donamedboot;
+                       break;
+
+               case 'c':
+                       conffile = optarg;
+                       ++donamedconf;
+                       break;
+
+               case 'B':
+                       nslintboot = optarg;
+                       ++donamedboot;
+                       break;
+
+               case 'C':
+                       nslintconf = optarg;
+                       ++donamedconf;
+                       break;
+
+               case 'd':
+                       ++debug;
+                       break;
+
+               default:
+                       usage();
+               }
+       if (optind != argc || (donamedboot && donamedconf))
+               usage();
+
+       if (donamedboot)
+               status = doboot(bootfile, 1);
+       else if (donamedconf)
+               status = doconf(conffile, 1);
+       else {
+               status = doconf(conffile, 0);
+               if (status < 0) {
+                       status = doboot(bootfile, 1);
+                       ++donamedboot;
+               } else
+                       ++donamedconf;
+       }
+
+       if (donamedboot) {
+               if (nslintboot != NULL)
+                       status |= doboot(nslintboot, 1);
+               else if ((i = doboot(NSLINTBOOT, 0)) > 0)
+                       status |= i;
+       } else {
+               if (nslintconf != NULL)
+                       status |= doconf(nslintconf, 1);
+               else if ((i = doconf(NSLINTCONF, 0)) > 0)
+                       status |= i;
+       }
+       status |= nslint();
+       exit (status);
+}
+
+struct netlist {
+       u_int32_t net;
+       u_int32_t mask;
+};
+
+static struct netlist *netlist;
+static u_int netlistsize;      /* size of array */
+static u_int netlistcnt;       /* next free element */
+
+static u_int32_t
+findmask(u_int32_t addr)
+{
+       register int i;
+
+       for (i = 0; i < netlistcnt; ++i)
+               if ((addr & netlist[i].mask) == netlist[i].net)
+                       return (netlist[i].mask);
+       return (0);
+}
+
+int
+parsenetwork(register const char *cp, register char **errstrp)
+{
+       register int i, w;
+       register u_int32_t net, mask;
+       register u_int32_t o;
+       register int shift;
+       static char errstr[132];
+
+       while (isspace(*cp))
+               ++cp;
+       net = 0;
+       mask = 0;
+       shift = 24;
+       while (isdigit(*cp) && shift >= 0) {
+               o = 0;
+               do {
+                       o = o * 10 + (*cp++ - '0');
+               } while (isdigit(*cp));
+               net |= o << shift;
+               shift -= 8;
+               if (*cp != '.')
+                       break;
+               ++cp;
+       }
+
+
+       if (isspace(*cp)) {
+               ++cp;
+               while (isspace(*cp))
+                       ++cp;
+               mask = htonl(inet_addr(cp));
+               if ((int)mask == -1) {
+                       *errstrp = errstr;
+                       (void)sprintf(errstr, "bad mask \"%s\"", cp);
+                       return (0);
+               }
+               i = 0;
+               while (isdigit(*cp))
+                       ++cp;
+               for (i = 0; i < 3 && *cp == '.'; ++i) {
+                       ++cp;
+                       while (isdigit(*cp))
+                               ++cp;
+               }
+               if (i != 3) {
+                       *errstrp = "wrong number of dots in mask";
+                       return (0);
+               }
+       } else if (*cp == '/') {
+               ++cp;
+               w = atoi(cp);
+               do {
+                       ++cp;
+               } while (isdigit(*cp));
+               if (w < 1 || w > 32) {
+                       *errstrp = "bad mask width";
+                       return (0);
+               }
+               mask = 0xffffffff << (32 - w);
+       } else {
+               *errstrp = "garbage after net";
+               return (0);
+       }
+
+       while (isspace(*cp))
+               ++cp;
+
+       if (*cp != '\0') {
+               *errstrp = "trailing garbage";
+               return (0);
+       }
+
+       /* Finaly sanity checks */
+       if ((net & ~ mask) != 0) {
+               *errstrp = errstr;
+               (void)sprintf(errstr, "host bits set in net \"%s\"",
+                   intoa(net));
+               return (0);
+       }
+
+       /* Make sure there's room */
+       if (netlistsize <= netlistcnt) {
+               if (netlistsize == 0) {
+                       netlistsize = 32;
+                       netlist = (struct netlist *)
+                           malloc(netlistsize * sizeof(*netlist));
+               } else {
+                       netlistsize <<= 1;
+                       netlist = (struct netlist *)
+                           realloc(netlist, netlistsize * sizeof(*netlist));
+               }
+               if (netlist == NULL) {
+                       fprintf(stderr, "%s: nslint: malloc/realloc: %s\n",
+                           prog, strerror(errno));
+                       exit(1);
+               }
+       }
+
+       /* Add to list */
+       netlist[netlistcnt].net = net;
+       netlist[netlistcnt].mask = mask;
+       ++netlistcnt;
+
+       return (1);
+}
+
+int
+doboot(register const char *file, register int mustexist)
+{
+       register int n;
+       register char *cp, *cp2;
+       register FILE *f;
+       char *errstr;
+       char buf[1024], name[128];
+
+       errno = 0;
+       f = fopen(file, "r");
+       if (f == NULL) {
+               /* Not an error if it doesn't exist */
+               if (!mustexist && errno == ENOENT) {
+                       if (debug > 1)
+                               printf(
+                                   "%s: doit: %s doesn't exist (ignoring)\n",
+                                   prog, file);
+                       return (-1);
+               }
+               fprintf(stderr, "%s: %s: %s\n", prog, file, strerror(errno));
+               exit(1);
+       }
+       if (debug > 1)
+               printf("%s: doit: opened %s\n", prog, file);
+
+       n = 0;
+       while (fgets(buf, sizeof(buf), f) != NULL) {
+               ++n;
+
+               /* Skip comments */
+               if (buf[0] == ';')
+                       continue;
+               cp = strchr(buf, ';');
+               if (cp)
+                       *cp = '\0';
+               cp = buf + strlen(buf) - 1;
+               if (cp >= buf && *cp == '\n')
+                       *cp = '\0';
+               cp = buf;
+
+               /* Eat leading whitespace */
+               while (isspace(*cp))
+                       ++cp;
+
+               /* Skip blank lines */
+               if (*cp == '\n' || *cp == '\0')
+                       continue;
+
+               /* Get name */
+               cp2 = cp;
+               while (!isspace(*cp) && *cp != '\0')
+                       ++cp;
+               *cp++ = '\0';
+
+               /* Find next keyword */
+               while (isspace(*cp))
+                       ++cp;
+               if (strcasecmp(cp2, "directory") == 0) {
+                       /* Terminate directory */
+                       cp2 = cp;
+                       while (!isspace(*cp) && *cp != '\0')
+                               ++cp;
+                       *cp = '\0';
+                       if (chdir(cp2) < 0) {
+                               ++errors;
+                               fprintf(stderr, "%s: can't chdir %s: %s\n",
+                                   prog, cp2, strerror(errno));
+                               exit(1);
+                       }
+                       cwd = savestr(cp2);
+                       continue;
+               }
+               if (strcasecmp(cp2, "primary") == 0) {
+                       /* Extract domain, converting to lowercase */
+                       for (cp2 = name; !isspace(*cp) && *cp != '\0'; ++cp)
+                               if (isupper(*cp))
+                                       *cp2++ = tolower(*cp);
+                               else
+                                       *cp2++ = *cp;
+                       /* Insure trailing dot */
+                       if (cp2 > name && cp2[-1] != '.')
+                               *cp2++ = '.';
+                       *cp2 = '\0';
+
+                       /* Find file */
+                       while (isspace(*cp))
+                               ++cp;
+
+                       /* Terminate directory */
+                       cp2 = cp;
+                       while (!isspace(*cp) && *cp != '\0')
+                               ++cp;
+                       *cp = '\0';
+
+                       /* Process it! (zone is the same as the domain) */
+                       nsoaval = -1;
+                       memset(soaval, 0, sizeof(soaval));
+                       process(cp2, name, name);
+                       continue;
+               }
+               if (strcasecmp(cp2, "network") == 0) {
+                       if (!parsenetwork(cp, &errstr)) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s:%d: bad network: %s\n",
+                                   prog, file, n, errstr);
+                       }
+                       continue;
+               }
+               if (strcasecmp(cp2, "include") == 0) {
+                       /* Terminate include file */
+                       cp2 = cp;
+                       while (!isspace(*cp) && *cp != '\0')
+                               ++cp;
+                       *cp = '\0';
+                       errors += doboot(cp2, 1);
+                       continue;
+               }
+               /* Eat any other options */
+       }
+       (void)fclose(f);
+
+       return (errors != 0);
+}
+
+int
+doconf(register const char *file, register int mustexist)
+{
+       register int n, fd, cc, i, depth;
+       register char *cp, *cp2, *buf;
+       register char *name, *zonename, *filename, *typename;
+       register int namelen, zonenamelen, filenamelen, typenamelen;
+       char *errstr;
+       struct stat sbuf;
+       char zone[128], includefile[256];
+
+       errno = 0;
+       fd = open(file, O_RDONLY, 0);
+       if (fd < 0) {
+               /* Not an error if it doesn't exist */
+               if (!mustexist && errno == ENOENT) {
+                       if (debug > 1)
+                               printf(
+                                   "%s: doconf: %s doesn't exist (ignoring)\n",
+                                   prog, file);
+                       return (-1);
+               }
+               fprintf(stderr, "%s: %s: %s\n", prog, file, strerror(errno));
+               exit(1);
+       }
+       if (debug > 1)
+               printf("%s: doconf: opened %s\n", prog, file);
+
+       if (fstat(fd, &sbuf) < 0) {
+               fprintf(stderr, "%s: fstat(%s) %s\n",
+                   prog, file, strerror(errno));
+               exit(1);
+       }
+       buf = (char *)malloc(sbuf.st_size + 1);
+       if (buf == NULL) {
+               fprintf(stderr, "%s: malloc: %s\n", prog, strerror(errno));
+               exit(1);
+       }
+
+       /* Slurp entire config file */
+       n = sbuf.st_size;
+       cp = buf;
+       do {
+               cc = read(fd, cp, n);
+               if (cc < 0) {
+                       fprintf(stderr, "%s: read(%s) %s\n",
+                           prog, file, strerror(errno));
+                       exit(1);
+               }
+               cp += cc;
+               n -= cc;
+       } while (cc != 0 && cc < n);
+       buf[cc] = '\0';
+
+#define EATWHITESPACE \
+       while (isspace(*cp)) { \
+               if (*cp == '\n') \
+                       ++n; \
+               ++cp; \
+       }
+
+/* Handle both to-end-of-line and C style comments */
+#define EATCOMMENTS \
+       { \
+       int sawcomment; \
+       do { \
+               EATWHITESPACE \
+               sawcomment = 0; \
+               if (*cp == '#') { \
+                       sawcomment = 1; \
+                       ++cp; \
+                       while (*cp != '\n' && *cp != '\0') \
+                               ++cp; \
+               } \
+               else if (strncmp(cp, "//", 2) == 0) { \
+                       sawcomment = 1; \
+                       cp += 2; \
+                       while (*cp != '\n' && *cp != '\0') \
+                               ++cp; \
+               } \
+               else if (strncmp(cp, "/*", 2) == 0) { \
+                       sawcomment = 1; \
+                       for (cp += 2; *cp != '\0'; ++cp) { \
+                               if (*cp == '\n') \
+                                       ++n; \
+                               else if (strncmp(cp, "*/", 2) == 0) { \
+                                       cp += 2; \
+                                       break; \
+                               } \
+                       } \
+               } \
+       } while (sawcomment); \
+       }
+
+#define GETNAME(name, len) \
+       { \
+       (name) = cp; \
+       (len) = 0; \
+       while (!isspace(*cp) && *cp != ';' && *cp != '\0') { \
+               ++(len); \
+               ++cp; \
+       } \
+       }
+
+#define GETQUOTEDNAME(name, len) \
+       { \
+       if (*cp != '"') { \
+               ++errors; \
+               fprintf(stderr, "%s: %s:%d missing left quote\n", \
+                   prog, file, n); \
+       } else \
+               ++cp; \
+       (name) = cp; \
+       (len) = 0; \
+       while (*cp != '"' && *cp != '\n' && *cp != '\0') { \
+               ++(len); \
+               ++cp; \
+       } \
+       if (*cp != '"') { \
+               ++errors; \
+               fprintf(stderr, "%s: %s:%d missing right quote\n", \
+                   prog, file, n); \
+       } else \
+               ++cp; \
+       }
+
+/* Eat everything to the next semicolon, perhaps eating matching qbraces */
+#define EATSEMICOLON \
+       { \
+       register int depth = 0; \
+       while (*cp != '\0') { \
+               EATCOMMENTS \
+               if (*cp == ';') { \
+                       ++cp; \
+                       if (depth == 0) \
+                               break; \
+                       continue; \
+               } \
+               if (*cp == '{') { \
+                       ++depth; \
+                       ++cp; \
+                       continue; \
+               } \
+               if (*cp == '}') { \
+                       --depth; \
+                       ++cp; \
+                       continue; \
+               } \
+               ++cp; \
+       } \
+       }
+
+       n = 1;
+       zone[0] = '\0';
+       cp = buf;
+       while (*cp != '\0') {
+               EATCOMMENTS
+               if (*cp == '\0')
+                       break;
+               GETNAME(name, namelen)
+               if (namelen == 0) {
+                       ++errors;
+                       fprintf(stderr, "%s: %s:%d garbage char '%c' (1)\n",
+                           prog, file, n, *cp);
+                       ++cp;
+                       continue;
+               }
+               EATCOMMENTS
+               if (strncasecmp(name, "options", namelen) == 0) {
+                       EATCOMMENTS
+                       if (*cp != '{')  {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s:%d missing left qbrace in options\n",
+                                   prog, file, n);
+                       } else
+                               ++cp;
+                       EATCOMMENTS
+                       while (*cp != '}' && *cp != '\0') {
+                               EATCOMMENTS
+                               GETNAME(name, namelen)
+                               if (namelen == 0) {
+                                       ++errors;
+                                       fprintf(stderr,
+                                           "%s: %s:%d garbage char '%c' (2)\n",
+                                           prog, file, n, *cp);
+                                       ++cp;
+                                       break;
+                               }
+
+                               /* If not the "directory" option, just eat it */
+                               if (strncasecmp(name, "directory",
+                                   namelen) == 0) {
+                                       EATCOMMENTS
+                                       GETQUOTEDNAME(cp2, i)
+                                       cp2[i] = '\0';
+                                       if (chdir(cp2) < 0) {
+                                               ++errors;
+                                               fprintf(stderr,
+                                           "%s: %s:.%d can't chdir %s: %s\n",
+                                                   prog, file, n, cp2,
+                                                   strerror(errno));
+                                               exit(1);
+                                       }
+                                       cwd = savestr(cp2);
+                               }
+                               EATSEMICOLON
+                               EATCOMMENTS
+                       }
+                       ++cp;
+                       EATCOMMENTS
+                       if (*cp != ';')  {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s:%d missing options semi\n",
+                                   prog, file, n);
+                       } else
+                               ++cp;
+                       continue;
+               }
+               if (strncasecmp(name, "zone", namelen) == 0) {
+                       EATCOMMENTS
+                       GETQUOTEDNAME(zonename, zonenamelen)
+                       typename = NULL;
+                       filename = NULL;
+                       typenamelen = 0;
+                       filenamelen = 0;
+                       EATCOMMENTS
+                       if (strncasecmp(cp, "in", 2) == 0) {
+                               cp += 2;
+                               EATWHITESPACE
+                       } else if (strncasecmp(cp, "chaos", 5) == 0) {
+                               cp += 5;
+                               EATWHITESPACE
+                       }
+                       if (*cp != '{')  {      /* } */
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s:%d missing left qbrace in zone\n",
+                                   prog, file, n);
+                               continue;
+                       }
+                       depth = 0;
+                       EATCOMMENTS
+                       while (*cp != '\0') {
+                               if (*cp == '{') {
+                                       ++cp;
+                                       ++depth;
+                               } else if (*cp == '}') {
+                                       if (--depth <= 1)
+                                               break;
+                                       ++cp;
+                               }
+                               EATCOMMENTS
+                               GETNAME(name, namelen)
+                               if (namelen == 0) {
+                                       ++errors;
+                                       fprintf(stderr,
+                                           "%s: %s:%d garbage char '%c' (3)\n",
+                                           prog, file, n, *cp);
+                                       ++cp;
+                                       break;
+                               }
+                               if (strncasecmp(name, "type",
+                                   namelen) == 0) {
+                                       EATCOMMENTS
+                                       GETNAME(typename, typenamelen)
+                                       if (namelen == 0) {
+                                               ++errors;
+                                               fprintf(stderr,
+                                           "%s: %s:%d garbage char '%c' (4)\n",
+                                                   prog, file, n, *cp);
+                                               ++cp;
+                                               break;
+                                       }
+                               } else if (strncasecmp(name, "file",
+                                   namelen) == 0) {
+                                       EATCOMMENTS
+                                       GETQUOTEDNAME(filename, filenamelen)
+                               }
+                               /* Just ignore keywords we don't understand */
+                               EATSEMICOLON
+                               EATCOMMENTS
+                       }
+                       /* { */
+                       if (*cp != '}')  {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s:%d missing zone right qbrace\n",
+                                   prog, file, n);
+                       } else
+                               ++cp;
+                       if (*cp != ';')  {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s:%d missing zone semi\n",
+                                   prog, file, n);
+                       } else
+                               ++cp;
+                       EATCOMMENTS
+                       /* If we got something interesting, process it */
+                       if (typenamelen == 0) {
+                               ++errors;
+                               fprintf(stderr, "%s: missing zone type!\n",
+                                   prog);
+                               continue;
+                       }
+                       if (strncasecmp(typename, "master", typenamelen) == 0) {
+                               if (filenamelen == 0) {
+                                       ++errors;
+                                       fprintf(stderr,
+                                           "%s: missing zone filename!\n",
+                                           prog);
+                                       continue;
+                               }
+                               strncpy(zone, zonename, zonenamelen);
+                               zone[zonenamelen] = '\0';
+                               for (cp2 = zone; *cp2 != '\0'; ++cp2)
+                                       if (isupper(*cp2))
+                                               *cp2 = tolower(*cp2);
+                               /* Insure trailing dot */
+                               if (cp2 > zone && cp2[-1] != '.') {
+                                       *cp2++ = '.';
+                                       *cp2 = '\0';
+                               }
+                               filename[filenamelen] = '\0';
+                               nsoaval = -1;
+                               memset(soaval, 0, sizeof(soaval));
+                               process(filename, zone, zone);
+                       }
+                       continue;
+               }
+               if (strncasecmp(name, "nslint", namelen) == 0) {
+                       EATCOMMENTS
+                       if (*cp != '{')  {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s:%d missing left qbrace in nslint\n",
+                                   prog, file, n);
+                       } else
+                               ++cp;
+                       ++cp;
+                       EATCOMMENTS
+                       while (*cp != '}' && *cp != '\0') {
+                               EATCOMMENTS
+                               GETNAME(name, namelen)
+                               if (strncasecmp(name, "network",
+                                   namelen) == 0) {
+                                       EATCOMMENTS
+                                       GETQUOTEDNAME(cp2, i)
+
+
+                                       cp2[i] = '\0';
+                                       if (!parsenetwork(cp2, &errstr)) {
+                                               ++errors;
+                                               fprintf(stderr,
+                                           "%s: %s:%d: bad network: %s\n",
+                                                   prog, file, n, errstr);
+                                       }
+                               } else {
+                                       ++errors;
+                                       fprintf(stderr,
+                                           "%s: unknown nslint \"%.*s\"\n",
+                                           prog, namelen, name);
+                               }
+                               EATSEMICOLON
+                               EATCOMMENTS
+                       }
+                       ++cp;
+                       EATCOMMENTS
+                       if (*cp != ';')  {
+                               ++errors;
+                               fprintf(stderr, "missing options semi\n");
+                       } else
+                               ++cp;
+                       continue;
+               }
+               if (strncasecmp(name, "include", namelen) == 0) {
+                       EATCOMMENTS
+                       GETQUOTEDNAME(filename, filenamelen)
+                       strncpy(includefile, filename, filenamelen);
+                       includefile[filenamelen] = '\0';
+                       errors += doconf(includefile, 1);
+                       EATSEMICOLON
+                       continue;
+               }
+
+               /* Skip over statements we don't understand */
+               EATSEMICOLON
+       }
+
+       free(buf);
+       close(fd);
+       return (errors != 0);
+}
+
+/* Return true when done */
+int
+parsesoa(register const char *cp, register char **errstrp)
+{
+       register char ch, *garbage;
+       static char errstr[132];
+
+       /* Eat leading whitespace */
+       while (isspace(*cp))
+               ++cp;
+
+       /* Find opening paren */
+       if (nsoaval < 0) {
+               cp = strchr(cp, '(');
+               if (cp == NULL)
+                       return (0);
+               ++cp;
+               while (isspace(*cp))
+                       ++cp;
+               nsoaval = 0;
+       }
+
+       /* Grab any numbers we find */
+       garbage = "leading garbage";
+       while (isdigit(*cp) && nsoaval < NSOAVAL) {
+               soaval[nsoaval] = atoi(cp);
+               do {
+                       ++cp;
+               } while (isdigit(*cp));
+               if (nsoaval == SOA_SERIAL && *cp == '.' && isdigit(cp[1])) {
+                       do {
+                               ++cp;
+                       } while (isdigit(*cp));
+               } else {
+                       ch = *cp;
+                       if (isupper(ch))
+                               ch = tolower(ch);
+                       switch (ch) {
+
+                       case 'w':
+                               soaval[nsoaval] *= 7;
+                               /* fall through */
+
+                       case 'd':
+                               soaval[nsoaval] *= 24;
+                               /* fall through */
+
+                       case 'h':
+                               soaval[nsoaval] *= 60;
+                               /* fall through */
+
+                       case 'm':
+                               soaval[nsoaval] *= 60;
+                               /* fall through */
+
+                       case 's':
+                               ++cp;
+                               break;
+
+                       default:
+                               ;       /* none */
+                       }
+               }
+               while (isspace(*cp))
+                       ++cp;
+               garbage = "trailing garbage";
+               ++nsoaval;
+       }
+
+       /* If we're done, do some sanity checks */
+       if (nsoaval >= NSOAVAL && *cp == ')') {
+               ++cp;
+               if (*cp != '\0')
+                       *errstrp = garbage;
+               else if (soaval[SOA_EXPIRE] <
+                   soaval[SOA_REFRESH] + 10 * soaval[SOA_RETRY]) {
+                       (void)sprintf(errstr,
+                   "expire less than refresh + 10 * retry (%u < %u + 10 * %u)",
+                           soaval[SOA_EXPIRE],
+                           soaval[SOA_REFRESH],
+                           soaval[SOA_RETRY]);
+                       *errstrp = errstr;
+               } else if (soaval[SOA_REFRESH] < 2 * soaval[SOA_RETRY]) {
+                       (void)sprintf(errstr,
+                           "refresh less than 2 * retry (%u < 2 * %u)",
+                           soaval[SOA_REFRESH],
+                           soaval[SOA_RETRY]);
+                       *errstrp = errstr;
+               }
+               return (1);
+       }
+
+       if (*cp != '\0') {
+               *errstrp = garbage;
+               return (1);
+       }
+
+       return (0);
+}
+
+void
+process(register const char *file, register const char *domain,
+    register const char *zone)
+{
+       register FILE *f;
+       register char ch, *cp, *cp2, *cp3, *rtype;
+       register const char *ccp;
+       register int n, sawsoa, flags, i;
+       register u_int ttl;
+       register u_int32_t addr;
+       u_int32_t net, mask;
+       int smtp;
+       char buf[1024], name[128], lastname[128], odomain[128];
+       char *errstr;
+       char *dotfmt = "%s: %s/%s:%d \"%s\" target missing trailing dot: %s\n";
+
+       f = fopen(file, "r");
+       if (f == NULL) {
+               fprintf(stderr, "%s: %s/%s: %s\n",
+                   prog, cwd, file, strerror(errno));
+               ++errors;
+               return;
+       }
+       if (debug > 1)
+               printf("%s: process: opened %s/%s\n", prog, cwd, file);
+
+       /* Are we doing an in-addr.arpa domain? */
+       n = 0;
+       net = 0;
+       mask = 0;
+       ccp = domain + strlen(domain) - sizeof(inaddr) + 1;
+       if (ccp >= domain && strcasecmp(ccp, inaddr) == 0 &&
+           !parseinaddr(domain, &net, &mask)) {
+               ++errors;
+               fprintf(stderr, "%s: %s/%s:%d bad in-addr.arpa domain\n",
+                   prog, cwd, file, n);
+               return;
+       }
+
+       lastname[0] = '\0';
+       sawsoa = 0;
+       while (fgets(buf, sizeof(buf), f) != NULL) {
+               ++n;
+               cp = buf;
+               while (*cp != '\0') {
+                       /* Handle quoted strings (but don't report errors) */
+                       if (*cp == '"') {
+                               ++cp;
+                               while (*cp != '"' && *cp != '\n' && *cp != '\0')
+                                       ++cp;
+                               continue;
+                       }
+                       if (*cp == '\n' || *cp == ';')
+                               break;
+                       ++cp;
+               }
+               *cp-- = '\0';
+
+               /* Nuke trailing white space */
+               while (cp >= buf && isspace(*cp))
+                       *cp-- = '\0';
+
+               cp = buf;
+               if (*cp == '\0')
+                       continue;
+
+               /* Handle multi-line soa records */
+               if (sawsoa) {
+                       errstr = NULL;
+                       if (parsesoa(cp, &errstr))
+                               sawsoa = 0;
+                       if (errstr != NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d bad \"soa\" record (%s)\n",
+                                   prog, cwd, file, n, errstr);
+                       }
+                       continue;
+               }
+               if (debug > 3)
+                       printf(">%s<\n", cp);
+
+               /* Look for name */
+               if (isspace(*cp)) {
+                       /* Same name as last record */
+                       if (lastname[0] == '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d no default name\n",
+                                   prog, cwd, file, n);
+                               continue;
+                       }
+                       (void)strcpy(name, lastname);
+               } else {
+                       /* Extract name, converting to lowercase */
+                       for (cp2 = name; !isspace(*cp) && *cp != '\0'; ++cp)
+                               if (isupper(*cp))
+                                       *cp2++ = tolower(*cp);
+                               else
+                                       *cp2++ = *cp;
+                       *cp2 = '\0';
+
+                       /* Check for domain shorthand */
+                       if (name[0] == '@' && name[1] == '\0')
+                               (void)strcpy(name, domain);
+               }
+
+               /* Find next token */
+               while (isspace(*cp))
+                       ++cp;
+
+               /* Handle includes (gag) */
+               if (name[0] == '$' && strcasecmp(name, "$include") == 0) {
+                       /* Extract filename */
+                       cp2 = name;
+                       while (!isspace(*cp) && *cp != '\0')
+                               *cp2++ = *cp++;
+                       *cp2 = '\0';
+
+                       /* Look for optional domain */
+                       while (isspace(*cp))
+                               ++cp;
+                       if (*cp == '\0')
+                               process(name, domain, zone);
+                       else {
+                               cp2 = cp;
+                               /* Convert optional domain to lowercase */
+                               for (; !isspace(*cp) && *cp != '\0'; ++cp)
+                                       if (isupper(*cp))
+                                               *cp = tolower(*cp);
+                               *cp = '\0';
+                               process(name, cp2, cp2);
+                       }
+                       continue;
+               }
+
+               /* Handle $origin */
+               if (name[0] == '$' && strcasecmp(name, "$origin") == 0) {
+                       /* Extract domain, converting to lowercase */
+                       for (cp2 = odomain; !isspace(*cp) && *cp != '\0'; ++cp)
+                               if (isupper(*cp))
+                                       *cp2++ = tolower(*cp);
+                               else
+                                       *cp2++ = *cp;
+                       *cp2 = '\0';
+                       domain = odomain;
+                       lastname[0] = '\0';
+
+                       /* Are we doing an in-addr.arpa domain? */
+                       net = 0;
+                       mask = 0;
+                       ccp = domain + strlen(domain) - (sizeof(inaddr) - 1);
+                       if (ccp >= domain && strcasecmp(ccp, inaddr) == 0 &&
+                           !parseinaddr(domain, &net, &mask)) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d bad in-addr.arpa domain\n",
+                                   prog, cwd, file, n);
+                               return;
+                       }
+                       continue;
+               }
+
+               /* Handle ttl */
+               if (name[0] == '$' && strcasecmp(name, "$ttl") == 0) {
+                       cp2 = cp;
+                       while (isdigit(*cp))
+                               ++cp;
+                       ch = *cp;
+                       if (isupper(ch))
+                               ch = tolower(ch);
+                       if (strchr("wdhms", ch) != NULL)
+                               ++cp;
+                       while (isspace(*cp))
+                               ++cp;
+                       if (*cp != '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d bad $ttl \"%s\"\n",
+                                   prog, cwd, file, n, cp2);
+                       }
+                       (void)strcpy(name, lastname);
+                       continue;
+               }
+
+               /* Parse ttl or use default  */
+               if (isdigit(*cp)) {
+                       ttl = atoi(cp);
+                       do {
+                               ++cp;
+                       } while (isdigit(*cp));
+
+                       ch = *cp;
+                       if (isupper(ch))
+                               ch = tolower(ch);
+                       switch (ch) {
+
+                       case 'w':
+                               ttl *= 7;
+                               /* fall through */
+
+                       case 'd':
+                               ttl *= 24;
+                               /* fall through */
+
+                       case 'h':
+                               ttl *= 60;
+                               /* fall through */
+
+                       case 'm':
+                               ttl *= 60;
+                               /* fall through */
+
+                       case 's':
+                               ++cp;
+                               break;
+
+                       default:
+                               ;       /* none */
+                       }
+
+
+                       if (!isspace(*cp)) {
+                               ++errors;
+                               fprintf(stderr, "%s: %s/%s:%d bad ttl\n",
+                                   prog, cwd, file, n);
+                               continue;
+                       }
+
+                       /* Find next token */
+                       ++cp;
+                       while (isspace(*cp))
+                               ++cp;
+               } else
+                       ttl = soaval[SOA_MINIMUM];
+
+               /* Eat optional "in" */
+               if ((cp[0] == 'i' || cp[0] == 'I') &&
+                   (cp[1] == 'n' || cp[1] == 'N') && isspace(cp[2])) {
+                       /* Find next token */
+                       cp += 3;
+                       while (isspace(*cp))
+                               ++cp;
+               } else if ((cp[0] == 'c' || cp[0] == 'C') &&
+                   isspace(cp[5]) && strncasecmp(cp, "chaos", 5) == 0) {
+                       /* Find next token */
+                       cp += 5;
+                       while (isspace(*cp))
+                               ++cp;
+               }
+
+               /* Find end of record type, converting to lowercase */
+               rtype = cp;
+               for (rtype = cp; !isspace(*cp) && *cp != '\0'; ++cp)
+                       if (isupper(*cp))
+                               *cp = tolower(*cp);
+               *cp++ = '\0';
+
+               /* Find "the rest" */
+               while (isspace(*cp))
+                       ++cp;
+
+               /* Check for non-ptr names with dots but no trailing dot */
+               if (!isdigit(*name) &&
+                   checkdots(name) && strcmp(domain, ".") != 0) {
+                       ++errors;
+                       fprintf(stderr,
+                         "%s: %s/%s:%d \"%s\" name missing trailing dot: %s\n",
+                           prog, cwd, file, n, rtype, name);
+               }
+
+               /* Check for FQDNs outside the zone */
+               cp2 = name + strlen(name) - 1;
+               if (cp2 >= name && *cp2 == '.' && strchr(name, '.') != NULL) {
+                       cp2 = name + strlen(name) - strlen(zone);
+                       if (cp2 >= name && strcasecmp(cp2, zone) != 0) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d \"%s\" outside zone %s\n",
+                                   prog, cwd, file, n, name, zone);
+                       }
+               }
+
+#define CHECK4(p, a, b, c, d) \
+    (p[0] == (a) && p[1] == (b) && p[2] == (c) && p[3] == (d) && p[4] == '\0')
+#define CHECK3(p, a, b, c) \
+    (p[0] == (a) && p[1] == (b) && p[2] == (c) && p[3] == '\0')
+#define CHECK2(p, a, b) \
+    (p[0] == (a) && p[1] == (b) && p[2] == '\0')
+#define CHECKDOT(p) \
+    (p[0] == '.' && p[1] == '\0')
+
+               if (rtype[0] == 'a' && rtype[1] == '\0') {
+                       /* Handle "a" record */
+                       add_domain(name, domain);
+                       addr = htonl(inet_addr(cp));
+                       if ((int)addr == -1) {
+                               ++errors;
+                               cp2 = cp + strlen(cp) - 1;
+                               if (cp2 >= cp && *cp2 == '\n')
+                                       *cp2 = '\0';
+                               fprintf(stderr,
+                           "%s: %s/%s:%d bad \"a\" record ip addr \"%s\"\n",
+                                   prog, cwd, file, n, cp);
+                               continue;
+                       }
+                       errors += updateitem(name, addr, REC_A, ttl, 0);
+               } else if (CHECK4(rtype, 'a', 'a', 'a', 'a')) {
+                       /* Just eat for now */
+                       continue;
+               } else if (CHECK3(rtype, 'p', 't', 'r')) {
+                       /* Handle "ptr" record */
+                       add_domain(name, domain);
+                       if (strcmp(cp, "@") == 0)
+                               (void)strcpy(cp, zone);
+                       if (checkdots(cp)) {
+                               ++errors;
+                               fprintf(stderr, dotfmt,
+                                   prog, cwd, file, n, rtype, cp);
+                       }
+                       add_domain(cp, domain);
+                       errstr = NULL;
+                       addr = parseptr(name, net, mask, &errstr);
+                       if (errstr != NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                       "%s: %s/%s:%d bad \"ptr\" record (%s) ip addr \"%s\"\n",
+                                   prog, cwd, file, n, errstr, name);
+                               continue;
+                       }
+                       errors += updateitem(cp, addr, REC_PTR, 0, 0);
+               } else if (CHECK3(rtype, 's', 'o', 'a')) {
+                       /* Handle "soa" record */
+                       if (!CHECKDOT(name)) {
+                               add_domain(name, domain);
+                               errors += updateitem(name, 0, REC_SOA, 0, 0);
+                       }
+                       errstr = NULL;
+                       if (!parsesoa(cp, &errstr))
+                               ++sawsoa;
+                       if (errstr != NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d bad \"soa\" record (%s)\n",
+                                   prog, cwd, file, n, errstr);
+                               continue;
+                       }
+               } else if (CHECK3(rtype, 'w', 'k', 's')) {
+                       /* Handle "wks" record */
+                       addr = htonl(inet_addr(cp));
+                       if ((int)addr == -1) {
+                               ++errors;
+                               cp2 = cp;
+                               while (!isspace(*cp2) && *cp2 != '\0')
+                                       ++cp2;
+                               *cp2 = '\0';
+                               fprintf(stderr,
+                           "%s: %s/%s:%d bad \"wks\" record ip addr \"%s\"\n",
+                                   prog, cwd, file, n, cp);
+                               continue;
+                       }
+                       /* Step over ip address */
+                       while (*cp == '.' || isdigit(*cp))
+                               ++cp;
+                       while (isspace(*cp))
+                               *cp++ = '\0';
+                       /* Make sure services are legit */
+                       errstr = NULL;
+                       n += checkwks(f, cp, &smtp, &errstr);
+                       if (errstr != NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d bad \"wks\" record (%s)\n",
+                                   prog, cwd, file, n, errstr);
+                               continue;
+                       }
+                       add_domain(name, domain);
+                       errors += updateitem(name, addr, REC_WKS,
+                           0, smtp ? FLG_SMTPWKS : 0);
+                       /* XXX check to see if ip address records exists? */
+               } else if (rtype[0] == 'h' && strcmp(rtype, "hinfo") == 0) {
+                       /* Handle "hinfo" record */
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_HINFO, 0, 0);
+                       cp2 = cp;
+                       cp = parsequoted(cp);
+                       if (cp == NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"hinfo\" missing quote: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+                       if (!isspace(*cp)) {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"hinfo\" missing white space: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+                       ++cp;
+                       while (isspace(*cp))
+                               ++cp;
+                       if (*cp == '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"hinfo\" missing keyword: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+                       cp = parsequoted(cp);
+                       if (cp == NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"hinfo\" missing quote: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+                       if (*cp != '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                       "%s: %s/%s:%d \"hinfo\" garbage after keywords: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+               } else if (CHECK2(rtype, 'm', 'x')) {
+                       /* Handle "mx" record */
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_MX, ttl, 0);
+
+                       /* Look for priority */
+                       if (!isdigit(*cp)) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d bad \"mx\" priority: %s\n",
+                                   prog, cwd, file, n, cp);
+                       }
+
+                       /* Skip over priority */
+                       ++cp;
+                       while (isdigit(*cp))
+                               ++cp;
+                       while (isspace(*cp))
+                               ++cp;
+                       if (*cp == '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d missing \"mx\" hostname\n",
+                                   prog, cwd, file, n);
+                       }
+                       if (strcmp(cp, "@") == 0)
+                               (void)strcpy(cp, zone);
+                       if (checkdots(cp)) {
+                               ++errors;
+                               fprintf(stderr, dotfmt,
+                                   prog, cwd, file, n, rtype, cp);
+                       }
+
+                       /* Check to see if mx host exists */
+                       add_domain(cp, domain);
+                       flags = FLG_MXREF;
+                       if (*name == *cp && strcmp(name, cp) == 0)
+                               flags |= FLG_SELFMX;
+                       errors += updateitem(cp, 0, REC_REF, 0, flags);
+               } else if (rtype[0] == 'c' && strcmp(rtype, "cname") == 0) {
+                       /* Handle "cname" record */
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_CNAME, 0, 0);
+                       if (checkdots(cp)) {
+                               ++errors;
+                               fprintf(stderr, dotfmt,
+                                   prog, cwd, file, n, rtype, cp);
+                       }
+
+                       /* Make sure cname points somewhere */
+                       if (strcmp(cp, "@") == 0)
+                               (void)strcpy(cp, zone);
+                       add_domain(cp, domain);
+                       errors += updateitem(cp, 0, REC_REF, 0, 0);
+               } else if (CHECK3(rtype, 's', 'r', 'v')) {
+                       /* Handle "srv" record */
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_SRV, 0, 0);
+                       cp2 = cp;
+
+                       /* Skip over three values */
+                       for (i = 0; i < 3; ++i) {
+                               if (!isdigit(*cp)) {
+                                       ++errors;
+                                       fprintf(stderr, "%s: %s/%s:%d"
+                                           " bad \"srv\" value: %s\n",
+                                           prog, cwd, file, n, cp);
+                               }
+
+                               /* Skip over value */
+                               ++cp;
+                               while (isdigit(*cp))
+                                       ++cp;
+                               while (isspace(*cp))
+                                       ++cp;
+                       }
+
+                       /* Check to see if mx host exists */
+                       add_domain(cp, domain);
+                       errors += updateitem(cp, 0, REC_REF, 0, 0);
+               } else if (CHECK3(rtype, 't', 'x', 't')) {
+                       /* Handle "txt" record */
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_TXT, 0, 0);
+                       cp2 = cp;
+                       cp = parsequoted(cp);
+                       if (cp == NULL) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: %s/%s:%d \"txt\" missing quote: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+                       while (isspace(*cp))
+                               ++cp;
+                       if (*cp != '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"txt\" garbage after text: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+               } else if (CHECK2(rtype, 'n', 's')) {
+                       /* Handle "ns" record */
+                       errors += updateitem(zone, 0, REC_NS, 0, 0);
+                       if (strcmp(cp, "@") == 0)
+                               (void)strcpy(cp, zone);
+                       if (checkdots(cp)) {
+                               ++errors;
+                               fprintf(stderr, dotfmt,
+                                   prog, cwd, file, n, rtype, cp);
+                       }
+                       add_domain(cp, domain);
+                       errors += updateitem(cp, 0, REC_REF, 0, 0);
+               } else if (CHECK2(rtype, 'r', 'p')) {
+                       /* Handle "rp" record */
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_RP, 0, 0);
+                       cp2 = cp;
+
+                       /* Step over mailbox name */
+                       /* XXX could add_domain() and check further */
+                       while (!isspace(*cp) && *cp != '\0')
+                               ++cp;
+                       if (*cp == '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"rp\" missing text name: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+                       ++cp;
+                       cp3 = cp;
+
+                       /* Step over text name */
+                       while (!isspace(*cp) && *cp != '\0')
+                               ++cp;
+
+                       if (*cp != '\0') {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: %s/%s:%d \"rp\" garbage after text name: %s\n",
+                                   prog, cwd, file, n, cp2);
+                               continue;
+                       }
+
+                       /* Make sure text name points somewhere (if not ".") */
+                       if (!CHECKDOT(cp3)) {
+                               add_domain(cp3, domain);
+                               errors += updateitem(cp3, 0, REC_REF, 0, 0);
+                       }
+               } else if (rtype[0] == 'a' && strcmp(rtype, "allowdupa") == 0) {
+                       /* Handle "allow duplicate a" record */
+                       add_domain(name, domain);
+                       addr = htonl(inet_addr(cp));
+                       if ((int)addr == -1) {
+                               ++errors;
+                               cp2 = cp + strlen(cp) - 1;
+                               if (cp2 >= cp && *cp2 == '\n')
+                                       *cp2 = '\0';
+                               fprintf(stderr,
+                   "%s: %s/%s:%d bad \"allowdupa\" record ip addr \"%s\"\n",
+                                   prog, cwd, file, n, cp);
+                               continue;
+                       }
+                       errors += updateitem(name, addr, 0, 0, FLG_ALLOWDUPA);
+               } else {
+                       /* Unknown record type */
+                       ++errors;
+                       fprintf(stderr,
+                           "%s: %s/%s:%d unknown record type \"%s\"\n",
+                           prog, cwd, file, n, rtype);
+                       add_domain(name, domain);
+                       errors += updateitem(name, 0, REC_UNKNOWN, 0, 0);
+               }
+               (void)strcpy(lastname, name);
+       }
+       (void)fclose(f);
+       return;
+}
+
+/* Records we use to detect duplicates */
+static struct duprec {
+       int record;
+       char *name;
+} duprec[] = {
+       { REC_A, "a" },
+       { REC_HINFO, "hinfo" },
+       { 0, NULL },
+};
+
+void
+checkdups(register struct item *ip, register int records)
+{
+       register struct duprec *dp;
+
+       records &= (ip->records & MASK_TEST_DUP);
+       if (records == 0)
+               return;
+       for (dp = duprec; dp->name != NULL; ++dp)
+               if ((records & dp->record) != 0) {
+                       ++errors;
+                       fprintf(stderr, "%s: multiple \"%s\" records for %s\n",
+                           prog, dp->name, ip->host);
+                       records &= ~dp->record;
+               }
+       if (records != 0)
+               fprintf(stderr, "%s: checkdups: records not zero (%d)\n",
+                   prog, records);
+}
+
+int
+updateitem(register const char *host, register u_int32_t addr,
+    register int records, register u_int ttl, register int flags)
+{
+       register const char *ccp;
+       register int n, errs;
+       register u_int i;
+       register struct item *ip;
+       int foundsome;
+
+       n = 0;
+       foundsome = 0;
+       errs = 0;
+       ITEMHASH(host, i, ccp);
+       ip = &items[i & (ITEMSIZE - 1)];
+       while (n < ITEMSIZE && ip->host) {
+               if ((addr == 0 || addr == ip->addr || ip->addr == 0) &&
+                   *host == *ip->host && strcmp(host, ip->host) == 0) {
+                       ++foundsome;
+                       if (ip->addr == 0)
+                               ip->addr = addr;
+                       if ((records & MASK_TEST_DUP) != 0)
+                               checkdups(ip, records);
+                       ip->records |= records;
+                       /* Only check differing ttl's for A and MX records */
+                       if (ip->ttl == 0)
+                               ip->ttl = ttl;
+                       else if (ttl != 0 && ip->ttl != ttl) {
+                               fprintf(stderr,
+                                   "%s: differing ttls for %s (%u != %u)\n",
+                                   prog, ip->host, ttl, ip->ttl);
+                               ++errs;
+                       }
+                       ip->flags |= flags;
+                       /* Not done if we wildcard matched the name */
+                       if (addr)
+                               return (errs);
+               }
+               ++n;
+               ++ip;
+               if (ip >= &items[ITEMSIZE])
+                       ip = items;
+       }
+
+       if (n >= ITEMSIZE) {
+               fprintf(stderr, "%s: out of item slots (max %d)\n",
+                   prog, ITEMSIZE);
+               exit(1);
+       }
+
+       /* Done if we were wildcarding the name (and found entries for it) */
+       if (addr == 0 && foundsome)
+               return (errs);
+
+       /* Didn't find it, make new entry */
+       ++itemcnt;
+       if (ip->host) {
+               fprintf(stderr, "%s: reusing bucket!\n", prog);
+               exit(1);
+       }
+       ip->addr = addr;
+       ip->host = savestr(host);
+       if ((records & MASK_TEST_DUP) != 0)
+               checkdups(ip, records);
+       ip->records |= records;
+       if (ttl != 0)
+               ip->ttl = ttl;
+       ip->flags |= flags;
+       return (errs);
+}
+
+static const char *microlist[] = {
+       "_tcp",
+       "_udp",
+       "_msdcs",
+       "_sites",
+       NULL
+};
+
+int
+rfc1034host(register const char *host, register int recs)
+{
+       register const char *cp, **p;
+       register int underok;
+
+       underok = 0;
+       for (p = microlist; *p != NULL ;++p)
+               if ((cp = strstr(host, *p)) != NULL &&
+                   cp > host &&
+                   cp[-1] == '.' &&
+                   cp[strlen(*p)] == '.') {
+                       ++underok;
+                       break;
+               }
+
+       cp = host;
+       if (!(isalpha(*cp) || isdigit(*cp) || (*cp == '_' && underok))) {
+               fprintf(stderr,
+           "%s: illegal hostname \"%s\" (starts with non-alpha/numeric)\n",
+                   prog, host);
+               return (1);
+       }
+       for (++cp; *cp != '.' && *cp != '\0'; ++cp)
+               if (!(isalpha(*cp) || isdigit(*cp) || *cp == '-' ||
+                   (*cp == '/' && (recs & REC_SOA) != 0))) {
+                       fprintf(stderr,
+                   "%s: illegal hostname \"%s\" ('%c' illegal character)\n",
+                           prog, host, *cp);
+                       return (1);
+               }
+       if (--cp >= host && *cp == '-') {
+               fprintf(stderr, "%s: illegal hostname \"%s\" (ends with '-')\n",
+                   prog, host);
+               return (1);
+       }
+       return (0);
+}
+
+int
+nslint(void)
+{
+       register int n, records, flags;
+       register struct item *ip, *lastaip, **ipp, **itemlist;
+       register u_int32_t addr, lastaddr, mask;
+
+       itemlist = (struct item **)calloc(itemcnt, sizeof(*ipp));
+       if (itemlist == NULL) {
+               fprintf(stderr, "%s: nslint: calloc: %s\n",
+                   prog, strerror(errno));
+               exit(1);
+       }
+       ipp = itemlist;
+       for (n = 0, ip = items; n < ITEMSIZE; ++n, ++ip) {
+               if (ip->host == NULL)
+                       continue;
+
+               /* Save entries with addresses for later check */
+               if (ip->addr != 0)
+                       *ipp++ = ip;
+
+               if (debug > 1) {
+                       if (debug > 2)
+                               printf("%d\t", n);
+                       printf("%s\t%s\t0x%x\t0x%x\n",
+                           ip->host, intoa(ip->addr), ip->records, ip->flags);
+               }
+
+               /* Check for illegal hostnames (rfc1034) */
+               if (rfc1034host(ip->host, ip->records))
+                       ++errors;
+
+               /* Check for missing ptr records (ok if also an ns record) */
+               records = ip->records & MASK_CHECK_REC;
+               if ((ip->records & MASK_TEST_REC) != 0)
+                       records |= REC_OTHER;
+               switch (records) {
+
+               case REC_A | REC_OTHER | REC_PTR | REC_REF:
+               case REC_A | REC_OTHER | REC_PTR:
+               case REC_A | REC_PTR | REC_REF:
+               case REC_A | REC_PTR:
+               case REC_CNAME:
+                       /* These are O.K. */
+                       break;
+
+               case REC_CNAME | REC_REF:
+                       ++errors;
+                       fprintf(stderr, "%s: \"cname\" referenced by other"
+                           " \"cname\" or \"mx\": %s\n", prog, ip->host);
+                       break;
+
+               case REC_OTHER | REC_REF:
+               case REC_OTHER:
+                       /*
+                        * This is only an error if there is an address
+                        * associated with the hostname; this means
+                        * there was a wks entry with bogus address.
+                        * Otherwise, we have an mx or hinfo.
+                        */
+                       if (ip->addr != 0) {
+                               ++errors;
+                               fprintf(stderr,
+                           "%s: \"wks\" without \"a\" and \"ptr\": %s -> %s\n",
+                                   prog, ip->host, intoa(ip->addr));
+                       }
+                       break;
+
+               case REC_REF:
+                       ++errors;
+                       fprintf(stderr,
+                           "%s: name referenced without other records: %s\n",
+                           prog, ip->host);
+                       break;
+
+               case REC_A | REC_OTHER | REC_REF:
+               case REC_A | REC_OTHER:
+               case REC_A | REC_REF:
+               case REC_A:
+                       ++errors;
+                       fprintf(stderr, "%s: missing \"ptr\": %s -> %s\n",
+                           prog, ip->host, intoa(ip->addr));
+                       break;
+
+               case REC_OTHER | REC_PTR | REC_REF:
+               case REC_OTHER | REC_PTR:
+               case REC_PTR | REC_REF:
+               case REC_PTR:
+                       ++errors;
+                       fprintf(stderr, "%s: missing \"a\": %s -> %s\n",
+                           prog, ip->host, intoa(ip->addr));
+                       break;
+
+               case REC_A | REC_CNAME | REC_OTHER | REC_PTR | REC_REF:
+               case REC_A | REC_CNAME | REC_OTHER | REC_PTR:
+               case REC_A | REC_CNAME | REC_OTHER | REC_REF:
+               case REC_A | REC_CNAME | REC_OTHER:
+               case REC_A | REC_CNAME | REC_PTR | REC_REF:
+               case REC_A | REC_CNAME | REC_PTR:
+               case REC_A | REC_CNAME | REC_REF:
+               case REC_A | REC_CNAME:
+               case REC_CNAME | REC_OTHER | REC_PTR | REC_REF:
+               case REC_CNAME | REC_OTHER | REC_PTR:
+               case REC_CNAME | REC_OTHER | REC_REF:
+               case REC_CNAME | REC_OTHER:
+               case REC_CNAME | REC_PTR | REC_REF:
+               case REC_CNAME | REC_PTR:
+                       ++errors;
+                       fprintf(stderr, "%s: \"cname\" %s has other records\n",
+                           prog, ip->host);
+                       break;
+
+               case 0:
+                       /* Second level test */
+                       if ((ip->records & ~(REC_NS | REC_TXT)) == 0)
+                               break;
+                       /* Fall through... */
+
+               default:
+                       ++errors;
+                       fprintf(stderr,
+                           "%s: records == 0x%x: can't happen (%s 0x%x)\n",
+                           prog, records, ip->host, ip->records);
+                       break;
+               }
+
+               /* Check for smtp problems */
+               flags = ip->flags & MASK_TEST_SMTP;
+
+               if ((flags & FLG_SELFMX) != 0 && (ip->records & REC_A) == 0) {
+                       ++errors;
+                       fprintf(stderr,
+                           "%s: self \"mx\" for %s missing \"a\" record\n",
+                           prog, ip->host);
+               }
+
+               switch (flags) {
+
+               case 0:
+               case FLG_SELFMX | FLG_SMTPWKS:
+                       /* These are O.K. */
+                       break;
+
+               case FLG_SELFMX:
+                       if ((ip->records & REC_WKS) != 0) {
+                               ++errors;
+                               fprintf(stderr,
+                                   "%s: smtp/tcp missing from \"wks\": %s\n",
+                                   prog, ip->host);
+                       }
+                       break;
+
+               case FLG_SMTPWKS:
+                       ++errors;
+                       fprintf(stderr,
+                           "%s: saw smtp/tcp without self \"mx\": %s\n",
+                           prog, ip->host);
+                       break;
+
+               default:
+                       ++errors;
+                       fprintf(stderr,
+                           "%s: flags == 0x%x: can't happen (%s)\n",
+                           prog, flags, ip->host);
+               }
+
+               /* Check for chained MX records */
+               if ((ip->flags & (FLG_SELFMX | FLG_MXREF)) == FLG_MXREF &&
+                   (ip->records & REC_MX) != 0) {
+                       ++errors;
+                       fprintf(stderr, "%s: \"mx\" referenced by other"
+                           " \"mx\" record: %s\n", prog, ip->host);
+               }
+       }
+
+       /* Check for doubly booked addresses */
+       n = ipp - itemlist;
+       qsort(itemlist, n, sizeof(itemlist[0]), cmpaddr);
+       lastaddr = 0;
+       ip = NULL;
+       for (ipp = itemlist; n > 0; ++ipp, --n) {
+               addr = (*ipp)->addr;
+               if (lastaddr == addr &&
+                   ((*ipp)->flags & FLG_ALLOWDUPA) == 0 &&
+                   (ip->flags & FLG_ALLOWDUPA) == 0) {
+                       ++errors;
+                       fprintf(stderr, "%s: %s in use by %s and %s\n",
+                           prog, intoa(addr), (*ipp)->host, ip->host);
+               }
+               lastaddr = addr;
+               ip = *ipp;
+       }
+
+       /* Check for hosts with multiple addresses on the same subnet */
+       n = ipp - itemlist;
+       qsort(itemlist, n, sizeof(itemlist[0]), cmphost);
+       if (netlistcnt > 0) {
+               n = ipp - itemlist;
+               lastaip = NULL;
+               for (ipp = itemlist; n > 0; ++ipp, --n) {
+                       ip = *ipp;
+                       if ((ip->records & REC_A) == 0 ||
+                           (ip->flags & FLG_ALLOWDUPA) != 0)
+                               continue;
+                       if (lastaip != NULL &&
+                           strcasecmp(ip->host, lastaip->host) == 0) {
+                               mask = findmask(ip->addr);
+                               if (mask == 0) {
+                                       ++errors;
+                                       fprintf(stderr,
+                                           "%s: can't find mask for %s (%s)\n",
+                                           prog, ip->host, intoa(ip->addr));
+                               } else if ((lastaip->addr & mask) ==
+                                   (ip->addr & mask) ) {
+                                       ++errors;
+                                       fprintf(stderr,
+                           "%s: multiple \"a\" records for %s on subnet %s",
+                                           prog, ip->host,
+                                           intoa(ip->addr & mask));
+                                       fprintf(stderr, "\n\t(%s",
+                                           intoa(lastaip->addr));
+                                       fprintf(stderr, " and %s)\n",
+                                           intoa(ip->addr));
+                               }
+                       }
+                       lastaip = ip;
+               }
+       }
+
+       if (debug)
+               printf("%s: %d/%d items used, %d error%s\n", prog, itemcnt,
+                   ITEMSIZE, errors, errors == 1 ? "" : "s");
+       return (errors != 0);
+}
+
+/* Similar to inet_ntoa() */
+char *
+intoa(u_int32_t addr)
+{
+       register char *cp;
+       register u_int byte;
+       register int n;
+       static char buf[sizeof(".xxx.xxx.xxx.xxx")];
+
+       cp = &buf[sizeof buf];
+       *--cp = '\0';
+
+       n = 4;
+       do {
+               byte = addr & 0xff;
+               *--cp = byte % 10 + '0';
+               byte /= 10;
+               if (byte > 0) {
+                       *--cp = byte % 10 + '0';
+                       byte /= 10;
+                       if (byte > 0)
+                               *--cp = byte + '0';
+               }
+               *--cp = '.';
+               addr >>= 8;
+       } while (--n > 0);
+
+       return cp + 1;
+}
+
+int
+parseinaddr(register const char *cp, register u_int32_t *netp,
+    register u_int32_t *maskp)
+{
+       register int i, bits;
+       register u_int32_t o, net, mask;
+
+       if (!isdigit(*cp))
+               return (0);
+       net = 0;
+       mask = 0xff000000;
+       bits = 0;
+       o = 0;
+       do {
+               o = o * 10 + (*cp++ - '0');
+       } while (isdigit(*cp));
+       net = o << 24;
+
+       /* Check for classless delegation mask width */
+       if (*cp == '/') {
+               ++cp;
+               o = 0;
+               do {
+                       o = o * 10 + (*cp++ - '0');
+               } while (isdigit(*cp));
+               bits = o;
+               if (bits <= 0 || bits > 32)
+                       return (0);
+       }
+
+       if (*cp == '.' && isdigit(cp[1])) {
+               ++cp;
+               o = 0;
+               do {
+                       o = o * 10 + (*cp++ - '0');
+               } while (isdigit(*cp));
+               net = (net >> 8) | (o << 24);
+               mask = 0xffff0000;
+               if (*cp == '.' && isdigit(cp[1])) {
+                       ++cp;
+                       o = 0;
+                       do {
+                               o = o * 10 + (*cp++ - '0');
+                       } while (isdigit(*cp));
+                       net = (net >> 8) | (o << 24);
+                       mask = 0xffffff00;
+                       if (*cp == '.' && isdigit(cp[1])) {
+                               ++cp;
+                               o = 0;
+                               do {
+                                       o = o * 10 + (*cp++ - '0');
+                               } while (isdigit(*cp));
+                               net = (net >> 8) | (o << 24);
+                               mask = 0xffffffff;
+                       }
+               }
+       }
+       if (strcasecmp(cp, inaddr) != 0)
+               return (0);
+
+       /* Classless delegation */
+       /* XXX check that calculated mask isn't smaller than octet mask? */
+       if (bits != 0)
+               for (mask = 0, i = 31; bits > 0; --i, --bits)
+                       mask |= (1 << i);
+
+       *netp = net;
+       *maskp = mask;
+       return (1);
+}
+
+u_int32_t
+parseptr(register const char *cp, u_int32_t net, u_int32_t mask,
+    register char **errstrp)
+{
+       register u_int32_t o, addr;
+       register int shift;
+
+       addr = 0;
+       shift = 0;
+       while (isdigit(*cp) && shift < 32) {
+               o = 0;
+               do {
+                       o = o * 10 + (*cp++ - '0');
+               } while (isdigit(*cp));
+               addr |= o << shift;
+               shift += 8;
+               if (*cp != '.') {
+                       if (*cp == '\0')
+                               break;
+                       *errstrp = "missing dot";
+                       return (0);
+               }
+               ++cp;
+       }
+
+       if (shift > 32) {
+               *errstrp = "more than 4 octets";
+               return (0);
+       }
+
+       if (shift == 32 && strcasecmp(cp, inaddr + 1) == 0)
+               return (addr);
+
+#ifdef notdef
+       if (*cp != '\0') {
+               *errstrp = "trailing junk";
+               return (0);
+       }
+#endif
+#ifdef notdef
+       if ((~mask & net) != 0) {
+               *errstrp = "too many octets for net";
+               return (0);
+       }
+#endif
+       return (net | addr);
+}
+
+int
+checkwks(register FILE *f, register char *proto, register int *smtpp,
+    register char **errstrp)
+{
+       register int n, sawparen;
+       register char *cp, *serv, **p;
+       static char errstr[132];
+       char buf[1024];
+       char psbuf[512];
+
+       if (!protoserv_init) {
+               initprotoserv();
+               ++protoserv_init;
+       }
+
+       /* Line count */
+       n = 0;
+
+       /* Terminate protocol */
+       cp = proto;
+       while (!isspace(*cp) && *cp != '\0')
+               ++cp;
+       if (*cp != '\0')
+               *cp++ = '\0';
+
+       /* Find services */
+       *smtpp = 0;
+       sawparen = 0;
+       if (*cp == '(') {
+               ++sawparen;
+               ++cp;
+               while (isspace(*cp))
+                       ++cp;
+       }
+       for (;;) {
+               if (*cp == '\0') {
+                       if (!sawparen)
+                               break;
+                       if (fgets(buf, sizeof(buf), f) == NULL) {
+                               *errstrp = "mismatched parens";
+                               return (n);
+                       }
+                       ++n;
+                       cp = buf;
+                       while (isspace(*cp))
+                               ++cp;
+               }
+               /* Find end of service, converting to lowercase */
+               for (serv = cp; !isspace(*cp) && *cp != '\0'; ++cp)
+                       if (isupper(*cp))
+                               *cp = tolower(*cp);
+               if (*cp != '\0')
+                       *cp++ = '\0';
+               if (sawparen && *cp == ')') {
+                       /* XXX should check for trailing junk */
+                       break;
+               }
+
+               (void)sprintf(psbuf, "%s/%s", serv, proto);
+
+               if (*serv == 's' && strcmp(psbuf, "tcp/smtp") == 0)
+                       ++*smtpp;
+
+               for (p = protoserv; *p != NULL; ++p)
+                       if (*psbuf == **p && strcmp(psbuf, *p) == 0) {
+                               break;
+                       }
+               if (*p == NULL) {
+                       sprintf(errstr, "%s unknown", psbuf);
+                       *errstrp = errstr;
+                       break;
+               }
+       }
+
+       return (n);
+}
+
+int
+checkserv(register const char *serv, register char **p)
+{
+       for (; *p != NULL; ++p)
+               if (*serv == **p && strcmp(serv, *p) == 0)
+                       return (1);
+       return (0);
+}
+
+void
+initprotoserv(void)
+{
+       register char *cp;
+       register struct servent *sp;
+       char psbuf[512];
+
+       protoserv_len = 256;
+       protoserv = (char **)malloc(protoserv_len * sizeof(*protoserv));
+       if (protoserv == NULL) {
+               fprintf(stderr, "%s: nslint: malloc: %s\n",
+                   prog, strerror(errno));
+               exit(1);
+       }
+
+       while ((sp = getservent()) != NULL) {
+               (void)sprintf(psbuf, "%s/%s", sp->s_name, sp->s_proto);
+
+               /* Convert to lowercase */
+               for (cp = psbuf; *cp != '\0'; ++cp)
+                       if (isupper(*cp))
+                               *cp = tolower(*cp);
+
+               if (protoserv_last + 1 >= protoserv_len) {
+                       protoserv_len <<= 1;
+                       protoserv = realloc(protoserv,
+                           protoserv_len * sizeof(*protoserv));
+                       if (protoserv == NULL) {
+                               fprintf(stderr, "%s: nslint: realloc: %s\n",
+                                   prog, strerror(errno));
+                               exit(1);
+                       }
+               }
+               protoserv[protoserv_last] = savestr(psbuf);
+               ++protoserv_last;
+       }
+       protoserv[protoserv_last] = NULL;
+}
+
+/*
+ * Returns true if name contains a dot but not a trailing dot.
+ * Special case: allow a single dot if the second part is not one
+ * of the 3 or 4 letter top level domains or is any 2 letter TLD
+ */
+int
+checkdots(register const char *name)
+{
+       register const char *cp, *cp2;
+
+       if ((cp = strchr(name, '.')) == NULL)
+               return (0);
+       cp2 = name + strlen(name) - 1;
+       if (cp2 >= name && *cp2 == '.')
+               return (0);
+
+       /* Return true of more than one dot*/
+       ++cp;
+       if (strchr(cp, '.') != NULL)
+               return (1);
+
+       if (strlen(cp) == 2 ||
+           strcasecmp(cp, "gov") == 0 ||
+           strcasecmp(cp, "edu") == 0 ||
+           strcasecmp(cp, "com") == 0 ||
+           strcasecmp(cp, "net") == 0 ||
+           strcasecmp(cp, "org") == 0 ||
+           strcasecmp(cp, "mil") == 0 ||
+           strcasecmp(cp, "int") == 0 ||
+           strcasecmp(cp, "nato") == 0 ||
+           strcasecmp(cp, "arpa") == 0)
+               return (1);
+       return (0);
+}
+
+int
+cmpaddr(register const void *ip1, register const void *ip2)
+{
+       register u_int32_t a1, a2;
+
+       a1 = (*(struct item **)ip1)->addr;
+       a2 = (*(struct item **)ip2)->addr;
+
+       if (a1 < a2)
+               return (-1);
+       else if (a1 > a2)
+               return (1);
+       else
+               return (0);
+}
+
+int
+cmphost(register const void *ip1, register const void *ip2)
+{
+       register const char *s1, *s2;
+
+       s1 = (*(struct item **)ip1)->host;
+       s2 = (*(struct item **)ip2)->host;
+
+       return (strcasecmp(s1, s2));
+}
+
+/* Returns a pointer after the next token or quoted string, else NULL */
+char *
+parsequoted(register char *cp)
+{
+
+       if (*cp == '"') {
+               ++cp;
+               while (*cp != '"' && *cp != '\0')
+                       ++cp;
+               if (*cp != '"')
+                       return (NULL);
+               ++cp;
+       } else {
+               while (!isspace(*cp) && *cp != '\0')
+                       ++cp;
+       }
+       return (cp);
+}
+
+__dead void
+usage(void)
+{
+       extern char version[];
+
+       fprintf(stderr, "Version %s\n", version);
+       fprintf(stderr, "usage: %s [-d] [-b named.boot] [-B nslint.boot]\n",
+           prog);
+       fprintf(stderr, "       %s [-d] [-c named.conf] [-C nslint.conf]\n",
+           prog);
+       exit(1);
+}
diff --git a/contrib/nslint-2.1a3/savestr.c b/contrib/nslint-2.1a3/savestr.c
new file mode 100644 (file)
index 0000000..dad9d1a
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 1997
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef lint
+static const char rcsid[] =
+    "@(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/savestr.c,v 1.1 2001/12/21 04:12:04 marka Exp $ (LBL)";
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "gnuc.h"
+#ifdef HAVE_OS_PROTO_H
+#include "os-proto.h"
+#endif
+
+#include "savestr.h"
+
+/* A replacement for strdup() that cuts down on malloc() overhead */
+char *
+savestr(register const char *str)
+{
+       register u_int size;
+       register char *p;
+       static char *strptr = NULL;
+       static u_int strsize = 0;
+
+       size = strlen(str) + 1;
+       if (size > strsize) {
+               strsize = 1024;
+               if (strsize < size)
+                       strsize = size;
+               strptr = (char *)malloc(strsize);
+               if (strptr == NULL) {
+                       fprintf(stderr, "savestr: malloc\n");
+                       exit(1);
+               }
+       }
+       (void)strcpy(strptr, str);
+       p = strptr;
+       strptr += size;
+       strsize -= size;
+       return (p);
+}
diff --git a/contrib/nslint-2.1a3/savestr.h b/contrib/nslint-2.1a3/savestr.h
new file mode 100644 (file)
index 0000000..594baf8
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 1997
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#) $Header: /u0/home/explorer/proj/ISC/git-conversion/cvsroot/bind9/contrib/nslint-2.1a3/savestr.h,v 1.1 2001/12/21 04:12:05 marka Exp $ (LBL)
+ */
+
+extern char *savestr(const char *);
diff --git a/contrib/nslint-2.1a3/strerror.c b/contrib/nslint-2.1a3/strerror.c
new file mode 100644 (file)
index 0000000..d330a65
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char sccsid[] = "@(#)strerror.c   8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/types.h>
+
+#include <string.h>
+
+#include "gnuc.h"
+#ifdef HAVE_OS_PROTO_H
+#include "os-proto.h"
+#endif
+
+char *
+strerror(num)
+       int num;
+{
+       extern int sys_nerr;
+       extern char *sys_errlist[];
+#define        UPREFIX "Unknown error: "
+       static char ebuf[40] = UPREFIX;         /* 64-bit number + slop */
+       register unsigned int errnum;
+       register char *p, *t;
+       char tmp[40];
+
+       errnum = num;                           /* convert to unsigned */
+       if (errnum < sys_nerr)
+               return(sys_errlist[errnum]);
+
+       /* Do this by hand, so we don't include stdio(3). */
+       t = tmp;
+       do {
+               *t++ = "0123456789"[errnum % 10];
+       } while (errnum /= 10);
+       for (p = ebuf + sizeof(UPREFIX) - 1;;) {
+               *p++ = *--t;
+               if (t <= tmp)
+                       break;
+       }
+       *p = '\0';
+       return(ebuf);
+}