xrdp/common
Ben Cohen 3b5b7a5935 UDS file deleted after first connection
If you run xrdp with a Unix Domain Socket (UDS) for the port specified in
/etc/xrdp/xrdp.ini then the first connection succeeds but subsequent
connections fail.  In fact the UDS is deleted from the filesystem as soon
as the first connection is established.

Test case:

1. Edit /etc/xrdp/xrdp.ini to set "port=/var/run/xrdp-local.socket".

2. Restart xrdp.

3. Run the following.  When rdesktop starts up and the logon dialog is
   displayed, press "Cancel".

   sudo socat TCP-LISTEN:12345 UNIX-CONNECT:/var/run/xrdp-local.socket &
   rdesktop localhost:12345

4. Run the following:

    sudo socat TCP-LISTEN:12346 UNIX-CONNECT:/var/run/xrdp-local.socket &
    rdesktop localhost:12346

Expected behaviour: rdesktop starts up and displays the logon dialog.
Observed behaviour: rdesktop exits with "ERROR: Connection closed" and
                    socat exits with "No such file or directory.

This is because in the child process after forking, xrdp_listen_fork()
calls trans_delete() which deletes the UDS.  Simply commenting out the
g_file_delete() and g_free() fixes this, but that isn't a proper solution
because trans_delete() is called from elsewhere where the UDS might no
longer be wanted.

Fix by adding a function trans_delete_from_child() that frees and clears
listen_filename before calling trans_delete(), and call the new function
from xrdp_listen_fork().

(Workaround: set "fork=false" in /etc/xrdp/xrdp.ini, because
trans_delete() is then not called.)
2018-03-27 09:22:49 +03:00
..
arch.h Corrected endianness detection on ppc64el. 2018-03-27 13:45:58 +09:00
base64.c fix indent, no logic change 2017-08-01 08:40:30 +09:00
base64.h move base64 functions to base64.c 2017-08-01 08:40:30 +09:00
defines.h common: small fix for 32 bit color 2014-06-10 16:58:25 -07:00
fifo.c Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
fifo.h Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
file.c common: quit using ! as comment out symbol in config files 2018-02-20 13:13:34 +09:00
file.h Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
list16.c Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
list16.h Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
list.c Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
list.h Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
log.c log: revert permission 2018-02-13 16:44:37 +09:00
log.h log: add log level TRACE 2017-10-13 15:09:33 +09:00
Makefile.am remove crc16.h from common/Makefile.am 2017-11-09 21:13:53 -08:00
os_calls.c Implements the accept/close logic for vsock 2017-11-17 20:23:20 -08:00
os_calls.h vsock, move some defines 2017-11-07 18:20:45 -08:00
parse.h work on main loop changes 2015-07-05 23:14:46 -07:00
pixman-region16.c Include stdint.h, don't redefine MAX/MIN constants if already defined 2016-08-12 12:16:14 -07:00
pixman-region.c Include config_ac.h from all source files 2017-03-04 00:52:34 -08:00
pixman-region.h add region intersect 2016-08-08 23:12:52 -07:00
rail.h common: no logic change, update comments 2014-03-01 23:26:40 -08:00
ssl_calls.c common: ssl_calls: add support for OpenSSL>=1.1.0 API for DH keys 2018-03-22 02:20:47 +02:00
ssl_calls.h move base64 functions to base64.c 2017-08-01 08:40:30 +09:00
thread_calls.c Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
thread_calls.h Eliminate APP_CC and DEFAULT_CC 2017-03-14 00:21:48 -07:00
trans.c UDS file deleted after first connection 2018-03-27 09:22:49 +03:00
trans.h UDS file deleted after first connection 2018-03-27 09:22:49 +03:00
xrdp_client_info.h Allocate space for tls_ciphers dynamically 2017-03-21 10:39:40 -07:00
xrdp_constants.h common: add more capset constants 2017-12-01 11:20:42 +09:00
xrdp_rail.h common: indent, not logic change 2014-07-25 22:24:40 -07:00
xrdp_sockets.h common: separate sockets macros into basename and fullpath 2017-05-16 10:41:06 +09:00