You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xrdp-proprietary/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.)
7 years ago
..
Makefile.am remove crc16.h from common/Makefile.am 7 years ago
arch.h Corrected endianness detection on ppc64el. 7 years ago
base64.c fix indent, no logic change 8 years ago
base64.h move base64 functions to base64.c 8 years ago
defines.h common: small fix for 32 bit color 11 years ago
fifo.c Eliminate APP_CC and DEFAULT_CC 8 years ago
fifo.h Eliminate APP_CC and DEFAULT_CC 8 years ago
file.c common: quit using `!` as comment out symbol in config files 7 years ago
file.h Eliminate APP_CC and DEFAULT_CC 8 years ago
list.c Eliminate APP_CC and DEFAULT_CC 8 years ago
list.h Eliminate APP_CC and DEFAULT_CC 8 years ago
list16.c Eliminate APP_CC and DEFAULT_CC 8 years ago
list16.h Eliminate APP_CC and DEFAULT_CC 8 years ago
log.c log: revert permission 7 years ago
log.h log: add log level TRACE 7 years ago
os_calls.c Implements the accept/close logic for vsock 7 years ago
os_calls.h vsock, move some defines 7 years ago
parse.h work on main loop changes 10 years ago
pixman-region.c Include config_ac.h from all source files 8 years ago
pixman-region.h add region intersect 9 years ago
pixman-region16.c Include stdint.h, don't redefine MAX/MIN constants if already defined 9 years ago
rail.h common: no logic change, update comments 11 years ago
ssl_calls.c common: ssl_calls: add support for OpenSSL>=1.1.0 API for DH keys 7 years ago
ssl_calls.h move base64 functions to base64.c 8 years ago
thread_calls.c Eliminate APP_CC and DEFAULT_CC 8 years ago
thread_calls.h Eliminate APP_CC and DEFAULT_CC 8 years ago
trans.c UDS file deleted after first connection 7 years ago
trans.h UDS file deleted after first connection 7 years ago
xrdp_client_info.h Allocate space for tls_ciphers dynamically 8 years ago
xrdp_constants.h common: add more capset constants 7 years ago
xrdp_rail.h common: indent, not logic change 11 years ago
xrdp_sockets.h common: separate sockets macros into basename and fullpath 8 years ago