If there are consecutive resize events in the userstream to be applied in
"serve", we should apply the last/latest one in the sequence, not the
first/earliest one.
This fixes a problem where a flurry of resize events (eg, generated
by a window manager resizing the client), can cause mosh to have an
out-of-date idea as to what the physical geometry of the window is.
Log connection change events to syslog in the auth log, logging the PID,
username and remote host.
Also log session begin and end.
Co-Authored-By: John Hood <cgull@glup.org>
Consolidate multiple printfs.
Break up multiline strings with string concatentation, for better
clarity and shorter lines.
Use fputs where appropriate.
This also has the benefit of producing a single constant string with
copyright and versions in the binaries.
These should output to stdout and exit with status 0. Passing
std-options to AM_INIT_AUTOMAKE causes ‘make installcheck’ (hence also
‘make distcheck’) to verify this.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
This eliminates issues with typeahead being echoed by the remote pty
and corrupting remote output from mosh-server to the mosh script, but
cannot be made default because older mosh-servers require a pty.
* A resize action could be applied to the framebuffer but discarded
before being applied to termios, causing them to be out of sync.
* Only every second action was skipped, instead of skipping
consecutive resize actions, as intended.
Found by inspection, not seen in actual usage or by the window-resize
test.
terminalfunctions.cc: set_if_available() was undeclared.
Fix printf() wint_t/wchar_t warnings.
mosh-server.cc: Fix warning for side effects inside typeid().
Signed-off-by: John Hood <cgull@glup.org>
This helps to catch unused functions like the former mosh_read_line,
allows the compiler to make better inlining decisions, and reduces the
binary size a bit.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
This function is buggy. feof(file) does not become true until after
we’ve tried to read past the last character; it should instead be
checking the getc return value for EOF (which is distinct from any
unsigned char). Really it should just be replaced by istream
&std::getline(istream &is, string &str). Fortunately, it’s unused so
we can just delete it.
Resolves a truncated stdio return value issue found by Coverity Scan
service.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
This refactors out a very common pattern of formatting "%s: %s" with
e.function.c_str() and strerror( e.the_errno ) into just the what()
method of NetworkException. It's also a prerequisite for making cleaner
public API for any exceptions we throw, and allows us to more easily
get exceptions passed back to us to handle.