Commit Graph

2356 Commits

Author SHA1 Message Date
Armin Novak dafa6cef67 Fixed memory corruption in Find*FileW 2017-04-27 08:31:53 +02:00
ilammy 843ab1c234 winpr: fix field names of FILEDESCRIPTOR struct
The file name field is actually called cFileName on Windows. Use this
name in WinPR's struct definition as well for compatibility.
2017-04-21 14:13:52 +03:00
ilammy d341973247 winpr: include Windows headers in <winpr/shell.h>
This header file (currently) provides definitions of FILEDESCRIPTOR
structure and GetUserProfileDirectory() function. However, it does so
only when included on non-Windows platforms. The code which includes it
fails to build on Windows because the definitions are absent and it
causes weird compilation errors (like FILEDESCRIPTOR being treated as
the name of a function argument).

Inculde <shlobj.h> to get FILEDESCRIPTOR and <userenv.h> for the
GetUserProfileDirectory() function. (And hope that this will not
pull more Windows headers than we need in the files which include
<winpr/shell.h>.)
2017-04-21 00:44:46 +03:00
Armin Novak 920a76d57e Fix #3922: Use stat insead of lstat 2017-04-19 08:28:00 +02:00
Robert Corrigan 97c5494b98 Update timezone data to Apr 2017 2017-04-18 16:15:13 -04:00
Norbert Federa 736675aa01 Merge pull request #3901 from akallabeth/openssl_1_1_no_legacy
Fixed OpenSSL 1.1 no legacy compile issues.
2017-04-11 15:00:30 +02:00
Armin Novak 4e32334621 Added error return in GetFileAttributesExA. 2017-04-11 11:34:11 +02:00
Armin Novak b0289e3ed8 Fixed cast warnings. 2017-04-10 10:39:01 +02:00
ilammy 44b04cafef wClipboard: disallow Windows reserved names
Another issue revealed during testing is that older Windows systems
cannot handle the reserved file names well. While Windows 8 and 10 are
fine (they silently abort the file transfer), using reserved names with
Windows 7 can flat out crash explorer.exe or result into weird error
messages like "fatal error: 0x00000000 ERROR_SUCCESS".

This is not required by MS-RDPECLIP specification, but we should try to
avoid this issue as not using reserved file names seems to be assumed
a common sense in Windows protocols.

The most convenient way to handle the issue would be on wClipboard level
so that WinPR's clients do not bother with it. We should prohibit the
reserved names from being used in FILEDESCRIPTOR, failing the conversion
if we see such a file.

POSIX subsystem (the only one at the moment) handles remote file names
in two places so move the Unicode conversion and the new validation
check into a separate function.

The reserved file name predicate is placed into <winpr/file.h> so that
it can be used in other places too. For example, other wClipboard local
file subsystems will need it. (It would be really nice to enforce this
check somewhere in the common code, so that the subsystems can't miss
it, but other places can miss some errors thus we're doing it here, as
early as possible.)

The predicate acts on separate file name components rather than full
file names because the backslash is a reserved character too. If we
process full file names this can result in phantom directory entry in
the remote file name. Not to say that handling ready-made components
spares us from splitting the full file name to extract them :)

The implementation is... a bit verbose, but that's fine by me. In the
absence of functions for case-insensitive wide string comparison and
the need to check for the [0-9] at the end of some file names this is
quite readable. Thanks to FAT and NTFS for being case-insensitive and
to MS-DOS for having reserved file names in the first place.
2017-04-09 03:17:07 +03:00
ilammy 458c042b53 wClipboard: track sequence numbers of file lists
One important point in the cliprdr protocol is that the peers are not
allowed to request file sizes and ranges if the clipboard content
changes. File locking should be used to gain this ability. However, our
file list is still accessible after new data is set into wClipboard.

Catch this error by storing the sequence number of the file list when it
is set and checking that it is still in effect at the time when the
client requests file sizes or ranges. There is a small chance of false
positives when the sequence number overflows, but I guess we can safely
ignore it.
2017-04-09 03:15:49 +03:00
ilammy 092e870d2a wClipboard/posix: implement file range retrieval
This is another bunch of callbacks which provide the file contents to
the clients. We jump through some extra hoops in order to have more
pleasant user experience.

Simple stuff goes first. The file offset (or position) is split into the
low and high parts because this is the format in which the clients
receive the request from the server. They can simply copy the values as
is into the struct without repackaging them (which we do instead in the
end to get a 64-bit off_t).

Another thing is that we try to minimize the number of lseek() calls and
to keep as few file descriptors open as possible. We cannot open all the
files at once as there could be thousands of them and we'll run out of
the allowed number of the fds. However, the server can (in theory)
request the file ranges randomly so we need to be prepared for that. One
way to do that would be to always open the file before reading and close
it immediately afterwards. A dead simple solution with an acceptable
performance, but... some file systems do not support seeking, such as
FTP directories mounted over FUSE. However, they handle sequential
reading just fine *and* the server requests the data sequentially most
of the time so we can exploit this.

Thus open the file only once, during the first range request and keep
it open until the server reads all the data. In order to know how much
data is left we keep an accurate account of all reads and maintain the
file offset ourselves. This also allows us to avoid calling lseek() when
the file offset will not be effectively changed. However, if the server
requests some weird offset then we have no choice and will attempt
seeking. Unfortunately, we cannot tell whether it is a genuine failure
or the file system just does not support seeking, so we do not handle
the error further. (One workaround would be to reopen the file and keep
reading it until we're at the correct offset.) In this way we can
support sequential-only file systems if the server requests the contents
sequentially (and it does).

Also note that we do an fstat() right after opening the file in order to
have an accurate value of file size, for this exact file descriptor we
will be using. We should have it filled it by now, but just in case...

There is one more thing to explain. The cbRequested field specifies the
maximum number of bytes the server can handle, not the required number.
Usually this is some power-of-two number like 64 KB, based on the size
of the files on the clipboard. This is why posix_file_read_perform()
does not attempt to fill the whole buffer by repeatedly calling read()
if it has read less data than requested. The server can handle underruns
just fine (and this spares us from special-casing the EOF condition).
2017-04-09 03:15:49 +03:00
ilammy 33719d24ce wClipboard/posix: implement file size retrieval
This is an example of wClipboardDelegate method implementation. POSIX
subsystem uses synchronous methods, but the interface can be used for
asynchronous request processing as well. The client should call a
Client* callback to request some action and the wClipboard will process
the request and report the result by calling an approriate Clipboard*
callback. Usually there will be two callbacks: one for reporting success
and one to report errors.

All callbacks have at least two arguments: the wClipboardDelegate itself
to pass the system context, and the wClipboard*Request structure with
the arguments to pass the call context. The request context is also
passed to the result callbacks by wClipboard so that the client can
match up the result with its previous request.

The fields of wClipboard*Request structures are heavily influenced by
the MS-RDPECLIP spec and mirror the respective fields of
CLIPRDR_FILECONTENTS_REQUEST. wClipboard should not depend on
MS-RDPECLIP, that's the reason we don't use CLIPRDR_FILECONTENTS_REQUEST
directly. However, I believe that we should not have void* fields in the
request structs so that they can be easily copied around if needed.
This is why have the weird 'streamId' field there which has nothing to
do with wClipboard and will be used only by the clients when sending
replies to the server.

Return values of the callbacks are to be used for reporting errors with
processing the request or reply per se, not for errors encountered while
performing the action requested. Thus, for example, we return NO_ERROR
from posix_file_request_size() even when we fail to report the result to
the client, because we have successfully performed the request and do
not care if the client could not handle our reply for some reason.

Also note that setup_delegate() fills in dummy implementations of
Clipboard* reply callbacks so that we do not crash in case the client
does not fill them and do not have to perform paranoid NULL checks
before calling every single callback.
2017-04-09 03:15:49 +03:00
ilammy 28afbe61f9 wClipboard/posix: basic delegate interface
This is the thing which will be used by clients to request file sizes
and ranges from wClipboard and by wClipboard to report the results of
the requests to the clients.

wClipboard and the client will fill in the (currently absent) callbacks
with their implementations of the request-report interface and will be
using them accordingly.

Initially I thought that wClipbardDelegate would be dynamically
allocated by the client and set into wClipboard (as this would be the
case with a delegate interface implementation in OOP langauges), but
after some thought I ended up with storing the delegate in wClipboard
and using the 'void* custom' field for client-private data.

So the idea is for the subsystem to fill in its callbacks during
wClipboard construction and for the client to get access to
wClipboardDelegate with a getter and fill in its callbacks during its
clipboard initialization. The subsystem will use wClipboard* pointer to
access its data and the client will have its void* pointer to store its
context.
2017-04-09 03:15:49 +03:00
ilammy 6c6b122a37 wClipboard/posix: add directories to file list
text/uri-list contains only the files which were immediately selected by
the user. However, we need to enumerate *all* files and directories to
be pasted in CLIPRDR_FILELIST. Thus we need to walk through the
directories and add their content to the file list as well.

We use readdir() function to traverse the directory entries. It has more
sane interface than readdir_r(), but lacks (standardized) thread-safety
guarantees.  However, most C liraries guarantee that so we can use it.
There is no compile-time check because it cannot be made robust. You
deserve a crash here if you are using a C library developed by people
who cannot keep their unhealthy addiction to global state under control.

Note that recursive traversal is also a good opportunity to maintain
good remote names. We just need to concatenate the directory paths and
file names correctly.

However, this recursion has one caveat: it is not bounded, so if the
file system contains a loop then we will crash due to a stack overflow.
We could track symlink loops (and hardlinks too if we try hard) to avoid
the crash, but I think it's not a common thing to do so we can ignore
this possibility.
2017-04-09 03:15:49 +03:00
ilammy 33e80849a8 wClipboard/posix: add local files to file list
Finally we can add a file to the file list once we have got its local
file name decoded. The interesting part here is what we use for the
remote name.

Suppose the user has selected two files in different directories. In
this case we end up receiving a text/uri-list like this:

  file:///home/bob/foo/a
  file:///home/bob/bar/b

We'd expect to see "a" and "b" pasted into the remote session, so that's
what we should use for the remote names: the base names of the files.
These are the parts from the end up to the last directory delimiter.

One tricky point here is that Windows expects the file names to be
encoded in Unicode, but POSIX does not specify any particular encoding
for file names. Operating systems and file systems generally handle the
file names as mostly opaque bytes strings and do not really care what
encoding is used there. There is no portable API to get the encoding,
it's entirely up to the users and the software they use to correctly
interpret the file names. But we need to do something here.

As of 2017, the most widely used encoding for file names is UTF-8. While
there are marginal communities which stick to codepages for legacy
reasons, we can safely assume that most of the time the file names will
be encoded in UTF-8. In fact, popular desktop environments like GNOME
also assume this. So that's what we will do here as well.
2017-04-09 03:15:49 +03:00
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 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
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
David PHAM-VAN 30d0bde4ba Fix FindFirstFile return values 2017-03-31 15:33:28 -07:00
Armin Novak aa11a6c89c Fixed memory leak and return value check issue. 2017-03-28 17:56:44 +02:00
Armin Novak 09d43a66f4 Fixed tests and dead store warnings. 2017-03-28 16:49:56 +02:00
David PHAM-VAN b46aaeb973 Fix memory leaks, Mixed declarations 2017-03-27 11:15:22 -07:00
David Fort b33371fe65 Fixed typo 2017-03-21 10:31:21 +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
David PHAM-VAN d6f78df195 Verify ConvertFromUnicode return values 2017-03-16 16:27:01 -07:00
David PHAM-VAN 459d3a0473 Fix Windows build 2017-03-16 16:20:48 -07:00
David PHAM-VAN ca0398ffc2 Fix FileGetMode writable detection 2017-03-14 12:41:11 -07:00
David PHAM-VAN 9c596b70a6 Fix Android build 2017-03-14 10:48:10 -07:00
Armin Novak 3b56cd652f Fix format string is not a string literal 2017-03-14 10:56:00 +01:00
David PHAM-VAN 1c907d0b09 Fix WinPR FindFirstFile/FindNextFile functions 2017-03-13 14:19:03 -07:00
David PHAM-VAN bc87fa69df Fix WinPR File creation functions 2017-03-13 14:18:59 -07:00
David PHAM-VAN 07c60ca8a4 Add Windows Errors to File operations 2017-03-13 14:18:55 -07:00
David PHAM-VAN 38507bae9f add _wcsrchr function 2017-03-13 14:18:42 -07:00
David PHAM-VAN b89bfaaae4 Add missing functions to WinPR 2017-03-13 14:18:37 -07:00
Alexander Zakharov 3f139108ff Fix Stack_Peek 2017-03-13 15:45:27 +03:00
Armin Novak b574e196d9 Fixed WLog_PrintMessagePrefixVA
WLog_PrintMessagePrefixVA is called with format being a stack variable.
Always copy the data to message->PrefixString otherwise the information
will be lost whenever the stack is destroyed.
2017-03-03 14:11:28 +01:00
Armin Novak 99c45405cb Fixed GetEnvironmentVariable. 2017-03-03 12:43:00 +01:00
Armin Novak b2c29158be Scanbuild warning, argument checks and leak fixes.
* Added Stream_GetRemainingCapacity to check remaining stream size
  before writes.
* Fixed shadow server memory leak.
* Fixed lots of scanbuild warnings
* Added missing argument checks in many functions
* Added missing static function declarations
2017-03-02 18:13:43 +01:00
Norbert Federa 97ab14add4 Added test for GetComputerName/GetComputerNameEx 2017-02-28 11:03:10 +01:00
Armin Novak 270d68f949 Fixed setting of lpnSize according to spec. 2017-02-28 09:39:04 +01:00
Armin Novak b11de26f98 Fixed GetComputerNameExA return checks. 2017-02-27 11:49:53 +01:00
Armin Novak 71d9a83c60 Fixed GetComputerNameEx last error. 2017-02-27 11:49:53 +01:00
akallabeth 8a22052b61 Fixed memory leaks. 2017-02-25 08:35:37 +01:00
akallabeth 705c0c1e12 Fixed GetComputerNameExA calls. #3815 2017-02-24 21:58:08 +01:00
Martin Fleisz 0ed0ecb397 Merge pull request #3789 from akallabeth/scan_warning_fixes
Scanbuild warning and error fixes
2017-02-21 11:07:57 +01:00
Armin Novak 6900b5eb77 Fixed scanbuild warnings. 2017-02-20 14:32:54 +01:00
Armin Novak e9b5d78673 Fixed scanbuild warnings. 2017-02-20 14:28:33 +01:00
Armin Novak c249705085 Fixed scanbuild warnings. 2017-02-20 13:45:19 +01:00
Andreas Schultz d2f98261f7 smartcard: implement ListReaderGroups
Conflicts:
	channels/smartcard/client/smartcard_operations.c
	channels/smartcard/client/smartcard_pack.c
	channels/smartcard/client/smartcard_pack.h

smartcard_operations: move handling of call argument into functions

The call argument was only use by static functions and was always equal
to operation->call. Remove the argument and use operation-call directly.

Also put the memory allocation and check into the same place.

Conflicts:
	channels/smartcard/client/smartcard_operations.c

Updated formatting and API
2017-02-16 16:59:03 +01:00
Armin Novak 198bc6d9e1 Fixed compiler warnings. 2017-02-16 13:17:49 +01:00
Martin Fleisz ae551e4f8a Merge pull request #3762 from akallabeth/sspi_init
Use INIT_ONCE for SSPI initialisation. #3471
2017-02-16 09:51:10 +01:00
pony a57adc3fde libwinpr-utils: fix 3 logic errors 2017-02-15 10:08:53 +01:00
Martin Fleisz 096de0f7dd Merge pull request #3755 from pentagra/master
ifdef's for Cygwin compilation
2017-02-14 12:42:10 +01:00
Armin Novak 4f44cdc561 Use INIT_ONCE for SSPI initialisation. #3471 2017-02-13 18:06:27 +01:00
Armin Novak c90a0be205 Fixed time conversion in FileSetFileTime. #3508 2017-02-13 15:14:20 +01:00
pentagra df2b5c9cdf ifdef's for Cygwin compilation 2017-02-10 18:06:20 +03:00
Armin Novak 656b3be02d Added fallback for CMSPAR. (See debian #854689) 2017-02-09 19:58:26 +01:00
Norbert Federa 6001cb710d Merge pull request #3717 from akallabeth/prim_fixes
Fixed primitives.
2017-02-01 11:11:27 +01:00
Martin Fleisz c2eacd3b31 Build: Use correct pdb names when installing with symbols 2017-01-31 13:32:51 +01:00
Armin Novak ef71f7fd55 Removed unused files, added README with links 2017-01-31 10:01:41 +01:00
Ilya Shipitsin 879f1c3944 removed redundant condition:
[winpr/libwinpr/synch/semaphore.c:131] -> [winpr/libwinpr/synch/semaphore.c:136]: (warning) Either the condition 'if(semaphore)' is redundant or there is possible null pointer dereference: semaphore.
[winpr/libwinpr/synch/semaphore.c:132] -> [winpr/libwinpr/synch/semaphore.c:136]: (warning) Either the condition 'if(semaphore)' is redundant or there is possible null pointer dereference: semaphore.
[winpr/libwinpr/synch/semaphore.c:133] -> [winpr/libwinpr/synch/semaphore.c:136]: (warning) Either the condition 'if(semaphore)' is redundant or there is possible null pointer dereference: semaphore.
[winpr/libwinpr/synch/semaphore.c:134] -> [winpr/libwinpr/synch/semaphore.c:136]: (warning) Either the condition 'if(semaphore)' is redundant or there is possible null pointer dereference: semaphore.
2017-01-28 12:36:08 +05:00
Ilya Shipitsin 102913e808 make cppcheck a bit happier:
[channels/printer/client/printer_cups.c:103]: (error) Resource leak: fp
[server/Mac/mf_event.c:195]: (error) Memory leak: event_queue
[server/shadow/shadow_capture.c:233]: (error) Memory leak: capture
[winpr/libwinpr/sspi/test/TestSchannel.c:440]: (error) Memory leak: lpTokenIn
[winpr/libwinpr/thread/argv.c:198]: (error) Memory leak: lpEscapedChars
[winpr/libwinpr/utils/sam.c:312]: (error) Memory leak: entry
2017-01-25 17:09:25 +05:00
Armin Novak 0106405fff Using android cpufeatures library for detection. 2017-01-24 09:56:45 +01:00
Armin Novak ec06c24794 Added arm64 and mips64 detection support. 2017-01-24 09:28:27 +01:00
Bernhard Miklautz 2a6bac64ae Fix typos in man pages. 2017-01-17 13:25:47 +01:00
Bernhard Miklautz d817469b78 Install man pages
* man pages are only build/installed if WITH_MANPAGES is enabled
* create a new cmake function install_freerdp_man to unified install man
  pages
* install all man pages using the new function
* update the nightly packages accordingly
2017-01-16 11:34:32 +01:00
Bernhard Miklautz 84b542ec85 winpr-makecert: add initial man page 2017-01-16 11:11:59 +01:00
Bernhard Miklautz 8aeb9df0f5 makecert: fix a regression with > 2048 bit
When certificates with more than 2048 bits were generated and written to
file the read function used a erroneous calculated length causing the
used buffer to overflow.
2017-01-16 11:11:59 +01:00
Bernhard Miklautz 960f4644cd winpr-makecert: use sha256 and update command line
* use sha256 instead of sha1 as default hash algorithm
* fix command line parser
* mark not implemented command line switches as unsupported
2017-01-16 11:11:59 +01:00
Bernhard Miklautz 2f93c0f452 winpr-hash: cleanup cmd line and add man page
* add a initial man page
* clean up the command line a little bit (basically error messages)
2017-01-16 11:11:59 +01:00
Bernhard Miklautz bbb6bf6b43 Include major version number in library names
Currently it is not possible to cleanly install multiple major version
of FreeRDP concurrently as some of the development libraries (.so files)
files can conflict.

This change renames all libraries to include the major version number in
the library name to fix this limitation.

The list of changed libraries:

libwinpr-tools.so -> libwinpr-tools2.so
libwinpr.so -> libwinpr2.so
libfreerdp.so -> libfreerdp2.so
libfreerdp-client.so -> libfreerdp-client2.so
libfreerdp-shadow.so -> libfreerdp-shadow2.so
libfreerdp-server.so ->  libfreerdp-server2.so
libfreerdp-shadow-subsystem.so -> libfreerdp-shadow-subsystem2.so
libuwac.so -> libuwac0.so

As the library names have changed, projects that use FreeRDP will need to
update their dependencies. -
If pkg-config or cmake find modules are used, reconfiguration might be
sufficient.

Fixes #3460
2017-01-16 11:11:58 +01:00
Norbert Federa 71ce3378da Merge pull request #3665 from realjiangms/fix_ssl_add_all_digests
Winpr/openssl: Fix digests initialization in multi-thread
2017-01-13 09:46:14 +01:00
Robert Corrigan 6e448e64af Update timezone data to Dec 2016 2017-01-11 16:56:34 -05:00
akallabeth 8fd926f085 Merge pull request #3681 from mfleisz/openssl110_include_fix
Fix compilation with OpenSSL 1.1.0 using MSVC
2017-01-09 17:07:08 +01:00
Martin Fleisz ac090520c3 Fix compilation with OpenSSL 1.1.0 using MSVC 2017-01-09 16:43:28 +01:00
zihao.jiang a505a6cd27 Winpr/openssl: Fix digests initialization in multi-thread
SSL functions like OpenSSL_add_all_digests should be invoked at very beginning as they are not MT safe.
If not we might meet double free exception as following:

 #0  0x00007f23ddd71c37 in raise () from /lib/x86_64-linux-gnu/libc.so.6
 #1  0x00007f23ddd75028 in abort () from /lib/x86_64-linux-gnu/libc.so.6
 #2  0x00007f23dddae2a4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
 #3  0x00007f23dddba55e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
 #4  0x00007f23dc6ecfcd in CRYPTO_free () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
 #5  0x00007f23dc6ef8d1 in OBJ_NAME_add () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
 #6  0x00007f23dc77dcd8 in EVP_add_digest () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
 #7  0x00007f23dc782321 in OpenSSL_add_all_digests () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
 #8  0x00007f23c781da28 in winpr_openssl_get_evp_md (md=4) at /home/zihao/workspace/zihao_FreeRDP/winpr/libwinpr/crypto/hash.c:52
 #9  0x00007f23c781dccb in winpr_Digest_Init (ctx=0x7f22d064d470, md=<optimized out>) at /home/zihao/workspace/zihao_FreeRDP/winpr/libwinpr/crypto/hash.c:344
 #10 0x00007f23d486139b in security_salted_mac_signature (rdp=0x7f23859f5a20, data=0x7f238542d4fb "\004\204\022\004", length=4743, encryption=<optimized out>, output=0x7
     at /home/zihao/workspace/zihao_FreeRDP/libfreerdp/core/security.c:378
 #11 0x00007f23d488d73f in fastpath_send_update_pdu (fastpath=<optimized out>, updateCode=4 '\004', s=0x7f23859f5f40, skipCompression=true)
     at /home/zihao/workspace/zihao_FreeRDP/libfreerdp/core/fastpath.c:1076
 #12 0x00007f23d4891c4f in update_send_surface_frame_bits (context=0x7f23859f5540, cmd=0x7f22b2ffcc80, first=true, last=true, frameId=6)
     at /home/zihao/workspace/zihao_FreeRDP/libfreerdp/core/update.c:1041

Related reports: https://rt.openssl.org/Ticket/Display.html?id=2216&user=guest&pass=guest
2016-12-28 03:48:40 +08:00
Armin Novak 9f19da798c Added attach/detach support for channels. 2016-12-19 17:07:01 +01:00
Norbert Federa cc814ec056 Merge branch 'master' into master 2016-12-19 08:50:16 +01:00
Norbert Federa ab0408ae5e ctest for int format specifiers and usage doc 2016-12-16 14:20:30 +01:00
Norbert Federa f71b6b46e8 fix string format specifiers
- fixed invalid, missing or additional arguments
- removed all type casts from arguments
- added missing (void*) typecasts for %p arguments
- use inttypes defines where appropriate
2016-12-16 13:48:43 +01:00
Norbert Federa 73ac495870 rewrite of wtypes.h 2016-12-16 13:46:43 +01:00
Jakub Adam 831c3fb374 Fix -Wundef with GCC 6.2.1 in wtypes.h
Undefined preprocessor macro in wtypes.h produces:

  warning: "__ILP64__" is not defined [-Wundef]

This causes unnecessary hassle to people who compile their FreeRDP-based
applications with -Werror.
2016-12-16 13:27:39 +01:00
Marc-André Moreau d72ff5d241 Merge pull request #3640 from awakecoding/uwp_fix
UWP portability fixes
2016-12-02 16:54:06 -05:00
Marc-André Moreau 53a61f512c winpr: fix UWP portability 2016-12-02 13:18:55 -05:00
Armin Novak 8a80a10bc3 Fixed format specifier mismatch. 2016-12-02 12:04:53 +01:00
Bernhard Miklautz c82cd6cb57 Fix issues in wlog man page
* fix spelling errors
* move man page from section 1 to section 7
* fix the man page header to match the actual section
* adapt the packages for wlog.7

Fixes #3632
2016-12-01 15:36:31 +01:00
Norbert Federa c6e6b44143 countless WLog/printf format specifier fixes 2016-11-25 17:06:25 +01:00
Martin Fleisz 971c8538ec winpr: Fix compile error after #3615 2016-11-25 11:50:28 +01:00
Norbert Federa b2ad9803b7 disable ERR_remove_thread_state if not required 2016-11-25 10:39:20 +01:00
Norbert Federa 53bd98883e winpr/crypt api changes and memory leak fixes
- winpr_HMAC_New() now just returnes the opaque WINPR_HMAC_CTX* pointer
  which has to be passed to winpr_HMAC_Init() for (re)initialization
  and since winpr_HMAC_Final() no more frees the context you always have to
  use the new function winpr_HMAC_Free() once winpr_HMAC_New() has succeded

- winpr_Digest_New() now just returns the opaque WINPR_DIGEST_CTX* pointer
  which has to be passed to winpr_Digest_Init() for (re)initialization
  and since winpr_Digest_Final() no more frees the context you always have to
  use the new function winpr_Digest_Free() once winpr_Digest_New() has succeded
2016-11-24 18:27:29 +01:00
Norbert Federa 7befab856c Support for OpenSSL 1.1.0 2016-11-24 17:50:09 +01:00
Bernhard Miklautz 3550d0cb43 Merge pull request #3620 from mfleisz/wtsapi_fix
wtsapi: Fix issue with setting custom API table
2016-11-24 11:58:01 +01:00
Martin Fleisz d30a138a01 wtsapi: Fix issue with setting custom API table 2016-11-24 10:35:36 +01:00
Martin Haimberger 7fe28a8a78 virtualChannel: removed static variable usage from
VirtualChannelApi
2016-11-23 04:17:56 -08:00
Robert Corrigan 2973b9ccf0 Updates time zone data to October 2016 2016-10-18 15:38:03 -04:00
Armin Novak 7709542d05 Using C99 compatible variadic macros. 2016-10-07 14:14:56 +02:00
Armin Novak 6fdc872008 Fixed comma at end of enum 2016-10-07 14:10:32 +02:00
Armin Novak 1122627e94 Fixed function argument and variable types. 2016-10-07 14:08:54 +02:00
Armin Novak fb1dcf2689 Fixed invalid const type. 2016-10-07 14:08:33 +02:00
Armin Novak edacd7c6b7 Thread using proper function pointer type. 2016-10-07 14:07:51 +02:00
Armin Novak 943e295714 WLog using C99 compatible variadic macros. 2016-10-07 14:05:27 +02:00
Bernhard Miklautz e54c504eaa winpr/wait: add missing parameters
Add the missing parameters introduced with PR #3381
2016-10-06 15:40:11 +02:00
Armin Novak 8f1adf64ee Refactored ClipboardSetData. 2016-10-06 13:43:15 +02:00
Armin Novak ad4f6d8521 Fixed MacOS includes. 2016-10-06 13:43:11 +02:00
Armin Novak 739d45e372 Fixed includes for iOS 2016-10-06 13:43:11 +02:00
Armin Novak 50c509eee2 Fixed barrier test. 2016-10-06 13:43:10 +02:00
Armin Novak 4b3d3cd69e Warning fixes. 2016-10-06 13:43:10 +02:00
Armin Novak 44b8756617 Warning fixes. 2016-10-06 13:43:10 +02:00
Armin Novak a3fd9bf5af Fixed warnings. 2016-10-06 13:43:10 +02:00
Armin Novak 1454400236 Fixed windows defines for *LIST* 2016-10-06 13:43:10 +02:00
Armin Novak 9c64e77a84 Disabled thread local storage on iOS.
iOS does not support Thread Local Storage.
Disabling it for now until a solution is found.
Print a compiler warning informing developers about this issue.
2016-10-06 13:43:10 +02:00
Armin Novak 4f62d848ac Refactored interlocked typedefs, avoid namespace collisions. 2016-10-06 13:43:09 +02:00
Armin Novak 64c5d78b3f Fixed clang warnings. 2016-10-06 13:43:09 +02:00
Armin Novak dadc5262ae Removed static channel variables.
Global static variables do not work, if more than one instance
of an RDP client is running in the same process space.
Removed the varaibles where possible and replaced them with
thread local storage where necessary.
2016-10-06 13:43:09 +02:00
Armin Novak 081b57905f Added ios home and temp dir support. 2016-10-06 13:43:08 +02:00
Armin Novak 88be64f10b Fixed apple file times. 2016-10-06 13:43:04 +02:00
Armin Novak 35f1347d53 Fixed warnings and mac build. 2016-10-06 13:43:04 +02:00
Bernhard Miklautz bfdab0ed4a Merge pull request #3523 from rjcorrig/tz201609
winpr: Updated time zone definitions to Sept 2016
2016-10-06 12:19:57 +02:00
Marc-André Moreau 1d06087b60 Merge pull request #3515 from akallabeth/apple_time_fix
Fixed SetFileTime for mac.
2016-10-05 09:21:11 -04:00
Robert Corrigan fc7378f59c Updated time zone definitions to Sept 2016 2016-10-04 10:54:11 -04:00
Armin Novak 3eb136d167 Fixed SetFileTime for mac. 2016-09-27 13:28:39 +02:00
ed.velez ed697fa4ad fix_for_xcode8_clock_gettime 2016-09-22 15:42:43 -05:00
Martin Fleisz 71765b72e3 Merge pull request #3284 from ondrejholy/endianness
Endianness fixes
2016-08-25 08:17:52 +02:00
Marc-André Moreau 14cb6d33c6 freerdp: make modifications to NLA server-side fixes according to PR comments 2016-07-22 09:06:07 -04:00
Marc-André Moreau 801dc0f826 freerdp: add configurable NTLM SAM file option for server-side NLA 2016-07-21 18:58:24 -04:00
Marc-André Moreau 1ffbd774e9 freerdp: fix sending of TLS alert on NLA failure, add better handling of server-side NLA in shadow server 2016-07-21 17:53:20 -04:00
akallabeth 79a360b1db Merge pull request #3405 from hardening/wlog_man
Add a dedicated man page for wLog
2016-07-07 10:38:51 +02:00
Norbert Federa 89c25276b4 Merge pull request #3384 from akallabeth/android64_build
Android64 build fixes
2016-07-06 13:58:10 +02:00
David Fort 070b2c6f38 Merge pull request #3402 from doughdemon/master
Compile without <sys/queue.h>
2016-07-05 15:35:41 +02:00
Armin Novak 2ceb38a1c8 Proper wLogMessage initialisation. 2016-07-05 13:22:28 +02:00
Armin Novak d96fbd1bce Initialise WLog PrefixString for each message type. 2016-07-05 13:00:54 +02:00
Norbert Federa 333a1110f5 winpr/sspi/ntlm: fix computer name len calculation
The lpnSize parameter for GetComputerNameEx specifies the total
size of the buffer (in characters).
However, the current code calculated the amount of bytes.
Since only GetComputerNameExA was used and because sizeof(CHAR) == 1
the result was correct but the math was wrong.
Credit goes to @byteboon
2016-06-30 17:15:40 +02:00
David Fort db6efd06d0 Add a dedicated man page for wLog 2016-06-21 09:49:44 +02:00
Norbert Federa 27c439675f winpr: fix win32 linking issues
Depending on the windows target version (_WIN32_WINNT), the used
SDK and the build configuration the linker will see multiple
libraries exporting the same symbols.
To prevent ugly hacks (e.g. modifying cmake's default system
libraries or fragile library linking order chains) we prefix
these functions with "winpr_" and create corresponding defines
to keep the current api names.
2016-06-16 11:47:33 +02:00
Norbert Federa 7a68eebb03 cmake: remove some void statements and fix winpr source group 2016-06-15 13:54:31 +02:00
Norbert Federa 26ed09a14f winpr/sspi/ntlm: fix GetComputerNameExA parameters
On input, the lpnSize [in, out] parameter for GetComputerNameEx()
specifies the total size of the buffer (in characters).
Several functions in ntlm.c were off by one which caused ntlm to fail
if the netbios hostname's strlen was exactly MAX_COMPUTERNAME_LENGTH.
2016-06-14 12:37:37 +02:00
Norbert Federa 62d73dcb75 winpr: fix PathMakePathA and TestWLog
PathMakePathA:
- This function had an endless loop if no native delimiter was in the string
- Use SHCreateDirectoryExA on Windows
- Replaced old code with a new implementation

TestWLog:
- Windows has no "/tmp" by default
- Use GetKnownPath(KNOWN_PATH_TEMP) for the WLog "outputfilepath"
2016-06-13 19:19:28 +02:00
Felix Janda cd581cfb22 Make iOS workaround iOS specific
Fixes compilation on systems without <sys/queue.h>.
2016-06-12 17:55:58 +02:00
Ondrej Holy b8f33aa59c winpr/crt: Make TestString endian-independent
Wide char strings use always little endian encoding since commit f722dc5.
Use only strings in little endian to make the tests endian-independent.
2016-06-10 18:18:47 +02:00
Ondrej Holy bbcc0476c7 winpr/crt: Fix endianness in string utils
All WCHAR strings are stored as little endian after commit f722dc5,
therefor WCHAR string utils have to be changed appropriately.
2016-06-10 18:18:39 +02:00
Norbert Federa 581c000435 winpr/library: fix GetModuleFileName and tests
- Use correct SetLastError values in GetModuleFileName
- Fix wrong return codes in GetModuleFileName
- Build the TestLibraryA/TestLibraryB libraries always shared and
  put them in the test output directory
- TestLibraryGetModuleFileName always returned success
- Improve TestLibraryGetModuleFileName to also check last error values
  and insufficient buffer sizes
- Change TestLibraryGetProcAddress and TestLibraryLoadLibrary to load
  the TestLibrary from the test executable's directory
2016-06-10 13:12:08 +02:00
Marc-André Moreau 0c8af43153 Merge pull request #3397 from awakecoding/master
add missing inet_pton implementation on Windows
2016-06-08 11:03:40 -04:00
Marc-André Moreau f905861616 wayk-now: add missing inet_pton implementation on Windows 2016-06-08 10:51:58 -04:00
Norbert Federa f2c825bb76 winpr: fix some tests
TestNtCreateFile, TestPipeCreateNamedPipeOverlapped
- These tests are currently only expected to succeed on _WIN32
- Also reflect the reverse meaning of this fact in the return values

TestSynchWaitableTimer, TestSynchWaitableTimerAPC:
- These tests are currently expected to fail on __APPLE__
- Also reflect the reverse meaning of this fact in the return values

This logic makes sure that we don't forget to fix the tests if the
corresponding WinPR implementations are fixed.

TestLibrary:
- TestLibraryA and TestLibraryB must always get built as shared libraries
2016-06-07 17:20:56 +02:00
Norbert Federa f969e60a53 winpr/synch: fix barrier deadlock in release build
Let the compiler know that we're comparing a volatile value.
Otherwise the compiler might nuke the comparison operation
and produce code that will spin endlessly.
2016-06-07 13:06:50 +02:00
Norbert Federa a35a1e3d9b winpr/synch: fix InitializeWaitableTimer result
InitializeWaitableTimer must not reported success if the operating
sytem does not provide the required functionality.
2016-06-06 23:06:12 +02:00
Norbert Federa 131ffaa89b winpr/synch: improve barrier test
The SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY flag caused this test
to run extremely long if the system has very few processors.
Although this is expected (thread starvation) this will cause a
intolerably long execution time for automated tests.
Changed the number of threads to be calculated dyamically based
on the number of processors.
Also do proper cleanup to prevent memory leaks.
2016-06-06 15:41:05 +02:00
Bernhard Miklautz bd71b3685b Merge pull request #3388 from nfedera/fix-winpr-pool-synch
winpr: several pool and synch fixes
2016-06-06 13:54:39 +02:00
Bernhard Miklautz 11ecda2ef3 Merge pull request #3386 from nfedera/fix-winpr-barrier
winpr/synch: rewrite barrier implementation & test
2016-06-06 13:44:48 +02:00
Norbert Federa e35049c20e winpr/synch: fix timerqueue segfault
The current experimental/incomplete WinPR timer queue implementation
has several race conditions.
This commit fixes a segfault caused by not unklinking freed timers
from the timer queue timers list.
2016-06-06 13:24:04 +02:00
Norbert Federa c16bee759f winpr: several pool and synch fixes
pool:
- the winpr implementation fallback was not used on older windows editions
- drop useless and conflicting TP_CALLBACK_ENVIRON_V3
- fix race conditions by using use proper one-time initialization
- on win32 WinPR tried to load several pool/callback_environment functions
  from kernel32.dll but since these are defined as inline functions in the
  windows headers, no windows edition has ever exported them in any dll.
- removed callback_environment.c and added corresponding static inline
  function to pool.h
- fix segfault in TestPoolWork: CloseThreadpoolWork() must not be called
  if there is a cleanup group associated with the work object since calling
  CloseThreadpoolCleanupGroupMember() already releases the work object

sync:
- The windows headers incorrectly define InitializeCriticalEx support if
  _WIN32_WINNT >= 0x0403 instead of >= 0x0600 (Vista)
- created a compatible define to deal with this issue
2016-06-04 17:09:48 +02:00
Norbert Federa 2dba082587 winpr/synch/barrier: fix return value and test
- According to the msdn docs DeleteSynchronizationBarrier always returns TRUE
- Added additional error checks to the barrier test
2016-06-04 13:40:01 +02:00
Norbert Federa 85f44262de winpr/synch: add spinning support to barrier
Implemented the SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY and
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY flags.
2016-06-04 00:55:27 +02:00
Norbert Federa 341eed138f winpr/synch: rewrite barrier implementation & test
The synchronization barrier test as well as the actual WinPR
implementation were completely broken.
2016-06-03 18:56:36 +02:00
Armin Novak dd9cb25b3c Fixed defined symbols for function check. 2016-06-03 14:55:26 +02:00
Norbert Federa 458f606934 winpr/thread: fix SwitchToThread
On some operating systems sched_yield is a stub returning returning -1.
In that case use usleep which should at least trigger a context switch
if any thread is waiting.
2016-06-02 15:38:57 +02:00
Armin Novak e40546485d Fixed pthread_mutex_timedlock detection. 2016-06-02 15:33:00 +02:00
Ondrej Holy 1903537f09 winpr/crt: Make TestUnicodeConversion endian-independent
Half of the tests expects strings in little endian byte order, half of
the tests expects byte order based on a current architecture, so it
obviously can't work on big endian machines. Wide char strings use
always little endian encoding since commit f722dc5. Use only strings
in little endian to make the tests endian-independent.
2016-06-02 11:13:36 +02:00
Norbert Federa e718fb324b fix race conditions, tests and some invalid return values
Since the current winpr implementation for overlapped operations is
incomplete and buggy, all affected functions will now fail if they are
called with a set FILE_FLAG_OVERLAPPED flag or a non-null pointer to
a OVERLAPPED structure.

winpr/nt:
- use proper one-time initialization on win32
- fix TestNtCreateFile
- fix broken/incomplete _RtlAnsiStringToUnicodeString
- unimplemented functions return appropriate error codes

winpr/pipe:
- improved TestPipeCreateNamedPipe
- rewrite the completely broken TestPipeCreateNamedPipeOverlapped test

rdtk:
- improve test and don't blindly return success

winpr/synch:
- fix race condition in TestSynchTimerQueue

winpr/ssspi:
- fix TestEnumerateSecurityPackages printf output
- fix TestQuerySecurityPackageInfo printf output

winpr/environment:
- fix GetEnvironmentStrings printf output

winpr/comm:
- unimplemented functions return appropriate error codes

winpr/io:
- unimplemented functions return appropriate error codes

winpr/thread:
- implement SwitchToThread() via sched_yield()
2016-06-01 16:26:26 +02:00
Ondrej Holy 44ce6b02ed winpr/stream: Make TestStream endian-independent
The TestStream_PeekAndRead expects LE byte order and consequently
fails on BE. Change the test to be endian-independent.
2016-05-31 16:04:16 +02:00
Norbert Federa c6aeba6a67 winpr/wtsapi: fixed race conditions and tests 2016-05-30 17:54:59 +02:00
Ondrej Holy 0e353cce2e winpr/ntlm: Fix endianness in NTLM authentication
This patch fixes NTLM authentication to work properly on a big endian
machines. Freerdp exited with the following error without recent commits:
[09:50:20:914] [13821:13822] [ERROR][com.freerdp.core.transport] - BIO_read returned an error: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error
[09:50:20:914] [13821:13822] [ERROR][com.freerdp.core] - freerdp_set_last_error ERRCONNECT_CONNECT_TRANSPORT_FAILED [0x2000D]
[09:50:20:914] [13821:13822] [ERROR][com.freerdp.client.x11] - Freerdp connect error exit status 1

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Ondrej Holy 95a1b53940 winpr/ntlm: Fix endianness in ntlm_av_pair_list
Data in ntlm_av_pair_list are accessed directly, which doesn't work on
big endian machines currently. The recieved data are stored as little
endian. Use conversion macros from endian.h to load and store the data
properly.

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Ondrej Holy 8d468ea6b5 winpr/crt: Fix endianness in WCHAR case conversions
All WCHAR strings are stored as little endian after commit 12dfc5e9,
therefor CharUpperBuffW and CharLowerBuffW have to be changed appropriately
in order to fix NTLM authentication.

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Ondrej Holy f722dc5c28 winpr/crt: Fix endianness in unicode conversions
Unicode conversions doesn't work on big endian machines currently.
The strings are stored as little endian. Use conversion macros from
endian.h to load and store the data properly.

Let's use wide char strings always as little endian. It seems that
Windows API also always expects data to be little endian, so it
makes sense to require wide char strings as little endian also.

The patches fixes transformations between UTF8 and UTF16 only, which are
used by freerdp. UTF32 transformations are not used by freerdp.

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Ondrej Holy 250998efb8 winpr: Be sure data points to BYTE in endian.h
The conversion macros don't work properly if input data doesn't point
to BYTE. Cast the input data to BYTE to avoid unexpected behavior and
to simplify usage of the macros.

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Ondrej Holy 11221e7e2c winpr: Fix Data_Read_UINT16
There is a bug which causes that higher byte and lower byte contain
first byte of data and second byte of data is lost. The patch fixes
it similarly as it is done in Stream_Read_UINT16.

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Ondrej Holy 6d2ab9cc47 winpr: Fix 64-bit architecture detection
The current definitions wrongly assume the only 64-bit architecture is
x86_64. Use the __ILP64__, __LP64__ and __LLP64__ to correctly define
the size of a long and of pointer.

The patch is needed for platforms such as ppc64, or s360x, otherwise
you can see following warnings:
warning: cast from pointer to integer of different size

The patch is modification of debian downstream patch:
http://anonscm.debian.org/cgit/collab-maint/freerdp.git/tree/debian/patches/1004_64-bit-architectures.patch

Original author is Aurelien Jarno probably.

https://github.com/FreeRDP/FreeRDP/issues/2520
2016-05-30 13:37:15 +02:00
Norbert Federa e8c4910e2e fix segfaults casused by size_t format specifier
win32/msvc cc does not recognize the %z format specifier which caused
invalid references and segfaults on win32.
Until FreeRDP gets format specifier macros we'll cast size_t to
unsigned long and use the %lu specifier.

Also simplified winpr_backtrace_symbols() a little bit and fixed it
to allocate the correct amount of bytes for the return buffer.
2016-05-27 15:55:28 +02:00
Hardening 00dd6f8c51 Merge pull request #3372 from nfedera/fix-winpr-test-library
winpr/library: fix win32 test and some cleanup
2016-05-27 14:53:12 +02:00
Norbert Federa d2b2a921f1 winpr/library: fix win32 test and some cleanup
On Windows we seem to have to load the TestLibrary[AB] test libraries
from in same folder the test executable runs.

Also removed the empty RemoveDllDirectory, SetDefaultDllDirectories,
AddDllDirectory tests and the redundant FreeLibrary test.

TestLibrary now works and succeeds on Win32.

sadasd
2016-05-27 14:34:41 +02:00
Norbert Federa a45ac8dad8 winpr/path: fix PathCchFindExtensionA and more
- PathCchFindExtensionA had an off-by-one error when verifying the
  required null termination
- TestPathCchFindExtension used unicode strings when testing the
  *A (ASCII) functions
- The PathAllocCombineW implementation (which is still buggy has
  hell) used strlen to calculate the lenght of unicode strings

TestPath now succeeds on WIN32
2016-05-26 18:36:02 +02:00
Norbert Federa 9370d98575 winpr/pipe: fix CreateNamedPipe test
GetLastError() was not always checked for ERROR_PIPE_CONNECTED which
indicates success if ConnectNamePipe returns FALSE.

TestPipe now also succeeds on Win32
2016-05-26 13:52:30 +02:00
Norbert Federa 1b231f9dd9 winpr/thread: fix TestThreadCreateProcess
On WIN32 TestThread now works and is expected to succeed
2016-05-25 15:47:58 +02:00
Norbert Federa aded51f38f winpr/synch: fix tests
TestSynchTimerQueue:
- fixed race condition

TestSynchWaitableTimerAPC:
- Use WaitForSingleObjectEx since the thread must be in an alterable state

TestSynch is now expected to succeed on WIN32
2016-05-24 22:33:27 +02:00
Norbert Federa 386d290015 winpr/synch: fix mutex implementation
- Mutex is recursive on Windows; as a consequence we have to use
  the pthread PTHREAD_MUTEX_RECURSIVE type
- Adapt MutexCloseHandle accordingly
- ReleaseMutex returned TRUE even if pthread_mutex_unlock failed
- Fixed and improved the TestSynchMutex ctest
2016-05-24 15:10:57 +02:00
Bernhard Miklautz 5d030534db winpr/event: fix file descriptor leak
SetEventFileDescriptor overrides the internal file descriptor of the
event but didn't close it. Now if the descriptor is closed if it isn't
marked as attached.
2016-05-23 13:04:44 +02:00
Hardening 4e66df7228 Merge pull request #3333 from akallabeth/memleak_fixes
Memleak fixes
2016-05-13 11:32:48 +02:00
Robert Corrigan 73e13b0b29 KB3153731: May 2016 DST update for Azerbaijan, Chile, Haiti and Morocco 2016-05-12 13:24:21 -04:00
Armin Novak eacf2b542e Fixed memory leaks. 2016-05-12 10:01:30 +02:00
Marc-André Moreau 6b73757085 Merge branch 'master' of github.com:awakecoding/FreeRDP 2016-05-11 13:13:02 -04:00
Marc-André Moreau d4c809c4ae winpr: fix definitions of synchronization barrier and interlocked functions 2016-05-11 13:12:44 -04:00
Marc-André Moreau 915b9a15b1 Merge branch 'master' of github.com:FreeRDP/FreeRDP
Conflicts:
	winpr/libwinpr/bcrypt/CMakeLists.txt
2016-05-11 11:05:17 -04:00
Bernhard Miklautz 59fbfdb24b Add library libwinpr-tools
libwinpr-tools is a replacement for winpr-makecert-tool.a. Currently
it's basically the same as winpr-makecert-tool.a but in future
functionality that doesn't fit directly in winpr will be added here.
2016-05-03 14:42:08 +02:00
Bernhard Miklautz 81d30cc480 Disable comm tests per default
comm tests require a serial device for testing. If the test environment
isn't available the tests will return errors therefore the tests are
now disabled per default. They can be (re-)enabled by using the cmake
option BUILD_COMM_TESTS.
2016-05-02 16:59:25 +02:00
Bernhard Miklautz bd7ed27f92 Merge pull request #3305 from akallabeth/dynamic_channel_crash_fix
Dynamic channel crash fix
2016-04-26 11:01:40 +02:00
akallabeth a62d962bc7 Merge pull request #3250 from mfleisz/cssp_v3
core: Add support for CredSSP version 3
2016-04-26 09:59:40 +02:00
Armin Novak ee186bec73 ListDictionary handle NULL list argument. 2016-04-26 09:34:12 +02:00
Robert Corrigan f8c42da561 KB3148851: Updates to Russian Time Zones for 2016 2016-04-13 14:44:30 -04:00
Marc-André Moreau a192967a5b libwinpr-path: fix missing shlwapi.lib import 2016-03-30 10:58:36 -04:00
Marc-André Moreau 8fcc2aabf1 Merge branch 'master' of github.com:awakecoding/FreeRDP 2016-03-30 10:47:01 -04:00
Marc-André Moreau cedf6d98e2 freerdp: more UWP porting 2016-03-29 20:34:52 -04:00
Marc-André Moreau 4d629a7999 freerdp: UWP porting 2016-03-29 16:03:15 -04:00
Bernhard Miklautz 9e8c6c99b6 First shot on fixing over linking
If a target is linked against libraries with cmake
(target_link_libraries) and the libraries are not marked as PRIVATE
they are "exported" and in case a other target is linked against this
target it is also linked against *all* (not private) libraries.

Without declaring private libraries PRIVATE a lot of over linking
(linking against unneeded libraries) was done.
2016-03-29 18:14:34 +02:00
Bernhard Miklautz b184f58c1b winpr/TestFileGetStdHandle: rename variable stdout
stdout shouldn't be used as variable name (can't even be used on
windows).
2016-03-29 18:14:16 +02:00
Marc-André Moreau 2201ac5266 winpr: fix PathFileExists on UWP 2016-03-25 12:20:51 -04:00
Martin Fleisz 98528ea973 winpr: Fix definition of NTSTATUS_FROM_WIN32 2016-03-18 13:45:51 +01:00
Martin Fleisz 1c2d315354 core: Add support for CredSSP version 3 2016-03-18 13:32:13 +01:00
Martin Fleisz 80cd64732f Merge pull request #3164 from akallabeth/windows_UnixChangeFileMode
Implemented UnixChangeFileMode for windows.
2016-03-16 15:19:11 +01:00
akallabeth 0c99d6a4fe Merge pull request #3226 from rjcorrig/#3198
winpr: Updates time zones and fixes bias values
2016-03-16 13:32:51 +01:00
Robert Corrigan a4f0089d45 winpr_detect_windows_time_zone should have void argument 2016-03-16 08:29:21 -04:00
Armin Novak 3d23a772f6 Updated ConvertToUnicode return check. 2016-03-16 13:08:06 +01:00
Bernhard Miklautz 1b1563658e Merge pull request #3214 from hardening/fix_systemd_appender
Make systemd appender honor layout and logs off
2016-03-16 11:58:31 +01:00
Marc-André Moreau 9211f44e46 Merge branch 'master' of github.com:FreeRDP/FreeRDP 2016-03-15 20:19:15 -04:00
Robert Corrigan 16796b9c9d winpr: Updates time zones and fixes bias values 2016-03-14 11:38:31 -04:00
Martin Fleisz 0249b09677 winpr: Fix definition of PathFileExists on Win32 2016-03-14 14:08:48 +01:00
Hardening 19494bd75a Make systemd appender honor layout and log off 2016-03-10 23:41:12 +01:00
Martin Fleisz 30325f189f Merge pull request #3181 from akallabeth/wlog_filter_fix
Respecting filter in WLog_GetLogLevel
2016-03-08 10:05:57 +01:00
Marc-André Moreau c78a142388 Merge branch 'master' of github.com:awakecoding/FreeRDP 2016-03-07 21:21:17 -05:00
Marc-André Moreau d61c2d4535 winpr: fix ini utils leak 2016-03-07 21:21:06 -05:00
Marc-André Moreau ceefc4b099 Merge branch 'master' of github.com:FreeRDP/FreeRDP 2016-03-07 10:19:50 -05:00
Armin Novak 2208a84cd4 Moved assistance to winpr crypto. 2016-03-07 11:51:13 +01:00
akallabeth ece552dad2 Merge pull request #3200 from dwmw2/master
winpr: Bump API version to 2.0
2016-03-07 10:50:35 +01:00
Armin Novak 34b12362cb Fixed FreeBSD support for filetime settings. 2016-03-06 15:01:58 +01:00
David Woodhouse 701f54e07d winpr: Bump API version to 2.0
In commit 12bd0ec8 ("winpr: BUMP the API version to 1.2") it was stated
that the intention was to allow multiple winpr versions to be installed
in parallel.

However, it's not sufficient to change just the *minor* version of the
library. The soname is still 'libwinpr.so.1', and thus we still can't
coexist with earlier versions — in particular, we can't install FreeRDP2
in parallel with existing distribution packages of earlier versions.

Bump the soname so it does actually work
2016-03-04 13:22:58 +00:00
Norbert Federa ef4b29e5b3 ConvertFromUnicode fixes and misc hardening
- Added missing ConvertFromUnicode checks
- If ConvertToUnicode allocates memory, guarantee the null termination
  similar to ConvertFromUnicode's implementation
- Fixed some TestUnicodeConversion.c CTest return values
- Added some CTests for ConvertFromUnicode and ConvertToUnicode
- Misc code and protocol hardening fixes in the surrounding code regions
  that have been touched
2016-03-03 16:56:19 +01:00
Armin Novak ee2839fc7f Caching log filter after first use.
Reduce runtime penalty for log level checks by
remembering the log level found during first call.
2016-03-03 12:43:39 +01:00
Jakub Adam bc750e9830 Fix build on older 32-bit Ubuntu releases
Some older 32-bit versions of gcc fail on '#elif __x86_64__'.
This applies at least to what Ubuntu 14.04 and 15.04 have as
the default compiler.
2016-03-02 19:40:38 +01:00
Armin Novak 0ea7aea6d9 Remember filter log level. 2016-03-02 19:07:32 +01:00
Bernhard Miklautz 7075353417 winpr: fix regression in timezone detection
ConvertToUnicode can't be used if the destination is a static buffer.
StandardName and DaylightName were invalid and timezone
redirection didn't work.

This regression was introduced with PR #3151
2016-03-02 18:44:17 +01:00
Armin Novak 41fdac2667 Respecting filter in WLog_GetLogLevel 2016-03-02 14:11:15 +01:00
Martin Fleisz 857c37393b Merge pull request #3163 from akallabeth/set_file_time
Implemented SetFileTime
2016-03-02 09:43:46 +01:00
Armin Novak c74e37dbfd Implemented UnixChangeFileMode for windows. 2016-03-02 09:41:47 +01:00
Armin Novak 65cddbc3fb Removed obsolete log message. 2016-03-02 09:16:59 +01:00
Armin Novak 227ecc4bd5 Fixed uninitialized variable. 2016-03-02 09:16:49 +01:00
Bernhard Miklautz e02af8287e Merge pull request #3160 from akallabeth/stream_fixes
Stream fixes
2016-03-01 16:44:19 +01:00
Armin Novak a79072a87c Added tests for remaining stream functions. 2016-03-01 12:58:09 +01:00
Armin Novak e7814d5855 Fixed stream API for Stream_Copy. 2016-03-01 12:57:48 +01:00
Armin Novak a98e0f9ebb Reverted opaque structures. 2016-03-01 10:29:51 +01:00
Bernhard Miklautz 014f31db35 Merge pull request #3171 from akallabeth/crypto_simplification
Crypto simplification
2016-02-29 17:10:53 +01:00
Armin Novak c182be093d Removed module.def from build config. 2016-02-29 15:24:07 +01:00
Armin Novak 68c402ac58 Removed windows module.def files.
All symbols exported from libraries are declared
using *_API defines.
2016-02-29 15:18:47 +01:00
Armin Novak 4e4d2e11d4 Fixed crypto tests. 2016-02-29 14:45:03 +01:00
Armin Novak 19568c6e9b Fixed indentation. 2016-02-29 11:12:32 +01:00
Armin Novak 7e6501374d Fixed memory leak. 2016-02-29 11:10:15 +01:00
Armin Novak b429d230cb Refactored crypto *_New functions. 2016-02-29 09:00:02 +01:00
Armin Novak 92c15783dc Updated RC4 API, fixed crashing bug. 2016-02-28 11:19:29 +01:00
Armin Novak 238ff3b315 Unified encryption functions. 2016-02-27 23:28:49 +01:00
Armin Novak 4929844971 Fixed const argument for Stream_Write. 2016-02-27 22:16:41 +01:00