Handle other write flags, log and handler read/write errors.

This commit is contained in:
Michael Jumper 2013-09-18 13:58:03 -07:00
parent 582e1a60b3
commit c70efcea4d
3 changed files with 11 additions and 3 deletions

View File

@ -140,9 +140,10 @@ int guac_rdpdr_fs_open(guac_rdpdr_device* device,
/* Translate access into mode */ /* Translate access into mode */
if (access & ACCESS_GENERIC_ALL) if (access & ACCESS_GENERIC_ALL)
mode = O_RDWR; mode = O_RDWR;
else if (access & (ACCESS_GENERIC_WRITE | ACCESS_GENERIC_READ)) else if ((access & (ACCESS_GENERIC_WRITE | ACCESS_FILE_WRITE_DATA))
&& (access & (ACCESS_GENERIC_READ | ACCESS_FILE_READ_DATA)))
mode = O_RDWR; mode = O_RDWR;
else if (access & ACCESS_GENERIC_WRITE) else if (access & (ACCESS_GENERIC_WRITE | ACCESS_FILE_WRITE_DATA))
mode = O_WRONLY; mode = O_WRONLY;
else else
mode = O_RDONLY; mode = O_RDONLY;

View File

@ -42,6 +42,7 @@
#endif #endif
#include <guacamole/pool.h> #include <guacamole/pool.h>
#include <errno.h>
#include "rdpdr_fs.h" #include "rdpdr_fs.h"
#include "rdpdr_fs_messages.h" #include "rdpdr_fs_messages.h"
@ -184,6 +185,8 @@ void guac_rdpdr_fs_process_read(guac_rdpdr_device* device,
/* If error, return invalid parameter */ /* If error, return invalid parameter */
if (bytes_read < 0) { if (bytes_read < 0) {
guac_client_log_error(device->rdpdr->client,
"Unable to read from file: %s", strerror(errno));
Stream_Write_UINT32(output_stream, STATUS_INVALID_PARAMETER); Stream_Write_UINT32(output_stream, STATUS_INVALID_PARAMETER);
Stream_Write_UINT32(output_stream, 0); /* Length */ Stream_Write_UINT32(output_stream, 0); /* Length */
} }
@ -249,7 +252,10 @@ void guac_rdpdr_fs_process_write(guac_rdpdr_device* device,
/* If error, return invalid parameter */ /* If error, return invalid parameter */
if (bytes_written < 0) { if (bytes_written < 0) {
Stream_Write_UINT32(output_stream, STATUS_INVALID_PARAMETER); guac_client_log_error(device->rdpdr->client,
"Unable to write to file %i: %s", file->fd,
strerror(errno));
Stream_Write_UINT32(output_stream, STATUS_ACCESS_DENIED);
Stream_Write_UINT32(output_stream, 0); /* Length */ Stream_Write_UINT32(output_stream, 0); /* Length */
} }

View File

@ -207,6 +207,7 @@
#define STATUS_INVALID_PARAMETER 0xC000000D #define STATUS_INVALID_PARAMETER 0xC000000D
#define STATUS_NO_SUCH_FILE 0xC000000F #define STATUS_NO_SUCH_FILE 0xC000000F
#define STATUS_END_OF_FILE 0xC0000011 #define STATUS_END_OF_FILE 0xC0000011
#define STATUS_ACCESS_DENIED 0xC0000022
#define STATUS_FILE_INVALID 0xC0000098 #define STATUS_FILE_INVALID 0xC0000098
#define STATUS_FILE_IS_A_DIRECTORY 0xC00000BA #define STATUS_FILE_IS_A_DIRECTORY 0xC00000BA
#define STATUS_TOO_MANY_OPENED_FILES 0xC000011F #define STATUS_TOO_MANY_OPENED_FILES 0xC000011F