neutrinolabs / xrdp

xrdp: an open source RDP server
http://www.xrdp.org/
Apache License 2.0
5.6k stars 1.73k forks source link

drive redirection not working on RHEL 9 #3067

Closed jgaovvv closed 3 months ago

jgaovvv commented 4 months ago

xrdp version

0.9.25

Detailed xrdp version, build options

$ xrdp --version
xrdp 0.9.25
  A Remote Desktop Protocol Server.
  Copyright (C) 2004-2020 Jay Sorg, Neutrino Labs, and all contributors.
  See https://github.com/neutrinolabs/xrdp for more information.

  Configure options:
      --build=x86_64-redhat-linux-gnu
      --host=x86_64-redhat-linux-gnu
      --program-prefix=
      --disable-dependency-tracking
      --prefix=/usr
      --exec-prefix=/usr
      --bindir=/usr/bin
      --sbindir=/usr/sbin
      --sysconfdir=/etc
      --datadir=/usr/share
      --includedir=/usr/include
      --libdir=/usr/lib64
      --libexecdir=/usr/libexec
      --localstatedir=/var
      --sharedstatedir=/var/lib
      --mandir=/usr/share/man
      --infodir=/usr/share/info
      --enable-fuse
      --enable-pixman
      --enable-painter
      --enable-vsock
      --enable-ipv6
      --with-socketdir=/run/xrdp
      --with-imlib2
      build_alias=x86_64-redhat-linux-gnu
      host_alias=x86_64-redhat-linux-gnu
      CC=gcc
      CFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection
      LDFLAGS=-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
      LT_SYS_LIBRARY_PATH=/usr/lib64:
      PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig

  Compiled with OpenSSL 3.0.7 1 Nov 2022

Operating system & version

Red Hat Enterprise Linux release 9.3 (Plow)

Installation method

dnf / apt / zypper / pkg / etc

Which backend do you use?

tigervnc-server-minimal-1.13.1-2.el9.x86_64

What desktop environment do you use?

GNOME 40 (x11)

Environment xrdp running on

Physical PC with a Nvidia card

What's your client?

RDP client on Windows 11

Area(s) with issue?

File transfer / drive redirection

Steps to reproduce

On a RHEL 9.3 system, install xrdp from EPEL repo.

In /etc/xrdp/sesman.ini, set:

[Chansrv]
FuseMountName=/media/thinclient_drives/%u/thinclient_drives

Then created the directory:

$ ls -l /media/
total 0
drwxrwxrwt. 2 root root 6 May  8 12:21 thinclient_drives

✔️ Expected Behavior

Selected Windows local drives should mount under the /media/thinclient_drives/%u/thinclient_drives/

❌ Actual Behavior

No directories created under the /media/thinclient_drives after the RDP session connected. Copy-paste works fine.

Also I see the xrdp-chansrv.10.log:

[20240508-12:51:46] [INFO ] Socket 12: AF_UNIX connection received
[20240508-12:51:46] [ERROR] Unable to obtain characteristics of directory containing /media/thinclient_drives/1947/thinclient_drives
[20240508-12:51:46] [ERROR] Unable to obtain characteristics of directory containing /media/thinclient_drives/1947/thinclient_drives
[20240508-12:51:46] [ERROR] Unable to obtain characteristics of directory containing /media/thinclient_drives/1947/thinclient_drives
[20240508-12:51:47] [INFO ] sound_process_output_format:
[20240508-12:51:47] [INFO ]       wFormatNo       0
[20240508-12:51:47] [INFO ]       wFormatTag      WAVE_FORMAT_PCM
[20240508-12:51:47] [INFO ]       nChannels       2
[20240508-12:51:47] [INFO ]       nSamplesPerSec  44100
[20240508-12:51:47] [INFO ]       nAvgBytesPerSec 176400
[20240508-12:51:47] [INFO ]       nBlockAlign     4
[20240508-12:51:47] [INFO ]       wBitsPerSample  16
[20240508-12:51:47] [INFO ]       cbSize          0
[20240508-12:51:47] [INFO ] sound_process_output_format:
[20240508-12:51:47] [INFO ]       wFormatNo       1
[20240508-12:51:47] [INFO ]       wFormatTag      WAVE_FORMAT_PCM
[20240508-12:51:47] [INFO ]       nChannels       2
[20240508-12:51:47] [INFO ]       nSamplesPerSec  22050
[20240508-12:51:47] [INFO ]       nAvgBytesPerSec 88200
[20240508-12:51:47] [INFO ]       nBlockAlign     4
[20240508-12:51:47] [INFO ]       wBitsPerSample  16
[20240508-12:51:47] [INFO ]       cbSize          0
[20240508-12:51:47] [INFO ] sound_process_training: round trip time 11
[20240508-12:51:47] [INFO ] Detected remote smartcard 'SCARD'
[20240508-12:51:47] [INFO ] Detected remote printer 'PRN4' (not supported)
[20240508-12:51:47] [INFO ] Detected remote printer 'PRN6' (not supported)
[20240508-12:51:47] [INFO ] Detected remote printer 'PRN5' (not supported)
[20240508-12:51:47] [INFO ] Detected remote drive 'N:'
[20240508-12:51:47] [INFO ] Detected remote drive 'E:'

Anything else?

No response

matt335672 commented 3 months ago

@jgaovvv - apologies for not getting back to you sooner. I thought I'd replied to this, but it seems I'd failed to do so.

Upon further investigations, this is a regression caused by #2032. As part of that fix, we needed to identify the characteristics of the directory containing the FUSE mount point. It seems when I added the code to do this, I added it in the wrong place. So everything's fine if the mount point is just one level down from an existing directory, but if it's two or more levels down the directories aren't detected.

Workaround; define your user-specific mount points to be one level below an existing directory.