Commit Graph

3015 Commits

Author SHA1 Message Date
sanhex
d33bd8deff GUACAMOLE-384: fixing segfault during ssh disconnect
Root Cause:
See the core dump and Valgrind report posted on Jira. guacd was reading a ssh terminal which had been freed. When a ssh connection is terminated, guac_ssh_client_free_handler() will be called from guacd_exec_proc() -> guac_client_free() with pointer client->free_handler. In guac_ssh_client_free_handler(), when ssh_client->term is freed, ssh_client->client_thread may still be using the ssh_client->term. It causes the crash reported in this bug.

The stack trace exposing the problem can be found by running guacd under Valgrind with a ssh test script. The test script repeats doing ssh login and logout for 5000 times.

Solution:
In guac_ssh_client_free_handler(), before calling guac_terminal_free(ssh_client->term), close the stdin pipe of the terminal to stop reading the pipe with guac_terminal_read_stdin() in ssh_input_thread(). So that ssh_input_thread() can be terminated in this case. Call pthread_join() to wait for ssh_client_thread() terminating before freeing the terminal.

Add a new function guac_terminal_stop() to close the pipe and set the fds to invalid (-1). Call it in guac_ssh_client_free_handler() and guac_terminal_free().

Checking the client running state in ssh_input_thread() and ssh_client_thread() to make sure they can be terminated when the client is stopped in guacd_exec_proc() by another thread.

Test:
- Confirmed ssh connection works normally.
- Observed the child process of guacd exits when ssh connection is terminated.
- Reran the ssh test script. Observed no crash.
2017-10-29 18:11:15 -07:00
itsankoff
15f6c4f3dc GUACAMOLE-424: Fix null pointer dereference for vnc client display 2017-10-24 20:21:03 +03:00
Michael Jumper
95be88be19 GUACAMOLE-296: Merge fix for linking issues with FreeRDP 1.1 and guacai (audio input). 2017-10-14 23:45:35 -07:00
Michael Jumper
012a3497eb GUACAMOLE-411: Merge changes fully initializing CMSG buffer prior to use. 2017-10-14 17:50:47 -07:00
Nick Couchman
caedf26a06 GUACAMOLE-296: Break out WINPR libs into their own variable. 2017-10-13 21:25:32 -04:00
Nick Couchman
9487eb2dc9 GUACAMOLE-296: Fix linking issue that causes audio issues with FreeRDP 1.1 2017-10-13 21:04:13 -04:00
Nick Couchman
c49c57ef30 GUACAMOLE-402: Merge fix out-of-tree build 2017-10-12 12:35:46 -04:00
David Fort
bb527f30f8 GUACAMOLE-402: fix out-of-tree build
Use $(srcdir) in places were it's needed, so that an out-of-tree build works.
2017-10-12 15:11:27 +02:00
Jukka-Pekka Virtanen
c8eaa91ad3 GUACAMOLE-411: Fixed using uninitialized values in guacd_send_fd 2017-10-10 12:41:19 +03:00
Michael Jumper
d35cc7a83e GUACAMOLE-400: Merge changes correcting segfault when an SSH private key cannot be imported. 2017-09-29 12:05:56 -07:00
sanhex
3c7a09f52b GUACAMOLE-400: Fix guacd crash when ssh key fails
Root Cause:
In the ssh library of guacd, function ssh_client_thread(), when guac_ssh_get_user() fails to load private key for ssh authentication, it will return NULL. In this case, the subsequent call to guac_common_ssh_create_session() with parameter 'user=0x0' will cause guacd crash in function guac_common_ssh_authenticate() by accessing 'user->username'.

Solution:
- Update the comment of function guac_ssh_get_user() to document that NULL will be returned if fails to import key for the user.
- In function ssh_client_thread(), verify the return of guac_ssh_get_user(). If ssh_client->user is NULL, return NULL.

Test:
- Configured a ssh app with an encrypted private key and a wrong passphrase.
- Ran the ssh app from web portal and observed guacd crash.
- Applied the fix and reran the ssh app. Observed no crash.
2017-09-29 11:04:48 -07:00
Michael Jumper
1d0e63b251 GUACAMOLE-398: Merge fix for address info memory leak. 2017-09-27 10:27:22 -07:00
Nick Couchman
9200bc789f GUACAMOLE-398: Use freeaddrinfo() instead of free() on the linked list. 2017-09-27 13:24:58 -04:00
Nick Couchman
e4dd8de4f1 GUACAMOLE-398: Fix memory leak identified by Coverity in common ssh code. 2017-09-27 13:02:41 -04:00
Michael Jumper
afb554a014 GUACAMOLE-396: Merge support for connecting to IPv6 hosts via SSH. 2017-09-26 19:46:17 -07:00
James
f559701645 GUACAMOLE-396: Fixing ssh socket for IPv6 address
Root Cause:
In the ssh library of guacd, the TCP socket for connecting to ssh server is created with AF_INET. So it does not support IPv6 address.

Solution:
When guacd creates the socket for ssh in guac_common_ssh_create_session(), stop using hard coded AF_INET for socket() call, use the address family which is returned from getaddrinfo().

Test:
- Connected successfully via ssh connections with IPv4 and IPv6 hosts.
- No connection error in guacd logs.
- Simulated a connection failure with specifying a ssh server which does not exist. guacd worked well in this case.
2017-09-26 17:19:18 -07:00
Nick Couchman
4e80960933 GUACAMOLE-391: Merge resolve low-impact memory leak. 2017-09-24 08:42:46 -04:00
Ilya Shipitsin
d2102e5705 GUACAMOLE-391: resolve low impact memory leak 2017-09-24 13:42:59 +05:00
Michael Jumper
c5f674340a GUACAMOLE-383: Merge fix for low-impact memory leaks identified by cppcheck. 2017-09-23 13:31:01 -07:00
Ilya Shipitsin
fc071fd1af GUACAMOLE-383: resolve issues identified by cppcheck
[src/guacd/conf-file.c:206]: (error) Memory leak: conf
[src/protocols/rdp/rdp_cliprdr.c:205]: (error) Memory leak: output
[src/terminal/display.c:283]: (error) Memory leak: display
[src/terminal/display.c:290]: (error) Memory leak: display
2017-09-20 22:55:58 +05:00
Nick Couchman
99e6f89eba GUACAMOLE-279: Merge implement console codes for palette modification. 2017-08-13 20:32:06 -04:00
Michael Jumper
b0d9bbc121 GUACAMOLE-279: Add explicit definitions for each human-readable xterm color. 2017-08-13 15:12:05 -07:00
Michael Jumper
27cf97cb9e GUACAMOLE-279: Handle xterm palette assignments, parsing each color as an X11 color spec. 2017-08-13 15:12:05 -07:00
Nick Couchman
6400af605e GUACAMOLE-325: Merge restore Windows-compatibility at libguac level. 2017-08-13 14:24:58 -04:00
Nick Couchman
ef18f858cb GUACAMOLE-279: Merge migrate to mutable terminal color palette. 2017-08-12 15:18:46 -04:00
Michael Jumper
c53575b18c GUACAMOLE-279: Use guac_terminal_color for color palette assignments. 2017-07-11 08:24:18 -07:00
Michael Jumper
eec3607b16 GUACAMOLE-279: Migrate to mutable terminal color palette. 2017-07-10 14:08:21 -07:00
Michael Jumper
d3c5a8a050 GUACAMOLE-325: Add Winsock-specific guac_socket implementation. 2017-07-05 20:55:03 -07:00
Michael Jumper
eb73563445 GUACAMOLE-325: Explicitly check for Winsock. 2017-07-05 20:55:02 -07:00
Michael Jumper
d85f61deaf GUACAMOLE-325: Do not lock files on Windows. Use Windows-specific _mkdir() call where necessary. 2017-07-05 20:55:02 -07:00
Michael Jumper
1c404d1881 GUACAMOLE-325: Use recv() on Windows platforms. 2017-07-05 20:55:02 -07:00
Michael Jumper
944857d130 GUACAMOLE-325: Include -no-undefined in libguac libtool flags. 2017-07-05 20:55:02 -07:00
Michael Jumper
7b8d250bd5 GUACAMOLE-325: Explicitly check for libdl, using it if provided and warning if both libdl and dlopen() are absent. 2017-07-05 20:55:02 -07:00
Michael Jumper
9dcddd1947 GUACAMOLE-325: Use select() if poll() is unavailable. 2017-07-05 20:55:02 -07:00
Michael Jumper
50d2dd51cb GUACAMOLE-325: Check whether poll() is defined. 2017-07-05 20:55:02 -07:00
James Muehlner
6236eb8f98 GUACAMOLE-337: Merge move of libguacd code into public libguac API. 2017-07-05 19:56:06 -07:00
Michael Jumper
b608d2266b GUACAMOLE-337: Clarify behavior of guac_user_handle_connection(). 2017-07-05 19:54:06 -07:00
James Muehlner
3fdd1e973a GUACAMOLE-303: Merge null terminator overflow fix. 2017-07-05 19:31:10 -07:00
Michael Jumper
7857dd0a9a GUACAMOLE-303: Ensure there is always space for the null terminator when normalizing. 2017-07-04 12:00:43 -07:00
Nick Couchman
07db9808a0 GUACAMOLE-303: Merge Allow root directory of SFTP filesystem to be configured. 2017-07-03 17:47:05 -04:00
Michael Jumper
60141175dd GUACAMOLE-337: Document that socket-ssl.h is not guaranteed to be present. 2017-07-01 18:55:20 -07:00
Michael Jumper
f504b1a5e8 GUACAMOLE-337: Move libguacd functionality into libguac. 2017-07-01 18:50:03 -07:00
Michael Jumper
5b748a4b42 GUACAMOLE-337: Separate definition of guacd read timeout from libguacd. 2017-07-01 18:50:03 -07:00
Michael Jumper
06a5043442 GUACAMOLE-337: Include only *-types.h headers when only types are needed. 2017-07-01 18:50:03 -07:00
Michael Jumper
f311c23ffa GUACAMOLE-337: Move SSL socket into libguac. 2017-07-01 18:50:03 -07:00
Michael Jumper
78dbf64416 GUACAMOLE-337: Add missing libtool flags for libguacd. 2017-07-01 16:05:17 -07:00
Michael Jumper
3a46fffe44 GUACAMOLE-337: Do not include config.h in libguacd public headers. 2017-07-01 16:05:14 -07:00
Michael Jumper
6c484c1efd GUACAMOLE-337: Limit public libguacd API to simply user handshake handling and SSL/TLS sockets. 2017-07-01 16:05:12 -07:00
Michael Jumper
7f3b985cc6 GUACAMOLE-337: Install libguacd as a normal library. 2017-07-01 16:05:11 -07:00
Michael Jumper
69d8d87ec9 GUACAMOLE-337: Remove unnecessary include of syslog.h by libguacd. 2017-07-01 16:05:08 -07:00