1. Changed the function client_test()'s name to wolfSSH_Client().
2. Added "destination" to the usage text.
3. Improved the handling of the termios settings.
4. Remove the file names from the ClientFreeBuffers() function.
5. Changed ClientFreeBuffers() to free if the pointers aren't pointing
at the static buffers. They may not load because the file is bad, but
it will still have a file name.
6. Only try to load the public key or cert if loading the private key
was successful. Do not fail out if key cannot load, password may
still be possible.
1. Remove the global req test code.
2. Remove the check for having both both private key and public key
specified. It currently derives a public key name from the private
key name.
1. In the windowMonitor(), move the check for quit outside the
conditional build so it works for both macOS and Linux.
2. Removed a dead store in readPeer(). If the socket wants read, that's
fine. Don't need to override it.
3. When allocating memory for the hostname, don't forget the nul.
4. When parsing the command line and storing a copy of it to send to the
peer, stash it in the config.
5. When allocating memory for the username, add 1 for the nul outside
the strlen().
6. When canceling a thread, be sure to join it afterwards.
7. Added a read me document for wolfSSH client. Just a quick note. To be
replaced later with something more formal.
1. Remove stray print when the client isn't going to ask for a password.
2. Remove adding the CR to the end of the string sent to the server.
The appropriate solution is to fix the issue in the Windows build of
the server. For POSIX, the LF is converted to CR/LF, so we get a
CR/CR/LF in the end, which looks like the enter key double-striking.
1. Update to use a default public key based on the name of the private
key.
2. Stash the public key name in the config structure, removing it from
the list of globals.
1. Add quit parameter to the example client's thread_args structure.
This will be used to let the windowMonitor thread know the
application is quitting.
2. If the windowMonitor's quit flag is set, it will exit and not call
wait again.
3. Join the windowMonitor thread rather than cancel it.
1. Allocating the user and hostname separately, makes updates from
default to set value easier.
2. Set a default user name based and private key file name based on the
environment.
3. Changed the visibility of the client common functions to
WOLFSSL_LOCAL.
4. Removed the userEcc varible from the main loop, and from the client
utility functions. Key type should be figured from the key.
5. Removed the hardcoded default keys for fake user Hansel. The key
loading functions will error out if a file name isn't used.
1. Added a comment regarding the potential leak. It is confirmed NOT A
LEAK.
2. Fixed the connection fail. Added a check for WANT_READ and treat that
as a success.
3. Put back a couple things removed from the last commit regarding
agent.
4. Change ShowUsage to use basename(). (Linux build didn't have
basename_r().)
5. Add NULL for the fs context parameter of the file wrapper macros.
6. Printing config checks any pointers for null then uses a default
value.
7. Minor cleanups.
1. Since the base of the client is copied from the example client,
remove the command line options used by the client. Start populating
with a few of the options used by the other client, and decode the
destination and optional command from the command line.
2. Move parsing the command line to its own function. It is a member of
a set of functions for reading the command line options, the config
file, and the environment to config the client.
3. Trim out many includes. Some will be added back later. Some don't
need to be there.
4. The client will only use non-blocking sockets.
Note/Todo:
(a) The connection fails to start some of the time.
(b) The user name has the potential to leak.
1. Add check for IUTF8 and forward.
2. Changed the TTYSet() for a char and a word version. For chars that
were -1, they were getting set as a word.
3. In DoChannelRequest(), read the modes as a string reference.
1. Change GetTerminalSize() to GetTerminalInfo().
2. Add the term variable to the things GetTerminalInfo() looks up.
3. Return the actual value of the environment variable TERM to the
server. If one isn't present, default to "xterm".
4. Clean up the whitespace in SendChannelTerminalRequest().
Misc other changes:
1. Cleanup whitespace in the recently added function
SendChannelOpenFail().
2. Add labels to the parameters in the prototype for
SendChannelOpenFail().
3. Remove the CR addition for Windows in the example client. Causes the
enter key to double-strike.
1. Changed gathering the PTY window size from being OS dependent to
availability of ioctl.h so both Linux and MacOS would start with the
correct size.
2. Added a check to configure for sys/ioctl.h.
3. Changed GetTerminalSize() so it returns the pix width and height as
well.
1. Update wolfSSH_ReadKey_buffer() to decode PEM keys.
2. Add detection of PEM files to wolfSSH_ReadKey_file().
3. Add parameter labels to the prototypes of the ReadKey functions.
1. Add quit parameter to the example client's thread_args structure.
This will be used to let the windowMonitor thread know the
application is quitting.
2. If the windowMonitor's quit flag is set, it will exit and not call
wait again.
3. Join the windowMonitor thread rather than cancel it.
When the example client is using non-blocking sockets, sometimes they
don't block. The monitor thread on the socket wasn't handling
WS_WANT_READ explicitly, and treated it as a fatal error. It should be
reset to WS_SUCCESS.