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

*5.7.3*
    snmplib:
      - Fixed crash when MD5 hash is not supported by OpenSSL.
      - Fixed parsing of sequences. Don't overwrite 'data' variable, it's
	used when parsing bulk responses.
      - [BUG 1267 ]: snmplib: register_mib_context() fix for read-only
	variables   This is a slightly modified version of a patch from
	Harsha Shivanna.

    snmp:
      - Usm-dh-objects-mib: Avoid triggering an assert statement in
	netsnmp_ready_monotonic() The cache timeout for
	snmp-usm-dh-objects-mib is -1. Any cache timeout value < 0 disables
	caching. However, strictly negative values trigger the assert
	statement in netsnmp_ready_monotonic(). Avoid triggering that
	assert statement.
      - Fixed monitoring based on non-delta trigger.   snmpd crashed wit
	following snmpd.conf: monitor -s -D -r 10 -e LOGMATCH -o
	logMatchCurrentCount "Log Match" != logMatchCurrentCount logmatch
	LoginFailure1 /var/log/secure 10 su: .*fail.* The reason was
	unitialized variable sysUT_var in mteTrigger_run(), it was filled
	only if the trigger was delta-valued, while its value was used for
	all triggers. With this patch, sysUT_var is filled for all code
	branches where it is needed.

    snmpd:
      - Add a missing function declaration
      - Added btrfs support to hrFSTable
      - Correct the size of of the EXAMPLEIPADDRESS value on L64 hosts
      - Fixed crash in UCD-SNMP-MIB::extTable snmpd crashed when the
	command to execute had no arguments, i.e. extend->args was NULL.
      - Fixed value of UCD-SNMP-MIB::extCommand to contain full command
	line. MIB description of UCD-SNMP-MIB::extCommand suggests it
	should contail full command line. Also in Net-SNMP 5.3.2.2, whole
	command line was shown.
      - Make it possible to use NUL characters in the indices for
	snmpTargetAddrTable
      - PATCH 2472: from Sunil: don't use HBKT as heartbeat interval in
	SCTP-MIB::sctpAssocTable.
      - Remove some unused includes
      - Show Linux kernel threads in hrSWRunTable.
      - Use 0 for the ignored numvars argument to netsnmp_register_mib The
	numvars argument of netsnmp_register_mib is ignored if the var
	argument is NULL. In order to unify this use of it with all other
	ones, change it from 1 to 0
      - SECURITY: a denial of service attack vector was discovered on
        the linux implementation of the ICMP-MIB.  This release fixes
        this bug and all users are encouraged to update their SNMP
        agent if they make use of the ICMP-MIB table objects.
      - PATCH: 1275: from Viliam Púčik: fixed Perl trap handler when
	processing trap with empty community string.

    snmpd, snmptrapd and apps:
      - Make ENV_SEPARATOR_CHAR configurable

    snmptrapd:

    apps:
      - Stop agentxtrap from accessing the persistent configuration This is
	needed to prevent moaning about not beeing allowed to write those
	files due to bad permissions.
      - Stop using snmp_perror when logging after functions that don't set
	snmp_errno.

    building:
      - Make the -without options to rpmbuild work
      - Avoid duplicate and trailing spaces in the dependency files.

    documentation:
      - From "Eric S. Raymond": Correct man page markup problem Ambiguous
	or invalid backslash.  This doesn't cause groff a problem. but it
	confuses doclifter and may confuse older troff implementations.

    perl:
      - BUG: 2402: Add support for SNMPv3 traps

    python:
      - Fixed IPADDRESS size on 64bit systems.
      - Fixed returning of empty strings. Varbind type (SNMP_NOSUCHOBJECT
	etc.) should be used to detect errors instead of length of the
	variable - it can be empty string.
      - [PATCH 1239]: Fix memory leak

    testing:
      - Make sure Test::Harness is of at least version 1.21 Test::Harness
	1.21 is the first version that implements TAP v12 which allows
	putting the header (1..N) after the tests and since our tests
	utilize that we should make sure that the test runner supports it.

    AIX:
      - Make tcp-mib build
      - Make udp-mib build

    Linux:
      - BUG: 2238: Add libnl3 support
      - RESOURCES-MIB, hrSWRun table: Parse /proc/<pid>/stat correctly on
	Linux This issue was reported by Vincent Bernat
	<vincent.bernat@dailymotion.com>. See also
	http://sourceforge.net/p/net-snmp/patches/1257/.

    Win32:
      - Perl: BUG: 2488: Avoid "Free to wrong pool" error
      - Perl: BUG: 2488: Avoid "Free to wrong pool" error" This reverts
	commit b2725964bde921b6285e3a59a512552cae0a0ca5.

    Windows:
      - Add multihoming support On Windows Vista / Windows Server 2008 and
	later it is possible to add multihoming support by using the
	IP_PKTINFO socket option. Conflicts:
	snmplib/transports/snmpUDPBaseDomain.c
      - Make winExtDLL work on 64-bit Windows systems
      - Port batch build infrastructure to Visual Studio 2010 and later
	From Visual Studio 2010 on it is no longer possible to specify
	include or library directories globally - these have to be
	specified per project. Hence two additional menu entries in
	build.bat that allow to specify these directories.
      - Ported ucd-snmp/dlmod to MinGW / MSVC

    MinGW:
      - Port T005table_dataset_cagentlib.c to MinGW

    unspecified:
      - Added simfs (OpenVZ filesystem) to hrStorageTable and hrFSTable.
      - Upport new MIB structures and MFD rewrites under Darwin
      - [BUG 2470]: Accept 65535 as a valid IPv6 port number
      - [BUG 2476]: snmpd fails to start on AIX On an AIX system there is
	no <kvm.h> header file nor do the /dev/dmem or /dev/drum devices
	exist and hence DMEM_LOC is not defined. Avoid that init_kmem()
	fails in that case.
      - [BUG 2568]: Avoid that file descriptors above FD_SETSIZE trigger
	abort()

*5.7.2*

    snmplib:
      - Add Doxygen-style function header for
	netsnmp_register_default_target() and
	netsnmp_clear_default_target().
      - Add netsnmp_setenv().
      - Avoid that system clock changes (e.g. by ntpd) affect code that
	needs relative time Make sure that the range of the SNMPv3 variable
	snmpEngineTime is 0..2147483647 on all supported systems instead of
	0..42949672 on some systems (i.e. wraparound after 497 days) Add
	netsnmp_get_monotonic_clock(), netsnmp_set_monotonic_marker(),
	netsnmp_ready_monotonic(), netsnmp_get_agent_runtime()
      - Avoid that system clock changes (e.g. by ntpd) affect code that
	needs relative time Make sure that the range of the SNMPv3 variable
	snmpEngineTime is 0..2147483647 on all supported systems instead of
	0..42949672 on some systems (i.e. wraparound after 497 days) Add
	netsnmp_get_monotonic_clock(), netsnmp_set_monotonic_marker(),
	netsnmp_ready_monotonic(), netsnmp_get_agent_runtime() Deprecate
	atime_diff(), atime_newMarker(), atime_ready(), atime_setMarker(),
	marker_tticks(), netsnmp_marker_uptime(), netsnmp_timeval_uptime(),
	timeval_tticks(), uatime_diff(), uatime_hdiff() and uatime_ready().
      - Avoid waiting indefinitely if a session has timeout zero
      - Declare "type" argument of se_store_list() / se_store_slist() /
	se_store_enum_list() const
      - Make it explicit that MAX_SUBID is an unsigned constant
      - Make netsnmp_callback_accept() return -1 (failure) instead of 0
	(STDIN_FILENO)
      - Make netsnmp_large_fd_set_resize() robust against memory allocation
	failures. Make NETSNMP_LARGE_FD_ZERO() use memset() on Unix systems
	instead of an explicit loop.
      - Make netsnmp_large_fd_set_resize() robust against memory allocation
	failures. Make NETSNMP_LARGE_FD_ZERO() use memset() on Unix systems
	instead of an explicit loop. Make sure that on Unix systems
	netsnmp_large_fd_clr() doesn't try to read memory it isn't allowed
	to read if the first argument equals -1 (a value that shouldn't be
	passed by the caller).
      - Merge together the Linux and *BSD version of src port sending.
      - Only transform the address to printable form when needed.
      - PATCH 3510454: Allow the use of 0.0.0.0/0 as alias for default
      - Prevent gcc ped-warning for NETSNMP_REMOVE_CONST git-svn-id:
	file:///home/hardaker/lib/sf-bkups/net-snmp-convert-svnrepo/trunk@1
	8052 06827809-a52a-0410-b366-d66718629ded
      - Reduce overhead of config file parsing
      - Remove obsolete snmp_get_fd_for_session() declaration
      - Separate out the cmesg buffer size
      - Set the rpath for libperl.so in libnetsnmpmibs.so such that the
	dynamic linker can find libperl.so without requiring the user to
	modify the dynamic linker settings. This change in
	agent/Makefile.in is necessary on the 5.5 branch and later but not
	on the 5.4 branch. That is because the 5.4 branch uses an older
	version of libtool that propagates the rpath of dependent
	libraries. This is called inter-library dependency tracking in the
	libtool manual. This functionality is present in libtool version 1
	but not in libtool version 2. For more background information about
	dynamic libraries and rpaths, see also the document with the title
	"RpathIssue" on the Debian wiki
	(http://wiki.debian.org/RpathIssue).
      - Simplify implementation of functions manipulating 64-bit numbers.
      - Simplify the se_store_enum_list() implementation
      - Use SNMP_ALLOC_TYPEDEF to allocate transports in order to avoid the
	separate call to memset.
      - [PATCH 3414773]: Encode integer value using ASN_INTEGER
      - [PATCH 3526599]: Don't hang on retried failing SNMPv3 responses
      - PATCH 3560473: from fenner: Handle TimeTicks when pretty-printing
	OID   Signed-off-by: Wes Hardaker <hardaker@users.sourceforge.net>
      - Add the symbol NETSNMP_PRIo to help in printing oid values.
      - Do not crash from empty values in --token=value arguments
      - Do not crash on incomplete configuration tokens.
      - Do not truncate single default transport domains
      - Move the check that the pdu variable is non-NULL to before the
	first dereference of it.

    snmplib + snmpd + snmpwalk:
      - Avoid that system clock changes (e.g. by ntpd) affect code that
	needs relative time

    snmplib, snmpd, perl:
      - Eliminate dead variables agent/mibgroup/agentx/master_admin.c
	agent/mibgroup/etherlike-mib/data_access/dot3stats_linux.c
	agent/mibgroup/etherlike-mib/dot3StatsTable/dot3StatsTable_data_acc
	ess.c agent/mibgroup/host/data_access/swinst_pkginfo.c
	agent/mibgroup/host/data_access/swrun_procfs_status.c
	agent/mibgroup/ip-mib/data_access/systemstats_linux.c
	agent/mibgroup/mibII/kernel_linux.c
	agent/mibgroup/rmon-mib/data_access/etherstats_linux.c
	agent/mibgroup/rmon-mib/etherStatsTable/etherStatsTable_data_access
	.c apps/snmptls.c apps/snmptrapd_log.c snmplib/dir_utils.c
	snmplib/snmp_client.c snmplib/snmp_openssl.c
	snmplib/transports/snmpTLSTCPDomain.c
      - BUG: 3517030: Ensure large tables are walked properly
      - BUG: 3541012: Fix handling of gettable columns
      - [PATCH 3529541]: Don't refer to internal 'my' variables from
	external scripts Fix provided by Lezz Giles

    snmp:
      - Bridge-mib: Fix index interpretation. This patch corrects a wrong
	data interpretation. snmp-bridge-mib obtains the ifindex value from
	the sysfs attribute 'ifindex' The value given by the sysfs
	attribute is an integer, which is handled as hex and leads to
	incorrect data displayed to the user. e.g. $ > snmpwalk localhost
	BRIDGE-MIB::dot1dBasePortIfIndex.2
	BRIDGE-MIB::dot1dBasePortIfIndex.2 = INTEGER: 54 according to the
	sysfs attribute the value is 36 $ > cat
	/sys/class/net/<device>/ifindex 36 Signed-off-by: Mijo Safradin
	<safradin@linux.vnet.ibm.com>

    snmpd:
      - Lowered severity of 'Error expanding XXX to 64bits' messages.
      - Removed error log messages when IPv6 is disabled.
      - Add missing debug tag
      - Add netsnmp_get_next_alarm_time()
      - Avoid that system clock changes (e.g. by ntpd) affect code that
	needs relative time Make sure that the range of the SNMPv3 variable
	snmpEngineTime is 0..2147483647 on all supported systems instead of
	0..42949672 on some systems (i.e. wraparound after 497 days)
      - BUG 3542188: Correct sysORDescr for snmpUsmMIB. Thanks to Dave
	Vucich for reporting this.
      - BUG 3542307: Correct sysORID for snmpMPDStats. Thanks to Dave
	Vucich for reporting this.
      - BUG: 3439234: Correct the dependencies of ucd-snmp/pass and
	ucd-snmp/pass_persist
      - BUG: 3439234: Move netsnmp_pass_str_to_errno to pass_common and
	rename it to netsnmp_internal_pass_str_to_errno
      - BUG: 3463767: Handle parsing subidentifiers > 2^31
      - BUG: 3532090: Fix high ifIndex values crashing hrDeviceDescr
      - Call snmp_oidtree_compare instead of snmp_oid_min_compare
      - DISMAN-PING-MIB: Avoid dangling pointers (based on patch 3503259)
      - DISMAN-PING-MIB: Avoid reading freed memory when deleting a row
	from a table
      - DISMAN-PING-MIB: Do not send the contents of the stack over the
	network
      - DISMAN-PING-MIB: Don't call exit() upon memory allocation failure
      - DISMAN-PING-MIB: Fix IPv6 socket leak in error paths
      - DISMAN-PING-MIB: Fix a socket leak triggered by pinging a remote
	host
      - DISMAN-PING-MIB: Fix more memory leaks
      - DISMAN-PING-MIB: Fix several memory leaks
      - DISMAN-PING-MIB: Make ping implementation independent of ntpd clock
	jumps
      - DISMAN-PING-MIB: Make pinging local interface addresses work
      - DISMAN-SCHEDULER-MIB: Handle 32-character schedContextName values
	correctly. See also commit
	b3c4982542e0ab151fb3884754cdfbcb472da52d.
      - Disable the support for integer64 in pass scripts if compiling
	without opaque-special-types.
      - Factor out asc2bin and bin2asc. Add a netsnmp_internal_ prefix to
	them
      - Fixed UCD-SNMP-MIB::systemStats after 30 days of uptime. After 30
	days, values from /proc/stat (on Linux) can get bigger than 32bits
	and snmpd calculations might render counters like ssCpuUser
	negative or zero, while the real value is higher. Therefore the
	counters should be tracked as the largest integer available.
      - Fixed snmpd '-d' option. Now it dumps packets again.
      - IF-MIB::ifType: Report type "infiniband (199)" for InfiniBand
	interfaces instead of type "other (1)".
      - Init_agent() + init_kmem(): Return an error value instead of
	invoking exit() if access to kernel virtual memory is denied
      - Make the configuration of the dlmod module fail rather than
	generate a dummy module if the dlopen function isn't available.
      - Match each getpwnam()/getpwuid() call with an endpwent() call and
	each getgrent() call with an endgrent() call.
      - PATCH 3402376: from Leonardo Chiquitto: Recognise ReiserFS Also
	move various FSType definitions to the appropriate blocks
      - PATCH 3453868: from "Bill Fenner <fenner@gmail.com>": Factor common
	code into pass_common Move the code for pormatting and printing
	values from pass and pass_persist into pass_common.
      - PATCH: 3487867: Don't skip missing ifXTable entries
	(ifConnectorPresent FALSE)
      - Pass_persist:  Fixes a race condition introduced in commit
	31fa07cd9ffde46d41d2b5838c3fc4d01548bfb5. The following race
	condition could happen: - A system call fails and errno is set
	accordingly by the C library. - SIGCHLD handler invokes a system
	call that fails and hence overwrites errno. - SIGCHLD handler
	leaves. - original context checks errno and finds the value from
	the system call invoked by the SIGCHLD handler instead of the
	system call that failed originally. Other fixes included in this
	patch: - Renamed deinit_pass_persist() into shutdown_pass_persist()
	such that this function gets called during agent shutdown. - Made
	sure that shutdown_pass_persist() is called by the Windows
	snmpd.exe too. - Windows: avoid calling
	CloseHandle(INVALID_HANDLE_VALUE). - Windows: avoid that closing a
	pass_persist pipe triggers a crash. - Windows: pass_persist: close
	handles of finished processes.
	agent/mibgroup/ucd-snmp/pass_persist.c win32/mib_module_shutdown.h
      - Smux: simplify smux_list_detach()
      - UDP-MIB: Report the proper address in udpLocalAddress instead of
	0.0.0.0. Makes test T160snmpnetstat pass again. Fixes a bug
	introduced in commit c76fb96f65e33ba2fd212a921e8c386155ee5c7a.
      - [BUG 3460364]: Fix use of block factor when detecting error
	conditions
      - [BUG 3489631]: Fix incorrect handling of UCD monitoring flag
      - [PATCH 3410050]: Skip already-'processed' varbinds Based on mib2c
	patch provided by Stephen Turner
      - [PATCH 3410059]: Fix sparsely augmenting trigger tables Patch
	provided by Stephen Turner
      - [PATCH 3447444]: Fix SIG_PIPE handling Patch provided by Bill
	Fenner
      - [PATCH 3447671]: Fix override handling of OID values Patch supplied
	by Phillip O'Donnell
      - [PATCH 3479740]: Fix hrSWRunPerf statistics
      - [PATCH 3487919]: Fix compilation when caching is disabled
      - [PATCH 3495697]: Store persistent snmpTarget table changes
      - BUG 3542188: Correct sysORDescr for snmpUsmMIB. Thanks to Dave
	Vucich for reporting this.
      - BUG 3542307: Correct sysORID for snmpMPDStats. Thanks to Dave
	Vucich for reporting this.
      - BUG: 3543864: Remove extraneous function type (and fix a related
	typo)
      - Removed limit of 'exec' and 'sh' entries in snmpd.conf Use dynamic
	(re)allocation instead.
      - [PATCH 3543000]: Various fixes to Rmon code Supplied by Patrick
	Ritter

    snmpdx:
      - [PATCH 3445437]: Log AgentX disconnections (in line with
	connections) Patch provided by Bill Fenner

    snmptrapd:
      - Avoid crash during shutdown due to invoking perl_destruct(NULL)
      - Do not invoke shutdown_perl() from inside the SIGTERM handler since
	that fails if SIGTERM is received while a Perl handler is active.
	Based on a patch posted by Joel Avni <javni@arubanetworks.com>
      - Eliminate an unused variable (Now)
      - Move the main loop code into a new function
      - Remove superfluous casts

    snmptrapd_sql:
      - Avoid that a linker error is triggered on systems where my_progname
	is missing in libmysqlclient (e.g. Fedora 15 and 16). This is a
	backport of commit 9f653f7.

    aix:
      - Eliminate configure warning regarding libperfstat.h on AIX 6.1 and
	up
      - PATCH 3403433: from blentz: Issues with hrSWRunName and Parameters
	on AIX	 Signed-off-by: Wes Hardaker
	<hardaker@users.sourceforge.net>

    apps, snmplib:
      - PATCH: 2835577: identified by "Bart Van Assche": Replace SNMP_ZERO
	of arrays with a memset. git-svn-id:
	file:///home/hardaker/lib/sf-bkups/net-snmp-convert-svnrepo/trunk@1
	7797 06827809-a52a-0410-b366-d66718629ded
      - BUG: 3529768: Be more careful when stripping off numeric suffixes

    build:
      - Do not generate an output file on failure make supposes that no
	output is generated if the command failed. Change feature-remove to
	follow that presumption.
      - BUG: 3532234: Fix typo in libtool script (addressed properly in
	libtool 2.4.2)

    building:
      - Add dependencies on @FEATURETARGS@ to make the subtarget work as
	well.
      - Add missing end comments to feature ifndefs.
      - Add target to build agentxtrap from the toplevel
      - Build fix for systems lacking field msg_flags in struct msghdr
	(e.g. IRIX)
      - Build fix for systems lacking fields msg_control/msg_flags in
	struct msghdr (backport)
      - Correct dependencies - since
	bf74fea69f24dc6e85f908f3f41d1426b2e09688 snmpconf is located in
	builddir, not srcdir
      - Correct dependencies - since
	bf74fea69f24dc6e85f908f3f41d1426b2e09688 snmpconf is located in
	builddir, not srcdir" This reverts commit
	9efa467a972bb6e1c7fbdaf2e27429d29f4ab89e.
      - Make the transport configuration code work again Previously the
	transport inheritance processing code ran with
	NETSNMP_FEATURE_CHECKING set. In this mode the file
	net-snmp/feature-details.h is requiered. That file is created
	during the first make run, and that happens after configure is run.
	Change this to undefine NETSNMP_MINIMAL_CODE, effectively turning
	off feature support during transport configuration in order to make
	it work at all.
      - Run libtool --mode=finish on the right directory

    libnetsnmp:
      - PATCH 3394586: from rwa-co: file descriptor leak in read_config
	(+fix) Signed-off-by: Wes Hardaker <hardaker@users.sourceforge.net>

    libsnmp:
      - Changed the type of the fourth argument of netsnmp_set_row_column()
	from const char* to const void* such that no cast is necessary when
	passing another datatype then char* or const char*.

    man:
      - [BUG 3490708]: Clarify use of common command-line options
      - BUG: 3535269: Document use of [snmp] for client-side tools.

    pass:

    perl:
      - Add agent::uptime()
      - Enable sending SNMPv2 traps with an empty varbind list
      - Fix spelling in the documentation of the SNMP module
      - Fixed segmentation fault when handler registration fails. When
	netsnmp_register_handler fails, it frees its reginfo ->
	nsahr_DESTROY (and any other function) must not dereference it.
      - Perl: Make sure that the constant SNMP_DEFAULT_RETRIES is
	recognized. SNMP module: Add constants
	NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE and
	NETSNMP_CALLBACK_OP_TIMED_OUT. When the Net-SNMP Perl modules are
	built on Windows with MSVC or MinGW it is possible that each these
	are linked with another version of the MSVC runtime library than
	the Perl interpreter itself. In that case the "errno" variable used
	inside .xs source files is another variable than the $! variable in
	.pm files. Or: assignments to "errno" in a .xs file do not modify
	the "$!" Perl variable This patch avoids using "errno" by modifying
	the different constant() functions such that these return a
	two-element array instead of returning a scalar and setting errno.

    python:
      - Avoid that an SNMP set with UseEnums enabled causes a segmentation
	fault
      - [PATCH 3433846]: Fix for use with python 2.4
      - BUG: 3535967: Fix memory leak - snmp_{sess_}error allocates the
	output buffer

    testing:
      - Add a test for se_store_list()
      - Add testing/fulltests/default/T154dismanpingmib_simple
      - Avoid false negative for T114agentxagentxtrap_simple caused by the
	test result being present in the hex dump ("mostly_harmless")
      - Convert snmplib/test_binary_array.c into two unit tests
      - Fix Perl regression test failures All Perl regression tests pass
	now on Linux and on Windows (MSVC).
      - Make the asn1 test pass even if support for opaque types are
	removed.
      - Perl regression tests: Don't fail skipped tests.
      - Protect the use of $OSTYPE to ensure that 'test' get enough
	parameters.
      - Remove an incorrect comment from simple_eval_tools.sh
      - Remove unused variable
      - Require a semicolon after OK(), OKF() and PLAN() Also, let OKF()
	emit a single line of output such that all output it produces is
	visible in the output of "make test".
      - [BUG 3474590]: Don't match underscores within the source root
	filename
      - Add test cases for snmp_service

    unspecified:
      - Added CVFS (CentraVision File System) to hrStorageTable and
	hrFSTable.
      - Removed counter-64 error messages.   These messages do not say
	enything useful, caller should check their return value and report
	it.
      - Added OCFS2 (Oracle Cluster FS) to hrStorageTable and hrFSTable
      - [BUG 3444939]: BUG: 1796886: snmplib: Avoid that
	sprint_realloc_octet_string() embeds unprintable control characters
	or binary zeroes in its output. This behavior could cause truncated
	output in snmptrapd.
      - [BUG 3452069]: Fix snmptrap_oid declaration in mib2c generated code
	This bug was introduced considerable time ago. It did already exist
	at the time the 5.6 branch was created (see also commit
	0ec088afa27cfda4e6ea78aae7cfc5507564edde).
      - [BUG 3454168]: configure: Fix building with --enable-read-only
      - [PATCH 3418649]: HOST-RESOURCES-MIB: Use pclose() instead of
	fclose() to close a pipe.
      - [BUG 3540621]: dist: Add missing Provides: to net-snmp-perlmods RPM
	spec

    BSD:

    Bug 3152841:
      - Do not install the util_funcs subheaders that were removed in 5.7
      - Install util_funcs subheaders
      - Install util_funcs subheaders introduced in 5.6

    Cygwin:
      - Make date_n_time() produce time zone information

    Cywin:
      - Agent: Implement get_uptime() such that querying
	HOST-RESOURCES-MIB::hrSystemUptime returns a non-zero value.

    FreeBSD:
      - Restore IP_RECVDSTADDR functionality.
      - Snmpd + apps: Sending UDP packets works again for non-root users
      - [PATCH 3489387]: Install FreeBSD 10 header file (plus other missing
	versions)

    Linux:
      - PATCH: 3525998: Don't use an uninitialised value in error message
      - [PATCH 3536420]: Ensure snd/rcv memory buffers are suitably aligned
	Patch provided by Tyler Olmstead

    MinGW:
      - Net-SNMP Perl modules build again.
      - Support the directory structure of recent Shining Light OpenSSL
	binary distributions
      - Testing: Fix a race condition in the test framework
      - Testing: Fix a race condition in the test runner
      - Testing: Make test T130snmpv1vacmget_simple pass
      - Testing: Make those regression tests pass for which SNMPCONFPATH
	and/or SNMP_PERSISTENT_DIR matter
      - Testing: Make unit-tests/T014gethostbyaddr_clib pass
      - Testing: Make unit-tests/T102pdu_build_clib pass.
      - Testing: Obtain the MSYS path from the environment

    Win32:
      - Avoid that compiling the header file <net-snmp/net-snmp-config.h>
	with the MinGW gcc compiler triggers warnings about "pragma
	comment".
      - Avoid that the PACKAGE_* macros defined in
	<net-snmp/net-snmp-config.h> cause trouble when including this
	header in a package that uses the GNU autotools.
      - Building: Builds now correctly with a 64-bit compiler. git-svn-id:
	file:///home/hardaker/lib/sf-bkups/net-snmp-convert-svnrepo/trunk@1
	9458 06827809-a52a-0410-b366-d66718629ded
      - Snmpd: Remove dlmod

    Windows:
      - Building (build.bat): Install netsnmp.dll before running the Perl
	regression tests such that the regression tests are run with the
	correct version of netsnmp.dll.
      - MSVC: Avoid that the typedefs in <net-snmp/net-snmp-config.h>
	conflict with those in <stdint.h> from the msinttypes project
      - MSVC: Link with proper libeay32 library
      - MSVC: When linking with OpenSSL, link with user32.lib too
      - Make netsnmp_large_fd_set_resize() robust against memory allocation
	failures. Make NETSNMP_LARGE_FD_ZERO() use memset() on Unix systems
	instead of an explicit loop. Make sure that on Unix systems
	netsnmp_large_fd_clr() doesn't try to read memory it isn't allowed
	to read if the first argument equals -1 (a value that shouldn't be
	passed by the caller). Make netsnmp_large_fd_is_set() return false
	on Unix systems if the first argument equals -1 (a value that
	shouldn't be passed by the caller). Make
	netsnmp_large_fd_set_resize() shrink behavior correct.
      - Perl (build.bat): When installing development files, install the
	PDB files too.
      - Remove superfluous link libraries from project files (*.dsp)
      - Snmptrapd: Make the IP address to hostname conversion work
      - Testing: perl: Fix an incorrect message printed while running the
	Perl module regression tests




*5.7.1*

    snmplib:
      - Fix a crash that could be
      - tweak patch 3044888 to restore

    snmpd:
      - [PATCH 3386633]: fix integer overflow in disk percent calculations
      - Make
      - Restore storage tables on Linux
      - run signal handlers when select()

    snmptrapd:
      - Add missing newline
      - Invoke shutdown_perl() when

    building:
      - [PATCH 3383951]: Fix -Wunused compile warnings with FreeBSD/NetBSD
	Signed-off-by: Wes Hardaker <hardaker@users.sourceforge.net>
      - build fix
      - build fix for systems lacking

    libnetsnmp:
      - [PATCH 3387139]: from

    man:
      - [PATCH 3312861]: Man pages

    testing:
      - Changed
      - Check PID file existence after having read it instead of before.
	This fixes the race condition where the PID file disappeared after
	the existence check and before it was read.
      - Make the SNMP_VERBOSE=1 output even more verbose.

    unspecified:
      - minor NEWS polish

    Perl:
      - Remove file perl/NetSNMP.xs

    Win32:
      - Add support for
      - Document how to build 64-bit
      - Documented how to use build.bat with
      - winExtDLL: Invoke

    Windows:
      - Avoid that if
      - Remove outdated instructions about

*5.7*
    snmplib:
      - Added function netsnmp_delete_table_data_set().
      - Added function netsnmp_delete_table_data_set(). Added declaration
	for the function netsnmp_table_data_delete_table() in a public
	agent header file.
      - Added function netsnmp_delete_table_data_set(). Added declaration
	for the function netsnmp_table_data_delete_table() in a public
	agent header file. Fixed memory leak in
	netsnmp_table_data_delete_table().
      - Added function netsnmp_delete_table_data_set(). Added declaration
	for the function netsnmp_table_data_delete_table() in a public
	agent header file. Fixed memory leak in
	netsnmp_table_data_delete_table(). Fixed memory leak triggered by
	unregistering a table handler.
      - Added macro netsnmp_static_assert().
      - Added netsnmp_mib_handler.data_clone, a function pointer that
	defines how to clone netsnmp_mib_handler.myvoid. Must be defined if
	and only if data_free is set. The function netsnmp_handler_dup()
	does now clone MIB handler private data if data_clone() is set.
	Previously after duplicating a MIB handler and unregistering one of
	the two MIB handlers, the private data pointer (myvoid) of the
	other became a dangling pointer. Note: addition of
	netsnmp_mib_handler.data_clone is an ABI change.
      - Added snmp_sess_session_lookup().
      - Added the function netsnmp_check_definedness(), which helps to find
	the cause of undefined value errors as reported by Valgrind.
      - Avoid that Valgrind complains about uninitialized data for the
	buffers returned by netsnmp_callback_recv() and
	netsnmp_callback_hook_build().
      - Be const correct over calls to str* functions.
      - Changed the argument type of debug_register_tokens() from char *
	into const char *.
      - Check that the argument to netsnmp_transport_copy is non-NULL
      - Check the return value of strdup in netsnmp_create_data_list and
	fail if strdup fails.
      - Correct the extern "C" declarations to be consistent. Remove
	commented out code.
      - Fenner: fix sending of UDP responses from multihomed agents. Try to
	send the response as it was before Net-SNMP 5.6 (assuming the
	appropriate request was unicast) and only if it fails try to set
	if_index (the request must be broadcast).
      - Fixed bugs in asn_parse_unsigned_int64(),
	asn_build_unsigned_int64(), asn_parse_signed_int64() and
	asn_build_signed_int64(). Most but not all of these bugs were
	specific to 64-bit systems. Fixes bug #3093199.
      - Fixed memory leak triggered by calling se_add_pair_to_list() with a
	value that already existed in the list.
      - Invoking se_clear_slist() does no longer create a dangling pointer.
      - Invoking se_clear_slist() does no longer create a dangling pointer.
	Fixed leaks-at-exit triggered by using the snmp_enum code.
      - Invoking se_clear_slist() does no longer create a dangling pointer.
	Fixed leaks-at-exit triggered by using the snmp_enum code.
	Documented behavior of se_add_pair(), se_add_pair_to_slist() and
	clear_snmp_enum(). Made snmp_enum example consistent with the rest
	of the code by adding strdup() calls and added a call to
	se_clear_all_lists().
      - Invoking se_clear_slist() does no longer create a dangling pointer.
	Fixed leaks-at-exit triggered by using the snmp_enum code.
	Documented behavior of se_add_pair(), se_add_pair_to_slist() and
	clear_snmp_enum(). Made snmp_enum example consistent with the rest
	of the code by adding strdup() calls and added a call to
	se_clear_all_lists(). Fixed a memory corruption problem triggered
	by the (undocumented) snmpd.conf "enum" keyword handler - storing
	pointers to strings allocated on the stack in a global list does
	not work.
      - Remove the support for CMU compatibility since there is no way to
	enable it and nobody have missed it.
      - [BUG 3134323]: Fix crash when comparing invalid OIDs
      - [PATCH 3165878]: Catch buffer overrun on 64-bit systems
      - [PATCH 3195537]: Minor binary_array container sort optimization
      - [PATCH 3203806]: Add the function netsnmp_large_select().
      - [PATCH 3203806]: Make netsnmp_large_fd_set_resize() clear all
	relevant file descriptors.
      - [PATCH 3203806]: Minor performance optimization of
	netsnmp_large_fd_set_resize().
      - add IPv6 support to DTLSUDP transport
      - add IPv6 support to DTLSUDP transport use new
	netsnmp_sockaddr_storage in netsnmp_addr_pair
      - add IPv6 support to DTLSUDP transport use new
	netsnmp_sockaddr_storage in netsnmp_addr_pair add base_transport
	ptr for tunneled transports
      - add more openssl error cases where we check for local cert
      - add new transport config tokens localCert/peerCert, deprecate
	our_identity, their_identity
      - add optional support for local DNSSEC validation of hostnames	-
	optional at configure time: --with-local-dnssec-validation -
	requires DNSSEC-Tool validation libraries - initial support, for
	systems with getaddrinfo. support for additional resolver
	interfaces coming soon. - also TODO: flag for ignoring validatoin
	errors (log & continue)
      - dont return empty array
      - force a ; at the end of the static_assert macro.
      - introduce new localCert/peerCert, deprecate serverCert, clientCert,
	defX509ServerPub, defX509ClientPub
      - netsnmp_handler_dup(): freeing the duplicated handler no longer
	causes a crash (double free) when handler->myvoid of the original
	handler was non-NULL.
      - realloc+init instead of calloc inspired by patch 3195532 from
	Stephen Hemminger
      - refine cert debugging; remove unused function
      - remove inline versions of container funcs
      - snmp_shutdown(): added call to netsnmp_certs_shutdown().
      - 0 Applied the intent of patch 3044888 to allow applications to read
	the error messages of a MIB parsing failure.
      - Fixed a memory leak in snmp_free_session().
      - [BUG 3184697]: Don't reference internal MD5 when it's explicitly
	disabled
      - [BUG 3234754]: Ensure old f_create_from_tstring hook is initialized
	to NULL
      - [BUG 3264852]: Recognise missing report types
	(snmp{Unavailable,Unknown}Contexts,snmpUnknownPDUHandlers)
      - _mibindex_add() no longer reads past the end of the dynamically
	allocated array _mibindexes.
      - [BUG 3151845]: fix multiple registrations of snmp transport handler

    snmp:
      - patch: 3096725: sysORTable registation for notification log mib
	original patch fixed several issues, other parts applied earlier

    snmpd:
      - Add missing function declaration
      - Added functions netsnmp_handler_owns_tabreq(),
	netsnmp_registration_owns_tabreq(), netsnmp_iterator_clone().
	Exported netsnmp_table_registration_info_clone().
      - Added functions netsnmp_handler_owns_tabreq(),
	netsnmp_registration_owns_tabreq(), netsnmp_iterator_clone().
	Exported netsnmp_table_registration_info_clone(). Modified
	netsnmp_iterator_delete_table() such that it frees the table
	registration information stored in a table iterator too. Modified
	netsnmp_get_table_iterator_handler() such that the table iterator
	passed to this function is freed when the associated handler is
	freed. Restored the behavior of netsnmp_get_table_handler() to that
	of r19449, that is, not setting up the data_free pointer because
	not all callers of netsnmp_get_table_handler() expect that table
	registration information is freed when the associated handler is
	freed.
      - Added netsnmp_get_table_iterator2().
      - Added netsnmp_get_table_iterator2(). Added
	netsnmp_register_table_iterator2().
      - Added netsnmp_get_table_iterator2(). Added
	netsnmp_register_table_iterator2(). Added
	netsnmp_handler_owns_iterator_info().
      - Added netsnmp_get_table_iterator2(). Added
	netsnmp_register_table_iterator2(). Added
	netsnmp_handler_owns_iterator_info(). Fixed leak-at-exit triggered
	by snmpNotifyTable.
      - Added netsnmp_get_table_iterator2(). Added
	netsnmp_register_table_iterator2(). Added
	netsnmp_handler_owns_iterator_info(). Fixed leak-at-exit triggered
	by snmpNotifyTable. Fixed leak-at-exit triggered by
	snmpTargetAddrTable. Also, restored backwards compatibility of
	netsnmp_register_table_iterator().
      - Added netsnmp_register_watched_instance2(),
	netsnmp_register_watched_scalar2(), netsnmp_clone_watcher_info()
	and netsnmp_owns_watcher_info(). See also the Doxygen comments for
	more info.
      - Added netsnmp_unregister_auto_data_table().
      - Added reference count in the netsnmp_baby_steps_modes data
	structure and made sure that this data structure is automatically
	freed when the handler that owns it is unregistered.
      - Added snmp_sess_session_lookup(). Call shutdown_master_agent() and
	shutdown_agent() during shutdown.
      - Added snmp_sess_session_lookup(). Call shutdown_master_agent() and
	shutdown_agent() during shutdown. The function clean_subtree() does
	no longer trigger double frees and invalid memory reads. Note: this
	function was already wrong at the time it was introduced (patch
	#724925 / r8531, July 2003).
      - Added snmp_sess_session_lookup(). Call shutdown_master_agent() and
	shutdown_agent() during shutdown. The function clean_subtree() does
	no longer trigger double frees and invalid memory reads. Note: this
	function was already wrong at the time it was introduced (patch
	#724925 / r8531, July 2003). Removed a comment in
	netsnmp_handler_free() that is now obsolete because of the
	clean_subtree() changes.
      - Added snmp_sess_session_lookup(). Call shutdown_master_agent() and
	shutdown_agent() during shutdown. The function clean_subtree() does
	no longer trigger double frees and invalid memory reads. Note: this
	function was already wrong at the time it was introduced (patch
	#724925 / r8531, July 2003). Removed a comment in
	netsnmp_handler_free() that is now obsolete because of the
	clean_subtree() changes. Modified netsnmp_deregister_agent_nsap()
	such that it never examines sessions that already have been closed.
	It is for this change that it was necessary to introduce the new
	function snmp_sess_session_lookup().
      - Added the functions netsnmp_duplicate_variable() and
	netsnmp_cache_handler_owns_cache().
      - Added the functions netsnmp_duplicate_variable() and
	netsnmp_cache_handler_owns_cache(). Memory allocated by
	netsnmp_register_old_api() for storing SNMP variables is now freed
	when the associated handler is unregistered.
      - Added the functions netsnmp_duplicate_variable() and
	netsnmp_cache_handler_owns_cache(). Memory allocated by
	netsnmp_register_old_api() for storing SNMP variables is now freed
	when the associated handler is unregistered. Callback function data
	deallocation does no longer free the memory allocated for the
	AgentX session - the memory that was allocated for AgentX sessions
	is now deallocated just as that for any other session. This fixes a
	leak-at-exit.
      - Added the functions netsnmp_duplicate_variable() and
	netsnmp_cache_handler_owns_cache(). Memory allocated by
	netsnmp_register_old_api() for storing SNMP variables is now freed
	when the associated handler is unregistered. Callback function data
	deallocation does no longer free the memory allocated for the
	AgentX session - the memory that was allocated for AgentX sessions
	is now deallocated just as that for any other session. This fixes a
	leak-at-exit. Notify filter table: Callback function data
	deallocation does no longer free the data in *	  
	*snmpNotifyFilterTable_if_ctx.container - this is now done by  
	shutdown_snmpNotifyFilterTable() and
      - Automatically free the private data structure allocated by
	netsnmp_container_table_handler_get().
      - Builds with most recent MinGW (having #define localtime_r).
      - Count the number of users of a netsnmp_cache data structure instead
	of duplicating it.
      - Declare the OID argument type of MIB registration functions as
	'const oid *' instead of 'oid *' since these functions do not
	modify the OID.
      - Do not leak the limits of scalar_group objects on shutdown.
      - Extend the documentation for data_clone and data_free
      - Factor out common config_add_mib statments
      - Find out whether librpm is available before configuring the agent
	modules because host/data/access/swinst needs symbol HAVE_LIBRPM.
	As a result, configure has to be run only once instead of twice to
	enable the hrSWInstalled table on systems that have librpm.
      - Fixed a double free at exit that was triggered by cleaning up the
	data structures used for embedded Perl support.
      - Fixed a year-2038 bug in the implementation of ipRouteTable.
      - Introduced netsnmp_pid_t.
      - MIB-specific leak-at-exit fixes.
      - Make it possible to copy watched data items without memory leaks.
      - Make the setting of the argvrestart* variables optional on
	USING_UTIL_FUNCS_RESTART_MODULE.
      - Make the setting of the argvrestart* variables optional on
	USING_UTIL_FUNCS_RESTART_MODULE. Remove util_funcs/restart from the
	requirement sets of util_funcs and default_modules.
      - Make the setting of the argvrestart* variables optional on
	USING_UTIL_FUNCS_RESTART_MODULE. Remove util_funcs/restart from the
	requirement sets of util_funcs and default_modules. Add
	util_funcs/restart to the requirement set of ucd-snmp/versioninfo.
      - Patch 3141462: from fenner: fix agentx subagent issues with
	multiple-object requests
      - Patch from Niels to fix VACM persistant storage.
      - Remove unused variable cmp
      - Remove util_funcs/Exit from the requirement sets of util_funcs and
	default_modules.
      - Remove util_funcs/Exit from the requirement sets of util_funcs and
	default_modules. Never use Exit to terminate the agent.
      - Removing the last cache via netsnmp_cache_remove() does no longer
	trigger a crash.
      - Update the length of sysObjectID as well as the data when it is set
	from a configuration file.
      - Use the same autoconf symbol to decide both if strcasecmp should be
	declared and if it should be defined.
      - [BUG 1840230]: Don't include the index object as
	(pseudo-)accessible column.
      - [BUG 3058101]: Writeable 'long' instances work on 64-bit systems,
	but not writable 'int's
      - [BUG 3062538]: Fix com2sec* handling of non-default contexts
      - [BUG 3205765]: handle reconfig for certSecName token
      - [BUG ]: enforce max length on TLS secName maps
      - [BUG ]: enforce max length on TLS secName maps add priority to
	secname debugging
      - [PATCH 2119725]: Fix skipNFSInHostResources handling of
	hrStorageTable
      - [PATCH 2941811]: Handle successful requests with reqID 0
      - [PATCH 2975254]: Avoid callback re-use of closed sessions Qn:
	Should this also be applied when main session is NULL?
      - [PATCH 3053436]: from: takevos: fix: tcpConnectionTable_data_access
	invalid memory access
      - [PATCH 3057090]: make ethtool support on linux use the high speed
	struct info for 100G+.
      - [PATCH 3057093]: allow linux to use libpci for creating useful
	ifDescr strings
      - [PATCH 3096725]: Don't register v1Trap callback, if SNMPv1 is not
	supported
      - [PATCH 3096725]: Include SNMPv1 trap OIDs in nlmLogNotificationID
	column
      - [PATCH 312596]: listen for netlink change events for the
	arp-related tables
      - [PATCH 3152412]: Handle (and report) problems reading /proc/vmstat
      - [PATCH 3203806]: Avoid that the main agent processing loop - when
	using more than FD_SETSIZE file descriptors - can cause memory
	corruption by invoking select().
      - [PATCH ]: optimizations for large route tables from Stephen
	Hemminger applied parts 1-3 of 4 from him (msgs to coders on
	2/28/11; subject ip-forward-mib performance improvements; part 4
	needs more work
      - add debug for cert find hint as string/int
      - add newly created/destroyed interfaces to ipv6IfTable The list of
	interfaces was never refreshed, now it is reloaded every time the
	table is accessed. I've also fixed a memory leak and optimized the
	loading of the list a bit.
      - com2sec6 directive: If configure has not found getaddrinfo(),
	non-numeric IPv6 addresses do now trigger an error message.
      - don't second-guess cache handler (waves hand) this is not the
	function you are looking for. netsnmp_cache_is_valid() is not meant
	for mib modules
      - example MIB: Added shutdown function that frees all memory owned by
	this MIB implementation.
      - fix double free in TLS error handling
      - fixed the agent writing 'looks like a 64bit wrap, but prev!=new' in
	syslog when computing ipSystemStats Without the memcpy,
	prev_vals->stats and new_vals->stats could get different, which
	could much much later (when a counter gets bigger than 32 bits)
	result in 'prev!=new' message in syslog. Typically this happens
	after long time of uptime and it is very hard to reproduce.
      - host/data_access/swinst_rpm: Fixed a memory leak in
	netsnm_swinst_arch_init().
      - host/data_access/swinst_rpm: Pass correct path to rpmdbOpen() such
	that opening the database succeeds.
      - host/data_access/swinst_rpm: Pass correct path to rpmdbOpen() such
	that opening the database succeeds. host/data_access/swinst_rpm:
	Log an error message if rpmdbOpen() fails.
      - instead of relying on NETSNMP_DS_LIB_APPTYPE, break out cert table
	inits to new agent cert init function, called from init_agent.
      - netsnmp_cache_free(): A more detailed message is now logged when
	attempting to free a cache that is still in the cache list.
      - reworked hrStorageTable to support large filesystems. The
	hrStorageAllocationUnits does not report real allocation unit size,
	but some calculated value so hrStorageAllocationUnits *
	hrStorageSize gives real size of the filesystem. This calculation
	happens only when hrStorageSize is too small (32bits) for
	filesystem size, e.g. filesystems larger than 8TB with 4096 bytes
	block size. This calculation can be turned off by
	'realStorageUnits' config option.
      - skip non-AF_INET interfaces when loading ipv4 addrs
      - snmpd is again single-threaded. [PATCH 2959811]: Safranek:
	Reimplement Linux Netlink IPv6 prefix listener.
      - Fixed memory leak in TCP-MIB tables introduced by patch #3053436.
      - Fixed memory leak in TCP-MIB tables introduced by patch #3053436."
	[PATCH 3053436]: from: takevos: fix: tcpConnectionTable_data_access
	invalid memory access" the bug 3053436 is fixing was introduced in
	r17719, and fixed in r17861.
      - Use proper format specifier in debug statements for printing values
	of type 'oid'.
      - [PATCH 3066862]: fix the agent for comparing unsigned large indexes
	of the disk and extend tables.
      - fixed hrSWRunPath of swapped-out processes on Linux.   fgets()
	returns NULL both when /proc/PID/cmdline is empty (= swapped out)
	and when the process exited after fopen(), so check
	/proc/PID/status in both cases.
      - fixed race condition in hrSWRunTable Treat the reads from
	/proc/<pid>/* carefuly, processes can exit in the middle of
	processing. (already fixed in V5-5-patches and V5-4-patches in SVN
	rev. 20115, dunno why I did not patch trunk)
      - patch 3131397: from takevos: huge speedups of the TCP/UDP Tables
      - patch 3299384: fix INFORMs so they retry probing for an engineID.
      - patch 3306476: from tinypyramids: fix memory leak in the swrun
	container loading
      - ucd_snmp builds again on MinGW and Cygwin.
      - patch 3310250: from fenner: misc fixes for debugging output of
	agentx

    snmptrapd:
      - Fixed a double free at exit that was triggered by cleaning up the
	data structures used for embedded Perl support. Fixed a double free
	at exit that was triggered by cleaning up the data structures used
	for embedded Perl support. Valgrind reported that double free as
	follows: Invalid read of size 4 at 0x59D0501: perl_destruct (in
	/usr/lib/perl5/5.12.1/x86_64-linux-thread-multi/CORE/libperl.so) by
	0x544DF8E: shutdown_perl (snmp_perl.c:166) by 0x403966:
	term_handler (snmptrapd.c:318) by 0x6D43A5F: ??? (in
	/lib64/libc-2.11.2.so) Address 0x7660f88 is 56 bytes inside a block
	of size 2,912 free'd at 0x4C26496: free (vg_replace_malloc.c:366)
	by 0x544DF9A: shutdown_perl (snmp_perl.c:167) by 0x6DDADF2:
	__select_nocancel (in /lib64/libc-2.11.2.so) by 0x404E20: main
	(snmptrapd.c:1258)

    apps:
      - [PATCH 3054817]: Adds per-variable timed output support to snmpwalk
	using -CT
      - add snmp.conf tokens for timeouts and retries

    build:
      - [BUG 3088360]: Ensure python modules are built against the correct
	libraries

    building:
      - Fix --with-security-modules handling Allow repeated modules
	(tsm,tsm) as well as defailt modules (usm) Move the generation of
	the files after the checking
      - Make it possible to regenerate using autoconf 2.68.
      - Some systems do not support the -E flag to grep, use autoconf to
	find the right egrep at all times.
      - check for /dev/kmem instead of assuming it exists and hardcoding
	when it is not there

    libnetsnmp:
      - made the SSH transport configurable as it should be.

    libnetsnmpmibs:
      - Make all functions in the dlmod module that don't have to be public
	static

    mib2c:
      - [PATCH 3175323]: Fix handling of 'while (false)' blocks
      - [PATCH 3204883]: Fix handling of non-table objects named fooTable
      - [PATCH 3211484]: Support enumerations in notification varbinds
      - make the mib2c foreach ranges work as advertised in the comments.

    packaging:
      - Enable micro-and-macro-feature management within Net-SNMP; this
	adds a number of new flags to configure (--enable-minimalist and
	--enable-read-only). These changes are designed to remove much of
	the inline code that isn't always necessary or desired. Scripts
	exist (and will be improved) to stip out unused components from the
	code entirely to enable a shorter review process for upgrading to
	new releases. This work was done by Wes Hardaker and Michael Baer
	from SPARTA, Inc. but is being checked in as a large patch since
	converting the micro patches from git to svn turend out to be
	impossible

    patch 3140833:
      - fix proxy GETNEXT requests When OIDs requested are below the proxy
	request remap, we need to not include any OIDs that might be in the
	space between the original OID and the remapped OID. This patch
	fudges the request so that it fixes the request OID so it's just
	before the remapped proxy range.

    patch 3184026:
      - Avoid constant refresh of interface statistics

    perl:
      - patch 3049029: from fennec: fix a memory leak with snmp bulkwalks
      - patch from Martin Buck: don't always open stderr as the calls to
	snmp_log already do this and it messes up the agent when embedded

    python:
      - [PATCH 3185085]: Fix segfault on 64-bit systems
      - [BUG 3295407]: Fix handling of void pointer

    testing:
      - Add missing preconditions
      - Added function netsnmp_delete_table_data_set(). Added declaration
	for the function netsnmp_table_data_delete_table() in a public
	agent header file. Fixed memory leak in
	netsnmp_table_data_delete_table(). Fixed memory leak triggered by
	unregistering a table handler. Unit tests can now invoke functions
	from libagent.
      - Added function netsnmp_delete_table_data_set(). Added declaration
	for the function netsnmp_table_data_delete_table() in a public
	agent header file. Fixed memory leak in
	netsnmp_table_data_delete_table(). Fixed memory leak triggered by
	unregistering a table handler. Unit tests can now invoke functions
	from libagent. Added unit test for table_dataset.
      - Added inet_ntop() and inet_pton() unit test.
      - Added netsnmp_mib_handler.data_clone, a function pointer that
	defines how to clone netsnmp_mib_handler.myvoid. Must be defined if
	and only if data_free is set. The function netsnmp_handler_dup()
	does now clone MIB handler private data if data_clone() is set.
	Previously after duplicating a MIB handler and unregistering one of
	the two MIB handlers, the private data pointer (myvoid) of the
	other became a dangling pointer. Note: addition of
	netsnmp_mib_handler.data_clone is an ABI change. added more test
	cases to the handler registration test.
      - Generate a normal #line directive as per C99 instead of the
	compiler-specific #<n>-directive.
      - Introduced new test type next to capp and clib: cagentlib.
      - It is again possible to run an individual test via the script
	testing/RUNTESTS.
      - It is now possible to analyze the unit tests with Valgrind by
	setting the environment variables SNMP_SAVE_TMPDIR and
	DYNAMIC_ANALYZER. An example: (export SNMP_SAVE_TMPDIR=yes
	DYNAMIC_ANALYZER="valgrind --trace-children=yes --leak-check=full";
	cd testing && ./RUNFULLTESTS -g unit-tests)
      - Test 71 (com2sec6_simple) does now succeed even if IPv6 DNS
	resolution is not available.
      - Test T030 does now pass on MinGW.
      - auto-create user specified SNMP_TMPDIR and SNMP_TMP_PERSISTENTDIR
	too; default SNMP_TMP_PERSISTENDIR based on SNMP_TMPDIR for user
	specified SNMP_TMPDIR

    man:
      - [BUG 3190725]: Document snmp{,_sess}synch_response and
	snmp_async_send

    Generic:
      - Make it possible to build static applications using net-snmp-config
	and the -*libs flags once more.
      - [BUG 3102904]: All Net-SNMP C source files are now compiled with
	-fno-st rict-aliasing, at least if the configured compiler supports
	this flag.
      - [PATCH 3074918]: from weizheng: check for CONTAINER_INSERT failures
	and react appropriately to avoid memory leaks
      - [PATCH 3167325]: from krisztoforo: UCD-SNMP/SystemStats: add
	variables to report cpusteal, cpuguest, cpuguestnice

    Cygwin:

    Linux:
      - [PATCH 3083027]: Fix RPM spec file to support CentOS
      - [PATCH 3205811]: Option to skip fd/loop/ram devices in diskIOTable
      - agent: ipNetToPhysicalTable: Do not log an error message if one or
	more interfaces are present that do not have such information
	(NUD_NOARP), e.g. tunnels. Reported by Stephen Hemminger. See also
	patch #3107003.
      - snmpd is again single-threaded.

    MinGW:
      - Made regression test output independent of the Net-SNMP variables
	defined in the Windows registry. Some tests that failed previously
	after the Net-SNMP binaries (MSVC build) had been installed do now
	pass.
      - configure: Detection of the functions gai_strerror(),
	getaddrinfo(), gethostbyname() and gethostname() does now succeed.
      - testing: If the agent has been asked to stop, wait until the snmpd
	process disappeared before proceeding.
      - Tests 025 and 026 pass on MinGW even if winExtDLL has been enabled.

    NetBSD:
      - DragonFly support [From NetBSD patch archive]

    OpenBSD:
      - Update SWRun code to use kvm_getproc2 [From OpenBSD patch archive]

    Win32:
      - Avoid that MSVC reports a warning message about redefinition of the
	malloc() macro during building the Net-SNMP source code.
      - Deprecated libsnmp.def - add NETSNMP_IMPORT to function
	declarations instead to export a function from netsnmp.dll.
      - Guard netsnmp_udp_recvfrom() etc. declarations consistently. Builds
	with Visual Studio 2010.
      - Introduced netsnmp_pid_t. Eliminated casts between int and HANDLE
	in agent/mibgroup/util_funcs.c and
	agent/mibgroup/ucd-snmp/pass_persist.c.
      - When snmpd.exe is started in a command prompt window, the snmpd
	process now stops upon the first key press. This makes it easier to
	debug snmpd.exe for memory leaks.
      - [PATCH 3085187]: Building via the Microsoft Visual Studio project
	file (.dsw/.dsp) works again.
      - [PATCH 3293842]: Eliminate registry argument limit of 127
	characters (this limitation was reported by Sylvain Dery).
      - building: Avoid that MSVC 2010 prints a warning message about
	redefining EADDRINUSE.
      - building: Builds now correctly with a 64-bit compiler.
      - building: batch build with OpenSSL enabled and with recent OpenSSL
	development files works again.
      - header file <net-snmp/net-snmp-config.h> can now be used in the
	MinGW environment.
      - testing: Avoid that T200 fails on known Microsoft SNMP extension
	DLL bugs.
      - Build snmplib/transports/snmpIPv6BaseDomain.c only if
	NETSNMP_ENABLE_IPV6 has been defined.
      - Fixed a memory leak in the Net-SNMP (non-winExtDLL) implementation
	of the MIB-II ipNetToMediaTable.
      - Microsoft Visual Studio: Link with gdi32.lib if OpenSSL has been
	enabled because gdi32.lib is a dependency of OpenSSL.

*5.6*

    snmplib:
      - Add const declarations to the disabled versions of the debugging
	code as well.
      - Add missing dependencies between transports.
      - Add missing symbol netsnmp_snmpSSHDomain_len, make
	netsnmp_snmpSSHDomain const.
      - Change oid to be a 32-bit type on ILP64 and LP64 platforms.
      - Change the parsing of ranges to accept all valid values.
      - Correct dependencies between transports. Remove unnecessary
	includes.
      - Correct the spelling of __cplusplus when checking if the file
	should be wrapped in extern "C".
      - Do not require that the UDP transport is included.
      - Fix agent crash when sending encrypted SNMPv3 traps. Reported by
	Srikapilan Gandhi
      - Fix responding to broadcast requests. UDP responses are sent with
	source IP address which was destination of appropriate requests
	(implemented in SVN rev. 15215). But if the destination of a
	request is broadcast IP address, the request was sent with the
	broadcast address as source. sendmsg() on Linux does not support
	this and returns error -> response is not sent. In order to send
	responses from the same interface, interface index of the
	appropriate interface must be used.
      - Install library/oid.h. Thanks to "Tomasz Lis" who spotted the bug.
      - Make the context argument of send_v3trap,
	send_trap_vars_with_context and netsnmp_send_traps refer to a const
	char*.
      - Make the name argument to find_varbind_in_list const
      - Prevent gcc ped-warning for NETSNMP_REMOVE_CONST
      - Remove declarations of functions that don't exist or are declared
	elsewhere.
      - Remove the oid typedef from <net-snmp/library/asn1.h>. It is still
	present in <net-snmp/types.h>, use that file.
      - Replace the debugging functions with dummies when debugging is
	disabled.
      - Revert 17808, instead factor out the declaration of oid to it's own
	file and include that file from both types.h and asn1.h
      - Use a void argument for the data argument of xdump.
      - [BUG 2919320]: Avoid accessing freed memory Reported by Tomasz Lis
      - [BUG 2922390]: Fix test for missing contextName parameter
      - [PATCH 2871747]: plug memory leak in OID processing. The memory
	leaked when small OID, which could fit pre-allocated vp->name_loc,
	was placed in different (allocated) one.
      - [PATCH 2942940]: Add a new function, netsnmp_parse_args, that is
	like snmp_parse_args but takes an additional bitmask, flags, to
	affect the behaviour. Also remove the magic handling of some
	application names.
      - [PATCH 2971270]: refuse to parse ASN.1 tokens with wrong type
	field. This may yield to problems with third-party applications
	which may depend on parsing ugly ASN.1 data - we'll see...
      - add function to validate RowStatus and StorageType varbinds - also
	remove some duplicate code and fix comments indent mangled
      - add functions to remove list/row data from request list
      - add interface for duplicating a container
      - add interface for duplicating a container container changes: add
	flags field to container meta-data; chg binary_array container to
	use container meta-data flags
      - add remove function to container iterator; implement it for
	binary_array
      - added the functions netsnmp_malloc(), netsnmp_calloc(),
	netsnmp_realloc(), netsnmp_strdup() and netsnmp_free().
      - builds again when HAVE_GETADDRINFO is not defined.
      - conf files can now include other conf files - also tweaked debug
	tokens here and there
      - create indexes for certificates in config path
      - directory container enhancements - fix potential memory leak - add
	filter callback to filter files returned - add option to return
	relative and not full paths - add option to sort returned list -
	add option to return empty container instead of NULL if no files
	found - change default container name to directory that was scanned
	- tweak debug/log messages
      - enhance file utils and dir utils - add optional stats struct to
	netsnmp_file - generalize dir container filter, add context to
	callback - add option to store netsnmp_files (w/stats) in container
	instead of just name
      - fix potential double free in CONTAINER_FREE - also added several
	compare routines
      - netsnmp_container enhancements: - add free_item function; defaults
	to netsnmp_container_simple_free - add CONTAINER_FREE_ALL
	macro/function (like CONTAINER_CLEAR but calls container free_item
	for each item in primary container) - add ability to set options on
	binary_array containers
      - new certificate api to support tls/dtls
      - new snmp token logOption allows specifying log destinations vi conf
	files - if stderr log enabled because of no log destination, turn
	it off when a log destination is enabled - don't call
	netsnmp_enable_stderrlog() from apps anymore
      - obsoleted NETSNMP_DS_LIB_ALARM_DONT_USE_SIG. From now on using
	SIGALRM to trigger Net-SNMP alarm handlers is no longer supported.
	Motivation: as known libnetsnmp supports time-based alarms via the
	functions snmp_alarm_register(), run_alarms() and other functions.
	Two different ways to trigger the function run_alarms() are
	supported inside libnetsnmp: 1. By making sure that the timeout
	argument of select() is small enough such that select() returns
	before the next alarm must be handled (when the variable
	NETSNMP_DS_LIB_ALARM_DONT_USE_SIG is set to one, which is the
	default). 2. By making sure that the kernel fires SIGALRM at the
	time when run_alarms() should be called (when the variable
	NETSNMP_DS_LIB_ALARM_DONT_USE_SIG is set to zero, which has to be
	configured explicitly). The following issues are associated with
	the second approach: 1. Alarm functions are used inside Net-SNMP to
	e.g. refresh cached table contents. As far as I can see there is
	nothing in the Net-SNMP source code that prevents the following
	from happening: a table refresh triggered via SIGALRM while a row
	is being removed from a cached table. This can result in dangling
	pointer dereferences and even a crash. 2. POSIX restricts signal
	handlers to calling functions that are either reentrant or
	non-interruptible
	(http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02
	_04.html#tag_02_04). Standard I/O functions like printf() and
	fprintf() are neither reentrant nor non-interruptible. run_alarms()
	is called from inside a signal handler, which means that this
	restriction applies to the function run_alarms() itself and all
	functions called by it (which includes the alarm callback
	functions). Or: e.g. snmp_log() and its callers must not be called
	from inside run_alarms() when this function is invoked from inside
	a signal handler. This is a severe restriction, and one that is
	hard to work with. 3. Not all software developers know how to make
	sure that signal delivery works correctly in a multithreaded
	context. POSIX does not guarantee to which thread a signal like
	SIGALRM will be delivered, unless that signal has been blocked
	before thread creation and is unblocked after thread creation (see
	also
	http://www.opengroup.org/onlinepubs/009695399/functions/pthread_sig
	mask.html). This is relevant for the Net-SNMP project not only
	because a worker thread is created inside
	agent/mibgroup/if-mib/data_access/interface_linux.c but also
	because libnetsnmp is often used inside multithreaded software.
	Currently no attempt is made to make sure that SIGALRM is processed
	by the Net-SNMP event processing loop thread. If SIGALRM is
	processed by another thread, this will result in one or more data
	races. Because all the difficulties associated with processing
	alarms from inside a signal handler function, and because fixing
	these would require more effort than it is worth,
	NETSNMP_DS_LIB_ALARM_DONT_USE_SIG has been deprecated and from now
	on approach (1) is the only supported approach to trigger alarm
	handlers.
      - plit snmpIPBaseDomain and move the IPv4 parts to IPv4Base and the
	socket generic parts to SocketBase.
      - when freeing a cache, stop timer and call cache free func - also
	add netsnmp_cache_remove
      - new experimental simple state machine
      - new experimental simple state machine new experimental row creation
	API which uses a state machine to try really hard to create a row
	from a given varbind list
      - fix issue with USM using inactive users
      - fixed potential buffer overflow when generating temp. file names
      - implemented a fix for the issue reported in patch #3042770. Created
	a snmp_select_info_flags function, and similar, that allow for
	alarms to not be run. This is then used in the synch_response
	functions to avoid 100% CPU loops
      - patch: 3042770: from mehaf: Made run_alarms() reentrant
      - when displaying a byte as single digit hex value, default to
	prefixing with 0 unless there is a seperator or addition hint data
      - 0 patch 3058645: from jorisesaturnus: modified version of the patch
	to use MSG_DONTWAIT for the unix domain socket
      - [PATCH 3067540]: Fix IPv4 OID indexes on 64-bit big-endian systems.

    snmplib, snmpd:
      - Do not check if values of type size_t are less than 0.
      - Make sure that a mask is given to open when O_CREAT is specified

    snmplib, snmpd, snmpnetstat:
      - Add correct size prefixes when printing variables of type oid.

    snmpd:
      - Add support of network interfaces with HW address bigger than 6
	bytes to ipNetToMediaTable and ipNetToPhysicalTable. Some HW, like
	InfiniBand, uses HW addresses with 9 and more bytes. Snmpd on Linux
	was not able to parse /proc/net/arp then and produced ugly 'ioctl
	35123 returned -1' to log.
      - Check the range of oid values towards the maximum oid value,
	notULONG_MAX
      - Extract the Exit and restart* subroutines from util_func in order
	to make it possible to build less code for the minimal case.
      - Fixed creation of views using snmpusm, OIDs with indexes > 255 are
	allowed now. This reverts SVN commit #7492.
      - Fixed invalid access to memory in TCP-MIB This partly reverts patch
	17719 - the entries *are* used after raw_data container is freed.
	These entries should be freed when associated rowreq_ctx is freed.
      - Fixed logging of 'truncating integer value > 32 bits' in IP-MIB and
	TCP-MIB The counters, which grow fast are now cut to 32bits.
      - Fixed udpTable indexes on big-endian 64bit Linux. The index was
	always '0.0.0.0' instead of real local IP address.
      - Made subtree_context_cache::context_name a const char*.
      - Make all the oids and oid lengths in agent_trap.c const and use
	them from everywhere.
      - Make the enterprise argument of netsnmp_send_traps and
	send_enterprise_trap_vars const
      - Only enable hostSwInst rpm support on linux hosts with librpm. This
	makes it possible to build on non-rpm linux distributions.
      - Removed the unused function xx_tokenize_exec_command from
	utilities/execute.
      - [BUG 2822360]: Fix memory leak when building table OIDs
      - [BUG 2841008]: Protect against crash following failed AgentX
	response
      - [BUG 2873858]: Fix handling of schedOwner index. Patch provided by
	Max Schubert.
      - [BUG 2894059]: Handle errors when counting interfaces
      - [BUG 2897000]: Suppress 32-bit counter truncation warnings.
      - [BUG 2900078]: Add support for OID variables with size in elements
	instead of bytes, correct sysObjectID to use this.
      - [PATCH 2835576]: Fix endianness issues in pass/pass_persist
      - [PATCH 2877518]: Fix handling of scoped AgentX variables
      - [PATCH 2883092]: Support monitoring processes that should not be
	running. Patch provided by Christian (cg75). Qn: Should this
	functionality be back-ported to earlier lines?
      - [PATCH 2883220]: Fix compilation problems when ifXTable is not
	included.
      - [PATCH 2887816]: Protect against division-by-zero crash
      - [PATCH 2901029]: Fix compiler warning on CloseHandle() Endian
	problems already addressed by patch #2835576
      - [PATCH 2903092]: Fix broken handling of broadcast entries.
      - [PATCH 2911323]: Fix agent lockup when monitoring AgentX-delegated
	information
      - [PATCH 2911970]: Properly terminate linked list of registrations.
	Patch provided by Mirko Deckert.
      - [PATCH 2956657]: Handle over-length AgentX OIDs. Patch provided by
	Rob West
      - [PATCH 2967400]: Retrieve error counters for the EtherLike-MIB
	Patch supplied by Josef Moellers.
      - [PATCH 2968642]: Catch overflow of pass-through command buffer.
	Patch from Andreas Jaeger/Leonardo Chiquitto
      - agent will no longer call table handlers if a set request for the
	handler has invalid indexes
      - agent will no longer call table handlers if a set request for the
	handler has invalid indexes don't call cleanup on first request on
	bad indexes. instead, set actual error later, and free request data
	sets on first request for sets
      - define and use new NETSNMP_LOGONCE macro
      - fix crash in IF-MIB and IP-MIB when there are some interfaces with
	broadcast IP address and some without. Reset the bcastentry in the
	loop, so it cannot be inserted to the twice. Without this patch,
	when an interface without broadcast address is processed, the
	bcastaddress from previous loop is inserted into the container.
	This obviously fails and the bcastentry is freed, but the container
	still contains reference to it -> SIGSEGV.
      - fix memory leak in ipAddressPrefixTable -
	net_snmp_search_update_prefix_info returns different code, when the
	entry was not inserted to list and can be freed.
      - fix rare race condition when reading RPM database. Old rpm versions
	return NULL instead of Header when another RPM instance holds
	database locks. I.e. snmpd sometimes crashes when reading hr_swInst
	and rpm is installing/updating/removing another package. As a
	solution, whole RPM cache is thrown away and re-read when we got an
	error from librpm. The whole process is restarted only three times,
	to prevent endless loop.
      - fixed a memory leak in TCP-MIB.
      - fixed filedescriptor leak in Etherlike-MIB and RMON-MIB
      - fixed memory leak when reading sensors for LM-SENSORS-MIB.
      - fixed one leak-at-exit.
      - include local port number in packet dumps. An example: Received 36
	byte packet from UDP: [127.0.0.1]:53909->[127.0.0.1]:1161 0000: 30
	22 02 01 01 04 06 70 75 62 6C 69 63 A1 15 02 0".....public... 0016:
	04 37 F2 D4 9B 02 01 00 02 01 00 30 07 30 05 06 .7.........0.0..
	0032: 01 01 05 00 .... Received SNMP packet(s) from UDP: GETNEXT
	message -- ccitt.1 Sending 118 bytes to UDP:
	[127.0.0.1]:53909->[127.0.0.1]:1161 0000: 30 74 02 01 01 04 06 70
	75 62 6C 69 63 A2 67 02 0t.....public.g. 0016: 04 37 F2 D4 9B 02 01
	00 02 01 00 30 59 30 57 06 .7.........0Y0W. 0032: 08 2B 06 01 02 01
	01 01 00 04 4B 4C 69 6E 75 78 .+........KLinux 0048: 20 61 73 75 73
	20 32 2E 36 2E 33 33 2E 32 2D 73 asus 2.6.33.2-s 0064: 63 73 74 20
	23 31 20 53 4D 50 20 50 52 45 45 4D cst #1 SMP PREEM 0080: 50 54 20
	53 61 74 20 41 70 72 20 33 20 32 31 3A PT Sat Apr 3 21: 0096: 31 30
	3A 35 38 20 43 45 53 54 20 32 30 31 30 20 10:58 CEST 2010 0112: 78
	38 36 5F 36 34 x86_64
      - made sure that handler registration failure does not create
	dangling pointers in the MIB subtree registry.
      - report real ifSpeed of network interface even it is down. Some
	interfaces can report their real speed, even they are down. And if
	they can't, the fallback to 10Mbps is still there.
      - table_data/tdata next handler will not be called during get
	processing if no valid rows are found for the handler
      - tdata helper now saves flags passed during creation; add tdata flag
	to NOT create the table container
      - translate NOSUCH*/ENDOFMIB errors during RESERVE1 to NOCREATION
      - utilities/execute do not need anything from util_funcs, so stop
	depending on it.
      - fixed value of IP-MIB::ipv6InterfaceForwarding on Linux   The value
	was 0 (not forwarding) or 1 (forwarding), should be 2 and 1 instead
	- netsnmp_interface_entry.forwarding_v6 is boolean, not TruthValue.
      - new API for indicating that persistent store needs to be saved
	after the current request finishes processing
      - [BUG 3003981]: Protect against buffer overflow
      - [BUG 3019243]: Register execFix compatability directive correctly.
      - patch 2912520: from listom: Free kmem references on shutdown
      - patch: 3028923: from jenso: new copy of the bridge-mib perl
	implementation
      - report gfs filesystems in hrStorageTable and hrFSTable.
      - [PATCH 2904900]: Documentation plus assorted handler code fixes
      - [PATCH 2911361]: Documentation (Provided by Tomasz Lis)
      - [PATCH 2911361]: Re-order code to group related functions together
      - [PATCH 2911361]: Remove redundant variables
      - [PATCH 2931446]: make the load averages writable.
      - [PATCH 3044512]: fix sysobjectid directive.
      - patch 2790249: from willpwillp: reduce cache time for the iftable
	to 3seconds to increase accuracy
      - patch 2825653: from bru5ce: fix sendmail.cf parsing in certain
	conditions
      - Log before returning.
      - [PATCH 3053428]: fix get_pid_from_inode when the inode is not
	found.
      - [PATCH 3058140]: check that inode is non-zero
      - patch 3062526: from mariog85: fix security engineID setting in the
	trapsess directive

    snmpdlib:
      - new functions to make stash ptr and newrow available to
	table_dataset handlers nonews: fix typo; tabs to spaces; use sizeof
	instead of constant

    snmpdx:
      - changed default TCP target from 0.0.0.0:705 to localhost:705. This
	is not only a more secure choice but it also makes it possible on
	Windows systems to let an AgentX subagent connect to an AgentX
	master agent running on the same system without having to set the
	variable NETSNMP_DS_AGENT_X_SOCKET.

    snmptable:
      - [BUG 2837998]: Handle missing instance subidentifiers in results
      - [PATCH 2850067]: Suppress extraneous "index" header token Patch
	supplied by Dan Nelson

    snmpusm:
      - Prefer to use a variable of the right type over an ugly cast.
	Lessen the scope of the variable as well.
      - patch from Martin Bjorklund to add a -Cw option to use
	createAndWait for agents that are strict about not allowing a row
	to be set to active until the authentication password has been
	changed; plus white-space clean up, manual additions and help
	output modifications by hardaker
      - Correct ifdefs, remove dead variables.

    man:
      - clean up manual pages (from Debian patch 56_manpage)

    snmpwalk:
      - Handle the case when the end oid is longer than the current oid
	correctly

    apps:
      - Add command to send AgentX notify requests to a master agent.
      - Generic host-specific configuration snmp.conf files are now read.
	See the HOST-SPECIFIC FILES section of the snmp.conf manual page.
      - Only build agentxtrap if the agentx libraries are built. Add a test
	case for agentxtrap. The enablement/disablement is inspired by
	automake conditionals
      - T command line flag can be used to configure transports
      - A new 'snmptls' command for manipulating the agent's TLS configuration

    apps, snmplib:
      - [PATCH 2835577]: identified by "Bart Van Assche": Replace SNMP_ZERO
	of arrays with a memset.

    snmptranslate:
      - fixed printing of ranges with UNSIGNED type.

    build:
      - [PATCH 2952020]: Explicitly set permission on temporary testing
	output directories. Patch provided by Leonardo Chiquitto.
      - run rpm configure checks for hr_swinst rewrite (rpm version only)
      - Do not call vacm_standard_views() or init_vacm_config_tokens() if
	the corresponding module was not compiled (from Debian patch
	61_vacm_missing_dependency_check)
      - Fix ipv6 generic case so test matches verification

    building:
      - 'make test TESTOPTS="-P tcp"' works fine now
      - 0 In case exec_prefix is unset then set it to '${prefix}' in order
	to pick up overrides of $prefix in make install.
      - Building Net-SNMP with dmalloc support enabled is again possible.
      - Do not link with libnetsnmphelpers any more as it is empty.
      - Fixed compilation with rpm-4.6. Turn on the legacy API when rpm-4.6
	is detected.
      - Introduced the variable 'with_socklib' in the configure script.
	This variable is set to "winsock2" for MinGW and to "default" for
	all other systems. Winsock2 tests are only run if this variable is
	set to "winsock2" (MinGW).
      - OS header detection check is now run before IPv6 stack detection.
      - Use AC_REPLACE_FUNCS to handle code that is missing on some
	platforms.
      - Use autoconf to decide if inet_ntop.c and inet_pton.c are to be
	compiled.
      - Use the same compiler command and flags for building of tests as
	for building of the code, thus enabling test of e.g. 32-bit code
	compiled on a 64-bit platform.
      - abort if the file program could not be found, since this is
	essential for proper operation of libtool.
      - added detection of lm_sensors version. I am not Autoconf guru, so I
	hope I got it right. The goal is to define NETSNMP_USE_SENSORS_V3
	*before* config_modules_agent processes
	agent/mibgroup/hardware/sensors.h.
      - made sure that the configure script does no longer invoke "tail
	-1", which is not POSIX-compliant.
      - save configure cache every once in while
      - update Version-Munge for renamed configure.ac
      - when generating a default value for the system location and no
	domain name is found in /etc/resolv.conf, use "@no.where" instead
	of "".
      - Add new test* entries from the testing Makefile.in to the top-level
	Makefile.in

    building, Win32:
      - Remove a few unused configure symbols

    hpux:
      - fix build error on HP-UX 10.20

    libnetsnmp:
      - Support for a stream-line stripped down version of internal OpenSSL
	support using --with-openssl=internal

    libnetsnmpagent, libnetsnmphelpers:
      - moved the functions netsnmp_bulk_to_next_fix_requests(),
	netsnmp_get_bulk_to_next_handler(), netsnmp_register_null(),
	netsnmp_register_null_context() and netsnmp_register_old_api() from
	libnetsnmphelpers to libnetsnmpagent. Notes: - This does not affect
	backwards compatibility for applications that link with
	$(net-snmp-config --agent-libs) since this involves linking with
	both libnetsnmphelpers and libnetsnmpagent. - Functions have been
	moved between libraries by moving entire source files.

    library:
      - [PATCH 2952140]: Overflow counter32 and gauge32 on 64bit systems
	correctly Patch provided by Leonardo Chiquitto

    libsnmp:
      - changed the type of the fourth argument of netsnmp_set_row_column()
	from const char* to const void* such that no cast is necessary when
	passing another datatype then char* or const char*.

    man:
      - [BUG 2972860]: Update broken references

    mib2c:
      - Remove unnecessary casts to u_char*
      - [BUG 2888569]: Fix generation of table columns array
      - mib2c can now optionally run sed on generated code
      - table_data template enhancements - add error checks during table
	init - create cache earlier so we can bail on failure - add option
	to create/delete row w/out adding/removing from container
      - update inline documentation; add storagetype test for columns

    mibs:
      - [BUG 2973890]: Fix imports, DiskIOEntry list and revision histories
      - patch 2974716: from bvassche: fix issues in the SMUX-MIB

    misc:
      - [PATCH 2836112]: Use the right modifier when printing size_t and
	ssize_t variables.
      - [PATCH 2952708]: Osterkamp: Added Perl implementation of BRIDGE-MIB

    perl:
      - NetSNMP::agent::netsnmp_request_infoPtr::getValue(): don't return a
	pointer to a buffer on the stack. How can this have worked reliably
	?? NetSNMP::agent::netsnmp_request_infoPtr::setValue(),
	ASN_COUNTER64: fixed bug that could cause this method to fail even
	when a valid number was provided.
      - [PATCH 2890931]: Better handling of Counter64 values. Patch
	provided by Max Romanov.
      - fixed a memory leak triggered by destroying a
	NetSNMP::agent::netsnmp_handler_registration object.
      - fixed a memory leak triggered by destroying a
	NetSNMP::agent::netsnmp_handler_registration object. fixed a memory
	leak triggered by failure of creating a NetSNMP::OID object.
      - fixed a memory leak triggered by destroying a
	NetSNMP::agent::netsnmp_handler_registration object. fixed a memory
	leak triggered by failure of creating a NetSNMP::OID object. fixed
	a memory leak triggered by the NetSNMP::OID::gettable() subroutine.
      - fixed a memory leak triggered by destroying a
	NetSNMP::agent::netsnmp_handler_registration object. fixed a memory
	leak triggered by failure of creating a NetSNMP::OID object. fixed
	a memory leak triggered by the NetSNMP::OID::gettable() subroutine.
	fixed an out-of-bounds array access triggered by the implementation
	of NetSNMP::SNMP. fixed a memory leak triggered by a PDU processing
	error in NetSNMP::SNMP. fixed memory leaks triggered by creating an
	SNMPv3 session via NetSNMP::SNMP. Also fixed the uninitialized
	variable accesses triggered by adding a varbind to a PDU via
	NetSNMP::SNMP introduced a few days ago. The bugs mentioned above
	have been found by inspecting the output of the following shell
	command: cd perl && valgrind --trace-children=yes --leak-check=full
	make test

    python:
      - [BUG 2919379]: Initialise SNMP sessions properly Provided by Diego
	Billi
      - [PATCH 2001656]: Handle null-termination of string values properly.
	Based on the principles of the patch from Tommy Beadle.
      - Support null-bytes in octet strings Patch supplied by Tommy Beadle
      - [PATCH 3035328]: from: sws: check the results of session creation
	for a failure case.
      - patch 3035578: from sws: keep error codes up to date

    testing:
      - Brand new test suite desigened to eventually test more
	functionality, provide for support of unit-tests and support of API
	tests
      - Change the test suite to work even if mib lookup is disabled.
      - Check the size of sun_path and use that to generate the maximal
	size strings for stressing com2secunix.
      - Make it possible to run the test suite from anywhere. Change the -D
	option to expect the path of the top source directory. Add an
	-srcdir option that is an alias for -D. Add an -builddir option to
	designate the directory where the test object is. Put srcdir and
	builddir in the environment for the test scripts Factor out the
	grep part of SKIPIF and SKIPIFNOT to ISDEFINED Use more readable
	keys in the opts hash in RUNFULLTESTS Adjust everything to use
	srcdir and builddir
      - Move the setting of MIBDIRS from the support script to the drivers
	since it is needed for the C tests as well.
      - Use olducd_run, not run_olducd. Change srcdir to refer to the top
	directory and not the testing subdirectory as that is what is
	expected in the test scripts.
      - add the test name to the start of the file "invoked".
      - made it possible to analyze all code covered by the regression
	tests with a dynamic analyzer, at least if that analyzer supports
	following child processes. An example:	 rm -rf /tmp/snmp-test-*
	make -s SNMP_SAVE_TMPDIR=yes DYNAMIC_ANALYZER="valgrind
	--trace-children=yes --track-origins=yes" make -s test grep -i
	uninitialised /tmp/snmp-test-* | xargs less

    unspecified:
      - Change the types of the return values of netsnmp_*_getSecName from
	char* to const char* since they point into internal structures.
      - Hide most functions and variables in the logmatch module. Cleaned
	up the header accordingly. Remove the need for forward declarations
	by reordering the functions.
      - Make the lists of com2Sec*Entries static
      - [BUG 2838243]: Correct the output of unsigned values. Thanks to
	Jack Huang of Qualcomm who pointed out this bug.
      - [BUG 2969872]: made sure that SOCK_STARTUP is invoked before
	init_agent() on Windows.
      - [BUG 2971257]: Fixed winExtDLL handling of multi-varbind getNext
	requests with OIDs in reverse lexicographical order.
      - [PATCH 2926374]: from Ed Swierk: fixed reading of ipAddressTable
	from /proc/net/if_inet6 on Linux The kernel might provide longer
	fields, especially on 64-bit systems.
      - [PATCH 2952034]: Return of the Great SuSE 'sprintf' Hunt... Patch
	supplied by Leonardo Chiquitto
      - add functions to get fingerprint from cert and log openssl errs
      - added a new DEBUGTRACETOK() macro
      - correctly calculate ifXTable.ifHCInUcastPkts on 32-bit Linux Linux
	does not provide standalone counter for incoming unicast packets
	(iucast) - it provides counter of all packets (iall) + separate
	counter for the multicast ones (imcast). Previous implementation of
	ifTable read these counters and calculated iucast = iall - imcast
	*before* these values were expanded into 64bits. This produced
	errors on 32bit systems when iall overflowed to zero and imcast was
	nozero -> iucast got negative and 'c64 32 bit check failed' error
	in snmpd log. Now the agent expands these values to 64bits first
	and *	  *then* performs    the calculation, using a new flag. 
	2010-05-27 08:18  magfr
      - fixed memory leak in RMON-MIB and ETHERLIKE-MIB when there are
	multiple aliases of an network interface Rationale: the aliased
	interfaces have the same ifIndex -> CONTAINER_INSERT fails, but the
	rejected entry was not freed.
      - generate the transport initialization function list dynamically and
	use it
      - moved all functions defined in libnetsnmphelpers to
	libnetsnmpagent. libnetsnmphelpers is now an empty library.
      - moved transport code into a separate subdirectory in snmplib
      - [BUG 3027900]: when cross-compiling it is now assumed that memcmp()
	is available instead of assuming that it is not available.
      - Do no double declare the index values.
      - Handle embedded %'s in the result message.
      - ilence some compilation warnings from test cases.

    Cygwin:
      - IPv6 is only supported under Cygwin 1.7 or later. The old
	implementation of IPv6 support in Net-SNMP under Cygwin involved a
	strange mixture of Cygwin and Winsock2 socket calls, which was too
	hard to maintain.
      - IPv6 is only supported under Cygwin 1.7 or later. The old
	implementation of IPv6 support in Net-SNMP under Cygwin involved a
	strange mixture of Cygwin and Winsock2 socket calls, which was too
	hard to maintain. builds again with IPv6 support enabled
	(--enable-ipv6). At least Net-SNMP 5.5 doesn't build under Cygwin
	with IPv6 support enabled. The configure script reported "checking
	ipv6 stack type ... result: "unknown, no" ... error: IPv6
	transports not available if IPv6 support is not enabled".
      - [BUG 2939168]: byte order of udpLocalPort is now correct.
      - [BUG 2939168]: fixed test infrastructure ("make test"). This has
	been fixed by using the proper environment separator character and
	by adding the path of the netstat executable for Cygwin in
	testing/TESTCONF.sh.
      - abort if the file program could not be found, since this is
	essential for proper operation of libtool. neither compile nor link
	winpipe.c.
      - building with another OpenSSL package than the Cygwin-provided
	packages openssl and openssl-devel is again possible.
      - builds now also when the source files are located on a Samba
	filesystem instead of a local filesystem.
      - enabled Unix transport. (Forward-ported r18687 from the V5.5
	branch).
      - libnetsnmp does now build as a DLL when configured with
	--enable-shared.
      - libnetsnmp does now build as a DLL when configured with
	--enable-shared. perl modules do now build (--with-perl-modules).
	Note: the T060trapdperl_olducd, T061agentperl_olducd and
	T115agentxperl_olducd tests still fail.
      - libnetsnmpmibs, libnetsnmphelpers and libnetsnmpagent do now build
	as a DLL when configured with --enable-shared.
      - perl: building the Perl modules with the Cygwin Perl package is now
	possible. (Forward-ported r18688 from the V5.5 branch.)
      - the message "configure: WARNING: winsock.h: present but cannot be
	compiled" does no longer appear when running the configure script.
	Follow-up for r18050: re-enabled libiphlpapi and iphlpapi.h tests
	for non-MinGW platforms since the Cygwin build needs these.
      - corrected error handling in mibII/at.

    Linux:
      - Improved EtherLike-MIB support Patch supplied by Josef Moellers
      - builds again with embedded Perl disabled (bug 2985915).

    MinGW:
      - building with another OpenSSL package than the Cygwin-provided
	packages openssl and openssl-devel is again possible. building with
	OpenSSL works again.
      - running the regression test suite is again possible ('make test').
      - struct sockaddr_in6.sin6_scope_id configure test does now work.
      - winExtDLL compiles now under MinGW. building Net-SNMP works again.
	Detailed overview: * Changes in the configure script:
      - refuse to run the regression tests if kill.exe cannot be found.
      - run_shell_command() with either input or output (but not both) does
	now work. This did not work until now because on MinGW mkstemp()
	generates a MinGW-style path (/tmp/...) while system() invokes
	cmd.exe and hence expects a Windows-style path (C:\...).
      - testing: skip the tests that require SIGHUP since MinGW does not
	support SIGHUP.
      - tests T059 and T065 do now pass.
      - tests T110, T111, T112, T120, T121 and T122 do now pass when snmpd
	is built with winExtDLL support enabled.

    Solaris:
      - OS header detection check is now run before IPv6 stack detection.
	sockaddr_in6.sin6_addr configure test does now work.
      - Protect against missing package version information crashing the
	agent. Problem reported by Inyaven Sakarai.

    Win32:
      - Fix batch build using recent versions of Visual Studio. Partial
	back port of SVN revisions 17573 and 17696.
      - The header file <sys/timeb.h> is no longer included from
	<net-snmp/types.h>. Or: the header file <sys/timeb.h> will have to
	be included explicitly in source files that need the declaration of
	the function ftime(). Note: compared to r18024 and before, this
	change does not affect BSD systems -- <sys/timeb.h> was only
	included from <net-snmp/types.h> on BSD systems in revisions
	r18025..r18152.
      - added #include <malloc.h> in win32/net-snmp/net-snmp-config.h such
	that the MSVC compiler doesn't get confused by the malloc
	redefinition when building libsnmp as a DLL.
      - added the functions netsnmp_malloc(), netsnmp_calloc(),
	netsnmp_realloc(), netsnmp_strdup() and netsnmp_free(). snmplib:
	removed the troublesome #define malloc netsnmp_malloc etc. This
	means that when calling functions from the Net-SNMP DLL from C or
	C++ code that is being linked against another version of the MSVC
	runtime DLL than the Net-SNMP DLL, and when allocating memory that
	will be freed by the Net-SNMP DLL, you will either have to call the
	Net-SNMP memory allocation functions explicitly or redefine
	malloc() etc. yourself.
      - batch build: replaced the obsolete /GX by the equivalent /EHsc.
      - batch build: replaced the obsolete /GX by the equivalent /EHsc.
	batch build: added /D "_CRT_SECURE_NO_WARNINGS" /D
	"_CRT_NONSTDC_NO_WARNINGS" to make building with MSVC 2008 more
	silent.
      - batch build: replaced the obsolete /GX by the equivalent /EHsc.
	batch build: added /D "_CRT_SECURE_NO_WARNINGS" /D
	"_CRT_NONSTDC_NO_WARNINGS" to make building with MSVC 2008 more
	silent. batch build: removed /Fp... and /YX. These options
	influence how precompiled header files are generated, which are not
	used inside the Net-SNMP project. /YX is not supported by MSVC
	2008.
      - batch build: replaced the obsolete /GX by the equivalent /EHsc.
	batch build: added /D "_CRT_SECURE_NO_WARNINGS" /D
	"_CRT_NONSTDC_NO_WARNINGS" to make building with MSVC 2008 more
	silent. batch build: removed /Fp... and /YX. These options
	influence how precompiled header files are generated, which are not
	used inside the Net-SNMP project. /YX is not supported by MSVC
	2008. batch build: removed a duplicate occurrence of strtoull.obj.
      - building: Added libsnmp.def to the list of libsnmp_dll.dsp source
	files such that the DLL is rebuilt when the .def file has been
	modified.
      - building: building NetSNMP.pm does no longer trigger compiler
	warnings about redefining _WIN32_WINNT nor NTDDI_VERSION.
      - building: converted .dsp/.dsw files to .vcproj/.sln files. This
	implies that support for MSVC 6.0 has been dropped and the minimum
	Microsoft Visual Studio version required to build the Net-SNMP
	source code is Microsoft Visual Studio .NET (2002).
      - building: made building NetSNMP.pm more silent by adding the MSVC
	compiler flags -D_CRT_SECURE_NO_WARNINGS
	-D_CRT_NONSTDC_NO_WARNINGS.
      - building: made building more silent by not redefining malloc() or
	free() during compilation of Perl extensions (resulted in warnings
	about malloc() / free() redefinition in the Perl header
	CORE/XSUB.h).
      - building: renamed libsdll.dsw into win32dll.dsw.
      - building: renamed libsdll.dsw into win32dll.dsw. building:
	simplified linking the Net-SNMP applications with netsnmp.dll by
	adding all application projects to the same workspace that is used
	for building the DLL.
      - building: renamed libsdll.dsw into win32dll.dsw. building:
	simplified linking the Net-SNMP applications with netsnmp.dll by
	adding all application projects to the same workspace that is used
	for building the DLL. building: made building netsnmp.dll less
	error prone by letting the compiler print an error message if the
	preprocessor symbol NETSNMP_USE_DLL has not been defined.
      - building: simplified the build process by removing the file
	win32/libsnmp_dll/libsnmp.def.in. Which IPv6 functions are exported
	from netsnmp.dll is now determined by which of the functions in
	this DLL have been declared as NETSNMP_IMPORT.
      - building: simplified the procedure for building with SNMPv3 support
	enabled (OpenSSL).
      - changed the type of the fourth argument of netsnmp_set_row_column()
	from const char* to const void* such that no cast is necessary when
	passing another datatype then char* or const char*. changed
	in_addr_t from u_int to u_long such that it matches the datatype of
	sockaddr_in::sin_addr. Also, fixed several compiler warnings
	(mostly char * <> u_char * mismatches) and removed some casts.
      - declared all functions that are exported from the Net-SNMP DLL as
	NETSNMP_IMPORT. The result is a minor optimization: code that uses
	the Net-SNMP DLL will now call the DLL-exported functions directly
	instead of indirectly via the stub in the import library.
      - exported netsnmp_read_module() from netsnmp.dll such that
	NetSNMP.pm builds again.
      - exported netsnmp_set_line_buffering() from netsnmp.dll.
      - libsnmp builds again as a DLL when IPv6 is enabled.
      - perl: fixed several "Free to wrong pool" errors. Note: since
	calloc() is not redefined in <CORE/XSUB.h> using calloc() directly
	or indirectly leads to "Free to wrong pool" errors, at least on
	Windows.
      - winExtDLL: don't trigger a netsnmp_assert() when no extension DLLs
	have been loaded.
      - winExtDLL: fixed a bug in getNext handling that could cause the MIB
	output to be truncated.
      - winExtDLL: multiple varbind set requests are now processed
	correctly.
      - winExtDLL: multiple varbind set requests are now processed
	correctly. winExtDLL: made error codes in SNMP response PDUs as
	RFC-compliant as possible.
      - winExtDLL: multiple varbind set requests are now processed
	correctly. winExtDLL: made error codes in SNMP response PDUs as
	RFC-compliant as possible. winExtDLL: if loading an extension DLL
	fails, the reason why loading failed is now logged.
      - winExtDLL: multiple varbind set requests are now processed
	correctly. winExtDLL: made error codes in SNMP response PDUs as
	RFC-compliant as possible. winExtDLL: if loading an extension DLL
	fails, the reason why loading failed is now logged. winExtDLL:
	fixed a memory leak that occurred when SnmpExtensionQuery(Ex)
	failed. This memory leak has been found via source reading. Note:
	it is not clear whether it was possible to trigger this memory
	leak. This leak is certainly not triggered by every request for
	which a response with non-zero error status is sent back.
      - Suppressed "implicit cast from int to u_char" warnings generated by
	MSVC.
      - made sure that accessing the mibII interfaces table does not
	trigger out-of-range array accesses (was detected by
	BoundsChecker).
      - Fix build under MinGW back/forward port of revision 18631



*5.5*

    snmplib:
      - [BUG 1171904]: fix recvfrom hangs (already closed)
      - [BUG 1345296]: fix recvfrom hangs (already closed)
      - [BUG 1600171]: Support longer community strings in VACM config.
      - [BUG 1619827]: improve handling of link dependencies
      - [BUG 1660061]: Validate engineIDs more strictly.
      - [BUG 1795840]: Signed 32-bit truncation logged as debug message
      - [BUG 1866655]: Handle parsing invalid OID subidentifiers
      - [BUG 1898198]: Avoid a segfault when parsing broken mibs.
      - [BUG 1958041]: Ensure IDs are not truncated.
      - [BUG 1976772]: Changed mib parser to handle long binary/hex strings.
      - [BUG 2001124]: Allow embedded NUL characters in usmUserPublic
      - [BUG 2027834]: Extend string print buffer by the minimum necessary.
      - [BUG 2099985]: Added const qualifiers to time conversion routins
      - [PATCH 2827722]: Improve strtoull to be less MSVC-specific
      - [BUG Coverity #183]: fix memory leak if IP_PKTINFO fails
      - [PATCH  700681]: limited support for UDPv4 broadcast addresses
      - [PATCH 1548670]: Fix range checks for unsigned integers
                         (Debian bug #383380)
      - [PATCH 1592706]: Fix memory leak when cloning varbinds.
      - [PATCH 1616912]: fix memory leak in snmp_udp_transport
      - [PATCH 1620424]: Honor NETSNMP_DS_LIB_DEFAULT_PORT over the default system
      - [PATCH 1627049]: New API to handle large numbers of file descriptors.
      - [PATCH 1634620]: Fix leaks from create_user_from_session failure.
      - [PATCH 1640114]: Don't store trailing null character.
      - [PATCH 1641895]: Extend short view masks (as per RFC specs)
      - [PATCH 1641972]: add missing const
      - [PATCH 1642071]: Don't fiddle with the storage of pre-existing users.
      - [PATCH 1645698]: fix 64-bit signed integer encoding
      - [PATCH 1653670]: Consistent SNMPv3 behaviour when opening sessions.
      - [PATCH 1665543]: Handle VACM checks correctly.
      - [PATCH 1681030]: Better handling of empty apptype configs.
      - [PATCH 1681977]: Add callbacks prior to reading config.
      - [PATCH 1687316]: Don't drop const from casts.
      - [PATCH 1687317]: Remove an unused local variable
      - [PATCH 1687318]: Make _sess_selpol_info static.
      - [PATCH 1687319]: Declare snmp_sess_read_extd()
      - [PATCH 1687325]: Fix problem with operator precedence.
      - [PATCH 1687337]: Implement _sess_open in terms of snmp_sess_add
      - [PATCH 1728247]: Clean up int64 type checking and usage for building packets
      - [PATCH 1737085]: fix the -M switch for mib parsing vs defaults
      - [PATCH 1768285]: Count MIB files correctly in add_mibdir()
      - [PATCH 1775124]: Fix clientaddr functionality
      - [PATCH 1806336]: fix -LS option parsing
      - [PATCH 1807489]: fix ignoring of display hints.
      - [PATCH 1811469]: read_config_files_in_path() reads past malloc'd buffer
      - [PATCH 1875022]: improve callback locking mechanisms
      - [PATCH 1882069]: Add token for specifying an exact SNMPv3 engineID
      - [PATCH 1895927]: change obsolete recv/send to recvfrom/sendto
      - [PATCH 1898204]: Avoid a segfault when parsing broken mibs.
      - [PATCH 1916840]: new config option to set SNMPv1 trap agent address
	[PATCH 1916840]: introduce netsnmp_gethostbyname_v4
      - [PATCH 1921861]: Avoid endless loop after truncating 64bit int
      - [PATCH 2003450]: Fix a couple of 64-bit problems.
      - [PATCH 2043018]: fix recvfrom hangs
      - [PATCH 2258229]: Remove misleading comment
      - [PATCH 2479700]: Fix zoned IP address used as table indices
      - [PATCH 2492377]: Fix typo/bug in snmp_enable_callback()
      - [PATCH 2505488]: Fix alarms not triggered due to large clock skews.
      - [PATCH 2538169]: Prevent infinite retries for an invalid error-index.
      - [PATCH 2689362]: Fix handling of IPv6 hostnames.
      - [PATCH 2713841]: Fix runtime errors triggered by high-ASCII chars
      - [PATCH 2772787]: Cleaner approach to handling large fd_sets.
      - [PATCH 2780411]: Fix compiler warnings
      - [FEATURES  454028]: Detect empty MIB index files.
      - [FEATURES  851887]: Report range information for invalid SET requests.
      - [FEATURES 1041888]: Check directory paths for config files.
      - [FEATURES 1407476]: Rename 'strictCommentTerm' to reflect actual behaviour.
      - Add GCC format checking attributes to the debug functions.
      - Add iterator for singly linked lists
      - Correct MAX_ENGINEID_LENGTH to 32 (as per SnmpEngineID TC)
      - Correct registration of multiple premib config handlers.
      - Deallocate various resources in shutdown_mib
      - Do not leak memory whenever an udp address is formatted.
      - Do not try to look up empty strings as hostnames for IPv6
      - Fix forwarding encoding
      - Fix potential buffer overflow in sprintf for UDP/IPv6
      - Handle mapping complex transport strings to simple name definitions
      - Hardcode default port numbers (rather than use getservbyname)
      - Implement RFC5343 contextEngineID probing.
      - Improve CONTAINER_INSERT handling of partial failure with multiple indexes
      - Improve netsnmp_watcher_info to handle statically allocated data.
      - Introduce printf-like versions of config_perror and config_pwarn
      - Library layering improvements
      - Read def{Target,Domain} from snmp.conf as well as <app>.conf
      - rename MIB macro to NETSNMP_MIB2_OID, MIB is too generic and may
	conflict with applications.   The old MIB macro is kept for
	backward compatibility, unless NETSNMP_NO_LEGACY_DEFINITIONS is
	defined.

    snmpd:
      - [BUG  902610]: Don't discard pending data following a TRAP.
      - [BUG  902801]: Fix ordering of SMUX-registered subtrees.
      - [BUG 1046327]: Reset "includeAllDisks" flag when reloading.
      - [BUG 1102058]: Skip non-mounted disks (e.g. swap partitions)
      - [BUG 1397895]: include missing interface declarations
      - [BUG 1400101]: remove deleted interfaces from ifTable
      - [BUG 1413728]: Reference index values in debug output correctly.
      - [BUG 1416276]: Handle dependency on MIB parsing API.
      - [BUG 1546817]: Fix snmpEnterprise varbind when forwarding v1 traps.
      - [BUG 1558823]: fix ipAddressTable memory leak
      - [BUG 1600261]: Handle non-x86 /proc/cpuinfo format
      - [BUG 1600432]: Handle signals properly when restarting the agent.
      - [BUG 1602286]: Don't let table holes block later rows.
      - [BUG 1628613]: Restore memTotalFree.0 on Solaris
      - [BUG 1633595]: Fix AgentX handling of Counter64 values
      - [BUG 1677063]: Check for failed malloc calls.
      - [BUG 1685067]: More precise handling of SNMPv3-admin MIB tables.
      - [BUG 1685081]: Check for valid OID on Free/Undo passes.
      - [BUG 1693039]: be silent when insert fails.
      - [BUG 1712988]: default/configurable max # varbinds returned by GETBULK
      - [BUG 1745113]: Handle single-line output in UCD compatability mode.
      - [BUG 1748206]: Protect against failures to open /etc/mtab (or equiv)
      - [BUG 1758212]: Handle missing variable types (IpAddress,Counter,Opaque)
      - [BUG 1760633]: fix typo in debug message
      - [BUG 1771221]: Retain ifLastChange information on data reload.
      - [BUG 1792890]: include CIFS mounts when skipping remote filesystems
      - [BUG 1822360]: Fix spinlock helper error handling.
      - [BUG 1912647]: Fix memory leak following failed requests.
      - [BUG 1931391]: Fix reporting of Memory buffers and cached memory.
      - [BUG 2001124]: Allow embedded NUL characters in usmUserPublic
      - [BUG 2003144]: Increase size of AgentX packet build buffer
      - [BUG 2006786]: Interface name can have more than 8 characters.
      - [BUG 2018031]: Don't probe engineID in internal monitor sessions.
      - [BUG 2693670]: Don't open (& clobber) AgentX socket if other transports fail
      - [BUG 2822355]: Fix memory leaks on udpEndpointTable (linux) Patch
	supplied by Frank Lichtenheld
      - [PATCH 1225440]: Delay sighup till it is safe.
      - [PATCH 1257347]: Non-fixed size connection buffer
      - [PATCH 1550730]: Report errors from iterator-based handlers.
      - [PATCH 1585146]: Extend range of available error codes
      - [PATCH 1595568]: fix delegated SET requests from agentx subagents
      - [PATCH 1601188]: Handle signals properly when restarting the agent.
      - [PATCH 1601453]: Dynamic Memory failure handling improvements
      - [PATCH 1617255]: fix length of the history array to match code.
      - [PATCH 1620424]: Fix default port for sending notification
      - [PATCH 1625069]: speed improvements for solaris routing table access
      - [PATCH 1639282]: Save persistent snmpTargetParamsTable settings correctly.
      - [PATCH 1639726]: Report physical memory correctly on *BSD
      - [PATCH 1641332]: Include missing agent config definitions.
      - [PATCH 1641685]: Handle unresponsive AgentX subagents more reliably.
      - [PATCH 1641865]: Don't double check snmpTrapOID in the filter table.
      - [PATCH 1642255]: Handle saving long snmpNotifyFilterTable entries.
      - [PATCH 1644280]: Don't automatically probe for v3 EngineIDs.
      - [PATCH 1644280]: Use the correct engineID when sending v3 traps.
      - [PATCH 1644714]: replace last use of deprecated copy_word by copy_nword
      - [PATCH 1654424]: Handle row deletion issues in dataset tables
      - [PATCH 1657741]: Handle 64-bit types via pass mechanism.
      - [PATCH 1659623]: Handle SMUX peers with an empty password.
      - [PATCH 1665543]: Handle VACM checks correctly.
      - [PATCH 1665549]: Handle creating VACM entries correctly.
      - [PATCH 1665985]: Implement ipReasmTimeout
      - [PATCH 1666737]: include IPv6 traffic in various UDP counters.
      - [PATCH 1668193]: Fix check for v6 ReasmMaxSize support.
      - [PATCH 1668193]: Update registration of ReasmMaxSize support.
      - [PATCH 1668952]: Ignore zombie processes.
      - [PATCH 1669048]: Add support for ipv6InterfaceIdentifier
      - [PATCH 1676478]: fix udpEndpointRemoteAddress
      - [PATCH 1678301]: Deallocate domain registry at shutdown
      - [PATCH 1678305]: Deallocate cache in hardware/cpu/cpu on shutdown
      - [PATCH 1678306]: Deallocate log in notification-log-mib/notification_log
      - [PATCH 1678788]: Better handling of SMUX socket descriptors.
      - [PATCH 1681043]: clean up helper includes
      - [PATCH 1683054]: set udpEndpointInstance to identify different processes.
      - [PATCH 1687336]: Start using the enhanced read_config interface
      - [PATCH 1692768]: Fix copying of non-octet-aligned IP address prefixes.
      - [PATCH 1692817]: Improved RFC 4293 support (inc. non-unicast/random IP addresses)
      - [PATCH 1698184]: Register non-default context integers as writable.
      - [PATCH 1700157]: Fix ordering of exec tokens in MIB output
      - [PATCH 1700730]: Remove unused extern declaration.
      - [PATCH 1700732]: Fix debug output statements.
      - [PATCH 1700737]: Tidy up setSerialNo implementations.
      - [PATCH 1702361]: Read stats from /proc/net/snmp6
      - [PATCH 1702366]: Support for icmpStatsTable
      - [PATCH 1703004]: Consolidate snmp6 handling.
      - [PATCH 1710632]: fix memory leak on broken container insertions for the ipAddressTable
      - [PATCH 1715395]: fix icmp table errors in new icmp code
      - [PATCH 1715406]: registration ordering fixes for icmpStatsTable
      - [PATCH 1716548]: Fix help output so no space is printed between -D and arguments.
      - [PATCH 1719253]: fix skipNFSInHostResources for multiple walks
      - [PATCH 1721096]: remove unused variable stats from kernel extraction for better portability.
      - [PATCH 1723611]: New implementation of the RMON alarmTable
      - [PATCH 1729629]: Fix memory leak in disman agent.
      - [PATCH 1737439]: automatic link up/down traps on a walk
      - [PATCH 1744157]: Report duplicate "extend/exec" identifiers.
      - [PATCH 1746831]: fix process checking race condition under Linux and platform #ifdefs
      - [PATCH 1752934]: Fix off-by-one qsort error in table utilities.
      - [PATCH 1753437]: Fix error index on failing SET requests
      - [PATCH 1753449]: Fix AgentX error propagation
      - [PATCH 1753463]: Fix AgentX subagent ping alarm handling
      - [PATCH 1758208]: Fix memory leak
      - [PATCH 1783733]: Put the package version number into the hrSWInst table for solaris.
      - [PATCH 1784747]: Fix long usage for ip adresses on 64 bit systems in various MIB-II tables.
      - [PATCH 1797111]: implement IP-MIB::ipIfStatsTable
      - [PATCH 1804445]: High order bits of HCInOctets not set on Solaris
      - [PATCH 1806501]: Add API for sending traps with a snmpv3 context
      - [PATCH 1823465]:  fix icmp cache registration
      - [PATCH 1823800]: release and reload all trap destinations on SIGHUP
      - [PATCH 1826088]: Use the right interface to read the netmask
      - [PATCH 1828839]: to provide better handling of disks mounted on paths with embedded spaces
      - [PATCH 1849903]: do not spam log with asserts when XEN is used
      - [PATCH 1866823]: truncate 32 bit counter values on 64 bit machines to avoid bogus warnings.
      - [PATCH 1879261]: Add in inactive memory to the cached report for freebsd
      - [PATCH 1882621]: Add LVM support to the partition table
      - [PATCH 1893468]: fixed registration of OIDs with ranges
      - [PATCH 1901764]: for supporting logwatch files that are date based
      - [PATCH 1909813]: fix table_iterator handling of SORTED hint
      - [PATCH 1916840]: new config option to set SNMPv1 trap agent address
      - [PATCH 1944581]: Protect against core dumps with long string index values.
      - [PATCH 1967194]: Recognise NFS4 mounts
      - [PATCH 1977439]: Fix pass/_persist bug with SET oid value
      - [PATCH 1995753]: minor cleanup agent/auto_nlist.c
      - [PATCH 2012402]: don't fail on failure to look up interface error counters.
      - [PATCH 2014204]: Support -g {groupname}
      - [PATCH 2022936]: Fix AgentX Counter64 decoding on 64-bit architectures
      - [PATCH 2082726]: correctly report NIC speeds higher than 4Gbit/s
      - [PATCH 2103492]: implement RMON-MIB::etherStatsJabbers
      - [PATCH 2124288]: Fix setting of usmUserPrivProtocol at creation.
      - [PATCH 2162652]: patch to fix simple hrfs checks when NFS is in use.
      - [PATCH 2384779]: Fix handling of GetBulk with N>0,M==0
      - [PATCH 2406378]: Fix hrSWRunPerfMem on 64-bit Solaris systems
      - [PATCH 2431353]: Make some C++ compilers happier
      - [PATCH 2435681]: Enable if-mib rewrite (with sysctl backend) on NetBSD
      - [PATCH 2435793]: Support 64-bit IF-MIB counters on sysctl (*BSD) system.
      - [PATCH 2449210]: add 64-bit disk usage statistics to UCD-SNMP-MIB::dskTable
      - [PATCH 2564552]: provide libnetlink support for loading the tcp table
      - [PATCH 2686280]: Report duplicate registrations as an error
      - [PATCH 2791417]: fix snmpd segfault when run with -DALL Patch
      - [PATCH 2822337]: Fix memory leak in ipAddressPrefixTable
      - [FEATURES 1019429]: Set supplementary groups via initgroups(3)
      - Add missing function declarations & include files.
      - Add support for a user provided length variable
	   and C string values to the watcher helper.
      - Allow "monitor" to handle negative threshold values.
      - Automatically reregister sysORTable entries from AgentX subagents.
      - Clean up notification registrations during Event MIB cleanup
      - Enforce the lower limit on scalar_groups
      - Fix CVE-2008-4309 (GETBULK issue reported by Oscar Mira-Sanchez)
      - Fix memory leak when multiple interfaces have the same IPv6 address
      - Fix two bugs with smux password support.
      - Handle device names with embedded spaces in UCD-SNMP-MIB::dskDevice
      - Implement ipNetToPhysicalLastUpdated
      - Implement ipAddressSpinLock
      - Improve efficiency of scalar_group helper.
      - Improve parsing of -LS command line argument
      - Register CPU/memory hardware modules with nsCacheTable.
      - Reimplementation of LM-SENSORS-MIB
      - Reimplementation of snmpMPDStats.
      - Reimplementation of usmStats.
      - Remove unused variables.
      - Suppress annoying "registration != duplicate" warning for root oids
      - Unify all snmpd statistic variables with a common handler.
      - Use the worker helpers from the register_*_instance helpers and
	schedule the instance helpers for removal in 5.6
      - Use static watcher_info for all watched variables and in int_watch.
      - fix possible crash when 64-bit counters in ipSystemStatsTable get
	bigger than 2^32

    snmptrapd:
      - [BUG 1638225]: Fix interpretation of transport address data.
      - [BUG 1955227]: Memory leak for embedded Perl on x86_64
      - [PATCH 1746992]: Improve snmptrapd access-control error messages.
      - [PATCH 1767725]: Close all non standard file handles
      - [PATCH 1908288]: Run perl END block on termination
      - [PATCH 2726302]: Pass results of Perl trap handlers to trap daemon
      - [PATCH 1225440]: Delay sighup till it is safe.
      - [FEATURE  741375]: Extend -F flag to cover syslog/execute format strings.
      - [FEATURE 1159947]: Allow control of traphandle data format
      - Add trap handler for logging traps to a mysql database
      - Support for forwarding traps by OID subtree.
      - Support per-trap format specifications
      - Withdraw deprecated options.

    apps:
      - [BUG 1964136]: Drop NULL type from snmpset usage message.
      - [BUG 2811577]: Fix bug in GetBulk handling. Don't get confused by
	index values that contain a ':' character.
      - [PATCH 1529523]: Close SNMP session on failure.
      - Improve parsing of -LS command line argument

    snmpnetstat:
      - [PATCH 2564538]: Support GETBULK in v2c+ snmp versions

    snmpusm:
      - [PATCH 1591355]: Allow cloning to arbitrary engineIDs

    snmpwalk:
      - [PATCH 1723620]: Specify an explicit end-point for the walk.

    build:
      - [BUG 1096166]: Handle --without-logfile correctly.
      - [BUG 1567324]: Clarify prompting for user-supplied values.
      - [BUG 1600093]: autoconf 2.60 breaks the build
      - [BUG 1647976]: Cygwin/MinGW Windows build fails due to libtool error
      - [BUG 1707469]: Win32: snmpv3-security-includes.h not installed
      - [BUG 1802833]: Ensure snmptrapd builds with --disable-snmpv1/2c
      - [BUG 1823381]: Use a sensible default MIBDIR path on Cygwin/MinGW
      - [BUG 1823381]: Valid MIB directory search path on Windows
      - [BUG 1872266]: PERLCC check fails for CC with options
      - [BUG 1995172]: fix --without-elf configure usage message
      - [BUG 2014526]: Win32: snmpv3-security-includes.h not installed
      - [BUG 2023803]: Compilation problems on HP-UX 11.31
      - [BUG 2095983]: fix syntax/permissing error in find-requires helper script
      - [BUG 2168180]: Improve handling of various --enable/--disable options.
      - [BUG 2782700]: build failure when using --with-pkcs on Solaris
      - [PATCH 1577917]:Simplify makefile target references (patch from Apple)
      - [PATCH 1600453]: Fix cross-compile builds in apples build environment.
      - [PATCH 1624406]: option to hardcode location of mount table
      - [PATCH 1625135]: configure location of python interpreter 
      - [PATCH 1678300]: compile-subagent doesn't call shutdown_ methods
      - [PATCH 1681073]: #ifdef based config_error instead of special cases
      - [PATCH 1728241]: Add configure check for <sys/uio.h>
      - [PATCH 1728230]: add configure check for gai_strerror()
      - [PATCH 1728233]: make sure type nfds_t is defined
      - [PATCH 1728237]: Move variable declaration at the top of netsnmp_udp_sendto
      - [PATCH 1728244]: Add configure check for sin6_scope_id
      - [PATCH 1728247]: Add type check for int??_t and uint??_t
      - [PATCH 1899762]: Tweak embedded_perl configure checks.
      - [PATCH 2000874]: Cleanup transport selection.
      - [PATCH 2091156]: correctly declare dependencies in Makefile. 'make -j <N>' should work now.
      - [PATCH 2184039]: Fixes for freeing memory during error conditions.
      - [PATCH 2797251]: Support multiple initialisation/shutdown, fix memory leaks
      - Add a variation of AC_SEARCH_LIBS where the result is settable.
      - Add "BuildRequires: perl-ExtUtils-Embed" to the spec file
      - Add '--with-temp-file-pattern' configure option
      - Assume target platform supports mem{cpy,move,set} & str{,r}chr
      - Disable inlining on solaris (due to linking errors)
      - Disable MIB-specific tests if the agent omits the necessary modules.
      - '--disable-as-needed' reverts to linking system libs into applications
      - Do not config_require(util_funcs) if nothing from util_funcs is used
      - Do not require use of --with-endianness when cross-compiling.
      - Fix build issues with ethtool (on RH9).
      - Fix checks for support of static inline functions
      - Fix compilation on IRIX
      - Fix macro for '--with-features-of'
      - Improve library layering & dependency handling when linking apps
      - Improve robustness of sed/grep/etc commans (using autoconf macros)
      - Improve RPM spec files, for consistency with vendor-provided packages.
      - Mechanism for selecting build environment based on version
      - New NETSNMP_ARG_WITH/ENABLE macros to catch incorrect 'with/enable' usage
      - '--enable-ipv6' should only enable 'mibII/ipv6' on supported systems
      - Remove Net-SNMP special-case handling of standard functionality.
      - Restructure configure template
      - Stricter checks on '--with-persistent-mask' values
      - Update to autoconf 2.63 & libtool 2.2.6
      - Use 'config_error' to generate error messages at configure time.
      - Use LDFLAGS when building agent, helpers and mib lib
      - Use "libtool clean" to ensure removal of all libtool temp files.
      - allow building with Perl versions that lack PERL_EXIT_DESTRUCT_END
      - build fix for Tru64 Unix and IRIX: move _XOPEN* definitions to
	where they are in 5.4.x and earlier

    documentation:
      - [BUG 1247164]: Document use of OID macros
      - [BUG 1407476]: Clarify MIB parsing toggle options & comment handling.
      - [BUG 1614104]: broken snmpd(8) manual page in 5.4
      - [BUG 2027129]: fix typo in snmpcmd.1
      - [PATCH 1604580]: SNMP(3) manual page corrections
      - [PATCH 1644735]: Add gcc build instructions for IRIX
      - Fix minor documentation bugs (patch from Apple)

    mib2c:
      - [BUG  833673]: More focused size checks.
      - [BUG 1429472]: Protect against missing instances (and invalid objects)
      - [BUG 1582972]: Handle @while@/@end@ properly.
      - [BUG 1737068]: Handle MIB objects with embedded hyphens
      - [BUG 1874059]: Handle MIB objects with embedded hyphens
      - [PATCH 1668171]: skip unknown cols in min/max range for tables
      - [PATCH 1719244]: Fix mfd generating map function
      - [PATCH 1914398]: install mib2c.perl.conf
      - [PATCH 2136437]: Improve FLAG defines for huge tables on 64bit systems
      - [PATCH 2316127]: Fix bug in iterate_access generated code.

    misc:
      - [PATCH 1737727]: Add a NETSNMP_OLDAPI_ prefix to old-api access macros.
      - [PATCH 1737727]: Replace NETSNMP_CLEAN_NAMESPACE with NETSNMP_NO_LEGACY_DEFINITIONS
      - Add config reread support to "net-snmp-config --compile-subagent" code.
      - Avoid calling debug macros with wrong number of arguments.
      - Don't use the legacy symbol SNMPTRAPD_DISABLE_AGENTX
      - Preliminary (alpha) support for SNMP over SSH and DTLS/UDP.
      - Preliminary (alpha) support for the TSM security model
      - Separate user management into new net-snmp-create-v3-user script

    unspecified:
      - [BUG 1596638]: memory leak in ipCidrRouteTable, inetCidrRouteTable
      - [BUG 1611524]: fix tcp connection table fd leak
      - [BUG 1793545]: Take the name from the sockaddr_un in order to avoid
	               transport specifiers and other decorations.
      - [BUG 1801835]: Multiple default transports for an application.
      - [BUG 1851047]: Don't continue to process a corrupt watched value.
      - [PATCH 1601453]: Dynamic Memory failure handling improvements
      - [PATCH 1674298]: Remove unused sinkport variable
      - [PATCH 1674299]: Lessen scope of zone variable in dump_realloc_oid_to_inetaddress
      - [PATCH 1674302]: Lessen scope of len variable in convert_v2pdu_to_v1
      - [PATCH 1678298]: compile-subagent checks for bad HAVE_SIGNAL_H
      - [PATCH 1678302]: netsnmp_mibindex_load leaks memory
      - [PATCH 1681035]: Improve net-snmp-config /bin/sh compatibility
      - [PATCH 1902105]: Hide and improve debug log messages
      - [PATCH 1902113]: Fix error log in inetNetToMediatable
      - Fix for refs to OBJECT-GROUP in another MIB
      - Initalize log subsystem
      - Remove support for use of varargs.h.

    perl:
      - [BUG 1450669]: a perl agentx consumes memory
      - [BUG 1554817]: Fix class assigment so getRootOID works properly.
      - [BUG 1606062]: perl bulkwalk (async) coredump
      - [BUG 1619827]: improve handling of link dependencies
      - [BUG 1747733]: More robust handling of undefined values.
      - [BUG 1834539]: Consistent handling of OID parsing.
      - [PATCH 1627949]: a perl agentx consumes memory
      - [PATCH 1725049]: Fix bulkwalk in cases of non-repeater usage.
      - [PATCH 1811463]: perl async callback coredump
      - [PATCH 1834983]: Consistent handling of OID parsing.
      - [PATCH 1914393]: registerAgent can now be run multiple times
      - [PATCH 1914643]: fix issues with embedded perl
      - [PATCH 1914645]: better end of mib support
      - [PATCH 1920390]: fix registration of tables with .0 as IIDs
      - [PATCH 1956193]: beta threadable perl module code for SNMPv1/2c usage.
      - [PATCH 2021444]: Support SNMPv2c in gettable processing
      - [PATCH 2022948]: Fix for Counter64 in perl subagent
      - [PATCH 2182079]: Fix various perl warnings & allow use of "use strict"
      - [PATCH 2272347]: Implement "implied" in MIB hash
      - [PATCH 2361712]: Fix getbulk optimization during walks
      - [PATCH 2709705]: Retrieve src/target IP address in Perl-based agents
      - [PATCH 2763717]: Allow perl to use OPAQUEs
      - [PATCH 2793857]: Report failed asynchronous requests.
      - fix SNMP SET for IP addresses on 64-bit
      - fix prerequisites for NetSNMP::TrapReceiver
      - fix syntax error in NetSNMP::agent::Support
      - install embedded perl init files with correct permissions

    python:
      - [BUG 1826174]: Check for buffer overflow when printing values.
	               Addresses CVE-2008-2292
      - [BUG 1868278]: Python segfault
      - [BUG 2258935]: Python Extension Module fails on Solaris
      - [PATCH 1716114]: Let python build in source tree  (Debian patch#38)
      - [PATCH 1862177]: made code more windows/cygwin compiler friendly
      - [PATCH 1877840]: Fix MIB label and indexing due to sl, broken regexp
      - [PATCH 2074817]: Fix regexp engine CPU performance issues
      - [PATCH 2260828]: Fix python snmpwalk memory leak
      - [PATCH 2580979]: Fix python session pointers on 64-bit systems.
      - [PATCH 2667415]: Support "UseNumeric" option.
      - [PATCH 2775800]: Allow threading to continue when a request is sent

    test:
      - enhance snmpnetstat test to check tcpTable in TCP mode
      - support a -n flag to RUNTESTS to print the test number found in the
	test file as opposed to the numerical count
      - Do not terminate on SIGCHLD since dash and soume bourne shells will
	exit the main shell when a subshell terminates in that case.

    Ports:
      - [BUG 1710910]: initial support for DragonFly BSD
      - [PATCH 1623874]: add GNU/kFreeBSD support

    AIX:
      - [PATCH 1665079]: AIX patches for cpu stats and process monitoring
      - Add support for AIX 6.x
      - Build fixes for embedded Perl
      - Fix default shared library building instead of forcing static
      - Use "-Wl,-brtl" when compiling with gcc
      - [PATCH 2886598]: Header fixes for compiling on AIX6

    FreeBSD:
      - [BUG 1073782]: Restore PerfStat values for FreeBSD 5.x systems.
      - [BUG 1633483]: Support CPU HAL on FreeBSD4.x
      - [PATCH 1951996]: Fix for CPU stats on FreeBSD
      - [PATCH 2507249]: sctp-mib support for FreeBSD.
      - Add initial support for upcoming FreeBSD 7
      - Fix configure warning for sys/conf.h
      - patch from Cezary Morga to fix a make test on freebsd

    HP-UX:
      - [BUG 2779472]: Filesystems missing in hrStorage table
      - [PATCH 2088726]: Fix an issue reporting memory in negative values.
      - Needs _REENTRANT defined to pick up strtok_r.

    IRIX:
      - [PATCH 1675869]: CPU statistics for IRIX based on PCP
      - [PATCH 1709748]: Optimized IRIX cpu stats

    Linux:
      - [BUG 1666005]: Fail to walk ipv6InterfaceTable on Linux
      - [PATCH 1581294]: host-resources improvements
      - [PATCH 1969627]: Handle install with empty /etc/sysconfig/network file 
      - [PATCH 1704105]: Add IPv6 support to the inetNetToMediaTable
      - [PATCH 1705594]: Various fixes to ipAddressPrefixTable reporting
      - [PATCH 1708243]: Implement ipDefaultRouteTable
      - [PATCH 1715405]: Implement ipv6ScopeZoneIndexTable
      - [PATCH 1719254]: update HRFS_ignore list to current linux likelyhoods
      - [PATCH 1724602]: MfD-based ipDefaultRouterTable implementation
      - [PATCH 1783423]: return a correct ipv6InterfaceIdentifier of loopback
      - [PATCH 1826102]: support longer interface names
      - [PATCH 1828602]: Support ipDefaultTTL and ipForwarding SETs
      - [PATCH 1896118]: Fix ifTable 32bit counters
      - [PATCH 1927751]: Implement icmpMsgStatsTable
      - [PATCH 2023633]: Implement SCTP-MIB
      - [PATCH 2053273]: Implement EtherLike MIB

    MacOSX:
      - [PATCH 1600453]: OS X compile-time endian determination
      - [PATCH 1600522]: CPU HAL implementation for mach/darwin
      - Improve memory reporting (patch from Apple)
      - Patch: 3514049 from twobits-github: fix compilation on darwin11

    Solaris:
      - [BUG 1626153]: No hrSWRun informations on Solaris zones
      - [BUG 1810814]: tcpTable missing entries and wrong ports
      - [BUG 1819189]: {ifOperStatus,ipAdEntIfIndex} reported incorrectly
      - [BUG 1822275]: {ifOperStatus,ipAdEntIfIndex} reported incorrectly
      - [PATCH 1623447]: Fix hrSWRun for terminated processes
      - [PATCH 1719730]: Support for ipSystemStatsTable and ipAddressTable
      - [PATCH 1824196]: {ifOperStatus,ipAdEntIfIndex} reported incorrectly
      - [PATCH 1834699]: Fix 1833294: DLPI problems on Solaris 2.6
      - [PATCH 2012404]: Deal with more than 10 interfaces.
      - [PATCH 2751588]: Inconsistent data can be reported on Solaris 10U4+
      - #define NEW_MIB_COMPLIANT to support Solaris 10U4+
      - IF-MIB fix: add missing return at end of get_if_stats

    Win32:
      - [BUG 1662987]: compile error on Cygwin
      - [BUG 2779541]: Fixed handle leak in pass_persist.
      - [PATCH 1622080]: A: pass Win32 handles remain open.
      - [PATCH 1706344]: Fix compilation with cygwin
      - [PATCH 2686248]: Fix several winExtDLL bugs.
      - [PATCH 2688342]: Fix VS2005 various compiler warning
      - [PATCH 2691876]: Allow compiling the services using unicode.
      - [PATCH 2693746]: improved socket startup support
      - Add support for winExtDLL to build.bat
      - Build fixes for MSVC 2008.
      - fix AES support
      - fix win32/Configure --with-ipv6

*5.4*

    build:
      - [BUG 1416481]: Support specifying an explicit linker.
      - enable-as-needed will try to link built libraries against needed
	libraries at library link time, rather than application link time.

    snmplib:
      - [PATCH 1282566]: to rework transport creation to allow for
	alternative interpretations of the address and a more flexible
	transport registration system
      - [BUGS: 1537459, BUGS: 1540745] Fix missing MIB parsing tokens
      - [PATCH 1562168]: check for a sock fd less than 0.
      - [PATCH 1570650]: create a logging shutdown function to propelry
	clean up log registrations if needed.
      - [PATCH 1565293]: UDPIPv6 transport reports wrong port number
      - rename init_mib to netsnmp_init_mib to avoid symbol clash with
	HP-UX's libnm
      - [PATCH 1509943]: responses will get sent from the original dest IP
	address when possible.

    snmpd:
      - [PATCH 1550725]: A new uint instance helper to match the existing
	int, long and ulong helpers
      - [BUG 1527930]: fix smux authentication
      - [PATCH 1561277]: use net.ipv6.neigh.lo.base_reachable_time_ms
	instead of deprecated base_reachable_time
      - [BUG 1474468]: ifConnectorPresent always returns 0
      - [PATCH 1524755]: to better support the UDPTable for unknown address
	types
      - [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.
      - [PATCH 1557514 ]: Do not attempt to collect data during SET
	processing.
      - [BUG 1535903]: Support spaces within security names
      - Agent builds default module list from a default_mibs.h rather than
	a hard coded configure list
      - [BUG 1559358]: check scanf results for diskio scanning
      - [BUG 1564233]: Have configure test for rpm headers not just the
	libraries
      - [PATCH 1579364]: Updated darwin patch to fix compilation on Tiger
	and Leapord
      - [PATCH 1565703]: patch to fix rapid registrations/deregistration
	issues
      - [PATCH 1562688]: fix ping/reattach agentx code
      - [PATCH 1551948]: Make pass_persist usable on uClinux
      - [PATCH 1568150]: Extend pass_persist error messages that can be
	passed back from the script
      - [PATCH 1570650]: make delete table function public
      - [PATCH 1575984]: block SIGHUP during reconfig
      - [PATCH 1570982 ]: Solaris IF-MIB: Support for IPv6-only interfaces
      - memTotalFree should report total virtual instead of physical memory
      - build fix for --without-kmem-usage
      - [BUG 1585815]: fix mfd bits length calculation
      - [BUG 1427410]: Set auth engineID for SNMPv3 traps.
      - [BUG 1502267]: Build access list in the correct order.
      - [PATCH 1554827]: from rtyle: fix handling of failed proxy SET
	requests
      - [PATCH 1598966]: Fix bug #1598927: #elif build fix

    snmptrapd:
      - the traphandle directive now supports a -t switch to indicate
	matching any OID in the tree below the specified OID
      - [PATCH 1536773]: support partial oid matching
      - [PATCH 1598968]: Fix bug #1587759: snmptrapd doesn't recognize -A
	option

    snmpdf:
      - [BUG 1515507]: Handle failed requests better

    perl:
      - Fixed the perl bulkwalk function
      - [PATCH 1575937]: fix usenumeric output in async varbinds so they
	return OIDs instead of empty strings.
      - update default_store module to latest default_store c-binding
	tokens
      - make perltest fixes for Solaris 2.6 and earlier
      - fixes for 64-bit platforms
      - make perltest fixes for HP-UX
      - make perltest fixes for IRIX
      - [PATCH 2995098]: Fix creation of SNMPv3 sessions with API_SINGLE
      - patch 3046371: from christophb4: Fix memory leak in SNMPv1 trap
	handling.

    mib2c:
      - [BUG 1479916]: Restore consistency in row creation code.
      - [BUG 2827269]: Suppress non-ordered TODO comments.

    misc:
      - 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 by a special
	define.
      - [BUG 1585250]: don't use deprecated options in start script
      - "make test" fixes for non-UDP transports
      - [BUG 1577913]: add missing manual pages for executables, supplied
	by Debian
      - [PATCH 1596028]: from "Stephen J. Friedl": const fixes for the
	mib_api(3) manual page
      - RPM spec file fixes for 64-bit platforms

    MacOSX:
      - [PATCH 1566777]: build fixes for memory_darwin.c
      - build fix for mibII/udpTable

    Tru64:
      - fix "auto_nlist failed on arptab_size at location 0" errors

    IRIX:
      - proper implementation for UCD-SNMP-MIB::laTable (avoiding nlist)

    Solaris:
      - [PATCH 1569537,1569539]: new UDP-MIB and TCP-MIB implementation
	(enable through --with-mib-modules=udp-mib,tcp-mib)

    AIX:
      - use correct ARPTAB_SYMBOL and ARPTAB_SIZE_SYMBOL
      - [BUG 1205300]: nlist err: neither nproc nor _nproc found (same for
	rt_table, rthashsize, rthost, rtnet)

    qnx6:
      - [PATCH 2836895]: support for QNX6
