Commit Graph

206 Commits

Author SHA1 Message Date
Frediano Ziglio
71f6d00a78 Use enumeration for supported_system_version return type
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2016-08-10 11:13:39 +01:00
Frediano Ziglio
9ab74bb67a Fix swprintf_s call under MingW
For some reason this call does not behave correctly.
This was causing vdservice to fail to run the agent if compiled
with MingW.
Provide a proper swprintf_s replacement.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2016-08-10 11:13:15 +01:00
Sameeh Jubran
107b351795 Fixing buffer overflow when reloading wallpaper
The function "SystemParametersInfo" expects the size of the
buffer in characters. When wchar is used instead of char - two
bytes instead of one byte per character -, then "sizeof" returns wrong
number of characters (twice as much). A suitable solution would be to use
SPICE_N_ELEMENTS.

Based on patch by Sandy Stutsman <sstutsma@redhat.com>

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
2016-08-01 14:23:28 +02:00
Victor Toso
5907b6cbb5 vdagent-win: check for locked session
>From WTSRegisterSessionNotification() we are aware of session changes
(WM_WTSSESSION_CHANGE) such as Lock/Unlock events.

We can use that to disable features such as drag-and-drop.
Tested on: Windows 7, Windows XP

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1323628
Acked-by: Pavel Grunt <pgrunt@redhat.com>
2016-05-09 12:40:24 +02:00
Uri Lublin
5edf7433a4 handle_mouse_event: fix off-by-one when normalizing mouse coordinates
Mouse coordinates can be 0..(width-1) and 0..(height-1)

Normalization of mouse coordinates (for SendInput) was done
against w,h and thus right-most and down-most coordinates
could never be reached.

Fix it by normalizing against (w-1) and (h-1).

Also added protection against a case of 0 or 1 (for any of w,h)
Fixes rhbz#1032037
2016-05-05 11:47:20 +03:00
Sandy Stutsman
259d6b5bdb Check for set-monitors-position capability from client.
If the client hasn't been updated to handle multi-monitor configurations
that are not multi-head, vd_agent won't issue the MONITORS_CONFIG driver
escape.

These changes will ensure that the new MONITORS_CONFIG escape in commit:
6023630562 will not break with an older
client.

This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1248196
2015-08-06 12:01:45 +02:00
Sandy Stutsman
6023630562 Add monitors_config driver escape.
When a Windows guest uses the "Set Resolution" applet to change
resolutions and/or monitor positions, this escape sends the new monitor
configurations to the client via a new QXL driver escape.

Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1202419
2015-06-29 16:37:44 +02:00
Sandy Stutsman
7bac272308 Use (0,0) for Windows Primary monitors.
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1174129.

Windows considers the monitor positioned at (0,0) to be primary. VDAgent
normalizes the monitor positions so that there are no negative
coordinates. If the normalized positions are passed to the Windows APIs,
the leftmost monitor will always be set to primary. We need to keep
track of the original primary monitor and its normalized position to be
able to adjust the coordinates that are passed to Windows.
2015-06-10 13:50:19 +03:00
Frediano Ziglio
7fb2e2becc vdagent-win: Fix compile under MingW
Including directly shlobj.h in some MingW environment lead to some missing
definitions error. Including windows.h before fix the problem.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2015-04-30 14:01:01 +02:00
Frediano Ziglio
ae4a4f0035 Use wide characters in drap&drop code
This allows username to contain any extended characters (username is
embedded in the directory name).

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2015-04-30 13:21:48 +02:00
Christophe Fergeau
773b6b2bde build-sys: Ship mingw-spice-vdagent.spec in tarballs
Having this file pregenerated is useful if one wants to use it to
generate a package from tarball with:
tar xf vdagent-win-$version.tar.xz mingw-virt-viewer.spec
rpmbuild mingw-virt-viewer.spec

This is more convenient than extracting the whole tarball, and configuring
it in order to generate mingw-virt-viewer.spec
2015-04-20 13:50:01 +02:00
Uri Lublin
310141a7f5 Update NEWS for 0.7.3 release 2015-03-26 16:38:30 +02:00
Christophe Fergeau
20d66f85ce Remove MSVC++ strncpy/strcat fallbacks
We currently have macros silently replacing use of strncpy/strcat with
strcpy_s/strcat_s when using MSVC++. However, these macros can have
unexpected effects as they use sizeof to find out the maximum size of
the destination string. This is a very significant difference from
strncpy/strcat, which can lead to subtle bugs as the behaviour is
different between mingw and MSVC++.
Now that we have our implementation of strcpy_s/strcat_s, we don't need
these #defines.
2015-03-20 10:45:12 +01:00
Christophe Fergeau
5aa999320f Use new vdagent_{strncpy,strcat}_s helpers 2015-03-20 10:45:12 +01:00
Christophe Fergeau
a4f082b0d1 Add strcat_s/strcpy_s fallbacks
These security functions are available when building with MSVC++. With
mingw, they can be used at build time, but their availability will
depend on the version of MSVCRT the user has installed on their system.
In particular, a default install of Windows XP will not have a new
enough MSVCRT version, causing runtime failures as the binary built with
mingw and using strcat_s will not be able to find the necessary entry
point in the MSVCRT runtime.

This commit adds some strcat_s/strcpy_s-like functions used with mingw
which will always be available.
2015-03-20 10:45:12 +01:00
Uri Lublin
d1c8d152f4 g_key_get_string: use size_t for pointer difference
The 64 bit Visual Studio build complains that:
  .\file_xfer.cpp(223) : warning C4244:
    '=' : conversion from '__int64' to 'unsigned int', possible loss of data
2014-12-30 17:42:17 +02:00
Uri Lublin
e04ffbc608 Fix Visual Studio compiler warning (strcat and sscanf)
This is a follow-up to commits 492ee05a6b and 4b9e9b1d28

Visual Studio complains:
  .\file_xfer.cpp(90) : warning C4996: 'strcat': This function or variable
  may be unsafe. Consider using strcat_s instead.
  To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
  See online help for details.

And a similar complain for sscanf.

Replace them with the secure function when compiling with Visual Studio.
Note that the size provided is sizeof(d), which means all calls to
sscanf and strcat must be done with the first param (destination) being
an array and not a pointer.
2014-12-30 17:42:17 +02:00
Uri Lublin
d752a5b6e0 Fix Visual Studio compiler warning (strncpy)
Visual Studio complains:
  vdagent\file_xfer.h(28) : warning C4996: 'strncpy': This function or variable may
  Consider using strncpy_s instead.
  To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
  See online help for details.

Replace strncpy with strcpy_s when building with Visual Studio.
Adjust parameter order and difference in meaning of length:
- length param is last in strncpy and second in strcpy_s
- many calls to strncpy are given length param n-1, as
  strncpy does not guarantee that destination ends with '\0'
- it's safer to set length param not larger than sizeof(d)
  (assuming d is an array not a pointer)

Trying to use strcpy_s for both Visual Studio and mingw
failed as strcpy_s is missing from the default msvcrt.dll
on WinXP (See OLDMSVCRT in common/vdcommon.h).
2014-12-30 17:37:26 +02:00
Uri Lublin
c76e541bba Fix building with Visual Studio (snprintf)
This commit is an addition to 4b9e9b1d28

Building with Visual Studio breaks as snprintf is not implemented:
  vdagent\file_xfer.cpp(198) : error C3861: 'snprintf': identifier not found

Replace it with sprintf_s for Visual Studio.

Trying to use sprintf_s for both Visual Studio and mingw
failed for mingw64 (build succeeds but runtime error appears).
2014-12-30 17:17:25 +02:00
Uri Lublin
88b9b74d95 Fix building with Visual Studio (inttypes.h)
As a followup of commit 462295d9f8.

Building with Visual Studio, fails as there is no inttypes.h file:
  vdagent\file_xfer.cpp(21) : fatal error C1083: Cannot open
  include file: 'inttypes.h': No such file or directory

This commit prevents including inttypes.h when building with Visual Studio,
and defines PRIu64 that is defined in inttypes.h for mingw compiler.
2014-12-30 17:17:24 +02:00
Uri Lublin
cf747c07e6 vdcommon.h: consolidate defines under OLDMSVCRT 2014-12-30 17:17:24 +02:00
Uri Lublin
c678c4f26b vdcommon.h: do not redefine _ftime_s
Fixes the following error:
====
In file included from vdagent/vdagent.cpp:18:0:
./common/vdcommon.h:51:0: warning: "_ftime_s" redefined
 #define _ftime_s(timeb) _ftime(timeb)
 ^
In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/sys/timeb.h:124:0,
=====
2014-12-30 17:17:24 +02:00
Uri Lublin
a6383f29dc vdcommon.h: add comment about OLDMSVCRT 2014-12-30 17:17:24 +02:00
Uri Lublin
dd53b1766e vdagent::handle_max_clipboard fix vd_printf format
Using unsigned long to print a size_t.
2014-12-30 17:17:24 +02:00
Uri Lublin
8a28f878b9 vdagent: as_user: reorder initialization to make mingw-gcc happy
Fixes compiler warning that starts with:

In file included from vdagent/as_user.cpp:19:0:
vdagent/as_user.h: In constructor 'AsUser::AsUser(DWORD)':
vdagent/as_user.h:35:10: warning: 'AsUser::_started' will be initialized after [-Wreorder]
     bool _started;
2014-12-30 17:17:24 +02:00
Uri Lublin
eb276f4b45 Fix compiler warning (missing backslash in FileXfer::handle_start)
Visual Studio complains:
vdagent\file_xfer.cpp(85) : warning C4129: '%' : unrecognized character escape sequence

Replace "%s\%s" with "%s\\%s"
2014-12-30 17:16:53 +02:00
Cody Chan
6c070843cb Fix g_key_get_string() failure when string contains '['
In vd_agent/file_xfer.cpp is implemented a simple g_key_get_string,
but  when dragging a file with a name containing '[' (like te[st.txt),
it will fail.
From source code,
>next_group_pos = strstr(group_pos + strlen(group_pfx), "[");
>    if (next_group_pos && key_pos > next_group_pos) return false;
we know that it tries to find the end of current group by '[' label,
if we drag a file named te[st.txt, the key_string will be like:
[vdagent-file-xfer]
name=te[st.txt
size=10
so, it will fail when meta parsing and returns the
VD_AGENT_FILE_XFER_STATUS_ERROR message.

Here's the elegant method Christophe proposed and test ok, thanks to
him again!
2014-11-13 16:52:19 +01:00
Cody Chan
21b79679c1 Fix dragging of files with CJK characters in name
I submitted a patch several months ago about this issue,
here http://lists.freedesktop.org/archives/spice-devel/2014-February/016158.html
I check it again, and find that the value of
g_key_file_to_data(keyfile,...) is always utf-8, for the value of
g_uri_list_extract_uris() is utf8 urlencode.

So the display problem is caused by vd_agent, but how it displays
depends on the language of system, the following two screenshots show
the difference:

http://int64ago-tmp.qiniudn.com/guest-Chinese.png
http://int64ago-tmp.qiniudn.com/guest-English.png
2014-11-13 16:52:18 +01:00
Marc-André Lureau
6d1c038a8c Don't refresh displays config when updating
wnd_proc() is called during ChangeDisplaySettings(), when handling
monitors config. However, calling get_displays() will overwrite the
desired config.

So, while updating from 1 to 4 enabled monitors, when the 2nd monitor
config is enabled, the current config is read, and overwrite the rest of
the config, so first time only 2nd monitor is enabled, second time, 3rd
monitor etc.

https://bugzilla.redhat.com/show_bug.cgi?id=1111144
2014-06-19 19:15:39 +02:00
Marc-André Lureau
8588daa1e0 Learn to build spice-vdagent MSI installer 2014-06-19 15:27:31 +02:00
Uri Lublin
4171d11bb6 vdagent: clipboard: Add VD_AGENT_CAP_MAX_CLIPBOARD support
Do not send clipboard data bigger than last received
VDAgentMaxClipboard.

If a larger amount of data needs to be transferred between client and guest,
a different mechanism should be used, not clipboard.

The spice-protocol git-submodule is updated to include VD_AGENT_MAX_CLIPBOARD
and related definitions.
2014-03-09 18:55:42 +02:00
Uri Lublin
aed39aeccf vdagent: clipboard: GlobalUnlock on handle_request failure
Moved clipboard definition to the beginning of the function, as
mingw-gcc complains about gotos that jump over definitions.
2014-03-09 18:55:40 +02:00
Uri Lublin
efea0d654b Makefile.am: add INCLUDES to AM_CPPFLAGS
Fixes the following autoreconf (automake) warning:
Makefile.am:6: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
2013-11-13 10:40:17 +02:00
Uri Lublin
0a90473848 Makefile.am: tabify 2013-11-13 10:40:09 +02:00
Uri Lublin
4335b0d43a vdagent: file_xfer: make g_key_get_string safer
By providing the size of the destination string buffer.
2013-11-13 10:39:57 +02:00
Uri Lublin
066f614cee vdagent: file-xfer: make user desktop the target directory
Before, the target directory was a public one (for all users),
as file creation was not done with user privileges.

Now that the file is created with user privileges, it's
better to make the user desktop the target directory.
2013-11-13 10:39:47 +02:00
Uri Lublin
71193f6581 file_xfer: create file with user privileges 2013-11-13 10:39:37 +02:00
Uri Lublin
750a8bab40 vdagent: add as_user to run tasks with user privileges
The class calls Impersonate upon begin(), and Revert
upon end() or destruction.

The user is the current user that is logged in.

 create mode 100644 vdagent/as_user.cpp
 create mode 100644 vdagent/as_user.h
2013-11-13 10:24:59 +02:00
Christophe Fergeau
fac9e8d3bf Update NEWS for 0.7.2 release 2013-08-26 14:16:56 +02:00
Marc-André Lureau
4b9e9b1d28 Remove usage of more _s functions
Even before this change, it should have handled error conditions. We'd
be better off allocating those strings and failing on io op later on.
2013-07-17 21:20:47 +02:00
Marc-André Lureau
ad61eec961 Fix cast BOOL->PVOID warning
vdagent/display_setting.cpp:469:50: warning: cast to pointer from
integer of different size [-Wint-to-pointer-cast]
     if (!SystemParametersInfo(action, 0, (PVOID)param, 0)) {
2013-07-17 20:52:17 +02:00
Marc-André Lureau
fc1de85b49 Fix wrong size_t printf format
vdagent/desktop_layout.cpp:121:763: warning: format '%u' expects
argument of type 'unsigned int', but argument 8 has type
'std::vector<DisplayMode*>::size_type {aka long long unsigned int}'
[-Wformat=]
2013-07-17 20:49:19 +02:00
Marc-André Lureau
492ee05a6b Replace sscanf_s by sscanf
The _s functions need a recent msvcrt version, not shipped in XP by
default.

Furthermore, it appears that their sscanf_s usage was missing the extra
buffer size argument.
2013-07-17 20:45:22 +02:00
Marc-André Lureau
5129f33899 Add suggested parentheses
vdagent/vdagent.cpp: In member function 'void
VDAgent::on_clipboard_grab()':
vdagent/vdagent.cpp:951:52: warning: suggest parentheses around
assignment used as truth value [-Wparentheses]
2013-07-17 20:45:22 +02:00
Marc-André Lureau
b9d6baec2d Fix task could be used uninitialized 2013-07-17 20:45:21 +02:00
Marc-André Lureau
462295d9f8 Fix invalid print format for uint64_t values
format '%lu' expects argument of type 'long unsigned int', but argument
9 has type 'uint64_t
2013-07-17 20:45:21 +02:00
Marc-André Lureau
b52c9ddfa8 Fix wrong DWORD print fmt
format '%u' expects argument of type 'unsigned int', but argument 8 has type 'DWORD
2013-07-17 20:45:21 +02:00
Marc-André Lureau
3bf46bc2b2 dos2unix 2013-07-17 20:45:21 +02:00
Marc-André Lureau
846a787c9f Update spice-protocol 2013-07-17 20:45:17 +02:00
Arnon Gilboa
c751e8fda0 vdagent: add support for client -> guest file transfers
rhbz#956146
2013-06-27 14:23:49 +03:00