io: Fix QIOChannelFile when creating and opening read-write

The code wrongly passes the mode to open() only if O_WRONLY is set.
Instead, the mode should be passed when O_CREAT is set (or O_TMPFILE on
Linux). Fix this by always passing the mode since open() will correctly
ignore the mode if it is not needed. Add a testcase which exercises this
bug and also change the existing testcase to check that the mode of the
created file is correct.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Ross Lagerwall 2017-11-01 14:25:24 +00:00 committed by Daniel P. Berrangé
parent a46ded1de5
commit 902f6e14fc
3 changed files with 27 additions and 10 deletions

View file

@ -50,11 +50,7 @@ qio_channel_file_new_path(const char *path,
ioc = QIO_CHANNEL_FILE(object_new(TYPE_QIO_CHANNEL_FILE));
if (flags & O_WRONLY) {
ioc->fd = open(path, flags, mode);
} else {
ioc->fd = open(path, flags);
}
ioc->fd = open(path, flags, mode);
if (ioc->fd < 0) {
object_unref(OBJECT(ioc));
error_setg_errno(errp, errno,