This file contains a summary of the major changes in released revisions.
Please see the CHANGES file for a more detailed list of specific bugs/patches
that have been fixed/applied, and the ChangeLog file for a comprehensive
listing of all changes made to the code.

*5.4.4*

    snmplib:
      - [BUG 3171878]: Using SNMPv3 context does not work

    snmpd:
      - Various 64-bit fixes

    FreeBSD,NetBSD,OpenBSD:
        Incorporate fixes from these O/S patch archives


*5.4.3*

    snmpd:
      - Change default AgentX target from 0.0.0.0:705 to localhost:705
      - Fix CVE-2008-4309 (GETBULK issue reported by Oscar Mira-Sanchez)
      - Fix handling of multiple matching VACM entries
        (Use the "best" match, rather than the first one).
            Note that this could potentially affect the behaviour of
            existing access control configurations.
      - Latch large-disk statistics at 2Tb (rather than wrapping)

    Linux:
      - Fix build on modern distributions (using rpm-4.6)

    Windows:
      - Fix various builds (recent MSVC, MinGW, IPv6, winExtDLL)


*5.4.2*

    snmplib:
      - [PATCH 1921861]: Avoid endless loop after truncating 64bit int
      - Better handling of CONTAINER_INSERT failures with multiple indices

    snmpd:
      - [PATCH 2023633]: add SCTP-MIB implementation (Linux only)
      - suppress annoying "registration != duplicate" warning for root oids

    build:
      - [BUG 2023803]: Compilation problems on HP-UX 11.31
      - Update to libtool 1.5.26

    AIX:
      - Add support for AIX 6.x.


*5.4.1*

    snmplib:
      - [BUG 1619827]: link libraries against needed external libraries
      - [PATCH 1616912]: fix memory leak in UDP transport code
      - [PATCH 1592706]: fix memory leak when cloning varbinds
      - Change snmp_sess_add_ex to consistently close and delete the
        transport argument on failure, earlier the liveness of the
        transport argument was undecided.

    snmpd:
      - [BUG 1558823]: fix ipAddressTable memory leak
      - [BUG 1596638]: fix memory leak in ipCidrRouteTable, inetCidrRouteTable
      - [BUG 1611524]: fix tcp connection table file descriptor leak
      - handle row deletion issues in dataset tables
      - [BUG 1712988]: default and configurable maximum number of
        varbinds returnable to a GETBULK request.
      - [PATCH 1666737]: include ipv6 counts in
	udpInDatagrams, udpNoPorts, udpInErrors, udpOutDatagrams
      - [PATCH 1700157]: fixes ordering of exec tokens in the resulting mib tree
      - [PATCH 1719253]: fix skipNFSInHostResources so it does not break on the
	second walk of the table.

    perl:
      - link Perl modules against the exact set of libraries needed
      - [BUG 1619827]: properly link against libperl when configured with
	--enable-as-needed
      - [PATCH 1725049]: fix bulkwalk in cases of non-repeater

    build:
      - update to libtool 1.5.24 (from 1.5.22)

    python:
      - [PATCH 1716114]: Let python build in the Net-SNMP source tree

    MacOSX:
      - [PATCH 1600522]: CPU Hardware Abstraction Layer (HAL)
        implementation for mach/darwin
      - IF-MIB rewrite now enabled by default

    Win32:
      - fix AES support
      - [PATCH 1706344]: fix compilation with cygwin

    IRIX:
      - [PATCH 1709748]: Optimized IRIX cpu stats

    AIX:
      - Fix default shared library building instead of forcing static use

    FreeBSD:
      - [BUG 1633483]: Support CPU HAL on FreeBSD4.x


*5.4*

  Important Changes:
    - The default configuration now enables embedded Perl and the Perl
      modules by default when possible unless explicitly disabled. You
      may use the --disable-embedded-perl and --without-perl-modules
      configure options, respectively, to revert to the former default
      configuration.

  New:
    python:
      - Python bindings to the Net-SNMP project are now available in
        the python sub-directory.  See the README file there for details. 

    build:
      - Some preliminary support for automatic building of dynamically
        loadable mib module code.
      - Most net-snmp specific defines are now (also) available under
        a proper NETSNMP_ prefix. The older, potentially conflicting
        names as well as the autoconf variables can now be turned off
        easily within 3rd party code.
      - libtool update to 1.5.22
      - enable-as-needed will try to link built libraries against needed
	libraries at library link time, rather than application link time.
        This is preliminary support for what will likely be better in 5.5.

    snmplib:
      - [PATCH 1282566]: to rework transport creation to allow for
        alternative interpretations of the address and a more flexible
        transport registration system
      - [PATCH 1509943]: responses will get sent from the original dest IP
        address when possible.

    snmpd:
      - new MIB table for managing Net-SNMP access control extensions
        (see NET-SNMP-VACM-MIB).  These extensions to the VACM MIB are
        Net-SNMP specific and are used primarily by snmptrapd at this point.
      - [PATCH 1550725]: A new uint instance helper to match the existing
        int, long and ulong helpers
      - [PATCH 1534877]: to add support for skipping NFS entries in the
        host resources hrStorageTable.	See the skipNFSInHostResources
        token in the snmpd.conf file for details.
      - A "hardware abstraction layer", to localise the O/S-specific
        aspects of retrieving system data.  This first appeared in the
        5.3.x line, but this release now starts to actively use it for
        implementing particular MIB modules.
        This has resulted in some minor changes in behaviour - some index
        values in the hrStorageTable have changed from earlier releases,
        and the (non-raw) memory statistics are now consistent, reporting
        percentage usage calculated over the last minute on _all_ systems.
      - Agent builds default module list from a default_mibs.h rather than
        a hard coded configure list
      - [PATCH 1568150]: Extend pass_persist error messages that can be
	passed back from the script
      - [PATCH 1570982]: Solaris IF-MIB: Support for IPv6-only interfaces

    snmptrapd:
      - the traphandle directive now supports a -t switch to indicate
        matching any OID in the tree below the specified OID

    mib2c:
      - New mib2c.emulation.conf provides a quick way to do simplistic
        emulation of an entire MIB or MIB branch.
      - A new perl module NetSNMP::agent::Support provides easier embedded 
        perl support. (patch 1369996 from Peter Martin)
        Run "mib2c -c mib2c.perl.conf OID" to help you start using it.

    perl:
      - gettable() now supports asynchronous callback functions
      - update default_store module to latest default_store c-binding
	tokens

    snmpusm:
      - performance improvement when changing localized keys
      - new option -Cp to set usmUserPublic value

    snmpvacm:
      - new commands to manipulate Net-SNMP access control extensions

 Ports:
   Linux:
      - add IPv6 aware UDP and TCP mibs to default module list

   Solaris, FreeBSD, OpenBSD:
      - Experimental support for 64bit interface counters (ifXTable). Enable
        via '--with-mib-modules=if-mib --enable-mfd-rewrites'.
      - [PATCH 1569537,1569539]: new UDP-MIB and TCP-MIB implementation
	(enable through --with-mib-modules=udp-mib,tcp-mib)

   Win32:
      - new winExtDLL extension module to allow snmpd to load Windows SNMP
        Service extension DLLs to provide support for HOST-RESOURCES-MIB
        and other MIBs provided with Windows.

   AIX:
      - HOST-RESOURCES-MIB implementation added to default module list

   uCLinux
      - [PATCH 1551948]: Make pass_persist usable on uClinux

  Fixes:
    snmplib:
      - fix OID lookups for fully qualified object names (eg .iso.org)
        (official patch 1421725)
      - UDPIPv6 and TCPIPv6 transports now compile on recent UN*X platforms

    snmpd:
      - fix disman/event monitoring crashes (official patch 1429059)
      - fix re-init of daemons after SIGHUP (official patch 1473289)
      - fix trap processing from SMUX peers (patch 1430824)
      - [BUG 1527930]: fix smux authentication
      - [BUG 1427410]: Set auth engineID for SNMPv3 traps.
      - [BUG 1535903]: Support spaces within security names
      - fix 8 byte IpAddress in at, ip and route MIBs.
      - [PATCH 1562688]: fix ping/reattach agentx code

    snmptrapd:
      - fix bug 1420758/1458815: snmptrapd aborts/loops in select()
        (official patch 1420758)
      - fix re-init of daemons after SIGHUP (official patch 1473289)

    perl:
      - Fixed the perl bulkwalk function
      - gettable() was fairly broken in prior versions 
      - OID handling was fully broken on various 64bit platforms
      - fixes for 64-bit platforms

    misc:
      - Many misc fixes

*5.3.0.1*

  *** Security Fix ***

    - In version 5.3 much of the authorization control was rewritten.
      There was a bug in the new code that resulted in granting write
      access to read-only users or communities which were configured
      using the "rocommunity" or "rouser" snmpd.conf tokens.  5.3.0.1
      fixes this problem.  Users are encouraged to immediately update
      their installations if they use either of these tokens.


*5.3*

 *** Important Notes ***

    Several very significant changes have been made in Net-SNMP for this
    release that warrant special attention.

    - shared library version number no longer matches the release number. We
      now follow the versioning scheme recommended by libtool. For the 5.3
      release this means that the libraries now have a SONAME ending with
      ".so.10", e.g. libnetsnmp.so.10.

    - snmpd has not been truncating log files at startup, as documented in
      the man pages, for a while now. This default behaviour has been restored.
      Please use the '-A' flag if you want to continue appending to your log
      files at startup.

    - snmptrapd will no longer accept all traps by default. It must be
      configured with authorized SNMPv1/v2c community strings and/or SNMPv3
      users. Non-authorized traps/informs will be dropped.

    - Due to a copyright statement that didn't allow modifications, 
      snmpnetstat has been completely rewritten.  The new version now
      accepts the same command-line options as the other tools, which
      has introduced a number of incompatible changes.  However, it
      does now finally support SNMPv3.

 New:
    Building:
      - new option to disable set support in the agent (--disable-set-support)

   snmpd:
     - implement notification logging
     - implement notification filtering
     - AgentX, host resources and disman/event mibs added to default module list
     - updated and new disman mib implementations

   snmptrapd:
     - allow a non-default AgentX socket
     - a brand new authorization scheme that is based on the VACM
       authorization scheme from snmpd.
       - Note: now drops unauthenticated notifications by default
     - registers the snmpEngine MIB group under the "snmptrapd" context

   snmplib:
     - new helper for ascii file based scalar integers (think Linux /proc/)
     - new utilities for dealing with files
     - new utilities for parsing text files
     - granular config/persistent file disablement (noPersistentLoad and
       noPersistentSave snmp.conf tokens)

    mib2c:
      - mib2c.mfd.conf now generates code for persistence row storage
      - many enhancements and bug fixes

    snmpusm:
      - allows to use old and/or new localized key instead of passphrase with
        option -Ck
      - new option -CE to specify usmUserEngineID (necessary to manage
        snmptrapd's usmUserTable)

 Ports:
   Linux:
       - new experimental tables
         - tcpConnectionTable, tcpListenerTable
         - ipAddressPrefixTable
         - udpEndpointTable
         - ipv4InterfaceTable, ipv6InterfaceTable
       - inetCidrRouteTable supports dynamic ipv4 route creation/deletion
       - added ipv6IpForwarding.0 and ipv6IpDefaultHopLimit.0 (read-write)

   Win32:
     - Cygwin compiler fixes
     - MSVC: agent (snmpd) support for pass and pass_persist
     - MinGW: agent (snmpd) support for pass
     - Fix for 'select: No such file or directory' in snmpdelta

 Fixes:
   - Persistent files in directory defined by snmp.conf persistentDir were 
     not being loaded at startup
   - Perl getnext didn't honor explicit reference to MIB file
   - AgentX sub-agent connection delayed til after config files read
   - Build fixes for --disable-agent, --disable-snmpv1 and --disable-snmpv2c
   - Lots of bug fixes


*5.2*
 New:
    For the security paranoid (like Wes):
      - Insecure versions of SNMP may be completely disabled at compile time.
          (configure using one or both of --disable-snmpv1 --disable-snmpv2c)
      - Less secure versions of SNMPv3 authentication and encryption
          algorithms may be completely disabled at compile time.
          (configure using one or both of --disable-des --disable-md5)
          (This requires you have OpenSSL to support SHA1 and AES instead)
      - Diffie-Helman key negotiation (perfect-forward-secrecy - RFC2786)
          has been implemented in both the agent and "snmpusm".
      - Better support for direct use of localized and master keys
        (randomly generated keys have more entropy than passwords). See
        the -3m -3M -3k and -3K options, and the defAuthLocalizedKey,
        defPrivLocalizedKey, defAuthMasterKey, defPrivMasterKey
        snmp.conf tokens)

    library:
      - send and receive buffer sizes for UDP/TCP are configurable
      - .conf file token registration can now search multiple files
        (separate file names to search by a :.  IE, "snmpd:agentx")

    snmptrapd:
      - Embedded perl support for trap handlers (much faster than traphandles).
          (configure --with-embedded-perl ; see 'perldoc NetSNMP::TrapReceiver')
      - the snmptrapd usmUser table can be controlled through SNMP & AgentX
          (the snmptrapd registers MIBs under the "snmptrapd" SNMPv3 context)

    agent:
      - community strings can be mapped to individual SNMPv3 contexts
          (see the snmpd.conf manual on "com2sec").
      - AgentX should work properly with SNMPv3 contexts now.
      - improved version of "exec" extension directive - "extend":
          supports multi-line output, configurable command input, SET
          handling, a valid relocatable MIB output structure, etc
      - more flexibility added to netsnmp_cache helper, including periodic
          refreshing of caches and cache pre-loading.
      - experimental implementation of DisMan Remote Operations MIB groups
        (remote nslookup, ping, traceroute and expressions via SNMP)
      - The proxy supports a new -Cc flag which passes the community
        name through to the other side rather than hard-coding it.
      - The config_require() and other modules can now be placed
        inside of CPP directievs (#if, /* ... */) as header files are
        now passed through CPP processing first.
      - new config_exclude() macro for excluding certain modules
      - new config_belongs_in() macro to specify if a chunk of code
        found by --with-mib-modules belongs in the agent library or
        the mib module library.
      - Uses a smaller function stack.

    commands:
      - snmpusm: A number of key-change improvements
        (EG, changing localized keys supported, diffie-helman support, ...)
      - New -Ln option to completely disable logging.

    mib2c:
      - a number of new or updated configuration templates:
        - mib2c.iterate.conf: the iterator-based table config
            now produces fuller template code than before.
        - mib2c.table_data.conf and mib2c.container.conf:
            two new "internal-row" style configs
        - mib2c.mfd.conf: "MIBs for Dummies" (or MFD) - intended to
            reduce the SNMP knowledge needed to develop MIB modules
            and add flexibility at the same time.  Run "mib2c -S
            mfd_interactive_setup=1 -c mib2c.mfd.conf OID" and follow
            its guided instructions to help you tailor its results to
            meet your needs.
        - mib2c.genhtml.conf: Generates an easier-to-read HTML view of
          a MIB tree structure.  (See http://www.Net-SNMP.org/mibs/
          for example output.)
      - more node tags available for conf file writers
      - additional search directories may be set via MIB2C_DIRS env var.
      - mib2c-update: new utility to help update mib2c generated code
          when conf file changes.
      - a mib2c.conf manual page to describe how to write mib2c .conf files.
      - support for embedded perl code in mib2c.conf files

    documentation:
      - New README.agent-mibs: an attempt to start documenting what
          MIBs are implemented in the agent and on what architectures.

    perl:
      - An improved SNMP::gettable() method.  Uses GETBULK if possible and
        better GETNEXT requests if not, decodes indexes from OIDs,
        requests multiple variables at once, ...  ("perldoc SNMP" for details)
      - A NetSNMP::OID::get_indexes() function to extract index values
        from an OID.

 Ports:
   Linux:
     - new experimental tables/rewrites for Linux, including:
           ifTable, ifXTable, inetCidrRouteTable, ipCidrRouteTable,
           ipAddressTable, ipSystemStatsTable, ipNetToPhysicalTable.
       - Enable these talbles by specifying --enable-mfd-rewrites to configure.
       - Most of these tables have IPv6 support as well.
     - ifIndex no longer changes when interfaces are added/removed, and all
         tables/object wiil now use the same ifIndex for the same interface.

   Solaris:
     - new experimental support for ucd-snmp/lmSensors MIB module

   Win32:
     - Support for the MinGW compiler
     - Support for snmptrapd running as a service
     - A Win32 specific build and install script
     - Support for a .exe installer
       (we'll make binaries available using it)

 Fixes:
   - AgentX memory leak on sets
   - SNMPv3 not-in-time window after 248 days
   - Agent hang in HOST-RESOURCES MIB
   - double free on duplicate registration
   - OIDs with IP Addresses as indexes now print prettier
   -'Lazy' installation of headers (only install if newer)
   - allow whitespace in rocommunity/rwcommunity
   - many miscellaneous bug reports


*5.1.2*
 New:
   - Minor improvements to snmpdelta (error reporting)
   - Minor improvements to snmpnetstat (IPv6 output)

 Fixes:
   - Misc 64bit processor fixes.
   - Misc perl build and install fixes.

 Ports:
   - Linux 2.6 improvements
   - Win32 Suport for TCP and UDP over IPv6 via Winsock version 2
   - Win32 fixes in many places.
   - Win32 service support for snmptrapd
   - Win32 support for snmpconf

*5.1.1*
 New:
   - test suite supports testing over other transports (tcp, udp6, unix, ...)
     (see the -P switch to the testing/RUNTESTS script)
   - Solaris supports the use of it's PKCS#11 library for supporting
     cryptographic functions (OpenSSL isn't required if PKCS#11 is available)
     (see configure's --with-pkcs flag)

 Fixes:
   - Improvements on 64 bit architectures.
   - A few minor memory leaks fixed.
   - An extremely large number of minor bug fixes.
   - Many perl module specific bug fixes.
   - snmpd will safely handle more signals.

 Ports:
   - Many many significant Windows improvements.
     - AgentX support is working again under windows.
     - SCM support is built into the agent to allow the agent to be
       started as a windows service.
     - MSDOS names are supported in path names.
     - A win32 build script in win32/build.pl
     - Support for the MinGW compiler
     - (see the README.win32 file for details on new ports)
     - Various helpful win32/*.bat files for installation, etc.
   - Some linux 2.6 support improvements

*5.1*
 New:

    Building:
      - configure is now generated using autoconf 2.57.
      - The make system now supports "make uninstall"
      - configure & make supports a --with-install-prefix option
      - new configure options to disable building of the agent, apps, ...
        ./configure --help for a list of package sections that can be excluded.
      - new configure option to remove specific code pieces (mib reading, ...)
        ./configure --help for a list of code areas that can be excluded.

    snmpd:
      - linkUp and linkDown notifications can be enabled
        (see the linkUpDownNotifications snmpd.conf token documentation)
      - notifications (traps) can be generated for disman/monitor events.
        (see the snmpd.conf documentation on "monitor" and "notificatonEvent")
      - new snmpd.conf tokens:  includeAllDisks
      - the UCD-DISKIO-MIB will now work on linux.
      - com2sec mappings for SNMP over unix sockets.
      - some speed improvements have been made that should increase the
        speed of the agent's processing time.
      - for mib code using the table iterator, an auto-caching mechanism
        which can greatly speed up access at the cost of caching.
        (see "stash_cache" in the injectHandler token docs in snmpd.conf(5))
      - Some of the agent modules were completely rewritten (and
        should be faster and cleaner).
      - A number of new APIs and helper modules are available, but
        there is no major summary to easily list.
      - A number of new Net-SNMP specific MIBs now exist.

    snmptrapd:
      - snmptrapd now supports forwarding of notifications.
        (see the snmptrapd.conf manual for details)
      - snmptrapd's new -t switch can be used to disable syslog.
        (useful for a no-output snmptrapd with only traphandle support)

    apps:
      - snmptable sports 3 new options: fixed width, max-repeaters,
        left-justify.  (see snmptable -h for details)
      - mib2c walks you through instructions to help you generate code
        "just for you".  Including some new forms of output code, like
        notification code generation.  Run mib2c SOMETHING for details.
      - mib2c has about a billion other improvements, including the
        ability to generate trap generation code templates.
      - snmpwalk supports a new -Ct option for timing how long a walk takes.
      - net-snmp-config supports a number of new options.
      - All applications support a consistent -L flag for turning on
        which forms of output logging should be used.

    perl:
      - the SNMP module supports a new get_table() call.

 Fixes:
    - More patches to properly demonize snmpd (close std*, double fork, ...).
    - Version numbers of all packages/perl-modules/etc are better synchronized.
    - more documentation, especially for APIs
    - all perl module version numbers are synchronized with the
      net-snmp package.
    - Many many misc bug fixes, as always.

 Ports:
    - diskio MIB support for Darwin.
    - ifSpeed under Linux should now be correct for most network cards.
    - more windows build fixes

*5.0.9*

 SECURITY:
    - An existing user/community could get access to data in MIB
      objects that were explicitly excluded from their view.

 Fixes:
    - Perl build environment should better under Windows
    - Misc kerberos support fixes.
    - Improvements on various manual pages.
    - A annoying bug with SETs being passed to pass scripts was fixed.
    - The often talked about VACM optimization improvement was fixed again.
    - mib2c handles augmentation tables better now.
    - Various 64 bit issues have been addressed.

*5.0.8*
 New:
    - No new features will be added to the 5.0.x line.

 Ports:
    - Update libtool to version 1.4.3, for the benefit of Darwin
    - diskio support for Darwin
    - Updates for OpenBSD 3. 
    - Updates to solaris README

 Fixes:
    - find libwrap w/nsl on RedHat
    - fix for openssl 0.9.7
    - Fix some AgentX memory leaks
    - use macro for inline function prototypes
    - Attempt to find unused port before running tests
    - Use SNMP_SLEEP environment variable when running tests
    - calculate a proper ifSpeed under linux when possible
    - better daemonization of snmpd
    - close and reopen snmptrapd log files on HUP
    - support for 16 bit reuqest ids
    - Recognize new 't' code in display hints
    - misc other fixes

*5.0.7*
 New:
    - VACM (access control) optimizations which will greatly benefit
      people who wish to exclude large portions of the MIB tree from
      some people.  Previously this was a large resource drain.
    - Add command line option to snmpd to set syslog facility
    - Reverse DISPLAY-HINT processing, i.e. it allows you to input data
      formatted like a DISPLAY-HINT prescribes
    - Support setting of sysDescr and sysObjectID via snmpd.conf
      configuration directives
    - New output option to force display of strings as hex
    - Persistent directory can be specified at runtime
    - Add support for Linux virtual interfaces in the ipAddressTable.
    - implemented the mteEventTable and the mteEventNotificationTable
      form the DISMAN-EVENT-MIB.

 Fixes:
    - AgentX no longer flagged as experimental
    - A few memory leak fixes for the table_iterator agent API.
    - Processed flag cleared before each pass of a set request
    - Remove snmpd pid file on exit
    - Restore default behaviour of building shared libraries
    - misc other fixes

*5.0.6*

 Fixes:
    - prevent denial of service attack from authenticated users
      (really this time).
    - misc other fixes

*5.0.5*

 New:
    - Support for OpenSSL 0.9.7
    - Beginning of support for AES encryption.
      ( Currently only usable with Net-SNMP and OpenSNMP software. )

 Ports:
    - win32 new project files win32sdk.dsw for those with the win32
      platform sdk.
    - win32 builds should work properly again, minus callbacks and thus
      AgentX.

 Fixes:
    - Several AgentX (the subagent protocol) specific bugs have been fixed
    - prevent denial of service attack from authenticated users
    - many many misc fixes
    - The perl agent module plugin should now work.
    - Many other perl module related fixes.
    - net-snmp-config --ldflags properly supplies -L flags
    - misc make test fixes and improvements.

*5.0.4*

   During the testing for release 5.0.4, a release candidate was uploaded
   to Sourceforge and marked as hidden. For variouse reasons, the release
   was delayed and further changes and fixes were made.  However, the 
   release candidate files still appeared on the public FTP server and our
   mirrors. To avoid the confusion that could occur to users who may have
   downloaded this release candidate, we are bumping the revision number
   to 5.0.5.  If you downloaded net-snmp-5.0.4.tar.gz, please upgrade
   to net-snmp-5.0.5.tar.gz.

*5.0.3*

 New:
    - the "dist" directory contains the beginnings of some init
      scripts and packaging utilities.

 Ports:
    - win32 builds should work properly again.

 Fixes:
    - the 5.0.2 package had a few broken packaging problems.  Opps.
    - a few misc fixes.

 Perl:
    - the perl modules should work with older versions of perl again.

*5.0.2*

 New:
    - mib2c support for the old-4.X style api and for scalars.
    - many improvements to the netsh shell environment.

 Fixes:
    - tcpwrappers support should work significantly better.
    - NFS file systems are better supported in the hrStorageTable
    - the memory reporting no longer accidentally reports -1 integers
    - a few memory leaks fixed in the table_iterator API
    - fixes for Sun's "make"
    - ds_ prefix name-space protection (-> netsnmp_ds_)
      (run configure with --enable-ucd-compatibility for old API)
    - v1/v2c access control fixes for ipv6 addresses
    - many many misc fixes

 Perl:
    - The perl modules have a number of fixes, and the build process
      was fixed (again).
    - all make test suites should pass for people now.
      (there are still some known minor limitations, but we removed the tests)

*5.0.1*

 New:
    - A new flag: -OQ which does quick printing (-Oq), but with an '=' sign.
    - All output should now have type tags in front of them.
      (STRING: and INTEGER: were added)
    - the snmplib/mib.c file has been instrumented with doxygen comments.
    - two new mib2c configuration files for generating column and enum defines.
    - a agent coding example: agent/mibgroup/examples/notification.c

 Perl:
    - the SNMP perl module properly uses snmp.conf values as defaults.
    - --with-perl should work this time.
    - more embedded perl support, but it still isn't complete yet.
      (the NetSNMP::OID module has received many new features)

 Ports:
    - added vmstat and memory support for hpux11
    - other misc improvements for hpux11

 Fixes:
    - the agent should properly handle requests in the right order.
      (e.g., restrict the agent to processing only one SET at a time)
    - net-snmp-config --compile-subagent has been greatly improved.
    - the tools should report the right version number.
    - large /proc/stat files on linux shouldn't crash the agent.
    - the smux module should handle multiple registrations better.
    - various documentation clean ups.
    - 64 bit address clean ups.
    - misc other bug fixes.

*5.0*

 New:

    - Much of the agent internals were completely rewritten and sports
      a new module API to make your life easier.  See the
      agent/mibgroup/examples directory for example code that makes
      use of some of the new functionality.
      (Also see http://www.net-snmp.org/tutorial-5/agent/ which has
      some incomplete documentation)
    - The agent sports embedded perl, see the perl details further below.
    - The agent supports multiple SNMPv3 contexts and mib modules can
      now register themselves under different contexts.  (see the -n
      option in the snmpcmd manual page for details on specifying
      context strings in requests)
    - The proxy code has been completely rewritten and now supports
      the use of SNMPv3 contexts to help select which proxied host you
      wish to talk to.  See the snmpd.conf manual page.
    - All the tools take --configToken=value options now.  (see -H
      output from any command for what configTokens it accepts)
    - All the tools can speak over many different transport layers
      now, including UDP/TCP (ipv4 and ipv6), AAL5pvc, and IPX.  See
      ./configure --help for details on enabling them.
      Note: the -p and -T flags to all the applications have been
      removed.  Use hostname strings like "tcp:localhost:9999"
      instead.  See the snmpcmd manual page for details.
    - snmptrapd now acts as an agentx subagent and implements portions
      of the NOTIFICATION-LOG-MIB to allow captured traps and informs
      to be queried.
    - A "net-snmp-config" script will get installed which can report
      how the various tools were built (which libraries they were
      linked against, etc).  It will also help you do other things as
      well, like setting up snmpv3.  Run net-snmp-config --help for details.
    - kerberos authenticated and encrypted SNMPv3 is now possible.
      See ./configure --help for details on enabling the ksm security module.
    - The AgentX subagent protocol implementation has many new
      features and fixes.
    - mib2c was completely rewritten and has a much improved
      configuration file specification.
    - Much of the code is getting documented with "doxygen" style
      documentation.  Run "make docs" if you have doxygen installed.
    - some RMON support is available.
      (See agent/mibgroup/Rmon/README for details.)
    - The source tree has been reorganized and all the exported header
      files are now in the include subdirectory.  You can now point to
      the includes easily without having to run "make install" first.
    - the agent now requires a configuration file to access any information.
    - The entire code base has had indent run on it to effect a
      consistent coding style.  See the CodingStyle file for details.

 Perl:
    
    - The SNMP perl module now calls init_snmp() like real net-snmp
      applications, which means it will read snmp.conf configuration
      files, etc.
    - new perl specific configure options --with-perl-modules &
      --enable-embedded-perl.  See ./configure --help for details.
    - The beginnings of some new Perl modules (alpha level quality)
      are in the perl directory, including:
      - NetSNMP::agent which allows perl scripts to become net-snmp
        master or subagents
      - AnyData::SNMP is available that implements a perl DBI
        interface to map SQL commands to SNMP.  Included is a "netsh"
        shell where SQL commands can be typed, aliases created, etc.
        See the perl/AnyData_SNMP/INSTALL file for details.
    - Beginning (alpha level quality) support for embedding perl
      subroutines directly within the net-snmp agent.

UCD-SNMP NEWS:

*4.2.6*
 Big fixes:
    - Fixes to the Tunnel mib.
    - Deprecated the non-raw objects in the system stats MIB portion.
    - Testing harness fixes.
    - Network file system improvements fro the hrStorageTable. 
    - fixed snmptable.
    - fixed the memory table (again) locking to 2^31 in value.
    - Misc documentation fixes and clean-ups.
    - Many other misc fixes.

*4.2.5*
 Bug fixes:
    - The perl module actually works.  Sorry about that.
    - don't overwrite the PID of an already-running snmpd with the PID
      of an abortive snmpd.
    - a 64 bit architecture socket fix
    - smux authentication fixed for multiple connected sessions.
    - dynamic module support testing in the configure
    - memory values > 32bits are now reported as a maxed out 32bit number

*4.2.4*
 New:
    - badCommunityNames and badCommunityUses Counters supported.
    - tcp_wrappers support for snmptrapd.

 Bug fixes:
    - A security issue involving the snmpnetstat command accepting
      illegal data from a faked snmp server.
    - RPM library support fixes.
    - shared libraries built by default.
    - many bug fixes for conformance of target, notification, and vacm tables
    - many other fixes.

 Ports:
    - HPUX 11
    - Dynix/PTX 4.4
    - The snmpd demon can properly run as a windows service

*4.2.3*
 New:
    - sysLocation, sysContact, sysName and snmpEnableAuthenTraps are
      persistent after being set remotely.
    - New "ignoredisk" directive to ignore disks in the host resources mib.

 Bug Fixes:
    - The ifTable on Linux no longer reports duplicate interfaces.
    - perl scripts print better error messages if needed modules
      aren't available.
    - trap sinks aren't duplicated after a SIGHUP. 
    - misc other fixes.

 Ports:
    - improved irix support.
    - more mibII support for windows.

*4.2.2*
 Security Bug Fixes:
    - A few security bugs have been found and fixed. No known exploits
      have been released to date. However, users are encouraged to
      upgrade to the 4.2.2 release as soon as possible.
 
 Bug fixes:
    - many misc bug fixes.
    - misc documentation corrections.
    - updated libtool to 1.4.  This fixes a couple of platforms (eg, NetBSD).

 Ports:
    - mibII support for win32
    - It should compile and work on MacOS X (Darwin)
    - udpTable supported on solaris.
    - win32 borland compiler supported (see win32/config.h.borland)

 New:
    - tkmib supports SETs and saving of configuration data.
    - snmpwalk detects out of order OIDs being returned from an agent.
    - snmpset accepts the '=' sign for a datatype if the mib is
      available to extract the datatype from instead.

*4.2.1*
 Administrative:
    - The http://www.net-snmp.org/ web site and domain name is now active.
    - Copyright statement for changes beyond 4.2 is now a true BSD license.
      (see the COPYING file for details)

 Major Bug fixes:
    - AgentX master agent no longer crashes when a subagent disconnects.
    - counter64 encoding fixed.
    - oids with large numbers embedded in them should work properly (again).
    - Fixed behavior of agent_check_and_process() and alarms.
    - mib2c handles more variable types.
    - traps/informs are sent properly from agentx subagents.
    - many many more bug fixes have gone into this release.

 New:
    - The snmpconf configuration file editor can create snmptrapd.conf files.
    - AgentX support is compiled in by default, but must be configured now.
      (Add "master on" to your snmpd.conf file to enable agentx support)

*4.2*

 Administrative:
    - project services moved to http://www.net-snmp.org/project/

 Features:
    - Packets sequences are now shorter when possible, reducing packet sizes.
    - A new configuration file creation tool: snmpconf.
      (try snmpconf -g basic_setup)
    - A new command to remotely list disk space: snmpdf.
    - the agent VACM tables are now writable.
    - a new snmpvacm tool can be used to change the running vacm configuration.
    - dynamicly loadable mib module support for the agent.
      (see snmpd.conf on the dlmod directive)
    - minimal proxy support for snmpd
      (see snmpd.conf on the proxy directive)
    - libtool is now used to compile the package (better shared-library support)
    - the agent now supports the SNMP-NOTIFICATION-MIB.
      (enabled by default).
    - the agent can set trapsink using snmpcmd command line style parameters
      (see the trapsess section of the snmpd.conf manual page)
    - index matching in oids has been improved
      (see the snmpcmd manual page on -Ox, -OE, and -Ob).
    - snmptrapd has new formating directives.
      (see the snmptrapd manual page on format1 and format2).
    - the agent can listen to multiple ports.
    - the agent can be restricted to listening on only certain interfaces.
    - the agent can be told at run time which mib modules (not) to initialize.
      (see the -I option in the snmpd.conf manual page)
    - the agent can run as a particular user.
    - snmptable takes a -Ci argument to show table indices.
    - snmptable uses GETBULK requests when it can (unless -CB is specified).
    - The "make test" suite contains a lot of new tests.
    - cross-compiling support.
    - snmpset checks types and range values for legality.
    - Significant improvements to the AgentX support.
      (Code is still beta, but probably safe for use on non-critical systems).

 Perl:
    - bulkwalk functionality for the SNMP perl module.
    - entirely numeric OID support.
    - support for best guess mode for OIDs.
    - range and default value access added.
    - build can now be targeted against a non-standard net-snmp install path.

 Fixes:
    - v3 traps/informs handled properly now.
    - Many more misc bug fixes.
    - snmpv3 engineIDs not IP address specific.

*4.1.2*
 Fixes:
    - Host resources fixes for FreeBSD and NetBSD
    - ucd-snmp memory/vmstat fixes for FreeBSD-3
    - configure --enable-ipv6 fixes
    - AIX fix (use knlist)
    - fix init_master_agent calling exit
    - bad free in subagent.c
    - dont let a agentx subagent be a smux master
    - ucd-snmp/loadave fix for AIX
    - fix doing a set on a pass variable
    - snmptable fixes
    - snmpnetstat fixes for v2c exceptions
    - man page fixes

 Features:
    - Some UnixWare 5 configuration support
    - configure --enable-mini-agent --without-openssl
    - snmptrapd -n
    - snmp_log callbacks
    - noTokenWarnings and noRangeCheck in snmp.conf
    - using a counter type in snmpset/snmptrap

*4.1.1*
 Fixes:
    - Better agent handling of unauthorized requests.
    - Better "make test" support.
    - Misc bug fixes.

*4.1*
 New:
    - Many new command line flags have been added for input/output flexibility.
      (see the snmpcmd(1) manual page on the -O flag and -I flag)
    - The tools support regex matching of oids on the command line.
      (see the snmpcmd(1) manual page on the -Ib option)
    - A ucd-snmp usage tutorial has been placed on the main web page.
      (see http://www.net-snmp.org/tutorial/)
    - snmptable is much smarter and handles sparse tables better.
    - tkmib supports snmpv3.
    - New agent libraries to embed SNMP and AgentX agents into other programs.
      (see the snmp_agent_api(3) manual page and the tutorial)
    - SNMP over TCP is supported.
      (-T TCP on the command lines)
    - OpenSSL has replaced KMT for SHA authentication and DES encryption.
      (Get OpenSSL from http://www.openssl.org/).
    - Some easier-to-use access-control snmpd.conf directives for simple setups.
      (see the snmpd.conf(5) manual page)
    - Easier setup of SNMPv3 support for the agent.
      (see the README.snmpv3 file).
    - Command line argument parsing has been reworked for getopt() use.
      (currently backwards compatible; see the snmpcmd(1) manual page)
    - Table rows with embedded strings are dealt with for both input and output.
      (see the snmpcmd(1) manual on the -Ob flag)
    - Many more snmp.conf directives supported.
      (see the snmp.conf(5) manual page)
    - Many AgentX improvements.
    - All of our distributed mibs have been updated to be SMIv2 compliant.
    - Trap support in the agent has been cleaned up and an API created.

 Perl:
    - Joe Marzot's perl module is now included with the ucd-snmp source.
      (this should help people trying to synchronize the two packages)

 Fixes:
    - SMUX support has been reintegrated into the agent in a better way.
    - Many many others.

*4.0.1*
 New:
    - defVersion in snmp.conf supported.
 Fixes:
    - An option was accidentally turned on by default that shouldn't have been.
    - misc minor fixes.

*4.0*
 New:
    - SNMPv3 protocol support!!!
      (See the README.snmpv3, snmpusm(1), snmp.conf(5), snmpd.conf(5))
    - historic v2party support removed.
    - complete re-write of the agent.
    - The extensible AgentX protocol is in alpha-test mode.
      (to use, compile with the mib-module "agentx" or
      "agentx/master" or "agentx/client").
    - syslog support for the agent (and everything else for that matter).
    - Per-process/per-exec-script based fix scripts implemented.
      (see snmpd.conf(5) for details)
    - many more config file options supported.
      (run any command with -H and see appropriate .conf manual pages)
    - The start of a "make test" suite.
    - many other things we've forgotten.
    - code is ANSI C now, and requires a ANSI C compiler.

 API Changes:
    - A small change to the write functions in mib modules.
      (data passed in has already be BER-decoded and is a pointer to a 
      variable of the correct type).
    - The config_load_mib mib-module .h file directive is now
      obsolete.  Use REGISTER_MIB inside your init function instead.

*3.6.2*
 Fixes:
    - An important multi-session bug fix, especially needed for the
      SNMP perl module.
    - Many minor bug fixes.

*3.6.1*
 Fixes:
    - Minor last second fixes mostly.

*3.6*
 New:
    - All of the services for ucd-snmp have moved from the sites in
      ece.ucdavis.edu to ucd-snmp.ucdavis.edu, including http, ftp,
      and the mailing lists.
    - The configure --help output has been greatly improved for better
      readability and has been broken into sections.
    - The agent's SMUX support has been greatly improved and should
      function with applications other than gated now.
    - The snmptrapd has been make extensible so you can call other
      programs and scripts when a trap has been received.
      (see snmptrapd.conf(5))
    - More configuration files have been created and can be used to
      specify defaults and configuration information to the various
      applications.  Run each command with -H to see what it understands.
      (see snmp_config(5), snmpd.conf(5), snmp.conf(5), snmptrapd.conf(5))
    - The configuration file parser looks in ~/.snmp by default as
      well, allowing each user to have his/her own setup files for the
      various applications.
    - The mib parser supports a variety of options dictating how
      strictly it parses mib files.
      (see snmpcmd.1 on "-P")
    - Debugging output with the -D flag now accepts a list of
      debugging information types to print.
      (see snmpcmd.1 on "-D")
    - Minimal multi-thread support using a modified version of the
      session API.
      (see snmp_sess_api(3))
    - persistent storage of information is possible from the agent's
      mib modules now.
      (see read_config(3))
    - The target mib has been implemented as an optional module.
    - More documentation has been written.
    - The recommended mib module API has changed slightly, but is
      backwards compatible as well.  See the AGENT.txt file for new
      documentation on how to write mib modules for the agent.
    
  Fixes:
    - many misc bug fixes, as always.

  Ports:
    - snmpnetstat has been ported to the win32 enviornment.

*3.5.3*
    - Bug fixes, including row creation sets to mib modules should work again.

*3.5.2*
    - very small last minute bug fixes for win32 and freebsd mostly.

*3.5.1*

 Fixes:
    - Many bug fixes submitted by users and the ucd-snmp-coders.
    - v2party support in the agent has been fixed.
    - The UCD-SNMP-MIB is SMICng compliant and should work under HP OV better.
    - Most sections of the mibII tree are 64bit clean.

 Copyright:
    - Simplification.

*3.5*

 New:
    - agent/mibgroup directory reorganized hierarchically.
      - this may break the agent compilation with some compilers.
    - floats, doubles, counter64s, int64s, uint64s support via opaque types.
    - new modules: misc/ipfwacc.
    - use of dynamicly loadable modules now possible, but not fully supported.
    - New application command line flags:  -s, -S, -m MIBS, -M MIBDIRS.
    - new configure options: --with-cc=CC and --with-cflags=CFLAGS

 Fixes:
    - Solaris core dumps.
    - Fixes for NetBSD 1.3.
    - The apps work again on 64bit machines.
    - misc other bug fixes.

 Ports:
    - host resources module should work on more platforms: NetBSD,
      FreeBSD, SunOS (almost).

*3.4*

 Important:
    - the UCD-SNMP specific mib structure changed.
      - many of the table oids have changed location and have been renamed.
    - the View Based Access Control module was implemented in the agent.
      Therefore, the "community" snmpd.conf parameter no longer
      exists.  See the snmpd.conf file for how to control access via
      community names now.
    - The header file #defines have changed.  You may have to compile
      third party applications with -DCMU_COMPATIBLE (like perl-SNMP <= V1.7).
    - The parser is more strict about unlinked OIDs and end-of-comment
      conditions.  You may see problems in a few broken mibs that used
      to parse ok with the older parser.

 New:
    - dynamic library support:  configure with --enable-shared.
    - the beginnings of a Perl/Tk/SNMP mib browser: tkmib
    - all applications support -R for random oid-name lookups.
    - default mib list changes when you add or remove agent mib-groups.
    - debugging in the agent can be turned on and off using snmpsets.
    - a new mib module displays a list of all loaded mib modules.
    - the internal structure of the agent's mib modules is now hierarchical.
    - the agent looks for .conf files in both the lib/ and share/ directories.
    - more improvements/options to snmptable.
    - new vmstat module to report vmstat related information under linux.
    - a perl based mib2c translator to convert mib sections to C code templates.

 Fixes:
    - The code was run through purify for memory leaks and a few were found.
    - snmptrap sends to the correct default port of 162 again.

 Ports:
    - irix 6.2 support improved.
    - openbsd.
    - the host resources mib compiles on Solaris.

*3.3.1*

 New:
    - "make install" installs the library and header files.

 Fixes:
    - compilation on many architectures (sunos for example).
    - snmptrapd doesn't exit if v2party files don't exist.
    - host resources works a bit better (ie, it compiles) under solaris.
    

*3.3*

  Path changes:
    - the default paths to the installed mibs and snmpd.conf file have
      changed to /usr/local/share/snmp (set differently using --datadir).
    - the default path of the snmpd and snmptrapd have changed to
      /usr/local/sbin (set differently using --sbindir).

  New:
    - basic SNMPV2c support.  
      - Not fully tested (feedback please!), and not RFC compliant.
      - all apps require '-v 2c' for v2c and '-v 2p' for the older party code.
    - basic host-resources mib support for linux, and hpux.
    - All environment variables can be set with a preceding '+' for
        indicating additions to the default values.
    - mib modules cleaned up more and can be added and removed more easily.
    - mib modules have a new macro for callbacks when reading a .conf file.
    - apps command line interfaces have merged together for standardization.
    - the libsnmp library no longer forces printing of errors.
    - 2 new applications: snmpdelta and snmptable.
    - the mib parser caches mib directory scans for speed improvements.
    - snmptrapd is snmp-version multi-lingual.

  Ported:
    - irix should be more complete.
    - aix 4.1.5.
    - fixes for hpux 10.20.
    - linux 2.1.x support.
    - library and apps supported under 32bit windows systems.

  Fixes:
    - too numerous to mention.

*3.2*

  New:
    - Top level of the mib parser has been restructured
      - no longer reads 'mib.txt'
      - no longer reads everything (MIBS/MIBDIRS)
      - reads import clauses to load other required modules
      - new man page: mib_api.3
    - The agent has been completely restructured (modularized) to
      allow for easier extension via C code and requires no
      modification of the ucd-snmp distributed source code to add in
      new C coded mib modules.  See the README file in the
      agent/mibgroup subdirectory for details.  Modules are added and/or
      removed via configure options.
    - agent can send traps to multiple trap destinations.
    - configure can be run outside the default source directory.
    - Optional modules:  SMUX support to talk with a running gated.
    - All configure prompted questions can be set on the command line instead.

  Fixes:
    - Memory leaks.
    - code is now prototyped and many related bugs have been found.
      (an ANSI compiler is still optional.)
    - Many others.

  Ported:
    - linux-2.*
    - mips-sgi-irix6.3  (agent needs 2 mib-modules removed still)

*3.1.3*

  New:
    - FAQ file!
    - bug-report script!
    - Agent can read .conf files from more places:
      - SNMPCONFPATH enviornment variable.
      - command line options:  -c FILE and -C.
    - Agent can send coldstart and authentication traps.
    - All requests/patches/questions should go to 
        ucd-snmp-coders@ece.ucdavis.edu
    - snmp variables mib implemented.
    - more udp, ip, ipNetToMedia tables implemented.

  Fixes:
    - Memory leaks.
    - Many other system specific fixes.

  Misc:
    - configure script updated to autoconf 2.12.

  Removed:
    - Very ancient tk/tcl code.

*3.1.2*

  New:
    - extensible mib moved to ucdavis enterprise mib:  .1.3.6.1.4.1.2021.
    - PORTING file added.
    - new configure switch:  --without-root-access.

  Ports:
    - BSDi, and possibly irix, and linux is not too far off.
    - massive improvements for netbsd, freebsd, hpux.

  Fixes:
    - Massive parser improvements.  (Niels Baggesen <recnba@mediator.uni-c.dk>)
    - configure script upgraded to autoconf 2.11.

*3.1.1*

  New:
    - init_mib() now reads all files in PREFIX/lib/snmp/mibs as mibs.
    - sysContact and sysLocation settable in snmpd.conf.
    - TC information retained (from Joe Marzot).

  Fixes:
    - snmpset on a pass script works now.
    - pass scripts more throughly tested and debugged.
    - community 5 can be set now.
    - Many others.

*3.1.0.1*

  Ported:
    - FreeBSD 2.?

  Fixes:
    - snmptrap greatly improved!  (Niels Baggesen <recnba@mediator.uni-c.dk>)
    - other small stuff.
    - default logfile location moved to /var/log if exists, else /usr/adm.

  New:
    - snmptrap man page.  (Niels Baggesen <recnba@mediator.uni-c.dk>)

*3.1*

  Features:
    - Pass thru extensibility added!
    - snmpnetstat greatly improved (Niels Baggesen <recnba@mediator.uni-c.dk>)
    - improved solaris info caching (Dan A. Dickey <ddickey@transition.com>)

  Bug fixes:
    - many fixes for solaris (Niels Baggesen <recnba@mediator.uni-c.dk>
      and "Dan A. Dickey" <ddickey@transition.com>)
    - greatly reduced memory usage by mib parser (Niels Baggesen)
    - disk checks fixed for solaris and osf.
    - improved Mib parsing from Mike Perik <mikep@crt.com>
      - TRAP-TYPE/NOTIFICATION-TYPE now handled.
      - IMPORTS definition no longer required.
      - SIZE syntax fixed.
    - sedscript compiles correctly with Solaris's spro compiler.
    - many more small ones.

  Misc:
    - Upgraded to autoconf-2.10

*3.0.7.2*

  Major solaris patches from Niels Baggesen <recnba@mediator.uni-c.dk>. Thanks!
  Other misc patches

*3.0.7.1*

  Bug fixes.

*3.0.7*

  Features:
    - Two new operating systems supported: hppa1.1-hp-hpux10.01, *-netbsd1.1
    - Two new ./configure options:
      --enable-debugging:  includes nlist and other warnings in log-file output.
      --with-defaults:     Assumes you want the defaults for all user prompts.
    
  Bug fixes:
    - make clean in man/ works.
    - Fixed the mib.txt capitalization problem.
    - Fixed a gcc cpp problem (added -x c to the command line options).
    - Added NULL to the second gettimeofday argument.

  Misc:
    - Upgraded to autoconf-2.9
    - snmpcheck upgraded to perl5.002 and Tk-b10
    - totally re-did the routing tables (required by hpux10.01).

*3.0.6*

  Features:
    - snmpV1 community names can be set in the configuration files now!
    - new app:  apps/snmptrap, as requested by many, many people.
    - New man page (rough still):  snmpd.conf.5.
    - Returns new values for system.sysObjectID for each supported OS.
    - Better OpenView support for changing the icons & etc.  See ov/README.

  Bug fixes.
    - -p PORT -l LOGFILE now work as advertised.
    - printed values of timeticks are no longer negative.
    - Correctly finds the Solaris 2.5 kernel.
    - the restart-agent mib entry now sets an 1 second alarm to
      restart so it can return a proper snmp response first.
    - Truncates existing logfiles.
    - nlist warnings removed.
    - more...  (see the ChangeLog)

*3.0.5*

  Bug fixes:
    - 'make' should not call 'autoconf' and associates anymore.
    - Fixed sun4 exit codes.  Really.
    - Changed config.h a bit to fix the mib.txt file's errors when
      some mibs were not defined for usage.

  Misc:
    - Updated configure to autoconf 2.7

*3.0.4*

  Mainly a bug fix release:
    - fixed another 32/64 bit problem:  returned exit codes on alphas
      were incorrect.
    - many system errors (e.g., no mem) were causing the agent to
      return error flags when it really was clueless.  
    - found a memory leak in the CMU routing table implementation.
    - More configure cleanups, mostly for Solaris.
    - snmp_open calls getservbyname only once now, at the request of Gary
      Hayward <gah@dirac.bellcore.com>.  Mainly for Perl users.

  New example file:  EXAMPLE.conf file (created at build time).

  local/snmpcheck has drastically improved, and now requires Tk-b8.

  You can now mung with all sorts of numbers in config.h and the
  mib.txt file will be mostly built from it if you change my defaults.

*3.0.3*

  *** default location for .conf and mib.txt files moved to
      .configure's --prefix location

  Now using GNU's auto-conf for better portability
    - prompts for important config.h information as well

  Port to Sun4/Solaris 2.4

  -h/--help and -v/--version flags added to snmpd

*3.0.2.1*

  Compilation bug fix

*3.0.2*

  Port to dec-alpha/OSF 3.1
    - quite a few more CMU bugs found during port.

  (docs/snmpd.1) Beginnings of documentation/man pages.

  (local/snmpcheck) Many changes/improvements.  Still very (usable) Beta.

  (NEWS) Added this file!

*3.0.1*

  (agent/snmpd) 
    2 Command line options added:
    -l LOGFILE       Outputs stderr/out to LOGFILE (overrides config.h def)
    -L               Do NOT write to a log file (overrides config.h)

  (agent/snmpd)
  New built in mib functions:
    MIB.VERSIONMIBNUM.VERUPDATECONFIG (default: .1.3.6.1.4.10.100.11)
       -- set to 'integer:1' to tell the agent to re-read the config file(s).

    MIB.VERSIONMIBNUM.VERRESTARTAGENT (default: .1.3.6.1.4.10.100.12)
       -- set to 'integer:1' to tell the agent to restart (exec and quits)

  Bug fixes/more CMU clean up

*3.0*

        Initial (public) Release
