If you're upgrading from an earlier version, see the UPGRADING file.

---------------------------------------------------------------------------
Release notes for NUT 1.4.3 - what's new since 1.4.2:

This is another maintenance release for the 1.4 tree, consisting of fixes
backported from the 2.0 tree.

 - The mge-utalk driver has been upgraded to version 0.81, fixing
   the lack of read/write variables, and also fixing loss of sync on
   certain hardware.

   (Arnaud Quette)

 - The hidups driver now has a workaround for versions of hidups.h 
   which don't have HID_MAX_USAGES defined.

 - Several instances of raw strings from the config files being used
   as format strings with upslog/upslogx have been fixe.

   (Ulf Harnhammar)

---------------------------------------------------------------------------
Release notes for NUT 1.4.2 - what's new since 1.4.1:

This is a maintenance release for the 1.4 tree.

 - The newhidups driver has been merged as the first step towards
   portable USB UPS support.  This will eventually replace the old 
   Linux-only hidups driver.  The newhidups driver is tagged
   experimental since it is under active development.
   (Arnaud Quette, Charles Lepple)

 - Several drivers have received small bug fixes.  Some of these changes
   improve handling of older hardware or endianness issues.

 - The mge-shut driver has been upgraded to version 0.59, which has
   some small bug fixes, adds ups.test.result, adjusts the 
   ups.delay.* variables, and closes some bugs in the Debian tracker.
   (Arnaud Quette)

 - The safenet driver has been upgraded to version 0.3 and now supports
   the shutdown.return command and several more variables.
   (Arjen de Korte)

 - A possible problem in the driver code where one connection could
   affect another has been fixed.  This would never be triggered by
   upsd, but it was annoying for anyone who was working on a custom
   server-level program like upsd.

---------------------------------------------------------------------------
Release notes for NUT 1.4.1 - what's new since 1.4.0:

 - Centralion Blazer hardware is now supported with the new blazer
   driver.
   [Phil Hutton]

 - Energizer UPS hardware is supported with the new energizerups driver.
   [Viktor T. Toth]

 - The new safenet driver supports UPS hardware that uses the protocol
   of the same name.  This includes models from many manufacturers,
   including Fairstone, Fenton, Gemini, Powerwell, Repotec, Soltec and
   Sweex.  See the README or driver.list for the full details.
   [Arjen de Korte]

 - The mge-shut driver now reports data for input.{voltage,frequency}
   and output.{frequency,current}.  It also now retries status polls to
   fix a problem where the status could be blank when the UPS went on
   battery.
   [Arnaud Quette]

 - Effekta MT 2000 RM hardware is now recognized by the fentonups
   driver.  Other Effekta MT and MH models should be trivial to add by
   using this as a guideline.
   [christoph moar]

 - The victronups driver now reports OB/OL properly.
   [Gert Lynge]

 - The Powerware 5119 RM is now supported as genericups type 20.
   See http://lists.exploits.org/ups/Oct2003/00052.html for more
   details.
   [Daniel Thompson]

 - The bestferrups801-807 driver has been reworked and converted to the
   new variable naming scheme.  The replacement driver is called
   ferrups.
   [Robert Woodcock]

 - The experimental hidups driver now tries another technique to detect
   a UPS before giving up.  This had previously caused problems on some
   systems after upgrading to Linux 2.4.22.
   [Arnaud Quette]

 - The clients which ask for a password no longer break on Solaris when
   dealing with strings which are longer than 8 bytes.

 - The newapc driver now checks the result after starting a runtime
   calibration.  This fixes a bug where the status would go blank for a
   few seconds after a calibration command was submitted.

 - The build process now halts when make fails in one of the
   subdirectories.
   [Petter Reinholdtsen, Charles Lepple]

---------------------------------------------------------------------------
Release notes for NUT 1.4.0 - what's new since 1.2.x:

 - The drivers and upsd now communicate over Unix domain sockets instead
   of state files, shared memory, or state files with mmap.  This change
   makes many things possible, including the new dynamic variable and
   command naming scheme described below.

   There is a new development tool called sockdebug in the server
   directory for debugging driver-server communications on the sockets.

 - The old static variable scheme has been replaced by a new dynamic
   implementation.  Vague names have been turned into meaningful names
   that fit into an organized system.  UTILITY is now input.voltage.
   OUTVOLT is now output.voltage.

   This also applies to the names of instant commands.  BTEST1 is
   test.battery.start, and BTEST0 is test.battery.stop.

   The old names are still supported for compatibility with older
   clients.  This compatibility mode will be maintained throughout
   the 1.4 series, and will be gone by the release of 2.0.  Users
   with older clients are encouraged to upgrade their software
   during this time.

 - The network protocol has been expanded to handle these new names.
   Older functions which only apply to the old names will continue to
   be supported through the 1.4 series.

 - The drivers and server (upsd) can now change their user ids and
   chroot themselves with the new -u and -r arguments.  This lets you
   create a "chroot jail" with the bare minimum components.

   This technique is used to provide a higher degree of security.  If
   someone exploited upsd to get a shell somehow, they would be stuck
   in the jail.

 - upssched now explicitly confirms reception of timer commands before
   exiting.  This was done to avoid a race where one process would
   exit right when another one was starting.  The second one would 
   believe its command had been handled when it had been lost.   

 - upslog has been reworked to use standard getopt parsing to provide
   the monitoring settings.  The old way of specifying arguments is
   still supported for backwards compatibility.

   upslog has also been changed to only parse the format string once,
   rather than doing it every time through the loop.  This should 
   provide a minuscule drop in CPU utilization. 

 - Usernames are now required in upsmon and upsd.  This means that you
   must add a username to your MONITOR lines in upsmon.conf and then
   create a matching user in upsd.users.  

   Installations from the 1.2 era probably already use usernames, so
   this mostly affects those from 1.0 and before.

 - Drivers are now pinged regularly by upsd when they aren't posting
   updates about the UPS status.  This provides another check in the
   data validation process.  If upsd fails to get a response within
   a few seconds, the UPS will be marked stale.

 - A few minor memory leaks were discovered with valgrind and squashed.

 - upsstats now reuses connections to upsd when cycling through multiple
   entries in the hosts.conf.  This makes things a bit faster and
   avoids some of the noise in the syslog.

   This only applies to entries that are adjacent.  To take advantage
   of this feature, you may have to rearrange them.

	MONITOR ups-1@host-1 ...
	MONITOR ups-1@host-2 ...
	MONITOR ups-2@host-2 ...
	MONITOR ups-3@host-3 ...

   Connection reuse for nonadjacent entries may be considered in the
   future.

 - upsd now warns about insecure configuration files at startup.
   These files (upsd.conf, upsd.users, and the certfile) should
   only be readable by upsd.  Never make them world-readable.

 - The programs no longer print "shutting down" when they are just
   exiting.  This was changed to avoid confusion about the term, since
   "shutting down" has a special meaning in UPS software.

 - Signal handlers no longer do any significant amount of work.  Some of
   the programs used to do numerous things in there, raising concerns
   about reentrancy.  They now set flags and allow the main loop to do 
   the actual work from there.

 - A bug in upsmon where NOTIFYFLAG settings could be ignored was fixed.

 - Group handling has been changed.  configure no longer accepts
   --with-group, and the programs no longer setgid() to a hardcoded
   value.  They now setgid() to the primary group of whatever the 
   user value may be.

   This may be compiled in with --with-user as before, and many programs
   accept -u to override it at runtime.

 - The state path is no longer created during 'make install'.  Users
   are now expected to create it themselves.  This removes a lot of
   evil complexity from the build and install sequences.

 - upsd no longer implements the DROP access command, as it
   could confuse the clients by getting them out of sync.  DROP is now
   implemented as DENY, which sends an error message.  If you use DROP,
   you should change it to DENY rather than relying on this
   compatibility measure.

 - The belkin driver no longer reports OFF and OL at the same time.

 - The bestups driver no longer sleeps during polls, which makes it
   more responsive to things like instant commands.

 - The cyberpower driver now has much better hardware detection code
   and no longer freezes at startup under some conditions.  It also now
   supports the shutdown function.  Instant commands for shutdowns and
   battery tests were also added.

 - The dummyups testing driver has been removed.  The dummycons testing
   driver can do everything that dummyups once did and much more.  
   dummycons is also now built by default for easier testing.

 - The newapc driver has been reworked to take advantage of the new
   internal driver state functions.  Some variables without an obvious
   purpose were dropped.

 - The newapc driver now sends all five bytes when using sdtype 1.
   Previously it didn't send the entire string, and it didn't work.
   [Don Lewis]

 - The hidups driver has been expanded to allow for setting variables,
   a shutdown sequence, and more.
   [Arnaud Quette]

 - The mge-utalk driver had trouble establishing communications in 
   some cases due to the RTS line being set.  This has been fixed.

   The mge-shut driver has been added to the tree, and has replaced
   the older mge-ellipse driver.
   [Arnaud Quette, Philippe Marzouk]

 - Outlet-level control has been defined in the variable tree, and will
   be added to drivers where the hardware supports it.  This can be
   used to shut down some components earlier than others to prolong
   your runtime on battery.

   This is supported in the mge-shut driver now, and may show up in
   others before long.
   [Arnaud Quette]

 - KIN-2200AP hardware is now recognized by the powercom driver.  
   This change may also support other KIN-xxxxAP equipment.
   [Preston A. Elder]

 - The 1.1kVA UPS is now supported by the bestuferrups driver.  This
   driver was also changed to allow easy addition of more models
   in the future.
   [Bob Apodaca]

 - The fentonups driver can now handle devices which implement the
   "I" detection differently, and now supports the Giant/WELI 500
   as a result.
   [Joon Guillen]

 - The serial number of the UPS being monitored can now be specified
   with serial= in ups.conf in the genericups driver.
   [Shaul Karl]

 - The newapc driver now sends ESC to break out of menus when the
   initial detection fails.  Some new APC models have interactive menus
   on the serial port, and the driver couldn't handle them before.

 - The snmp-ups driver now reports ambient temperature and humidity
   data for APC equipment.  It also now supports the shutdown.reboot and
   shutdown.reboot.graceful commands.
   [Dmitry Frolov]

 - The list of supported variables and commands in the snmp-ups driver
   has been expanded.
   [Arnaud Quette, J.W. Hoogervorst]

 - Various drivers now report bypass mode with the BYP status word.
   [Arnaud Quette]

 - Energy Sistem equipment is now supported with the esupssmart driver.
   [Antonio Trujillo Coronado]

 - The Tripp-Lite SU series (SmartOnline) is supported with the new
   tripplitesu driver.
   [Allan Hessenflow]

 - The HP PowerTrust A2994A is now recognized by the hp driver.
   [Jan Sporbeck]

 - Many drivers were cleaned up to perform basic sanity checks on the
   status data before using it.

 - An explicit cleanup function has been added to the driver core to
   ensure that all dynamic resources are freed before exiting.  This
   is part of the larger process to check for memory leaks and other
   bad things.
   [Arnaud Quette]

 - upsd now provides variable descriptions from an auxiliary file.
   This file is optional, which allows for a smaller memory footprint.
   It can also be edited for localization or other customizations.

 - upsimage and upsstats can now render BATTVOLT data.
   [Andrew R. Ghali]

 - String handling has been cleaned up throughout the tree.  Calls to
   functions like strcpy and strcat were either replaced with other
   (range-checking) functions or were rewritten to avoid it.

 - Many compile-time defaults may now be overridden at runtime.  In
   the environment NUT_CONFPATH and NUT_STATEPATH may be used.
   upsdrvctl has been changed to execve to pass these along to the
   drivers.  ups.conf now supports driverpath=, and upsd.conf supports
   DATAPATH.
   [Bryan Henderson]

 - The configure --with-gd switches now actually do something useful
   when gd has been installed outside the default search directories.
   [Patrik Schindler]

 - The inline keyword is now handled properly on systems which do not
   support it or have it specified as another name.  This was breaking
   compiles on some systems.
   [Petter Reinholdtsen]  

---------------------------------------------------------------------------
Release notes for NUT 1.2.2 - what's new since 1.2.1:

 - The snmp-ups driver has been upgraded and expanded.  It now supports
   multiple MIBs, meaning it can handle RFC 1628, APCC, and MGE
   equipment.  You can pick the right one with "mibs=" in ups.conf.

   Support for setting variable and instant commands is also available.
   [Arnaud Quette and Dmitry Frolov]

 - The powernet driver has been upgraded.  It now supports more
   variables, has cleaner logging, and may now be considered stable.
   [Dmitry Frolov]

 - The hidups driver now supports physical port IDs.  This avoids most
   of the problems where the hiddev* names can jump around too easily.
   It will now stay in the same place as long as you keep it plugged
   into the same physical port.  See the CHANGES file for more details.
   [David Brownell]

 - The hidups driver now also supports the MFR variable on APC
   Back-UPS ES equipment.
   [Jonathan A. Davis]

 - The sms driver has been updated to version 0.70.
   [Marcio Gomes]

 - The bestups driver now recognizes Best Power Axxium Rackmount
   equipment.
   [Ales Casar]

 - The liebert driver now uses O_NONBLOCK, and should now work
   consistently on OpenBSD as a result.
   [Alex Cichowski]

 - The liebert driver also now uses debouncing logic on the status
   lines.  It was possible to get false readings that would start a 
   shutdown or just annoy users with excessive onbatt/online notify
   messages.  The new code forces the status to settle down for 3 polls
   before accepting the new value.

   This means that very short power events may not be detected.  The
   alternative is having your machine shut down just because it decided
   to wiggle over to OB LB for a few seconds.

 - upsmon has had the disconnect logic fixed so the "communications
   lost" (COMMBAD) notify will actually go out when the connection
   fails.
   [Steve Monett]

 - upssched now uses a lock file to prevent a race where two could
   start at the same time.  The second upssched would "win", and the
   first one would be unreachable.  This had the side-effect of not
   being able to cancel timers on the first one.	

   If you use upssched, you must define the LOCKFN directive when
   upgrading to this version, or it will not work.
   [Gaspar Bakos]

 - The packaging and scripts for Red Hat systems have been updated.
   [Antonino Albanese]

 - upsd is now a bit more lenient about access levels in the
   'numlogins' check, which is what caused the problem in upsmon
   (next item).

 - upsmon no longer gets stuck in slavesync() when upsd is configured
   to drop certain queries.  This usually happened at the worst
   possible time: in the middle of a shutdown.
   [John David Garza]

 - The upsclient functions now do more sanity checking on data from
   upsd so a short read won't return garbage to the callers.

 - upsset now works properly with ENUM/VARTYPE values for multiple
   UPSes on a single upsd.
   [Dmitry Frolov]

 - Various portability fixes for building on SGI were applied.
   [Andrea Suatoni]

 - upsd no longer tries to reference a deleted client structure if the
   client disconnects at the wrong time.  Previously, it tried to use
   that pointer after the sendback() function had already failed on 
   write and deleted the client.  This could cause upsd to segfault
   depending on what areas were accessed.
   [Patrik Schindler]

---------------------------------------------------------------------------

Release notes for NUT 1.2.1 - what's new since 1.2.0:

 - The sms driver is back, with support for Microlink Manager III
   hardware. [Marcio Gomes]

 - Fideltronik Ares Series hardware is now supported as genericups type
   19.  [Tomek Orzechowski and Arkadiusz Mikiewicz]

 - The drivers no longer silently drop instant commands or set commands
   from upsd that happen to get fragmented in transit.
   [linux@horizon.com]

 - The old multilink driver is back with a new name: liebert.  It
   supports Liebert UPStation GXE hardware with the contact-closure
   cable.  This is currently an experimental driver as there is no
   way to power down the load.   

 - configure now picks up the right flags for gd automatically if gd
   2.0.8 or higher is installed.  This greatly simplifies the CGI build
   process for most users.

 - Shutdowns on FreeBSD using the genericups driver should work again.
   [Petri Riihikallio]

---------------------------------------------------------------------------
