Winsock RSHD/NT Change Log

2.24.01 - Was not allowing an rsh if the rsh client wanted to use port 512 for the stderr connection. Many rsh commands will allow this as the stderr connection if there is no rexecd running on the client.

- Due to a change by Sun to the Solaris custom rcp command, rcp's from Solaris version "Solaris 10 6/06 s10s_u2wos_09a" would fail with a "command not found" error. Solaris uses a Sun-customized rcp command that sends Solaris-specific file ACL's if it is communicating with another Sun system. Sun decided to add a new custom "-Z" option to their rcp, which caused RSHD/NT to not recognize the rcp when it intercepts the rcp to handle it internally. RSHD/NT will now handle the new solaris customizations to rcp.

2.24.00 - Added ability to kill a command after a specified period of time.  This is not an inactivity timer - it will kill the command after the specified number of seconds, regardless of what the command is doing.

- Added ability to specify the priority of the service, the helper process, and the command executed.

- Fixed a problem with large environments (greater than 4096 bytes), where variables would be dropped from the environment created for the command executed.

- Installer now by default sets the option to hide windows of commands. Starting with Windows Vista, this will be the only option available because Microsoft is removing the ability for services to run commands and have them interact with the desktop.

- The uninstaller will now remove all registry entries. Previously, it left entries that were created by the control panel applet and the service. Since they were not created by the installer, it did not know to delete them.

2.23.08 - Changed to avoid a problem that could occur with the order in which the pipes used to capture stdin/stdout/stderr where closed, possibly resulting in the truncation of output or the appearance that the rsh was hung for a period of time.

2.23.07 - It was possible that stderr output could be truncated when sent back to the client if there was a large amount of output queued to be sent.

- If the option "Must Remote Users be Valid Users on this System?" was checked and the User Equivalency tab was used, the equivalent user was not applied for rcp copies.

2.23.06 - Fixed problem with sorting environment variables when using an Environment Variable File. If variables contained embedded characters other than letters or numbers (such as the underscore), they may not be sorted correctly in the command's environment.

2.23.05 - Improved detection of process ending when capturing stdout/stderr.

2.23.04 - If files were rcp'd from the system running REXECD using the -p option of the rcp command to preserve file modification times, the time on the files created on the destination system (where the rcp command was issued) was off by 1 hour when standard time was in effect.

2.23.03 - A "connection aborted" TCP/IP error was occurring at random times when data was received from the rsh/rcp client. This usually occurred when two nearly simultaneous rsh/rcp commands were received. It would result in a "Protocol negotiation error" appearing in the RSHD error log file and a "Connection Aborted" error in the RSHD message log file. On the client side, the rsh/rcp command would either appear hung or would time out, depending on how gracefully the rsh/rcp command handled it. This was due to a timing problem in RSHD and has been fixed.

2.23.02 - The service was attempting to write a log file in the directory "temp" on the C: drive upon startup, and could receive an exception error if the directory did not exist.  This was due to some trace code inadvertently left in the release build of the software.  This has been removed.

- You can now use the string "" as the password in the automap.ini file if the user specified in the map has a blank password.  Previously, you could omit the password, but that is not the same as specifying a blank password.

2.23.01 - It will no longer change the case of passwords in the automap.ini file to lower case.

2.23.00 - Added the ability to use "subst" commands in the automap.ini file in addition to "net use" commands to map drives to local directories. See the manual for details.

- Added command line options /m (minimize) and /h (hide) to minimize or hide the window when running as a stand alone application using /s. The option must be specified after /s and there must be a space between /s and /m or /h.  For example: wrshdnt.exe /s /m

- Added the ability to specify "*EventLog" for the Request Log, Deny Log, and Error Log fields in the Control Panel applet. If "*EventLog" is specified in these fields, the data that would have normally been written to a file will be written to the Windows Application Event Log instead. The Truncate button will have no effect.

- Added an option to the installer to specify whether windows of programs run through the service should be hidden. This option has always been available in the Control Panel applet, but it now asks for it during new installs.

2.22.02 - If a system had a Layered Service Provider (LSP) installed in Windows Sockets, RSHD/NT could fail to service rsh and rcp commands. The Message Log would show Winsock error 10038's when trying to read data from the socket.

2.22.01 - The correct version was not being displayed on the Service Control tab of the RSHD Control Panel applet.

2.22.00 - It will now kill the command started if it detects that the client has disconnected. This is to allow remote commands to be killed even when the client does not properly send the interrupt signal (such as the native Windows rsh command). This will only work if stdin/stdout/stderr is being redirected and the "buffer" option is not checked. This can be disabled by checking the option "Disable Killing Command on Client Disconnect?".

- When the -p option was used in the rcp command on the client to preserve the date, time, and permissions of the file(s) copied, and the files were being copied from the system running RSHD/NT to the client, the time was sometimes off by one hour.

2.21.03 - When running as an application (instead of a service), it would not start if the Message Level was set to 4 or higher. Running as a service was not affected by this.

2.21.02 - If you unchecked the "Attempt Redirection on Every Command?" option and checked the "Wait for Command to Complete?" option, it would ignore that and the rsh client would not wait for the command to
complete.

2.21.01 - If a malicious (or inept) programmer wrote an rsh-like client that sent a specific port number as the stderr port, the wrshdsp.exe process would go into a loop for a long period, eating up CPU cycles. This is similar to the negative port number problem corrected in the previous release.

2.21.00 - Added an option to the RSHD Control Panel applet labeled "Always Use Remote Login as Equivalent User?". This option is a new security feature and is used in conjunction with the User Equivalency table. Previously, if a remote user used the -l option of rsh or the user@ option of rcp, that user could rsh/rcp as any remote user in the User Equivalency table. This may not be desired. When you check this new option, the override user specified with -l (rsh) or user@ (rcp) is ignored for the purpose of the User Equivalency table. The remote user's actual login will be used to look up the user in the table and it cannot be overridden with -l or user@.

- If a malicious user wrote an rsh-like client that sent a negative number as the stderr port, the wrshdsp.exe process would go into a loop for a long period, eating up CPU cycles. This condition will now be trapped.

- Starting with version 2.20, you have the option of adding a selection to the Start menu to run the RSHD Control Panel applet instead of using the Control Panel. The optional program that starts the applet was remaining in memory even after the applet was closed. It did not cause any harm in doing that - the process was idle and took up little memory, but it was there. This has been corrected.

- Some of the .exe files and the wrshdnt.cpl file had prior version numbers encoded in the embedded version information, so if you looked at the File Properties in Windows Explorer, the Version tab showed an incorrect version. This had no effect on the actual function of the software, but it has been corrected.

- The installer was changed to that if a version of RSHD/NT prior to version 2.20 was originally installed on the system, you will not see two entries in Add/Remove Programs and an uninstall will delete all files, including files that are no longer included.

2.20.00 - Changed to a two-process architecture, where a new process is started to handle each rsh/rcp connection rather than handle them with threads inside the service. This greatly reduces the chance of any one rsh
or rcp command stopping the service and also cleans up some desktop and windowstation resource contention issues.

- Added the User Equivalency table, allowing you to associate remote users with Windows users/passwords. This allows RSHD/NT to impersonate a Windows user based on the remote user (login user or user specified after the -l option in rsh) to more closely simulate the Unix rshd. Without the User Equivalency table, all rsh/rcp commands are executed as a single user.

- Added option to require the use of the User Equivalency table, so if a remote user is not set up in the table, access will be denied.

- RSHD/NT will now watch for a "kill" or interrupt signal from the rsh command on the client. If the signal is received, it will attempt to kill the command being executed. Note that not all rsh commands pass through the kill signal - in particular, the native rsh command that comes with Windows NT/2000 does NOT send it, so pressing Control-C when using the native NT/2000 rsh command will NOT kill the command on the server running RSHD/NT. But the Unix rsh command does pass the signal as does the rsh in Denicomp's Winsock RCP/RSH/REXEC for Win32 software. There is an option on the RSH Options tab to disable the watching for the kill signal if you prefer to not allow remote users to kill commands once they start.

- RSHD/NT will now load the profile and user-specific environment variables of either equivalent user found in the User Equivalency table or if that is not being used, the user specified on the RSH Options tab in the "Execute All RSH Commands as User" field. There are also options available there to disable the loading of the profile and user-specific environment variables.

- There is a new option that allows you to restrict all file accesses through the rcp command to the RCP Home Directory. This can be found on the RCP Options tab and when enabled, all files referenced in the rcp command where either the source or destination system is the system running RSHD/NT will be relative to that directory you specify. Note that this only affects the rcp command, not rsh commands.

- Added new option "Wait for Command to Complete" on the RSH Options tab. This is only available if you uncheck the option "Attempt Redirection on Every Command". It tells RSHD/NT to wait for commands to complete before ending the rsh on the client, but no stdin/stdout/stderr will be redirected from the command.

- In all of the settings in the Control Panel applet that require a filename to be specified (except the Location field), you can use an environment variable in the name (example: %TEMP%\rshdnt.log). These variables must be available to the service - you cannot set them through the Environment Variable File and they will not be taken from user-specific environment variables. They are taken from the environment the service inherits from the Service Manager. Also, you can use a variable %RSHD%, which will be set to the directory where RSHD/NT has been installed.

- The Service Control button has been removed from the RSHD Control Panel applet and the functions are now on a separate tab. The new Service Control tab will also display the current service status (Running, Stopped, etc.) and the RSHD/NT version installed.

- The Apply button is now active in the RSHD Control Panel applet, allowing you to save changes without exiting the window.

- If you use the Edit Security button in the RSHD Control Panel applet and the Security File does not exist, it will create the file with some comments showing the format of the file.

- Truncate buttons have been added for each of the logs available in the RSHD Control Panel applet to allow you to easily truncate the logs to keep them from growing too large.

- When installing, you have the option of creating an entry on the Start menu to get to the RSHD Control Panel applet instead of going through the Control Panel. This is especially useful when running under 64-bit versions of Windows, since the 64-bit Control Panel cannot load our 32-bit applet.

2.18.04 - A malicious program could connect to the service and send a large string on the connection and cause the service to abort. It will now prevent this from occurring.

2.18.03 - If an Environment Variable File was specified in the RSHD Control Panel applet and the file did not exist, it could cause the service to abort with an exception error.

2.18.02 - Was skipping the last line in the Environment Variable File, so the variable specified on the last line was not set.

2.18.01 - The %rhost%, %luser%, and %ruser% variables were not being evaluated properly when a RCP Home Directory was specified.

2.18.00 - Some users have reported that when two or more simultaneous rcp commands were issued and the NT system was the source of the rcp (that is, files were read from the NT system and transferred to the client) that the file would be deleted from the NT system. This seems to have occurred because of some handle contention issues
between the threads handling the rcp's and this has been fixed.

- A fix was made to prevent the service from crashing with an exception when the NT system runs out of available TCP/IP socket resources. It should resume working when more socket resources become available, although commands issued during that time will not be processed.

- The RSHD Control Panel applet has been modified to prevent it from being kept locked in memory by Windows 2000. There seems to be a bug (at least we consider it a bug) in Windows 2000 (through Release Candidate 2) where the Control Panel loads some applets into memory and does not release them from memory until you log out or reboot. This only occurs when the applet is written to respond to a certain Control Panel applet message, which the Win32 SDK documentation recommends doing (!). If you have a previous version of RSHD/NT installed on Windows 2000 and you re-install a later version, you may get an error about deleting the file \winnt\system32\wrshdnt.cpl.  This is because it is locked in memory by the Control Panel. Log out or reboot, then run the install again (NOT through Add/Remove Programs in the Control Panel) or delete that file manually after logging out or rebooting.

- Under Windows 2000, the RSHD/NT installer will no longer put the RSHD/NT Control Panel applet in the Windows System32 directory (\winnt\system32). It will put it in the RSHD/NT installation directory and the Control Panel will load it from there.

- There is a new registry option you can set (using REGEDIT) that allows you to "throttle" the processing of rsh/rcp commands. The registry entry is:

HKEY_LOCAL_MACHINE\SOFTWARE\DenicompSystems\WRSHDNT\Setup\CommandThrottle

Create this as a String Value and set it to the number of seconds you want RSHD/NT to pause before processing the next rsh/rcp command arriving. If your system is for some reason bombarded with rsh/rcp commands arriving at the same time and it chokes (because of limited TCP/IP socket resources for example), this allows you to spread out the processing of the commands. Arriving requests will be queued up by TCP/IP, up to the backlog limit (5 under NT Workstation/2000 Pro, 100 under NT Server/2000 Advanced Server, unless modified by setting the Listener Backlog on the Advanced tab of the RSHD Control Panel applet). If the backlog queue fills up, rsh/rcp commands will begin receiving "connection refused" errors from TCP/IP .

2.17.07 - Was attempting to unmap drives after each rcp command even though no drives were mapped with AUTOMAP.INI. Reworked thread startup and cleanup code (internal stuff). On a very few systems/commands, NT was telling us that the command had not completed even though ithad really completed.

2.17.06 - If an Environment Variable File was specified in the RSHD Control Panel applet and the file did not exist, it could cause the service to abort with an exception error.

2.17.05 - The rcp command that comes with Windows NT 4.0 SP4 has a bug that gives an incorrect "permission denied" error when rcp'ing a file when the destination directory is "." or any time the -r option is used. This bug could cause RSHD/NT to abort with an exception and this has been corrected. Note that the NT 4.0 SP4 rcp command still will not work - the bug is in Microsoft's rcp command. But RSHD/NT will not abort because of it.

2.17.04 - If a user and password were specified in the RSH User/Password fields, it could give access denied errors when trying to use the "<[INT]>" directive along with the reboot or shutdown commands. These internal commands are now executed in the security context of the service startup user (usually SYSTEM), not the RSH User.

2.17.03 - If a user/password was specified in the RSH User/Password or RCP User/Password, a desktop resource was not being released, so eventually you would receive an error 1816 from NT (quota error).

2.17.02 - Allows a command from rsh of a virtually unlimited size (limited by memory). However, NT only allows a command line of up to 32767 bytes and CMD.EXE allows only 128 bytes.

2.17.01 - Was dropping the connection if you tried to rcp multiple files to the NT system.

2.17 - Changed the way rcp's are handled from Sun Solaris systems. In previous versions, RSHD/NT spoofed the special (non-standard) rcp initialization command from Solaris (/usr/lib/sunw,rcp) and ignored the non-standard ACL records Solaris sends. Some users experienced abnormal termination of multi-file rcp copies from Solaris systems because the Solaris system was resetting the connection at the TCP/IP level while sending the ACL stuff. There are some Sun documents that show this as a bug that was supposedly correct in Solaris, but even after updating, some users still had the problem. RSHD/NT now acts like other non-Solaris Unix systems
when servicing the Solaris rcp. When the non-standard Solaris rcp init command is received, RSHD/NT sends back a "command not found" error. The Solaris rcp then catches this and acts like a standard rcp.

To go back to the previous method of handling Sun rcp's, create the following registry entry (or change it if it exists):

HKEY_LOCAL_MACHINE\SOFTWARE\DenicompSystems\WRSHDNT\Setup\DisableSunRCP

Create this as a String Value and set it to a value of "0" to use the previous Sun rcp handling. Set to a value of 1 to use the new method. The default value is "1" when the entry does not exist (it normally does not exist).

- There are now one minute timeouts on rcp send and receive operations.  During an rcp, if no data is received in one minute or a send is not acknowledged within one minute, it is assumed that the connection is broken and the rcp will be terminated. Previously, the TCP/IP stack default was used. Note that the one minute timeout is not for the entire file - it is for one individual send or receive operation within the file. If your network is extremely slow and it possible that data cannot be sent or received in one minute, you can increase the timeout with the following registry entries:

HKEY_LOCAL_MACHINE\SOFTWARE\DenicompSystems\WRSHDNT\Setup\RCPSendTimeout
HKEY_LOCAL_MACHINE\SOFTWARE\DenicompSystems\WRSHDNT\Setup\RCPRecvTimeout

Create these as new String Values and set them to the number of seconds required for a timeout. Setting them to "0" uses the TCP/IP default.

- You can now set a registry option that allows you to overwrite files with rcp if another process has them opened for reading. Normally, RSHD/NT would not allow this because it would detect that the file was in use and return an error to the rcp command. In our view this should not normally be permitted. However, at times it may be desired. One example would be files used by Microsoft IIS, which apparently caches files and keeps them open for reading while they are cached. To allow the overwriting of files opened for reading by other processes, create
the following registry entry:

HKEY_LOCAL_MACHINE\SOFTWARE\DenicompSystems\WRSHDNT\Setup\RCPAllowOpens

Create as a new String Value and set to a value of "1" to allow the open files to be overwritten or "0" to disallow it. Keep in mind that this only allows files opened *non-exclusively* and for *reading* by another process to be overwritten.

- There is now a method available for more easily using network drives (and printers) through RSHD/NT. This requires an explanation that is beyond the scope of this document (it is fully explained in the RSHD/NT
reference manual). Briefly, you can create a file AUTOMAP.INI in the RSHD/NT installation directory and place NET USE commands in it and RSHD/NT will map the drives before each rsh/rcp command and unmap them afterward.

- There is a registry entry that can be set that affects the way RSHD/NT closes TCP/IP connections. Normally, RSHD/NT closes the rsh/rcp connection gracefully (normally). This leaves the connection(s) in a TCP/IP TIME_WAIT state (seen with netstat). This is normal. If you create the following registry entry:

HKEY_LOCAL_MACHINE\SOFTWARE\DenicompSystems\WRSHDNT\Setup\KillTimeWait

RSHD/NT will do an "abortive" close and will effectively avoid the TIME_WAIT state on the connection(s). Create this as a new String Value and set it to a number greater than zero (0). The value used indicates the number of seconds RSHD/NT should wait before doing the abortive close. When the connection is aborted, it is likely that some data may not make it to the client (such as the tail end of stdout or the end of a file rcp'd). This delay gives the data an opportunity to reach the client before the connection is aborted. You will experience a pause (of the number of seconds specified) after each rsh/rcp command.

This option is UNSUPPORTED - it may or may not work for you. Use at your own discretion.

- There is a new indicator available that allows you to tell RSHD/NT to run the command in its own virtual Windows machine. This only affects DOS and 16-bit Windows programs executed through RSHD/NT.
Normally, NT executes them all within a single virtual machine. If you use the special "<[SEPARATE]>" or "<[SEP]>" in the rsh command, it will tell Windows NT to create a separate virtual machine for that command. This has no effect on 32-bit programs. This indicator is currently undocumented (except for here), but is supported.

- Corrected a problem with the error message returned to rcp when the disk was full. It was incorrectly reporting an error number of 0.

2.16 - Was combining stdout and stderr onto stdout, so stderr output was not sent back to rsh separately.

2.15 - (Interim release) Some previous versions were combining stderr onto stdout instead of sending them separately.

2.15 - (Interim release) Added ability to uninstall from Add/Remove Programs in the Control Panel.

2.15 - RCP was not handling file sizes greater than 2 GB (64-bit sizes) in version 2.14 as was previously reported. The code to do that was not enabled in that version. It now is in version 2.15.

- Added two registry options: ConnRecvBuf and ConnSendBuf. These will tell RSHD/NT to set the TCP/IP socket option SO_RCVBUF and SO_SNDBUF respectively if they are found in the RSHD/NT registry options. If these are not found, the NT default is used (8192 bytes). You can set these to increase the TCP/IP send/receive buffers, although the effect will depend on your network. They have minimal effect in our testing. They would affect redirected stdin/stdout for rsh and rcp copies. They may be added to the Control Panel applet at a later date.

- When running at a message level of 99, it was trying to create a file in the \temp directory on the current drive and would abort with an access violation exception if this directory did not exist and an rcp was executed.

2.14 - Added option to RSH service to allow a user and password to be specified in the RSHD/NT Control Panel applet. If a user and password is entered, all programs run through RSH will be run in the context of that user.

Note that when using this option, you MUST run the service as LocalSystem and check the option to allow desktop interaction.

Also keep in mind that the specified user's "hive" is not loaded from the registry, so the Environment Variable File must be used if you need to set environment variables.

- Corrected a problem with rcp when automatic ASCII conversion is used. When copying files from the NT system, if the file did not end with a LF or CR/LF, the last character of the file was not transmitted.

- Corrected a problem with the usage of an environment variable file. If a variable substitution was fairly long (e.g. PATH=%PATH%;...) and the line contained multiple substitutions, it was causing RSHD/NT to abort with a GPF-type error.

- Added "PATH" to the list of default internal commands.

- Added some additional logic to try to resolve a problem where NT would report that a thread that RSHD/NT was using to capture stdin/stdout/stderr had ended when in reality the thread was still executing. When this happened, RSHD/NT would abort with a GPF-type error. This very rarely occurred and then only seemed to occur on extremely busy systems. The change seems to have resolved it.

- RCP server portion will now handle files with sizes greater than 2 GB. RCP of files with a size over 2 GB will only work if the rcp client (and client operating system) also supports this (i.e. it allows a 64-bit file size intead of a 32-bit file size).

2.13 - Only allowed environment variables of 256 bytes or less. Increased to allow up to 1024 bytes per variable.

- You can now create the following registry entry:

\HKEY_LOCAL_SYSTEM\Software\DenicompSystems\WRSHDNT\Setup\KeyEscapeChar

to change the default "escape" character for keystroke strings (create as type String (REG_SZ)).

By default, the escape character is a backslash (\). Any character after the backslash is not interpreted by RSHD/NT. This is to allow you to send the characters "[" and ">", which are special inside of keystroke strings. These must be prefixed by a backslash if you want to send them to the remote application. This also means that you must use two backslashes to send a single backslash. This can be inconvenient if you send full path names. So you can set the above registry entry to some other character, which will be used as the escape character instead of the backslash. Keep in mind that if you need to send the new escape character in a keystroke string, you must
include it twice.

2.12 - Internal release.

2.11 - When checking the security file, it was granting access if EITHER the remote user OR the local user was given permission. It now only grants access if BOTH users are given permission.

Normally, the remote user and local user are the same (they are the user ID of your login on the remote system). However, if you use the -l option of rsh or the user@host:file specification in rcp, the local user will be the login user and the remote user will be the user specified on the command line.

- Was occasionally giving a GPF-type error under NT 4.0 when the service was stopped. This bug was introduced in version 2.10 and is now corrected.

2.10 - If there is no Security File, Request Log, Deny Log, and Error Log specified, it will no longer look up the hostname of the client PC. This can speed things up, especially if using DNS and your DNS server is slow or is not functioning.

- You can also disable the lookup of the client hostname by setting the following registry entry to "1":

\HKEY_LOCAL_SYSTEM\Software\DenicompSystems\WRSHDNT\Setup\DisableHostLookup

This entry may need to be added (create as type String (REG_SZ)).

By setting this entry to "1", you can still have a Security File and/or log files and avoid the hostname lookup. However, the logs will only reflect the IP address of clients and you can only use IP addresses in the Security File.

2.09 - The internal commands allowed using the "<[INTERNAL]>" rsh extension would not work if you checked the option to run all commands through the command shell.

2.08 - Now allows wildcards in the security file. You can use "*" (matches multiple characters), "?" (matches a single character), "[]" (matches a list or range of characters), and "[!]" (matches characters NOT in
a list or range of characters). Wildcards can be used anywhere in the name or IP address in the security file. For example, 89.5.6.*, joe@*.netcom.com.

- Some internal error messages that should have been returned to rsh were not being returned properly. The rsh command would report that the connection was reset or some other socket error.

- Was not properly handling things when an environment variable file was specified, but the file did not exist. It now does and uses the inherited environment when the file does not exist.

- You can now run "wrshdnt /v" to display the current version number.

2.07 - Removed use of sockets for stdin/stdout/stderr under NT 4.0. Now defaults to pipes like it did before 2.06. For some reason, sockets caused problems when the program executed created its own pipes to other programs for stdout/stdin/stderr. Seems to be an NT problem.

Socket usage can be re-enabled by setting the following registry entry to the value "0":

\HKEY_LOCAL_SYSTEM\Software\DenicompSystems\WRSHDNT\Setup\UsePipes

This entry may need to be added (create as type String (REG_SZ)).

2.06 - Found workaround for NT 4.0 so that sockets can be passed as stdout/sterr/stdin handles. Sockets are now used instead of pipes.

- Corrected a problem with rcp where it would hang if you tried to rcp a zero-length file from the NT system with ASCII conversion enabled.

- Added registry options (which must be set using REGEDT32) to allow disabling of the Nagle algorithm on the sockets used by RSHD/NT. The entries are: ListenNoDelay, ConnNoDelay, StderrNoDelay. Setting these to the string (REG_SZ) "1" will disable Nagle. Setting to "0" will enable. It is enabled by default. The entries must be placed in \HKEY_LOCAL_MACHINE\Software\DenicompSystems\WRSHDNT\Setup.

- Added an option to the rsh command that allows you to disable Nagle for specific commands. The option is specified like the window type options: "<[NODELAY]>". For example:

rsh nt "<[NODELAY]>" command

2.05 - Now redirects standard input also. Previously, it only sent stdout/stderr back to the rsh command. It will now read stdin from rsh.

2.04 - Internal release.

2.03 - Now turns on "keepalive" option by default.

2.02 - Was not processing multiple environment variable files if they were specified.

- Could abort on very long commands if a message file was specified.

2.01 - Uses a different method of capturing stdout/stderr under NT 4.0, since Microsoft decided to break the way NT 3.51 handled it.

- Corrected a problem that could occur when an rsh or rcp was aborted with an interrupt key before the connection was fully negotiated. It would continually attempt to establish the stderr channel with the now-disconnected rsh or rcp until it reached a certain limit.

2.00 - Capture of stdout/stderr is done in "real time" instead of being buffered until the end of the command.

- RCP spoofing prefixes for Sun and VAX VMS are recognized internally, so they do not need to be specified in the Control Panel.

- An incompatibility with Sun's RCP has been corrected.

- Can specify a home directory for RCP copies.

- Can specify an initial working directory for RSHD/NT.

- Can specify a file containing environment variables, which will be set for commands execute through RSHD/NT.

- Can specify a default command interpreter for internal commands.

- Can specify a list of "internal" commands and the default command interpreter will be used for these commands.

- Can disable rsh servicing, incoming rcp servicing, or outgoing rcp servicing.

- Can limit rsh to executing a list of specified commands.

- Can specify that the command interpreter is to be prefixed to every command.

- Special commands available to shutdown or reboot the system using rsh. Use:

rsh ntsystem "<[INTERNAL]>" shutdown
or
rsh ntsystem "<[INTERNAL]>" reboot

"<[INTERNAL]>" can be abbreviated to "<[INT]>".

- If the default window type is Minimized or Hidden and keystrokes are specified in the rsh command, the default window type is overridden and the program will be run in a normal window so that it receives the keystrokes.

- In the RSHD/NT Control Panel applet, you can press <F1> to view help on the options available.

1.91 - Was not changing time of the files created when the -p option of the RCP command was used to preserve file access/modification times.

- Added more detailed messages at message level 4 when processing the Security File entries to aid in debugging.

- The RSHD/NT setup program will now stop and delete the RSHD/NT service if it exists before copying files, so it is not necessary to stop the service before reinstalling.

1.90 - New Control Panel Applet, using tabbed dialogs for easier use.

- The RSH command will now work for certain commands when RSHD/NT is running in the context of a user other than System. It will allow you to run non-interactive commands only. You cannot send keys to the application, unless the user RSHD/NT is running as is logged in on the workstation.

- In the RSHD/NT Control Panel applet, you can now specify a user and password to be used for all RCP copies. If you specify a valid user and password in those fields, when a file is copied from or to the system, RSHD/NT will log in as that user. It will read and write all files as that user, so any restrictions on that user will be in effect when reading files. Also, all files created will be owned by that user. This allows you to run RSHD/NT as the System user
so all features of the rsh command are available, but allows you to enforce security for file copies. This also solves problems when accessing network drives, since the System user cannot access some network resources.

- The Listen Backlog parameter now defaults to 100 instead of 5. Microsoft has increased the maximum limit from 5 to 100 in NT 3.51.

- Previously, Windows NT specific errors were returned to the client as NT error numbers with no description. Now, if an NT specific error occurs, RSHD/NT will attempt to get the error description from Windows NT and return the description to the client.
 
- There is now an option in the Control Panel applet to disable the detection of "internal" DOS commands, such as DIR and TYPE. This is useful if you are not using the standard NT command interpreter and you do not wand "cmd /c" to be prefixed to these commands.

1.83 - When checking the Security File, the comparison of host names and user names is now not case sensitive.

- If you are using a Mesassge File, RSHD/NT will now output the value of the PATH environment variable when RSHD/NT starts in the file.

- Some changes were made that will allow RSHD/NT to service the rsh command in a limited manner when the service is NOT running as the user "System" (the default). This user is specified in the Services applet in the Control Panel.

By default, RSHD/NT runs in the context of the special user "System". You can change the setup to have RSHD/NT run as a different user, thereby inheriting the security imposed on that user. However, Windows NT does not allow access to the NT desktop to any other user besides "System". So, when running as a non-System user, NT creates an invisible desktop and runs the programs on it. Since you cannot see this desktop, you will not be able to run interactive Windows programs through rsh if you do not run RSHD/NT as the System user.

You will be able to use rsh to execute Console applications (and capture stdout/stderr) and non-interactive Windows programs. You will NOT be able to send keystrokes to any programs, however.

1.82 - When reading the options from the registry (specified in the Control Panel), the service was requiring full access to the registry options, including write access, even though it did not write. It now only requires read access, so if the service was originally created by an administrator and then changed to run in another user's context, that
user will not need to be granted write access to RSHD/NT's registry entries.

- Leading spaces in Control Panel options will be ignored. Previously, if you accidentally placed a leading space in front of an option in the Control Panel applet, its value would be ignored by RSHD/NT.

- You will no longer receive an "End Task" dialog box if you log out while a program is being run through RSHD/NT. Previously, if a long-running program was run through RSHD/NT (by an rsh command) and the user on the workstation running RSHD/NT logged out, NT would display a dialog box asking if you want to wait for the task to end or end the task before it would allow you to log out. (If you pressed the End Task button, it would not end the program however.)

1.81 - Corrected a memory/handle leak problem.

1.80 - Added ability to specify the default window type of commands run through rsh. Specified in the Control Panel applet.

- Now recognizes "internal" commands (DIR, TYPE, etc.) and prefixes with "cmd /c" automatically. Previously, this had to be specified in the rsh command.

1.71 - Added ability to specify the IP address for listening for connections. This can be used if the host is multi-homed (has mulitple IP addresses) and you only want to listen on one.

1.70 - Initial Release of NT version.