Skip to content

Commit

Permalink
get_SSH_IP gracefully handles missing, IPv6-formatted environment var
Browse files Browse the repository at this point in the history
Closes #292 github issue.
  • Loading branch information
keithw committed Jul 27, 2012
1 parent 02f5488 commit c073ad3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ AC_TYPE_UINTPTR_T
# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_MBRTOWC
AC_CHECK_FUNCS([gettimeofday setrlimit inet_ntoa iswprint memchr memset nl_langinfo posix_memalign setenv setlocale sigaction socket strchr strdup strerror strtol wcwidth])
AC_CHECK_FUNCS([gettimeofday setrlimit inet_ntoa iswprint memchr memset nl_langinfo posix_memalign setenv setlocale sigaction socket strchr strdup strncasecmp strtok strerror strtol wcwidth])

AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define if clock_gettime is available.])])

Expand Down
20 changes: 18 additions & 2 deletions src/frontend/mosh-server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,29 @@ void spin( void )
string get_SSH_IP( void )
{
const char *SSH_CONNECTION = getenv( "SSH_CONNECTION" );
fatal_assert( SSH_CONNECTION );
if ( !SSH_CONNECTION ) { /* Older sshds don't set this */
fprintf( stderr, "Warning: SSH_CONNECTION not found; binding to any interface.\n" );
return string( "0.0.0.0" );
}
char *SSH_writable = strdup( SSH_CONNECTION );
fatal_assert( SSH_writable );

strtok( SSH_writable, " " );
strtok( NULL, " " );
const char *local_interface_IP = strtok( NULL, " " );
fatal_assert( local_interface_IP );
if ( !local_interface_IP ) {
fprintf( stderr, "Warning: Could not parse SSH_CONNECTION; binding to any interface.\n" );
return string( "0.0.0.0" );
}

/* Strip IPv6 prefix. */
const char IPv6_prefix[] = "::ffff:";

if ( ( strlen( local_interface_IP ) > strlen( IPv6_prefix ) )
&& ( 0 == strncasecmp( local_interface_IP, IPv6_prefix, strlen( IPv6_prefix ) ) ) ) {
return string( local_interface_IP + strlen( IPv6_prefix ) );
}

return string( local_interface_IP );
}

Expand Down

0 comments on commit c073ad3

Please sign in to comment.