Hello community,

here is the log from the commit of package clusterssh for openSUSE:Factory 
checked in at 2019-08-24 18:48:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/clusterssh (Old)
 and      /work/SRC/openSUSE:Factory/.clusterssh.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "clusterssh"

Sat Aug 24 18:48:28 2019 rev:11 rq:725705 version:4.14

Changes:
--------
--- /work/SRC/openSUSE:Factory/clusterssh/clusterssh.changes    2019-03-26 
15:43:38.296202202 +0100
+++ /work/SRC/openSUSE:Factory/.clusterssh.new.7948/clusterssh.changes  
2019-08-24 18:48:52.509742998 +0200
@@ -1,0 +2,10 @@
+Thu Aug 22 18:34:32 UTC 2019 - Michael Ströder <mich...@stroeder.com>
+
+- Update to new upstream release v4.14
+  * Include README within the repository, not just created tar.gz files
+  * Add 'autoquit' setting to 'File' menu (Github issue #114)
+  * Correct macro_hostname to be the FQDN of the server where
+    cssh is being run (Github issue #116)
+  * Add in user defined macros
+
+-------------------------------------------------------------------

Old:
----
  v4.13.2_02.tar.gz

New:
----
  v4.14.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ clusterssh.spec ++++++
--- /var/tmp/diff_new_pack.iCLiPn/_old  2019-08-24 18:48:54.441742812 +0200
+++ /var/tmp/diff_new_pack.iCLiPn/_new  2019-08-24 18:48:54.441742812 +0200
@@ -17,8 +17,8 @@
 
 
 Name:           clusterssh
-%define dullver 4.13.2_02
-Version:        4.13.2.02
+%define dullver 4.14
+Version:        4.14
 Release:        0
 Summary:        Multiplex SSH sessions onto many hosts using multiple terminals
 License:        GPL-1.0-or-later OR Artistic-1.0

++++++ v4.13.2_02.tar.gz -> v4.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/.gitignore 
new/clusterssh-4.14/.gitignore
--- old/clusterssh-4.13.2_02/.gitignore 2019-01-14 21:06:43.000000000 +0100
+++ new/clusterssh-4.14/.gitignore      2019-08-21 22:15:44.000000000 +0200
@@ -13,6 +13,5 @@
 /MYMETA.json
 /MYMETA.yml
 /pm_to_blib
-/README
 *.swp
 *.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/Changes 
new/clusterssh-4.14/Changes
--- old/clusterssh-4.13.2_02/Changes    2019-01-14 21:06:43.000000000 +0100
+++ new/clusterssh-4.14/Changes 2019-08-21 22:15:44.000000000 +0200
@@ -1,5 +1,11 @@
 Revision history for {{$dist->name}}
 
+4.14 2019-08-21 Duncan Ferguson <duncan_fergu...@user.sf.net>
+- Include README within the repository, not just created tar.gz files
+- Add 'autoquit' setting to 'File' menu (Github issue #114)
+- Correct macro_hostname to be the FQDN of the server where cssh is being run 
(Github issue #116)
+- Add in user defined macros
+
 4.13.2_02 2019-01-14 Duncan Ferguson <duncan_fergu...@user.sf.net>
 - Fix Getopt-Long minimum version
 - Fix excess test output when Sort::Naturally isn't installed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/README 
new/clusterssh-4.14/README
--- old/clusterssh-4.13.2_02/README     1970-01-01 01:00:00.000000000 +0100
+++ new/clusterssh-4.14/README  2019-08-21 22:15:44.000000000 +0200
@@ -0,0 +1,745 @@
+NAME
+    cssh - Cluster administration tool
+
+VERSION
+    This documentation is for version: 4.14
+
+SYNOPSIS
+    cssh [-a '<command>'] [-K <seconds>] [-q] [-c '<filename>'] [-x <cols>]
+    [-C '<filename>'] [--debug [[...] || <INTEGER>]] [-d] [-e
+    '<[user@]<host>[:port]>'] [--fillscreen] [-f '<font>'] [-h] [-L '[tag]']
+    [-H] [-o '<STRING>'] [-p <port>] [-Q] [-y <rows>] [-s] [-r '<filename>']
+    [-t '<STRING>'] [-g] [-T '<title>'] [-u] [-?] [-A] [-l '<username>']
+    [-v]
+
+DESCRIPTION
+    The command opens an administration console and an xterm to all
+    specified hosts. Any text typed into the administration console is
+    replicated to all windows. All windows may also be typed into directly.
+
+    This tool is intended for (but not limited to) cluster administration
+    where the same configuration or commands must be run on each node within
+    the cluster. Performing these commands all at once via this tool ensures
+    all nodes are kept in sync.
+
+    Connections are opened using ssh which must be correctly installed and
+    configured.
+
+    Extra caution should be taken when editing files as lines may not
+    necessarily be in the same order; assuming line 5 is the same across all
+    servers and modifying that is dangerous. It's better to search for the
+    specific line to be changed and double-check all terminals are as
+    expected before changes are committed.
+
+  Further Notes
+    Please also see "KNOWN BUGS".
+
+    *   The dotted line on any sub-menu is a tear-off, i.e. click on it and
+        the sub-menu is turned into its own window.
+
+    *   Unchecking a hostname on the Hosts sub-menu will unplug the host
+        from the cluster control window, so any text typed into the console
+        is not sent to that host. Re-selecting it will plug it back in.
+
+    *   If your window manager menu bars are obscured by terminal windows
+        see the "screen_reserve_XXXXX" options in the
+        $HOME/.clusterssh/config file (see "FILES").
+
+    *   If the terminals overlap too much see the "terminal_reserve_XXXXX"
+        options in the $HOME/.clusterssh/config file (see "FILES").
+
+    *   When using ClusterSSH on a large number of systems to connect to a
+        single system using an SSH utility (e.g. you issue a command to to
+        copy a file using scp from the remote computers to a single host)
+        and when these connections require authentication (i.e. you are
+        going to authenticate with a password), the sshd daemon at that
+        location may refuse connections after the number "MaxStartups" limit
+        in sshd_config is exceeded. (If this value is not set, it defaults
+        to 10). This is expected behavior; sshd uses this mechanism to
+        prevent DoS attacks from unauthenticated sources. Please tune
+        sshd_config and reload the SSH daemon, or consider using the
+        ~/.ssh/authorized_keys mechanism for authentication if you encounter
+        this problem.
+
+    *   If client windows fail to open, try running:
+
+        "cssh -e {single host name}"
+
+        This will test the mechanisms used to open windows to hosts. This
+        could be due to either the "-xrm" terminal option which enables
+        "AllowSendEvents" (some terminals do not require this option, other
+        terminals have another method for enabling it - see your terminal
+        documentation) or the configuration of "ssh".
+
+OPTIONS
+    Some of these options may also be defined within the configuration file.
+    Default options are shown as appropriate.
+
+    --action '<command>', -a '<command>'
+        Run the command in each session, e.g. "-a 'vi /etc/hosts'" to drop
+        straight into a vi session.
+
+    --autoclose <seconds>, -K <seconds>
+        Number of seconds to wait before closing finished terminal windows.
+
+    --autoquit, -q
+        Toggle automatically quitting after the last client window has
+        closed (overriding the config file).
+
+    --cluster-file '<filename>', -c '<filename>'
+        Use supplied file as additional cluster file (see also "FILES").
+
+    --cols <cols>, -x <cols>
+        Number of columns
+
+    --config-file '<filename>', -C '<filename>'
+        Use supplied file as additional configuration file (see also
+        "FILES").
+
+    --debug [[...] || <INTEGER>]
+        Enable debugging. Either a level can be provided or the option can
+        be repeated multiple times. Maximum level is 9.
+
+    --dump-config, -d
+        Dump the current configuration in the same format used by the
+        $HOME/.clusterssh/config file.
+
+    --evaluate '<[user@]<host>[:port]>', -e '<[user@]<host>[:port]>'
+        Display and evaluate the terminal and connection arguments to
+        display any potential errors. The <hostname> is required to aid the
+        evaluation.
+
+    --fillscreen
+        Resize terminal windows to fill the whole available screen
+
+    --font '<font>', -f '<font>'
+        Specify the font to use in the terminal windows. Use standard X font
+        notation such as "5x8".
+
+    --help, -h
+        Show basic help text and exit
+
+    --list '[tag]', -L '[tag]'
+        List available cluster tags. Tag is optional. If a tag is provided
+        then hosts for that tag are listed. NOTE: format of output changes
+        when using "--quiet" or "-Q" option.
+
+    --man, -H
+        Show full help text (the man page) and exit
+
+    --options '<STRING>', -o '<STRING>'
+        Specify arguments to be passed to ssh when making the connection.
+        NOTE: options for ssh should normally be put into the ssh
+        configuration file; see "ssh_config" and $HOME/.ssh/config for more
+        details.
+
+        Default: -x -o ConnectTimeout=10
+
+    --port <port>, -p <port>
+        Specify an alternate port for connections.
+
+    --quiet, -Q
+        Do not output extra text when using some options
+
+    --rows <rows>, -y <rows>
+        Number of rows
+
+    --show-history, -s
+        Show history within console window.
+
+    --tag-file '<filename>', -r '<filename>'
+        Use supplied file as additional tag file (see also "FILES")
+
+    --term-args '<STRING>', -t '<STRING>'
+        Specify arguments to be passed to terminals being used.
+
+    --tile, -g
+        Toggle window tiling (overriding the config file).
+
+    --title '<title>', -T '<title>'
+        Specify the initial part of the title used in the console and client
+        windows.
+
+    --unique-servers, -u
+        Toggle connecting to each host only once when a hostname has been
+        specified multiple times.
+
+    --usage, -?
+        Show synopsis and exit
+
+    --use-all-a-records, -A
+        If a hostname resolves to multiple IP addresses, toggle whether or
+        not to connect to all of them, or just the first one (see also
+        config file entry).
+
+    --username '<username>', -l '<username>'
+        Specify the default username to use for connections (if different
+        from the currently logged in user). NOTE: will be overridden by
+        <user>@<host>.
+
+    --version, -v
+        Show version information and exit
+
+ARGUMENTS
+    The following arguments are supported:
+
+    [user@]<hostname>[:port] ...
+        Open an xterm to the given hostname and connect to the
+        administration console. The optional port number can be used if the
+        server is not listening on the standard port.
+
+    <tag> ...
+        Open a series of xterms defined by <tag> in one of the supplementary
+        configuration files (see "FILES").
+
+        Note: specifying a username on a cluster tag will override any
+        usernames defined in the cluster.
+
+KEY SHORTCUTS
+    The following key shortcuts are available within the console window, and
+    all of them may be changed via the configuration files.
+
+    Control-Shift-plus
+        Open the 'Add Host(s) or Cluster(s)' dialogue box. Multiple host or
+        cluster names can be entered, separated by spaces.
+
+    Alt-n
+        Paste in the hostname part of the specific connection string to each
+        client, minus any username or port, e.g.
+
+        "scp /etc/hosts server:files/<Alt-n>.hosts"
+
+        would replace the <Alt-n> with the client's name in each window.
+
+    Alt-l
+        Paste in the hostname of the server cssh is being run on
+
+    Alt-q
+        Quit the program and close all connections and windows.
+
+    Alt-r
+        Retile all the client windows.
+
+    Alt-u
+        Paste in the username for the connection
+
+    Alt-1
+    Alt-2
+    Alt-3
+    Alt-4
+        Run the matching user defined macro on the server and send the
+        output to the client
+
+EXAMPLES
+    Open up a session to 3 servers
+        $ cssh server1 server2 server3
+
+    Open up a session to a cluster of servers identified by the tag 'farm1'
+    and give the controlling window a specific title, where the tag is
+    defined in one of the default configuration files
+        $ cssh -T 'Web Farm Cluster 1' farm1
+
+    Connect to different servers using different login names. NOTE: this can
+    also be achieved by setting up appropriate options in the configuration
+    files. Do not close the console when the last terminal exits.
+        $ cssh user1@server1 admin@server2
+
+    Open up a cluster defined in a non-default configuration file
+        $ cssh -c $HOME/cssh.extra_clusters db_cluster
+
+    Override the configured/default port to use 2022 instead
+        $ cssh -p 2022 server1 server2
+
+FILES
+    /etc/clusters, $HOME/.clusterssh/clusters
+        These files contain a list of tags to server names mappings. When
+        any name is used on the command line it is checked to see if it is a
+        tag. If it is a tag, then the tag is replaced with the list of
+        servers. The format is as follows:
+
+        <tag> [user@]<server>[:port] [user@]<server>[:port] [...]
+
+        e.g.
+
+            # List of servers in live
+            live admin1@server1 admin2@server2:2022 server3 server4
+
+        All comments (marked by a #) and blank lines are ignored. Tags may
+        be nested, but be aware of using recursive tags as they are not
+        checked for.
+
+        Servers can be defined using expansion macros:
+
+        "webservers websvr{a,b,c}"
+
+        would be expanded to
+
+        "webservers websvra websvrb websvrc"
+
+        and
+
+        "webservers websvr{6..9}"
+
+        would be expanded to
+
+        "webservers websvr6 websvr7 websvr8 websvr9"
+
+        Extra cluster files may also be specified either as an option on the
+        command line (see "cluster-file") or in the user's
+        $HOME/.clusterssh/config file (see "extra_cluster_file"
+        configuration option).
+
+        NOTE: the last tag read overwrites any pre-existing tag of that
+        name.
+
+        NOTE: there is a special cluster tag called "default" - any tags or
+        hosts included within this tag will be automatically opened if
+        nothing is specified on the command line.
+
+    /etc/tags, $HOME/.clusterssh/tags
+        Very similar to clusters files but the definition is reversed. The
+        format is:
+
+        <host> <tag> [...]
+
+        This allows one host to be specified as a member of a number of
+        tags. This format can be clearer than using clusters files.
+
+        Extra tag files may be specified either as an option (see
+        "tag-file") or within the user's $HOME/.clusterssh/config file (see
+        "extra_tag_file" configuration option).
+
+        NOTE: All tags are added together
+
+    /etc/csshrc & $HOME/.clusterssh/config
+        This file contains configuration overrides - the defaults are as
+        marked. Default options are overwritten first by the global file,
+        and then by the user file.
+
+        NOTE: values for entries do not need to be quoted unless it is
+        required for passing arguments, e.g.
+
+        "terminal_allow_send_events="-xrm '*.VT100.allowSendEvents:true'""
+
+        should be written as
+
+        "terminal_allow_send_events=-xrm '*.VT100.allowSendEvents:true'"
+
+        auto_close = 5
+            Close terminal window after this many seconds. If set to 0 will
+            instead wait on input from the user in each window before
+            closing. See also --autoclose and --no-autoclose
+
+        auto_quit = 1
+            Automatically quit after the last client window closes. Set to 0
+            to disable. See also --autoquit
+
+        auto_wm_decoration_offsets = no
+            Enable or disable alternative algorithm for calculating terminal
+            positioning.
+
+        comms = ssh
+            Sets the default communication method (initially taken from the
+            name of the program, but can be overridden here).
+
+        console_position = <null>
+            Set the initial position of the console - if empty then let the
+            window manager decide. Format is '+<x>+<y>', i.e. '+0+0' is top
+            left hand corner of the screen, '+0-70' is bottom left hand side
+            of screen (more or less).
+
+        external_command_mode = 0600
+            File mode bits for the external_command_pipe.
+
+        external_command_pipe = <null>
+            Define the full path to an external command pipe that can be
+            written to for controlling some aspects of ClusterSSH, such as
+            opening sessions to more clusters.
+
+            Commands:
+
+            "open <tag|hostname>" - open new sessions to provided tag or
+            hostname
+
+            "retile" - force window retiling
+
+            e.g.: "echo 'open localhost'" /path/to/external_command_pipe >>
+
+        external_cluster_command = <null>
+            Define the full path to an external command that can be used to
+            resolve tags to host names. This command can be written in any
+            language. The script must accept a list of tags to resolve and
+            output a list of hosts (space separated on a single line). Any
+            tags that cannot be resolved should be returned unchanged.
+
+            A non-0 exit code will be counted as an error, a warning will be
+            printed and output ignored.
+
+            If the external command is given a "-L" option it should output
+            a list of tags (space separated on a single line) it can resolve
+
+        extra_cluster_file = <null>
+            Define an extra cluster file in the format of /etc/clusters.
+            Multiple files can be specified, separated by commas. Both ~ and
+            $HOME are acceptable as a reference to the user's home
+            directory, e.g.
+
+            "extra_cluster_file = ~/clusters, $HOME/clus"
+
+        extra_tag_file = <null>
+            Define an extra tag file in the format of /etc/tags. Multiple
+            files can be specified, separated by commas. Both ~ and $HOME
+            are acceptable as a reference to the user's home directory, e.g.
+
+            "extra_tag_file = ~/tags, $HOME/tags"
+
+        key_addhost = Control-Shift-plus
+            Default key sequence to open AddHost menu. See "KEY SHORTCUTS"
+            for more information.
+
+        hide_menu = 0
+            If set to 1, hide the menu bar (File, Hosts, Send, Help) in the
+            console.
+
+        key_clientname = Alt-n
+            Default key sequence to send cssh client names to client. See
+            "KEY SHORTCUTS" for more information.
+
+        key_localname = Alt-l
+            Default key sequence to send hostname of local server to client.
+            See "KEY SHORTCUTS" for more information.
+
+        key_paste = Control-v
+            Default key sequence to paste text into the console window. See
+            "KEY SHORTCUTS" for more information.
+
+        key_quit = Control-q
+            Default key sequence to quit the program (will terminate all
+            open windows). See "KEY SHORTCUTS" for more information.
+
+        key_retilehosts = Alt-r
+            Default key sequence to retile host windows. See "KEY SHORTCUTS"
+            for more information.
+
+        key_username = Alt-u
+            Default key sequence to send username to client. See "KEY
+            SHORTCUTS" for more information.
+
+        key_user_1 = Alt-1
+        key_user_2 = Alt-2
+        key_user_3 = Alt-3
+        key_user_4 = Alt-4
+            Default key sequence to send user defined macros to client. If
+            the matching macro_user_1 macro is undefined, the sequence is
+            passed straight to the terminal. See "KEY SHORTCUTS" for more
+            information.
+
+        macro_servername = %s
+        macro_hostname = %h
+        macro_username = %u
+        macro_newline = %n
+        macro_version = %v
+        macro_user_1 = %1
+        macro_user_2 = %2
+        macro_user_3 = %3
+        macro_user_4 = %4
+            Change the replacement macro used when either using a 'Send'
+            menu item, or when pasting text into the main console.
+
+        macro_user_1_command =
+        macro_user_2_command =
+        macro_user_3_command =
+        macro_user_4_command =
+            User defined macros - the macro is run through the shell on the
+            server and the output is sent to the client. For example,
+
+            "macro_user_1_command=echo echo macro_user_1"
+
+                        would send the text C<echo macro_user_1> into the 
terminal session.
+
+            "macro_user_1_command=env | grep CSSH"
+
+                        would send the CSSH environment variables to the 
client.
+
+            The following environment variables are set in the shell of the
+            macro process
+
+            "CSSH_SERVERNAME"
+            "CSSH_HOSTNAME"
+            "CSSH_USERNAME"
+            "CSSH_CONNECTION_STRING"
+            "CSSH_CONNECTION_PORT"
+            "CSSH_VERSION"
+
+        macros_enabled = yes
+            Enable or disable macro replacement. Note: this affects all the
+            "macro_*" variables above.
+
+        max_addhost_menu_cluster_items = 6
+            Maximum number of entries in the 'Add Host' menu cluster list
+            before scrollbars are used
+
+        max_host_menu_items = 30
+            Maximum number of hosts to put into the host menu before
+            starting a new column
+
+        menu_host_autotearoff = 0
+        menu_send_autotearoff = 0
+            When set to non-0 will automatically tear-off the host or send
+            menu at program start
+
+        mouse_paste = Button-2 (middle mouse button)
+            Default key sequence to paste text into the console window using
+            the mouse. See "KEY SHORTCUTS" for more information.
+
+        rsh = /path/to/rsh
+        ssh = /path/to/ssh
+        telnet = /path/to/telnet
+            Set the path to the specific binary to use for the communication
+            method, else uses the first match found in $PATH
+
+        rsh_args = <blank>
+        ssh_args = "-x -o ConnectTimeout=10"
+        telnet_args = <blank>
+            Sets any arguments to be used with the communication method
+            (defaults to ssh arguments).
+
+            NOTE: The given defaults are based on OpenSSH, not commercial
+            ssh software.
+
+            NOTE: Any "generic" change to the method (e.g., specifying the
+            ssh port to use) should be done in the medium's own config file
+            (see "ssh_config" and $HOME/.ssh/config).
+
+        screen_reserve_top = 0
+        screen_reserve_bottom = 60
+        screen_reserve_left = 0
+        screen_reserve_right = 0
+            Number of pixels from the screen's side to reserve when
+            calculating screen geometry for tiling. Setting this to
+            something like 50 will help keep cssh from positioning windows
+            over your window manager's menu bar if it draws one at that side
+            of the screen.
+
+        terminal = /path/to/xterm
+            Path to the X-Windows terminal used for the client.
+
+        terminal_args = <blank>
+            Arguments to use when opening terminal windows. Otherwise takes
+            defaults from $HOME/.Xdefaults or $HOME/.Xresources file.
+
+        terminal_chdir = 0
+            When non-0, set the working directory for each terminal as per
+            'terminal_chdir_path'
+
+        terminal_chdir_path = $HOME/.clusterssh/work/%s
+            Path to use as working directory for each terminal when
+            'terminal_chdir' is enabled. The path provided is passed through
+            the macro parser (see the section above on 'macros_enabled'.
+
+        terminal_font = 6x13
+            Font to use in the terminal windows. Use standard X font
+            notation.
+
+        terminal_reserve_top = 5
+        terminal_reserve_bottom = 0
+        terminal_reserve_left = 5
+        terminal_reserve_right = 0
+            Number of pixels from the terminal's side to reserve when
+            calculating screen geometry for tiling. Setting these will help
+            keep cssh from positioning windows over your scroll and title
+            bars or otherwise overlapping the windows too much.
+
+        terminal_colorize = 1
+            If set to 1 (the default), then "-bg" and "-fg" arguments will
+            be added to the terminal invocation command-line. The terminal
+            will be colored in a pseudo-random way based on the host name;
+            while the color of a terminal is not easily predicted, it will
+            always be the same color for a given host name. After a while,
+            you will recognize hosts by their characteristic terminal color.
+
+        terminal_bg_style = dark
+            If set to "dark", the terminal background will be set to black
+            and the foreground to the pseudo-random color. If set to
+            "light", then the foreground will be black and the background
+            the pseudo-random color. If terminal_colorize is "zero", then
+            this option has no effect.
+
+        terminal_size = 80x24
+            Initial size of terminals to use. NOTE: the number of lines (24)
+            will be decreased when resizing terminals for tiling, not the
+            number of characters (80).
+
+        terminal_title_opt = -T
+            Option used with "terminal" to set the title of the window
+
+        terminal_allow_send_events = -xrm '*.VT100.allowSendEvents:true'
+            Option required by the terminal to allow XSendEvents to be
+            received
+
+        title = cssh
+            Title of windows to use for both the console and terminals.
+
+        unmap_on_redraw = no
+            Tell Tk to use the UnmapWindow request before redrawing terminal
+            windows. This defaults to "no" as it causes some problems with
+            the FVWM window manager. If you are experiencing problems with
+            redraws, you can set it to "yes" to allow the window to be
+            unmapped before it is repositioned.
+
+        use_all_a_records = 0
+            If a hostname resolves to multiple IP addresses, set to 1 to
+            connect to all of them, not just the first one found. See also
+            "--use-all-a-records"}
+
+        use_hotkeys = 1
+            Setting to 0 will disable all hotkeys.
+
+        use_natural_sort = 0
+            Windows will normally sort in alphabetical order, i.e.: host1,
+            host11, host2. Setting to this 1 will change the sort order,
+            i.e.: host1, host2, host11. NOTE: You must have the perl module
+            Sort::Naturally installed.
+
+        user = $LOGNAME
+            Sets the default user for running commands on clients.
+
+        window_tiling = 1
+            Perform window tiling (set to 0 to disable)
+
+        window_tiling_direction = right
+            Direction to tile windows, where "right" means starting top left
+            and moving right and then down, and anything else means starting
+            bottom right and moving left and then up
+
+        NOTE: The key shortcut modifiers must be in the form "Control",
+        "Alt" or "Shift", e.g. with the first letter capitalised and the
+        rest lower case. Keys may also be disabled individually by setting
+        to the word "null".
+
+    $HOME/.clusterssh/send_menu
+        This (optional) file contains items to populate the send menu. The
+        default entry could be written as:
+
+          <send_menu>
+            <menu title="Use Macros">
+                <toggle/>
+                <accelerator>ALT-p</accelerator>
+            </menu>
+            <menu title="Remote Hostname">
+                <command>%s</command>
+                <accelerator>ALT-n</accelerator>
+            </menu>
+            <menu title="Local Hostname">
+                <command>%s</command>
+                <accelerator>ALT-l</accelerator>
+            </menu>
+            <menu title="Username">
+                <command>%u</command>
+                <accelerator>ALT-u</accelerator>
+            </menu>
+            <menu title="Test Text">
+                <command>echo "ClusterSSH Version: %v%n</command>
+            </menu>
+          </send_menu>
+
+        Submenus can also be specified as follows:
+
+          <send_menu>
+            <menu title="Default Entries">
+              <detach>yes</detach>
+              <menu title="Hostname">
+                  <command>%s</command>
+                  <accelerator>ALT-n</accelerator>
+              </menu>
+            </menu>
+          </send_menu>
+
+        Caveats:
+
+        There is currently no strict format checking of this file.
+        The format of the file may change in the future
+        If the file exists, the default entry (Hostname) is not added
+
+        The following replacement macros are available (note: these can be
+        changed in the configuration file):
+
+        %s  Hostname part of the specific connection string to each client,
+            minus any username or port
+
+        %u  Username part of the connection string to each client
+
+        %h  Hostname of server where cssh is being run from
+
+        %n  "RETURN" code
+
+        NOTE: requires XML::Simple to be installed
+
+KNOWN BUGS
+    If you have any ideas about how to fix the below bugs, please get in
+    touch and/or provide a patch.
+
+    *   Swapping virtual desktops can cause a redraw of all the terminal
+        windows. This is due to a lack of distinction within Tk between
+        switching desktops and minimising/maximising windows. Until Tk can
+        tell the difference between the two events, there is no fix (apart
+        from rewriting everything directly in X).
+
+TROUBLESHOOTING
+    If you have issues running cssh, first try:
+
+    "cssh -e [user@]<hostname>[:port]"
+
+    This performs two tests to confirm cssh is able to work properly with
+    the settings provided within the $HOME/.clusterssh/config file (or
+    internal defaults).
+
+    1   Test the terminal window works with the options provided
+
+    2   Test ssh works to a host with the configured arguments
+
+    Configuration options to watch for in ssh are:
+
+    *   SSH doesn't understand "-o ConnectTimeout=10" - remove the option
+        from the $HOME/.clusterssh/config file
+
+    *   OpenSSH-3.8 using untrusted ssh tunnels - use "-Y" instead of "-X"
+        or use "ForwardX11Trusted yes" in $HOME/.ssh/ssh_config (if you
+        change the default ssh options from "-x" to "-X")
+
+SUPPORT AND REPORTING BUGS
+    A web site for comments, requests, bug reports and bug fixes/patches is
+    available at: <https://github.com/duncs/clusterssh>
+
+    If you require support, please run the following commands and create an
+    issue via: <https://github.com/duncs/clusterssh/issues>
+
+    "perl -V"
+
+    "perl -MTk -e 'print $Tk::VERSION,$/'"
+
+    "perl -MX11::Protocol -e 'print $X11::Protocol::VERSION,$/'"
+
+    "cat /etc/csshrc $HOME/.clusterssh/config"
+
+    Using the debug option (--debug) will turn on debugging output. Repeat
+    the option to increase the amount of debug. However, if possible please
+    only use this option with one host at a time, e.g. "cssh --debug <host>"
+    due to the amount of output produced (in both main and child windows).
+
+SEE ALSO
+    <https://github.com/duncs/clusterssh/wiki/>, "ssh", Tk::overview,
+    X11::Protocol, "perl"
+
+AUTHOR
+    Duncan Ferguson, "<duncan_j_ferguson at yahoo.co.uk>"
+
+LICENSE AND COPYRIGHT
+    Copyright 1999-2018 Duncan Ferguson.
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of either: the GNU General Public License as published
+    by the Free Software Foundation; or the Artistic License.
+
+    See http://dev.perl.org/licenses/ for more information.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Config.pm 
new/clusterssh-4.14/lib/App/ClusterSSH/Config.pm
--- old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Config.pm       2019-01-14 
21:06:43.000000000 +0100
+++ new/clusterssh-4.14/lib/App/ClusterSSH/Config.pm    2019-08-21 
22:15:44.000000000 +0200
@@ -49,6 +49,10 @@
     key_macros_enable       => "Alt-p",
     key_paste               => "Control-v",
     key_username            => "Alt-u",
+    key_user_1              => "Alt-1",
+    key_user_2              => "Alt-2",
+    key_user_3              => "Alt-3",
+    key_user_4              => "Alt-4",
     mouse_paste             => "Button-2",
     auto_quit               => "yes",
     auto_close              => 5,
@@ -103,6 +107,15 @@
     macro_username   => '%u',
     macro_newline    => '%n',
     macro_version    => '%v',
+    macro_user_1     => '%1',
+    macro_user_2     => '%2',
+    macro_user_3     => '%3',
+    macro_user_4     => '%4',
+
+    macro_user_1_command     => '',
+    macro_user_2_command     => '',
+    macro_user_3_command     => '',
+    macro_user_4_command     => '',
 
     max_addhost_menu_cluster_items => 6,
     menu_send_autotearoff          => 0,
@@ -279,6 +292,15 @@
         if ( $read_config{terminal_font} );
 
     $self->validate_args(%read_config);
+
+    # Look at the user macros and if not set remove the hotkey for them
+    for my $i (qw/ 1 2 3 4 /) {
+        if ( ! $self->{"macro_user_${i}_command"} ) {
+            delete $self->{"key_user_${i}"};
+        }
+    }
+
+    return $self;
 }
 
 sub load_configs {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Getopt.pm 
new/clusterssh-4.14/lib/App/ClusterSSH/Getopt.pm
--- old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Getopt.pm       2019-01-14 
21:06:43.000000000 +0100
+++ new/clusterssh-4.14/lib/App/ClusterSSH/Getopt.pm    2019-08-21 
22:15:44.000000000 +0200
@@ -152,7 +152,7 @@
     $self->add_option(
         spec => 'autoquit|q',
         help => $self->loc(
-            'Toggle automatically quiting after the last client window has 
closed (overriding the config file).'
+            'Toggle automatically quitting after the last client window has 
closed (overriding the config file).'
         ),
     );
     $self->add_option(
@@ -559,6 +559,12 @@
     output $self->loc(q{Retile all the client windows.});
     output '=item ', $self->parent->config->{key_username};
     output $self->loc(q{Paste in the username for the connection});
+    output '=item ', $self->parent->config->{key_user_1} || 'Alt-1';
+    output '=item ', $self->parent->config->{key_user_2} || 'Alt-2';
+    output '=item ', $self->parent->config->{key_user_3} || 'Alt-3';
+    output '=item ', $self->parent->config->{key_user_4} || 'Alt-4';
+    output $self->loc(q{Run the matching user defined macro on the server and 
send the output to the client});
+
     output '=back';
 
     output '=head1 ' . $self->loc('EXAMPLES');
@@ -694,7 +700,7 @@
 C<< open <tag|hostname> >> - open new sessions to provided tag or hostname
 
 C<< retile >> - force window retiling
-    
+
 e.g.: C<< echo 'open localhost' >> /path/to/external_command_pipe >>}
     );
 
@@ -768,15 +774,61 @@
         'L<KEY SHORTCUTS>'
     );
 
+    output '=item key_user_1 = Alt-1';
+    output '=item key_user_2 = Alt-2';
+    output '=item key_user_3 = Alt-3';
+    output '=item key_user_4 = Alt-4';
+    output $self->loc(
+        q{Default key sequence to send user defined macros to client.  If the 
matching [_2] macro is undefined, the sequence is passed straight to the 
terminal.  See [_1] for more information.},
+        'L<KEY SHORTCUTS>', 'L<macro_user_1>'
+    );
+
     output '=item macro_servername = %s';
     output '=item macro_hostname = %h';
     output '=item macro_username = %u';
     output '=item macro_newline = %n';
     output '=item macro_version = %v';
+    output '=item macro_user_1 = %1';
+    output '=item macro_user_2 = %2';
+    output '=item macro_user_3 = %3';
+    output '=item macro_user_4 = %4';
     output $self->loc(
         q{Change the replacement macro used when either using a 'Send' menu 
item, or when pasting text into the main console.}
     );
 
+    output '=item macro_user_1_command =';
+    output '=item macro_user_2_command =';
+    output '=item macro_user_3_command =';
+    output '=item macro_user_4_command =';
+
+    output $self->loc(
+        q{User defined macros - the macro is run through the shell on the 
server and the output is sent to the client.  For example,},
+    );
+
+    output "C<macro_user_1_command=echo echo macro_user_1>";
+    output $self->loc(
+        q{
+            would send the text [_1] into the terminal session.
+        },
+        'C<echo macro_user_1>'
+    );
+    output "C<macro_user_1_command=env | grep CSSH>";
+    output $self->loc(
+        q{
+            would send the CSSH environment variables to the client.
+        },
+    );
+
+    output $self->loc("The following environment variables are set in the 
shell of the macro process");
+    output '=over';
+    output '=item C<CSSH_SERVERNAME>';
+    output '=item C<CSSH_HOSTNAME>';
+    output '=item C<CSSH_USERNAME>';
+    output '=item C<CSSH_CONNECTION_STRING>';
+    output '=item C<CSSH_CONNECTION_PORT>';
+    output '=item C<CSSH_VERSION>';
+    output '=back';
+
     output '=item macros_enabled = yes';
     output $self->loc(
         q{Enable or disable macro replacement.  Note: this affects all the 
[_1] variables above.},
@@ -1127,17 +1179,17 @@
 
 =item $obj=ClusterSSH::Getopts->add_common_options ({ })
 
-Add common options used by most calling scripts into the allowed set for 
+Add common options used by most calling scripts into the allowed set for
 parsing from the command line
 
 =item $obj=ClusterSSH::Getopts->add_common_session_options ({ })
 
-Add common session options used by most calling scripts into the allowed 
+Add common session options used by most calling scripts into the allowed
 set for parsing from the command line
 
 =item $obj=ClusterSSH::Getopts->add_common_ssh_options ({ })
 
-Add common ssh options used by most calling scripts into the allowed 
+Add common ssh options used by most calling scripts into the allowed
 set for parsing from the command line
 
 =item $obj->getopts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Window/Tk.pm 
new/clusterssh-4.14/lib/App/ClusterSSH/Window/Tk.pm
--- old/clusterssh-4.13.2_02/lib/App/ClusterSSH/Window/Tk.pm    2019-01-14 
21:06:43.000000000 +0100
+++ new/clusterssh-4.14/lib/App/ClusterSSH/Window/Tk.pm 2019-08-21 
22:15:44.000000000 +0200
@@ -10,6 +10,7 @@
 use base qw/ App::ClusterSSH::Base /;
 use vars qw/ %keysymtocode %keycodetosym /;
 
+use Net::Domain qw(hostfqdn);
 use File::Temp qw/:POSIX/;
 use Fcntl;
 use POSIX ":sys_wait_h";
@@ -19,6 +20,8 @@
 use Tk::ROText;
 require Tk::Dialog;
 require Tk::LabEntry;
+use Symbol qw/ gensym /;
+use IPC::Open3;
 use X11::Protocol 0.56;
 use X11::Protocol::Constants qw/ Shift Mod5 ShiftMask /;
 use X11::Protocol::WM 29;
@@ -592,17 +595,20 @@
         my $macro_servername = $self->config->{macro_servername};
         ( my $servername = $svr ) =~ s/\s+//;
         $text =~ s!$macro_servername!$servername!xsmg;
+        $ENV{CSSH_SERVERNAME} = $servername;
     }
     {
         my $macro_hostname = $self->config->{macro_hostname};
-        my $hostname       = $servers{$svr}{givenname};
+        my $hostname       = hostfqdn();
         $text =~ s!$macro_hostname!$hostname!xsmg;
+        $ENV{CSSH_HOSTNAME} = $hostname;
     }
     {
         my $macro_username = $self->config->{macro_username};
         my $username       = $servers{$svr}{username};
         $username ||= getpwuid($UID);
         $text =~ s!$macro_username!$username!xsmg;
+        $ENV{CSSH_USERNAME} = $username;
     }
     {
         my $macro_newline = $self->config->{macro_newline};
@@ -610,8 +616,56 @@
     }
     {
         my $macro_version = $self->config->{macro_version};
-        my $version = $self->parent->VERSION;
+        my $version       = $self->parent->VERSION;
         $text =~ s/$macro_version/$version/xsmg;
+        $ENV{CSSH_VERSION} = $version;
+    }
+
+    $ENV{CSSH_CONNECTION_STRING} = $servers{$svr}{connect_string};
+    $ENV{CSSH_CONNECTION_PORT}   = $servers{$svr}{port};
+
+    # Set up environment variables in the macro environment
+    for my $i (qw/ 1 2 3 4 / ) {
+        my $macro_user_command = 'macro_user_'.$i.'_command';
+        my $macro_user = $self->config->{'macro_user_'.$i};
+
+        next unless $text =~ $macro_user;
+        if( ! $self->config->{ $macro_user_command } ) {
+            $text =~ s/$macro_user//xsmg;
+            next;
+        }
+
+        my $cmd = $self->config->{ $macro_user_command };
+
+        local $SIG{CHLD} = undef;
+
+        my $stderr_fh = gensym;
+        my $stdout_fh = gensym;
+        my $child_pid = eval { open3(undef, $stdout_fh, $stderr_fh, $cmd) };
+
+        if (my $err=$@) {
+            # error message is hardcoded into open3 - tidy it up a little for 
our users
+            $err=~ s/ at .*//;
+            $err=~ s/open3: //;
+            $err =~ s/( failed)/' $1/;
+            $err =~ s/(exec of) /$1 '/;
+            warn "Macro failure for '$macro_user_command': $err";
+            next;
+        }
+        waitpid($child_pid, 0);
+        my $cmd_rc = $? >> 8;
+
+        my @stdout = <$stdout_fh>;
+        my @stderr = <$stderr_fh>;
+
+        if ( $cmd_rc > 0 || @stderr ){
+            warn "Macro failure for '$macro_user_command'",$/;
+            warn "Exited with error output:: @stderr" if @stderr;
+            warn "Exited with non-zero return code: $cmd_rc", $/ if $cmd_rc;
+        } else {
+            #$self->send_text_to_all_servers( $stdout );
+            return join('', @stdout);
+        }
     }
 
     return $text;
@@ -1544,6 +1598,18 @@
                     $self->send_text_to_all_servers(
                         $self->config->{macro_username} )
                         if ( $hotkey eq "key_username" );
+                    $self->send_text_to_all_servers(
+                        $self->config->{macro_user_1} )
+                        if ( $hotkey eq "key_user_1" );
+                    $self->send_text_to_all_servers(
+                        $self->config->{macro_user_2} )
+                        if ( $hotkey eq "key_user_2" );
+                    $self->send_text_to_all_servers(
+                        $self->config->{macro_user_3} )
+                        if ( $hotkey eq "key_user_3" );
+                    $self->send_text_to_all_servers(
+                        $self->config->{macro_user_4} )
+                        if ( $hotkey eq "key_user_4" );
                     $self->add_host_by_name()
                         if ( $hotkey eq "key_addhost" );
                     $self->retile_hosts("force")
@@ -1608,6 +1674,40 @@
                 -command     => sub { $self->show_history; },
                 -accelerator => $self->config->{key_history},
             ],
+            [   "checkbutton",
+                "Auto Quit",
+                -variable => \$self->config->{auto_quit},
+                -offvalue => 'no',
+                -onvalue  => 'yes',
+            ],
+
+           # While this autoclose menu works as expected, the functionality
+           # within terminals does not.  "auto_close" is set when the terminal
+           # is opened and is not updated when the variable is changed.
+           #
+           #    [   "cascade" => "Auto Close",
+           #        -menuitems => [
+           #            [   "radiobutton",
+           #                "Auto Close",
+           #                -variable    => \$self->config->{auto_close},
+           #                -label    => 'Off',
+           #                -value    => '0',
+           #            ],
+           #            [   "radiobutton",
+           #                "Auto Close",
+           #                -variable    => \$self->config->{auto_close},
+           #                -label    => '5 Seconds',
+           #                -value    => '5',
+           #            ],
+           #            [   "radiobutton",
+           #                "Auto Close",
+           #                -variable    => \$self->config->{auto_close},
+           #                -label    => '10 Seconds',
+           #                -value    => '10',
+           #            ],
+           #        ],
+           #    -tearoff => 0,
+           #    ],
             [   "command",
                 "Exit",
                 -command     => sub { $self->parent->exit_prog },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/lib/App/ClusterSSH.pm 
new/clusterssh-4.14/lib/App/ClusterSSH.pm
--- old/clusterssh-4.13.2_02/lib/App/ClusterSSH.pm      2019-01-14 
21:06:43.000000000 +0100
+++ new/clusterssh-4.14/lib/App/ClusterSSH.pm   2019-08-21 22:15:44.000000000 
+0200
@@ -5,7 +5,7 @@
 # ABSTRACT: Cluster administration tool
 # ABSTRACT: Cluster administration tool
 
-use version; our $VERSION = version->new('4.13.2_02');
+use version; our $VERSION = version->new('4.14');
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/t/15config.t 
new/clusterssh-4.14/t/15config.t
--- old/clusterssh-4.13.2_02/t/15config.t       2019-01-14 21:06:43.000000000 
+0100
+++ new/clusterssh-4.14/t/15config.t    2019-08-21 22:15:44.000000000 +0200
@@ -52,6 +52,10 @@
     key_macros_enable       => "Alt-p",
     key_paste               => "Control-v",
     key_username            => "Alt-u",
+    key_user_1              => "Alt-1",
+    key_user_2              => "Alt-2",
+    key_user_3              => "Alt-3",
+    key_user_4              => "Alt-4",
     mouse_paste             => "Button-2",
     auto_quit               => "yes",
     auto_close              => 5,
@@ -109,6 +113,15 @@
     macro_username   => '%u',
     macro_newline    => '%n',
     macro_version    => '%v',
+    macro_user_1     => '%1',
+    macro_user_2     => '%2',
+    macro_user_3     => '%3',
+    macro_user_4     => '%4',
+
+    macro_user_1_command => '',
+    macro_user_2_command => '',
+    macro_user_3_command => '',
+    macro_user_4_command => '',
 
     max_addhost_menu_cluster_items => 6,
     menu_send_autotearoff          => 0,
@@ -188,6 +201,9 @@
 $expected{screen_reserve_right}  = 100;
 $expected{screen_reserve_top}    = 100;
 $expected{screen_reserve_bottom} = 160;
+
+# Note: the parse_config here removes the key_user_x entries
+delete( $expected{"key_user_$_"} ) for (qw/ 1 2 3 4 /);
 trap {
     $config = $config->parse_config_file( $file, );
 };
@@ -328,6 +344,9 @@
 print $csshrc 'auto_quit = no', $/;
 close($csshrc);
 $expected{auto_quit} = 'no';
+
+# Note: the load_configs here removes the key_user_x entries
+delete( $expected{"key_user_$_"} ) for (qw/ 1 2 3 4 /);
 $config = App::ClusterSSH::Config->new();
 trap {
     $config->load_configs();
@@ -565,11 +584,23 @@
 key_paste=Control-v
 key_quit=Alt-q
 key_retilehosts=Alt-r
+key_user_1=Alt-1
+key_user_2=Alt-2
+key_user_3=Alt-3
+key_user_4=Alt-4
 key_username=Alt-u
 lang=en
 macro_hostname=%h
 macro_newline=%n
 macro_servername=%s
+macro_user_1=%1
+macro_user_1_command=
+macro_user_2=%2
+macro_user_2_command=
+macro_user_3=%3
+macro_user_3_command=
+macro_user_4=%4
+macro_user_4_command=
 macro_username=%u
 macro_version=%v
 macros_enabled=yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/t/15config.t.file3 
new/clusterssh-4.14/t/15config.t.file3
--- old/clusterssh-4.13.2_02/t/15config.t.file3 2019-01-14 21:06:43.000000000 
+0100
+++ new/clusterssh-4.14/t/15config.t.file3      2019-08-21 22:15:44.000000000 
+0200
@@ -16,6 +16,10 @@
 key_quit=Control-q
 key_retilehosts=Alt-r
 key_username=Alt-n
+key_user_1=Alt-1
+key_user_2=Alt-2
+key_user_3=Alt-3
+key_user_4=Alt-4
 max_host_menu_items=30
 method=ssh
 mouse_paste=Button-2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/clusterssh-4.13.2_02/t/changes.t 
new/clusterssh-4.14/t/changes.t
--- old/clusterssh-4.13.2_02/t/changes.t        2019-01-14 21:06:43.000000000 
+0100
+++ new/clusterssh-4.14/t/changes.t     2019-08-21 22:15:44.000000000 +0200
@@ -1,4 +1,9 @@
 use Test::More;
+
+unless ( $ENV{RELEASE_TESTING} ) {
+    plan( skip_all => "Author tests not required for installation" );
+}
+
 eval 'use Test::CPAN::Changes';
 plan skip_all => 'Test::CPAN::Changes required for this test' if $@;
 changes_ok();


Reply via email to