11435 Commits

Author SHA1 Message Date
ilammy
50038bb725 wClipboard/posix: decode percent-encoding
Nothing really interesting here, it's exactly what it says on the tin.
The percent-encoding is specified by RFC 3986. And we take care to
detect invalid encodings.
2017-04-09 03:15:49 +03:00
ilammy
64e1073044 wClipboard/posix: parse text/uri-list format
Now we start handling the actual format data. As the first step we need
to convert the text/uri-list data into the list of file names. Each file
or directory the user selects to copy is represented with a URI, and the
whole list looks like this:

  file:///home/bob/text-file
  file:///home/bob/a-directory
  file:///home/bob/white%20space

The MIME format is actually specified by RFC 2483. As said in the
comments, we allow some slack for other applications: they can use
singular LF and CR as line terminators, and we also will handle missing
terminator for the last line (some applications actually do this, but I
can't recall which ones at the moment).

We will handle only the file:// URI scheme because these refer to local
filesystem paths. It is possible for text/uri-list to contain URIs with
other schemes when the user selects files from remote filesystems (like
an FTP server or an SMB share connect to from a file manager). We cannot
pass such paths to open() and for some reason the file managers use the
remote URIs even when the remote filesystems are actually mapped to the
local filesystem via FUSE. Therefore we restrict ourselves to handling
only file://.
2017-04-09 03:15:48 +03:00
ilammy
09e73a00cb wClipboard/posix: conversion to FILEDESCRIPTORs
Now we do the actual conversion of a list of struct posix_files into an
array of FILEDESCRIPTORs. In order to correctly fill in the fields we
need to know the size of the file and whether it is a directory. This
can be looked up by stat() call. Do this during struct posix_file
construction and cache the values for later use (we will need them).

Define _FILE_OFFSET_BITS to make off_t a 64-bit value and to call
appropriate functions when we write stat() in the code. FILEDESCRIPTOR
and cliprdr protocol expect the file sizes to be 64-bit so we can
provide accurate information with that. Take care to define it before
including any system headers ("config.h" contains only defines).

Also take care to not overrun the file name buffer. Windows has a hard
cap of 260 Unicode characters for the full file name, including the
terminating null character.
2017-04-09 03:15:48 +03:00
ilammy
907f21e720 wClipboard/posix: basic file list handling
Here you can see an outline of our approach to handling file lists put
on the clipboard. Typical usage of wClipboard by the clients sums up to
doing a ClipboardSetData() call followed by a ClipboardGetData() call
with appropriate format ID passed to them. Thus for files we would
expect the clients to first set the local format (like "text/uri-list")
and then to get the remote format (the "FileGroupDescriptorW").

MS-RDPECLIP has a concept of locally-stored list of files on the
clipboard. This is modeled by clipboard->localFiles ArrayList.  We need
to populate this list before we serialize it into CLIPRDR_FILELIST and
send it to the server. The easiest way to achieve this is a bit hacky,
but it works: we populate the file list from inside the synthesizer
callback registered for text/uri-list -> FileGroupDescriptorW
conversion.

So the client would first set the data it received from local clipboard
as "text/uri-list" format, then it gets a "FileGroupDescriptorW" format,
during that conversion we will prepare to serve file content requests,
and in the end we provide a FILEDESCRIPTOR array to the client as the
conversion result. The client will then serialize the array into
CLIPRDR_FILELIST and sent it to the server. (We cannot do serialization
in WinPR as WinPR should not know about cliprdr and its data formats.)

The subsystems are expected to store their private structures in the
clipboard->localFiles array. POSIX subsystem uses struct posix_file
which currently has bare minimum of fields: the local file name (for
open() and the like) and the remote file name (the one to put into
FILEDESCRIPTOR).
2017-04-09 03:15:48 +03:00
ilammy
b0bc59595d wClipboard: local file subsystem boilerplate
This adds some initial skeleton for local file subsystems of wClipboard.

The idea is to delegate handling of local file formats to dedicated
subsystems selected at runtime based on the compiled-in support code.
This is somewhat similar to the approach used by audin, rdpsnd, rdpgfx
channels in FreeRDP.

Only one subsystem is actually used by wClipboard during runtime. It is
selected by the ClipboardInitLocalFileSubsystem() function which will
try initializing the compiled-in subsystems in the preferred order. Thus
when adding new subsystems one must make sure to 1) return as soon as
any initialization succeeds, 2) leave wClipboard in usable state if the
initialization fails.

A POSIX file subsystem is added as a pioneer. It will handle local file
format "text/uri-list" and will use POSIX API to access the files. This
is the combination one would expect to be supported by Linux systems
which can run the XFreeRDP client.

The POSIX subsystem is enabled only when CMake detects <unistd.h> as
available. This is the core POSIX include file so we can reasonably
expect the rest of the POSIX API to be available along with that file.

We also define a new configuration option WITH_DEBUG_WCLIPBOARD which
will be used to guard some debug-only verbose logging in wClipboad.
2017-04-09 03:15:48 +03:00
ilammy
228916bcec wClipboard: improve error handling
Unify error handling in ClipboardInitFormats() and actually handle the
return value of ClipboardInitSynthesizers(). Currently it always returns
TRUE, but this may change, so we'd better be clean.

Declare 'formatName' in wClipboardFormat as non-const. It is customary
in C to declare owned pointers as non-const because various deallocation
functions like free() take non-const pointers as arguments. Furthermore,
const char* is tightly associated with "string literals" which must not
be freed. Thus declaring this field as non-const is more accurate, and
removes that ugly void* cast from ClipboardInitFormats().

Unify error handling in ClipboardCreate(). The cleanup snippet should
not be repeated as it's prone to errors, like leaking the allocation of
clipboard->formats when ClipboardInitFormats() fails. Unified error
handling makes it much harder to forget resource cleanup on errors.
2017-04-09 03:15:48 +03:00
ilammy
a992743d99 channels/cliprdr: CLIPRDR_FILELIST utilities
The format is described in MS-RDPECLIP 2.2.5.2.3 Packed File List
(CLIPRDR_FILELIST). These functions handle conversion between the
on-the-wire data from cliprdr and arrays of FILEDESCRIPTOR structs.

FILETIME handling is a bit wacky, but that's what we currently have.
2017-04-09 03:15:48 +03:00
ilammy
6ad05d5ea3 winpr: define file attribute flags
The flags are defined by MS-RDPECLIP 2.2.5.2.3.1 File Descriptor
(CLIPRDR_FILEDESCRIPTOR) as well as by 'File Attribute Constants'
in WinAPI reference [1].

The idea is to delegate FILEDESCRIPTOR format processing to WinPR
instead of cliprdr channel, so move the struct definition there. The
definition used by cliprdr protocol is identical but with some fields
treated as reserved.

The defintions are placed into <winpr/shell.h> as FileGroupDescriptorW
is a shell clipboard format.

Also remove the definition of CLIPRDR_FILELIST. The clients would be
using WinPR to handle the file clipping, so CLIPRDR_FILELIST does not
have to be handled explicitly. The clients will have serialization and
deserialization functions to handle CLIPRDR_FILELIST.

[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx
2017-04-09 03:15:48 +03:00
Armin Novak
6e270410ea Fixed broken scoping. 2017-04-06 17:54:44 +02:00
Armin Novak
cb815d6562 Fixed a memory leak and bad free. 2017-04-06 17:46:07 +02:00
David Fort
9fd3974817 Merge pull request #3864 from DavBfr/rewrite-disk-redirection
Rewrite disk redirection using WinPR
2017-04-06 17:32:21 +02:00
Armin Novak
4be62f7047 Fixed OpenSSL 1.1 no legacy compile issues. 2017-04-06 11:25:25 +02:00
Bernhard Miklautz
a2e7d7139b Merge pull request #3897 from akallabeth/mac_os_fix
OSX: Updated RPATH settings for each lib.
2017-04-06 09:54:26 +02:00
Armin Novak
bba910bd85 Fixed RPATH settings for OS X 2017-04-06 08:08:07 +02:00
David PHAM-VAN
f54326e350 Fix indentation 2017-04-05 15:35:03 -07:00
Norbert Federa
9534b40a1d Merge pull request #3899 from akallabeth/neon_fix
Fixed NEON YUV to RGB conversion issues.
2017-04-05 12:36:38 +02:00
Armin Novak
4f6beb0815 Fixed NEON YUV to RGB conversion issues. 2017-04-05 12:20:29 +02:00
Bernhard Miklautz
d492d52c85 Merge pull request #3896 from nfedera/fix_gfx_progressive_decoding
rdpegfx: fix RemoteFX Progressive Codec decoding
2017-04-04 07:44:38 +02:00
Norbert Federa
1739f27b82 rdpegfx: fix RemoteFX Progressive Codec decoding
Since this comes via a Wire-To-Surface-2 PDU we don't have
any left/top/right/bottom destination values.
The current code has always dealt with zeros when updating the
invalid region which resulted in black rectangles.
The correct update region is determined during decompression.
2017-04-03 18:59:58 +02:00
David PHAM-VAN
30d0bde4ba Fix FindFirstFile return values 2017-03-31 15:33:28 -07:00
Norbert Federa
d86066f681 Merge pull request #3892 from akallabeth/x11_gfx_surface_update
Update changed rectangles instead of extent.
2017-03-31 13:24:10 +02:00
Norbert Federa
bc1c4ae7bd Merge pull request #3894 from akallabeth/cache_to_surface_fix
Use exclusive coordinates in CacheToSurface.
2017-03-31 12:27:34 +02:00
Armin Novak
8d116e6ee9 Use exclusive coordinates in CacheToSurface. 2017-03-31 12:06:21 +02:00
Armin Novak
850d7fbc38 Update changed rectangles instead of extent. 2017-03-30 18:17:21 +02:00
David Fort
5cae1d1028 Merge pull request #3891 from nfedera/fix-rdpegfx-gdisw-drawing
improve rdpegfx drawing for software gdi
2017-03-30 16:59:39 +02:00
Norbert Federa
0bb67a0a69 improve rdpegfx drawing for software gdi
process the region's rectangles individually instead of
just copying the extents
2017-03-30 15:42:13 +02:00
David Fort
1833e4ba7d Merge pull request #3865 from DavBfr/unicode-printer-name
Bugfix: Wrong encoding method used for printer name
2017-03-29 14:54:57 +02:00
Martin Fleisz
6653c94c7c Merge pull request #3886 from akallabeth/warning_fixes_and_tests
Fixes for AVC420, Warnings and tests
2017-03-29 12:42:32 +02:00
Armin Novak
aa11a6c89c Fixed memory leak and return value check issue. 2017-03-28 17:56:44 +02:00
Armin Novak
ed0024d11b Fixed AVC420 SSE implementation and test. 2017-03-28 17:42:35 +02:00
Armin Novak
09d43a66f4 Fixed tests and dead store warnings. 2017-03-28 16:49:56 +02:00
David Fort
20c4a91f2a Merge pull request #3884 from akallabeth/memleak_fix
Fixed leak of client random.
2017-03-28 15:06:10 +02:00
Armin Novak
9f9254504e Fixed leak of client random. 2017-03-28 14:33:02 +02:00
Norbert Federa
261a456b43 Merge pull request #3883 from akallabeth/gfx_x11_speedup
Gfx x11 speedup
2017-03-28 12:35:30 +02:00
Armin Novak
197378975b Let bitmaps keep XBitmap during lifetime. 2017-03-28 12:14:19 +02:00
Armin Novak
73bf4547a5 X11 GFX: Restrict to region, ignore alpha
* Restrict the screen update to the changed region
* Ignore differences in color format alpha
2017-03-28 12:14:19 +02:00
Armin Novak
d46d0c3d4a Fixed invalid return from xf_rail_window_icon 2017-03-28 11:47:46 +02:00
akallabeth
13a1d80daf Merge pull request #3882 from nfedera/fix-x11-client-perf
some performance fixes
2017-03-28 08:44:29 +02:00
David PHAM-VAN
b46aaeb973 Fix memory leaks, Mixed declarations 2017-03-27 11:15:22 -07:00
Norbert Federa
fa2086686b some performance fixes
- draw only the updated region in the gdi and x11 surface bits implementation
- don't repeatedly call IsProcessorFeaturePresentEx in rfx rlgr decoder
- fix ugly and unaligned profiler print layout and remove an unnecessary value
2017-03-27 20:14:13 +02:00
David PHAM-VAN
c60d663d1a Remove unused variable and check return codes 2017-03-27 10:55:55 -07:00
Martin Fleisz
aa0e29372a Merge pull request #3875 from hardening/client_random
Client random
2017-03-24 10:34:12 +01:00
David Fort
b0b3a78a20 Store client_random in server mode
We need the client_random in server mode when the client does RDP security and
tries to reconnect using the cookie.
2017-03-21 10:32:17 +01:00
David Fort
b33371fe65 Fixed typo 2017-03-21 10:31:21 +01:00
Martin Fleisz
aece09042f Merge pull request #3871 from akallabeth/logon_error_info_log
Print logon error info.
2017-03-20 11:21:58 +01:00
Bernhard Miklautz
96b486b8f9 Merge pull request #3870 from akallabeth/mouse_cursor_23bpp
Ignore AND mask for 32bpp cursor. #3863
2017-03-20 10:09:23 +01:00
David Fort
5a34c4d1f2 Merge pull request #3873 from lluixhi/master
Support LibreSSL
2017-03-20 08:59:05 +01:00
Aric Belsito
70ab61c8e6
Support LibreSSL
Broken by the addition of OpenSSL 1.1.0 support.
2017-03-19 13:58:24 -07:00
David PHAM-VAN
5a66fe841a Misc Fixes 2017-03-17 14:07:33 -07:00
Armin Novak
8c687611af Print logon error info. 2017-03-17 13:48:32 +01:00