spice/server
Gilmar Santos Jr 15b1e2a3bb red-stream: WebDAV doesn't work when SASL is active
When SASL is active, if a read request is made and SASL buffer contains some
data (but not enough to fulfill the request), upon return the taken data from
the buffer is not accounted for and hence part of the message gets discarded.

red_stream_sasl_read function takes available data from sasl buffer and returns
if it's enough. If it's not, nbyte is decremented and buf pointer is
incremented to account for the taken data (if any). Then it tries to get more
data from the socket and decode it.

Suppose there was some data in the sasl buffer, but not enough. Then the socket
is not readable (EAGAIN, EINTR, whatever) or the new data isn't enough for
sasl_decode (hence decodedlen == 0). In both cases the function returns as if
no data was read, but it took some data from sasl buffer. This data is lost and
from this point on the communication ceases on the channel (eventually new data
is read, but messages are corrupt without the parts previously discarded).

On the other hand, if some data is read from sasl buffer and everything else
works fine, the output buffer contains all the data, but the count returned
only inform the caller about the newly read data (which causes the similar
effect of discarding part of the message).

Fixes: https://gitlab.freedesktop.org/spice/spice/-/issues/40

Acked-by: Frediano Ziglio <fziglio@redhat.com>
2020-05-11 19:09:15 +01:00
..
tests test-dispatcher: Test dispatcher 2020-05-05 05:15:43 +01:00
.gitignore gitignore: Reuse top-level gitignore 2016-12-14 19:09:21 +00:00
agent-msg-filter.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
agent-msg-filter.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
cache-item.h Unify header guards 2017-03-30 18:17:20 +01:00
cache-item.tmpl.cpp Move all red_channel_client_* functions in header as methods 2020-05-01 06:58:09 +01:00
char-device.cpp char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
char-device.h char-device: Remove obsolete declaration 2020-05-05 05:14:53 +01:00
common-graphics-channel.cpp main-channel-client: Automatically convert 2020-05-01 06:58:09 +01:00
common-graphics-channel.h Improve CommonGraphicsChannel encapsulation 2020-05-01 06:58:09 +01:00
cursor-channel-client.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
cursor-channel-client.h Remove GObject from RedChannel 2020-05-01 06:58:09 +01:00
cursor-channel.cpp Add and use red::make_shared 2020-05-01 06:58:09 +01:00
cursor-channel.h Add and use red::make_shared 2020-05-01 06:58:09 +01:00
dcc-private.h Reduce C++ symbols visibility 2020-05-01 06:58:09 +01:00
dcc-send.cpp Remove GObject from RedChannel 2020-05-01 06:58:09 +01:00
dcc.cpp Avoids registering type just to get the nick of an enum value 2020-05-01 06:58:09 +01:00
dcc.h Reduce C++ symbols visibility 2020-05-01 06:58:09 +01:00
dispatcher.cpp Remove GObject from Dispatcher hierarchy 2020-05-01 06:58:09 +01:00
dispatcher.h dispatcher: Reuse base reference counting for Dispatcher hierararchy 2020-05-01 06:58:09 +01:00
display-channel-private.h Remove GObject from RedChannel 2020-05-01 06:58:09 +01:00
display-channel.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
display-channel.h Add and use red::make_shared 2020-05-01 06:58:09 +01:00
display-limits.h Receive the GraphicsDeviceInfo message from the streaming agent 2019-01-29 15:46:54 +01:00
event-loop.c Remove conversion warnings 2020-05-01 06:58:08 +01:00
glz-encode-match.tmpl.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
glz-encode.tmpl.c glz-encode: Remove obsolete reference segment 2019-08-12 10:48:02 +01:00
glz-encoder-dict.c typo: fix the spelling of precede 2019-07-04 10:05:19 +01:00
glz-encoder-dict.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
glz-encoder-priv.h glz-encoder-dict: Remove useless __packed__ attribute 2019-08-02 10:55:20 +01:00
glz-encoder.c glz-encoder: Remove useless __packed__ attribute 2019-08-02 10:55:27 +01:00
glz-encoder.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
gstreamer-encoder.c Remove conversion warnings 2020-05-01 06:58:08 +01:00
image-cache.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
image-cache.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
image-encoders.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
image-encoders.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
inputs-channel-client.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
inputs-channel-client.h input-channels: Improve encapsulation 2020-05-01 06:58:09 +01:00
inputs-channel.cpp Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
inputs-channel.h Update filenames in comments 2020-05-11 08:14:47 +01:00
jpeg-encoder.c Remove conversion warnings 2020-05-01 06:58:08 +01:00
jpeg-encoder.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
lz4-encoder.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
lz4-encoder.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
main-channel-client.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
main-channel-client.h main-channel-client: Automatically convert 2020-05-01 06:58:09 +01:00
main-channel.cpp Add and use red::make_shared 2020-05-01 06:58:09 +01:00
main-channel.h Add and use red::make_shared 2020-05-01 06:58:09 +01:00
main-dispatcher.cpp Update filenames in comments 2020-05-11 08:14:47 +01:00
main-dispatcher.h Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
Makefile.am build: Remove GObject dependency 2020-05-01 06:58:09 +01:00
memslot.c Use (u)intptr_t for virtual addresses 2019-08-12 08:16:31 +01:00
memslot.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
meson.build Avoids registering type just to get the nick of an enum value 2020-05-01 06:58:09 +01:00
migration-protocol.h Use start/end-packet.h headers instead of direct GCC attribute 2019-07-22 14:56:00 +01:00
mjpeg-encoder.c Remove conversion warnings 2020-05-01 06:58:08 +01:00
net-utils.c net-utils: Port to Windows 2019-05-07 10:14:08 +01:00
net-utils.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
pixmap-cache.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
pixmap-cache.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
pop-visibility.h Reduce C++ symbols visibility 2020-05-01 06:58:09 +01:00
push-visibility.h Reduce C++ symbols visibility 2020-05-01 06:58:09 +01:00
red-channel-capabilities.c red-channel-capabilities: Removed unused stuff from RedChannelCapabilities 2020-05-01 06:58:09 +01:00
red-channel-capabilities.h red-channel-capabilities: Removed unused stuff from RedChannelCapabilities 2020-05-01 06:58:09 +01:00
red-channel-client.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
red-channel-client.h Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
red-channel.cpp dispatcher: Reuse base reference counting for Dispatcher hierararchy 2020-05-01 06:58:09 +01:00
red-channel.h Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
red-client.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
red-client.h Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
red-common.h build: Remove GObject dependency 2020-05-01 06:58:09 +01:00
red-parse-qxl.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
red-parse-qxl.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
red-pipe-item.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
red-pipe-item.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
red-qxl.cpp Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
red-qxl.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
red-record-qxl.c Remove -Wliteral-suffix warnings 2020-05-01 06:58:08 +01:00
red-record-qxl.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
red-replay-qxl.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
red-stream-device.cpp red-stream-device: Better encapsulation 2020-05-01 06:58:09 +01:00
red-stream-device.h red-stream-device: Better encapsulation 2020-05-01 06:58:09 +01:00
red-stream.cpp red-stream: WebDAV doesn't work when SASL is active 2020-05-11 19:09:15 +01:00
red-stream.h Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
red-worker.cpp Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
red-worker.h Update filenames in comments 2020-05-11 08:14:47 +01:00
reds-private.h char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
reds.cpp red-stream-device: Better encapsulation 2020-05-01 06:58:09 +01:00
reds.h Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
safe-list.hpp Allow to compile without C++ library 2020-05-01 06:58:09 +01:00
smartcard-channel-client.cpp char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
smartcard-channel-client.h char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
smartcard.cpp char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
smartcard.h char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
sound.cpp Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
sound.h sound: Make functions exported not visible 2020-05-01 06:58:09 +01:00
spice-audio.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-bitmap-utils.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
spice-bitmap-utils.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
spice-bitmap-utils.tmpl.c Use local variable to compute gradual score 2020-02-27 07:55:43 +00:00
spice-char.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-core.h windows: Do not include headers not available on Windows 2019-01-31 10:48:34 +00:00
spice-input.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-migration.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-qxl.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-replay.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-server-enums.c.tmpl Avoids registering type just to get the nick of an enum value 2020-05-01 06:58:09 +01:00
spice-server-enums.h.tmpl Avoids registering type just to get the nick of an enum value 2020-05-01 06:58:09 +01:00
spice-server.h Declare public exported functions as C 2020-05-01 06:58:08 +01:00
spice-server.syms Remove reference to removed ABI 2019-08-15 11:16:42 +01:00
spice-version.h.in build-sys: generate spice-version.h 2014-11-27 14:27:33 +01:00
spice-wrapped.h Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
spice.h Make red-replay-qxl.h a public header 2016-11-10 06:37:15 +00:00
spicevmc.cpp char-device: Remove GObject from RedCharDevice 2020-05-01 06:58:09 +01:00
stat-file.c stat-file: Use proper macro for container computation 2019-08-22 08:53:23 +01:00
stat-file.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
stat.h Wrap spice.h in order to do some adjustment 2020-05-01 06:58:09 +01:00
stream-channel.cpp Use red::shared_ptr_counted for RedChannelClient 2020-05-01 06:58:09 +01:00
stream-channel.h Add and use red::make_shared 2020-05-01 06:58:09 +01:00
sw-canvas.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
sys-socket.c sys-socket: Add socket_newpair utility 2019-05-07 10:14:05 +01:00
sys-socket.h Avoid conversion warnings calling Windows sockets 2020-05-01 06:58:08 +01:00
tree.cpp Use C++ IS-A relationship for RedChannelClient and RedChannel 2020-05-01 06:58:08 +01:00
tree.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
utils.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
utils.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
utils.hpp utils: Fix typo in comment 2020-05-05 05:14:53 +01:00
video-encoder.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
video-stream.cpp main-channel-client: Automatically convert 2020-05-01 06:58:09 +01:00
video-stream.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
websocket.c websocket: Handle continuation and 0-size frames 2019-06-26 14:19:13 +01:00
websocket.h Declare exported functions as C 2020-05-01 06:58:08 +01:00
zlib-encoder.c Do not check for HAVE_CONFIG_H 2019-04-30 09:26:55 +01:00
zlib-encoder.h Declare exported functions as C 2020-05-01 06:58:08 +01:00