This file describes changes in recent versions of pdsh. It primarily
documents those changes that are of interest to users and admins.

* Changes in pdsh-2.36 (2025-01-12)
===================================
 -- fix build on C23 compiler (Egbert Eich)
 -- mcmd: fix compiler warnings on modern GCC (Adrian Reber)
 -- fix closeall performance with large _SC_OPEN_MAX (Zheyu Shen)
 -- genders: fix typo in comment (Al Chu)
 -- fix hostlist out of bounds array access (Al Chu)

* Changes in pdsh-2.35 (2023-12-19)
===================================
 -- slurm: call slurm_init() once before any call to Slurm API (Egbert Eich)
 -- slurm: fix compile of slurm plugin against Slurm >= 23.x
 -- log module option errors with -d (Erik Jacobson)
 -- fail fast on connect error or non-zero return code (Jerry Mannil)
 -- release a lock that is no longer used (ycaibb)
 -- build: use LDADD instead of LDFLAGS for libcommon.la (orbea)
 -- Remove README.QsNet from the RPM SPEC file's doc list (Jason St. John)
 -- slurm: add -C to restrict hostlist to nodes with features (Dylan Simon)
 -- ssh: fix sshcmd_signal on macos
 -- dsbak: fix handling of empty input lines

* Changes in pdsh-2.34 (2020-01-07)
===================================
 -- Fix for output corruption with no newlines (#114)
 -- pipecmd: fix result check error handling (Dylan Simon)
 -- slurm: workaround slurm export of internal List interfaces
 -- readline: add application name as argv[0] (#112)
 -- Fix errors from lgtm.com scan

* Changes in pdsh-2.33 (2017-06-28)
===================================
 -- Fix segfault and build issues on Mac OSX (#95)
 -- Always pass RTLD_GLOBAL to dlopen(3) of modules. Fixes missing symbol
     errors from modules using libraries that also use dlopen() (e.g.
     nodeupdown, slurm)

* Changes in pdsh-2.32 (2017-06-22)
===================================
 -- Autotools update
 -- Switch to dlopen(3)/dlsym(3) instead of using libltdl
 -- Drop qshell, mqshell, rmsquery, nodeattr and sdr modules.
 -- Fix issue 70: dshbak: handle hostname of "0"
 -- Allow PDSH_CONNECT_TIMEOUT and PDSH_COMMAND_TIMEOUT environment
     variables (Erik Jacobson)
 -- Fix some old URLs in documentation (Al Chu)
 -- Avoid exporting POSIXLY_CORRECT to child processes (Dorian Krause)
 -- Fix mcmd start offset bug in max bytes calculation (Egbert Eich)

* Changes in pdsh-2.31 (2013-11-07)
===================================
 -- Fix issue 56: slurm: Allow mixed use of -P, -w and -j options.
 -- Fix issue 59: pdsh very slow when using a few thousand hosts and genders.
 -- testsuite: Expanded tests for genders module (Pythagoras Watson)

* Changes in pdsh-2.30 (2013-03-02)
===================================
 -- Fix issue 55: genders -X option removes more hosts than expected.
     (This was a generic fix for hostname matching, so it probably
      affected -x and other options as well.)
 -- testsuite: Add test for issue 55.

* Changes in pdsh-2.29 (2013-02-12)
===================================
 -- Fix issue 42: --with-dshgroup sets DSHGROUP_PATH to "yes"
 -- Fix issue 53: Add -P option to target SLURM partitions (Michael Fenn)
 -- Fix issue 54: pdsh prints empty lines with -S
 -- pdcp: Add more levels of directory recursion (Pythagoras Watson)

* Changes in pdsh-2.28 (2011-10-19)
===================================
 -- Fix issue 39: ssh forces use of -l<user> option
 -- Fix issue 40: -l%u added to ssh args only if remote and local
     usernames differ
 -- testsuite: Added tests for -l%u handing in ssh

* Changes in pdsh-2.27 (2011-09-07)
===================================
 -- Fix issue 17: Allow dshgroup files to include other files
 -- Fix issue 33: dshbak breaks up host lists at zeropad boundaries,
     (e.g. 01-09,10-11, 010-099,100-101, etc.)
 -- Fix issue 34: dshgroup path override broken in ./configure
 -- Fix issue 36: pdsh truncates output lines at 8K
 -- dshgroup: Allow dshgroup search path to be overridden by DSHGROUP_PATH,
     a colon-separated list of directories to search. $HOME/.dsh/group
     is still always prepended to this path.
 -- Allow wcoll files (-w ^file and WCOLL=file) to include other files
     with a "#include FILE" syntax. If included files have no path, then
     a search path of the dirname of the included file ("." for stdin)
     is used.
 -- testsuite: added tests, fixed some portability issues.
 -- Fix some minor memory leaks and locking bugs reported by Coverity.

* Changes in pdsh-2.26 (2011-04-29)
===================================
 -- Fix issue 14: interactive mode broken with ssh
 -- Fix issue 19: missing commas in dshbak(1) header output
 -- Fix issue 20: compilation error in genders.c with non-GCC compilers
 -- Fix issue 23: compilation failure with --enable-static-modules
 -- Fix issue 24: don't arbitrarily limit usernames to 16 characters
 -- Fix issue 25: PDSH_SSH_ARGS should not require %u and %h
 -- Fix issue 26: document use of %u and %h in PDSH_SSH_ARGS
 -- Fix interactive mode with rcmd/exec.
 -- genders: do not look for genders_query(3) support at runtime,
     as this causes too many problems on some systems. Instead, 
     use autoconf to include or exclude genders_query support from
     the genders module. (fixes Issue 1)
 -- Fix build on AIX
 -- Add -Wl,-E to LDFLAGS on HP-UX (Issue 18)
 -- Fixes for testsuite portability (Issues 15, 22, 28)

* Changes in pdsh-2.25 (2011-03-09)
===================================
 -- Fix pdcp breakage with ssh (bug introduced in pdsh-2.24).
     (Resolves issue 12: pdcp executes file instead of copying.)
 -- testsuite: Skip tests dependent on PDSH_MODULE_DIR when testsuite
     run as root (Resolves issue 13: testsuite broken when run as root).
 -- testsuite: Skip dshbak -d test to non-writable directory when
     directory permissions do not seem to apply (e.g. privileged user).
     (Possibly resolves issue 11: tests fail on Mac OSX under fink)
 -- testsuite: add simple ssh tests.

* Changes in pdsh-2.24 (2011-02-28)
===================================
 -- Resolve issue 7: Allow PDSH_REMOTE_PDCP_PATH to set default path
     to remote pdcp program (pdcp -e).
 -- Resolve issue 9: Fix use of PDSH_SSH_ARGS_APPEND.
 -- Resolve issue 10: dshbak: Support writing output to file-per-host.
     Adds new -d DIR and -f options to dshbak.
 -- genders: Allow relative paths to genders files with -F and
     PDSH_GENDERS_FILE.
 -- genders: Don't print an error if genders file is missing, unless
     a genders optin (-F, -a, -g, -i, -X) is explicitly used.
 -- genders: Allow -g to be used with other node selection options as
     a filter. For example: pdsh -w host[0-1024] -g attr1 ...
 -- ssh: Better preservation of remote command args in ssh module.
     Previous versions of pdsh would alwas collapse all args into
     a single argument passed to ssh: "cmd arg1 arg2 ..." With this
     fix the argv list will more closely match the form passed to pdsh.
 -- Refactored large portions of dshbak, improve usage output,
     and update manpage.
 -- Expanded testsuite.

* Changes in pdsh-2.23 (2010-10-22)
===================================
 -- Fix issue 4: List available but conflicting modules in -V and -L output.
 -- Fix issue 5: dshbak -c doesn't properly coalesce hosts with different
     zero-padding in the numeric suffix.
 -- Added torque module for setting list of target hosts based on Torque/PBS
     jobs (Issue 2).
 -- Enhance syntax of -w and -x to allow preceeding arguments with:
     `-' - Exclude hosts instead of include with -w ( -w foo[1-9],-foo8)
     `^' - insert/exclude list of hosts from a file (^/path/to/file)
	 `/' - filter hosts based on regex (/host.*0$/)
 -- Introduce new pdsh testsuite with many new tests. See tests/README
     for more information.

* Changes in pdsh-2.22 (2010-09-03)
===================================
 -- Fixes several bugs introduced in pdsh-2.21, Including:
   - genders: segfault when genders file doesn't exist
   - Failure to initialize some modules if others conflict
   - -M option doesn't work in some cases
 -- Sort modules by name before initialization so that modules
     initialize in a reproducible order.

* Changes in pdsh-2.21 (2010-09-02)
===================================
 -- New option -M name,... forces load of misc modules by
     name, thus allowing users to select between conflicting
     modules. (PDSH_MISC_MODULES environment variable may
     also be used)
 -- Due to above, an error is no longer printed when module
     options conflict.
 -- genders: Support PDSH_GENDERS_FILE environment variable to
     override default genders file name (default = "genders")
 -- genders: Support PDSH_GENDERS_DIR environment variable to
     override default directory for genders files (default = /etc).
 -- genders: Allow non-absolute path to be specified to -F option.
 -- Fix parsing of hostlist expressions with multiple brackets 
     (from SF.net user don.fanucci)
 -- Fix compile error on platforms where setnetgrent() doesn't 
     return an int.
 -- Allow path to dshgroup files to be specified to ./configure
     with --with-dshgroups=PATH.
 -- Update libltdl 

* Changes in pdsh-2.20 (2009-09-29)
===================================
 -- Fix bug in pdcp which serialized copy of files to nodes
     regardless of fanout.

* Changes in pdsh-2.19 (2009-05-21)
===================================
 -- New pdsh configure option --with-rcmd-rank-list allows
     the default pdsh rcmd module priority list to be overridden
     at compile time.
 -- genders: Always read genders file in case there are any
     pdsh_rcmd_type attributes to apply to the target hosts.
 -- genders: Fix bug where altnames were not used by default
     in some cases due to a bug in generic module loading code.
     (patch from Py Watson)
 -- Fix for coredump when no rcmd module is loaded.
     (patch from Py Watson)
 -- %{_libdir}/pdsh should be owned by pdsh RPM.
     (patch from Py Watson)

* Changes in pdsh-2.18 (2009-03-24)
===================================
 -- Fix duplicate error output from ssh module. 
    (Patch from Paul D Smith <psmith at users.sourceforge.net>)
 -- Add -e option to pdcp to explicitly specify remote execution path.
    This is necessary if pdcp is installed in a different path locally
    than on the target hosts.
 -- Fix recursive pdcp (-r) which has been broken since pdsh-2.12.
 -- Support --without-ssh-connect-timeout-option for ./configure.
 -- Add note to pdsh(1) manpage that only very old versions of
    the genders nodeattr script are supported by the pdsh nodeattr
    module. The genders module is the preferred interface to genders.

* Changes in pdsh-2.17 (2008-09-23)
===================================
 -- Ignore multiple consecutive ':' characters in host list argument to
     -w option. Only a single ':' by itself will be interpreted as the
     special "rcmd_type:hosts" syntax.
 -- dshbak: Allow for ':' in pdsh output lines. 
     (patch from Ashley Pittman)
 -- Fix for compile against glibc 2.8, which no longer defines ARG_MAX 
     (patch from Tom 'spot' Callaway via sf.net).
 -- Include missing unistd.h in hostlist.h.
     (patch from Ashley Pittman)
 -- Fix compile on Solaris by updating to latest ACX_PTHREAD autoconf
     macro from autoconf-archive.cryp.to.

* Changes in pdsh-2.16 (2008-03-19)
===================================
 -- Don't attempt to read WCOLL file unless no other host
     selection method is utilized.
 -- (genders) Don't attempt to read a genders file if no genders 
     options are used.
 -- When specifying rcmd_type via -w (i.e. [rcmd_type:][user@]host)
     have rcmd_type apply across all hosts until the next rcmd
     specification. That is ssh:host1,host2 now uses ssh for both
     host1 and host2. Prior to this change, ssh would only be used
     to contact host1. Same change for [user].
 -- Check for valid fanout specified to -f option.
 -- Always sort output of dshbak, and remove dshbak -s option.
 -- Strip leading space (added by pdsh) from dsbak output.

* Changes in pdsh-2.15 (2007-10-24)
===================================
 -- Refactor ssh module to use built in "pipecmd" support
    (same code as the "exec" module)
 -- Add connect timeout support for ssh implementations which support it.
    By default, the OpenSSH "-oConnectTimeout=%d" option is used. This
    can be overridden at configure time using 

     --with-ssh-connect-timeout-option="OPTION"

    where OPTION should contain one %d which will be expanded to the
    actual timeout value specified on the command line.
 -- Add ncurses-devel to pdsh.spec BuildRequires.

* Changes in pdsh-2.14 (2007-06-22)
===================================
 -- Fix compile error in src/pdsh/mod.c when using --enable-static-modules.
 -- Allow conditional and static build of "exec" rcmd module.
 -- (slurm) Re-order headers in slurm module to avoid redefinition 
    of pdsh bool type.

* Changes in pdsh-2.13 (2007-06-06)
===================================
 -- New "exec" rcmd module for executing arbitrary commands. 
    (Thanks to Christopher Maestas <cdmaest at sandia dot gov> 
    for the idea.)
 -- New -N option to disable hostname: prefix on lines of output.
 -- dshbak: Allow host range compression for numerically keyed hosts
    which have non-numeric suffix.
 -- Fix for compilation problem on some machines for sshcmd.c.
 -- Fix for erroneous command timeouts with ssh due to stray signals.
 -- Fix handling of empty lines when parsing WCOLL files.

* Changes in pdsh-2.12 (2006-12-11)
===================================
 -- Fix Solaris build.
 -- New command rpdcp(1) ("reverse" pdcp) copies files from remote
    hosts to the local machine (with remote hostname appended).
 -- Do not truncate host domain in output labels if any domains differ.
 -- (genders) Default user name may be specified to pdsh_rcmd_type attr
    by prepending "user@".
 -- (slurm) `-j' "all" parameter to target all nodes running SLURM jobs.
 -- (slurm) Fix for build issue against slurm-1.0.
 -- Minor code cleanup.
 -- Minor RPM spec file cleanup.

* Changes in pdsh-2.11 (2006-07-26)
===================================
 -- Fix for WCOLL file contents unconditionally added to host list.
    Prior behavior was to have -w override WCOLL.
 -- Supply more specific errors when pdsh detects that the path to
    pdsh modules is insecure.
 -- Fix man page typos.
 -- Fix compile for Tru64.
 -- (xcpu) Use lexec facility.
 -- New dshbak -s option to sort output.
 -- Allow users to cancel pending threads by issuing ctrl-C ctrl-Z
    (ctrl-Z within one second of initial ctrl-C). Pending threads
    are those threads which have not yet invoked a remote command.

* Changes in pdsh-2.10 (2006-03-22)
===================================
 -- Fix for -w hosts parsing bug.
 -- Fix missing support for "-w user@hosts" in pdsh-2.9.
 -- Add support for command history in interactive mode with readline.
    Command history file is ~/.pdsh/history.
 -- (xcpu) Support for signals and -S.
 
* Changes in pdsh-2.9 (2006-03-15)
===================================
 -- Add netgroup module which provides -g/-X groupname option to read
    list of hosts from netgroup entries (/etc/netgroup or NIS).
 -- Add support for specifying alternate rcmd connection type and/or
    remote username for a subset of hosts on the commandline. Format
    is ``-w [rcmd_type:][user@]hosts...''
 -- (genders) Add support for pdsh_rcmd_type genders attribute to set
    the default rcmd connection type for certain hosts via the genders
    database.
 -- Add a trivial form of privilege separation to pdsh when pdsh or pdcp 
    binaries are installed setuid root. This is necessary to safely support 
    multiple rcmd connection methods in a single invocation of pdsh. 
    Currently, the privileged process in pdsh is only used to serve reserved 
    ports to threads that need it (e.g. rsh, qsh), while allowing all threads
    to still run as the "user" to support ssh and mrsh. This is *not*
    a security enhancement, and doesn't make installing pdsh setuid root 
    any more secure.
 -- (ssh) Allow arguments to ssh command to be overridden and augmented
    with environment variables PDSH_SSH_ARGS and PDSH_SSH_ARGS_APPEND.
 -- Fix for race condition in ssh support which caused occasional pdsh
    hang, especially when running with a larger fanout.
 -- Fix for ``-x hosts'' processing bug: occasionally hosts provided to
    -x option would not be removed from the list of targets because the
    list of excluded hosts was being processed too early.
 -- Fixes for Mac OSX support: Update libtool/ltmain.sh and test for
    and include sys/uio.h.
 -- Add support for LANL XCPU.

* Changes in pdsh-2.8 (2005-10-13)
===================================
 -- (dshgroup) Fix bug in dshgroup module which resulted in the module
    trying to read only from ~/.dsh/group/ even if /etc/dsh/group/
    should have been used.  (patch from Joe Ramey <ramey@it.com>)
 -- Print error strings returned by remote RCP server instead of generic
    "Failed to initiate RCP protocol."
 -- Allow hostlist expressions to have suffixes (e.g. foo[0-10]-bar).
 -- Fix for command timeout when its value is less than connect timeout.
 -- (ssh) Remove ssh_reaper thread and instead reap child ssh processes
    within each thread spawned by pdsh. This fixes reported problem
    under LinuxThreads.
 -- (sdr) Fix assertion failure if host_responds info exists in SDR
    for a node number that doesn't exist in Node class. 

* Changes in pdsh-2.7 (2005-08-15)
===================================
 -- Add dshgroup module which adds -g/-X groupname to utilize dsh-style
    "group" files in ~/.dsh/group/groupname || /etc/dsh/group/groupname.
 -- Fix possible truncation of output when poll() returns POLLHUP before
    all data has been read. 
 -- Close pdsh file descriptors opened to ssh commands before invoking 
    subsequent ssh connections to fix possible pdsh hang with -Rssh.
 -- Replace setenv() & seteuid() with putenv() & setuid() for portability.
 -- Module path elements now considered secure if they have same ownership
    as pdsh binary (as well as either root or current user). Allows pdsh
    to be installed with other than root ownership.

* Changes in pdsh-2.6 (2005-08-02)
===================================
 -- (ssh) Fix pdcp hang with ssh on HP-UX (and possibly other systems).
    (Yehia Beyh <Yehia.Beyh@hp.com>)
 -- Remove pdcp debugging code released with pdsh-2.5.

* Changes in pdsh-2.5  (2005-07-21)
===================================
 -- (ssh) Added ssh "reaper" thread to collect exit status of ssh commands
    invoked by pdsh. At the end of the pdsh or pdcp run, any non-zero
    exit status from ssh will be written to stderr instead of silently 
    ignored.
 -- (genders) Added genders "query" support for genders versions that
    support this functionality. (Al Chu <chu11@llnl.gov>)
 -- (ssh) Fix for a possible pdsh hang when running with ssh on Mac OS X.
 -- (qshell) Fix for m/qshd failure on nodes without an elan3 adapter.
    (Daniel Blueman <daniel.blueman@quadrics.com>)
 -- Update path to xinetd script in pdsh specfile (Daniel Blueman).
 -- Don't increase number of open files rlimit until after rcmd modules
    are initialized in case rcmd module increases fanout.
 -- Don't consider directory permissions insecure when other has write
    access if the sticky bit is set.

* Changes in pdsh-2.4  (2004-12-08)
===================================
 -- (mrsh) Update to mrsh protocol version 2.1, provided by mrsh >= 2.3.
    This version of the protocol allows connections over "localhost."

* Changes in pdsh-2.3  (2004-11-22)
===================================
 -- Support copying files >2GB in pdcp.
 -- Increase max number of open files to the hard limit if 
    a large fanout is requested.

* Changes in pdsh-2.2  (2004-07-30)
===================================
 -- Do not abort when excluded hosts are not within the target list.
 -- (slurm) Allow multiple SLURM jobids to be passed to -j option.

* Changes in pdsh-2.1  (2004-06-09)
===================================
 -- Fix dshbak script to allow whitespace in hostname "tags"
    (Ashley Pittman <ashley@quadrics.com>).
 -- Fix broken QsNet support on Elan3 systems without libelanctrl.
 -- Explicitly set thread stack size to 128K to avoid arbitrarily
    large stack set from current rlimit under Linux/NPTL.

* Changes in pdsh-2.0  (2004-05-26)
===================================
 -- Reorganized pdsh source tree.
 -- Modularized pdsh functionality into dynamic runtime "modules."
   - Moved remote command api (e.g. rsh, ssh, etc.) into "rcmd" modules.
   - New pdsh option `-R' for selection of rcmd type at runtime.
   - All other optional functionality moved into "misc" modules (e.g. genders).
   - See README.modules in pdsh distribution for more information.
 -- Package core pdsh functionality and pdsh modules separately in order to
    make pdsh installation much more flexible.
 -- Removed pdsh dependency on rcp. Rcp server code used by pdsh is now
    coded directly into pdcp. (Note: This means pdcp *must* be installed
    on all target nodes)
 -- Added mrsh and mqshell client modules, as well as mqshd server for Munge
    authenticated rcmd() support.
 -- Added SLURM module to build list of targets from SLURM allocations.
 -- (genders) Added "-X" option to exclude targets based on genders attributes.
 -- (genders) Multiple attributes may now be passed to "-g" and "-X."
 -- (genders) "-a" renamed to "-A" -- "-a" now skips any nodes in genders
    database with "pdsh_all_skip" attribute.
 -- (genders) New "-F" option to specify non-default genders file.
 -- QsNet support now requires "/etc/elanhosts" config file (see README.QsNet).
 -- QsNet support includes support for QSW elanctrl interface. (Elan3/Elan4)
 -- Added support for running Elan network error resolver thread in qshd/mqshd.
    (Elan3 only)
 -- Nominal support for Elan multirail jobs (largely untested). See
    qshell and mqshell `-r railmask' option.

$Id$
