[libvirt] [PATCH] virconf: Handle conf file without ending newline

Peter Krempa pkrempa at redhat.com
Thu Apr 21 07:59:57 UTC 2016


On Wed, Apr 20, 2016 at 20:27:22 -0400, Cole Robinson wrote:
> $ echo -n 'log_level=1' > ~/.config/libvirt/libvirtd.conf
> $ libvirtd --timeout=10
> 2014-10-10 10:30:56.394+0000: 6626: info : libvirt version: 1.1.3.6, package: 1.fc20 (Fedora Project, 2014-09-08-17:50:42, buildvm-05.phx2.fedoraproject.org)
> 2014-10-10 10:30:56.394+0000: 6626: error : main:1261 : Can't load config file: configuration file syntax error: /home/rjones/.config/libvirt/libvirtd.conf:1: expecting a value: /home/rjones/.config/libvirt/libvirtd.conf
> 
> Rather than try to fix this in the depths of the parser, just catch
> the case when a config file doesn't end in a newline, and manually
> append a newline to the content before parsing
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=1151409
> ---
>  src/util/virconf.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/src/util/virconf.c b/src/util/virconf.c
> index 5915bc2..9b19d54 100644
> --- a/src/util/virconf.c
> +++ b/src/util/virconf.c
> @@ -777,8 +777,16 @@ virConfReadFile(const char *filename, unsigned int flags)
>      if ((len = virFileReadAll(filename, MAX_CONFIG_FILE_SIZE, &content)) < 0)
>          return NULL;
>  
> +    if (len && len < MAX_CONFIG_FILE_SIZE && content[len - 1] != '\n') {
> +        VIR_DEBUG("appending newline to busted config file %s", filename);
> +        if (VIR_REALLOC_N(content, len + 1) < 0)

VIR_REALLOC_N doesn't initialize the added memory to '0'.

> +            goto cleanup;
> +        content[len++] = '\n';

So this may have undesired effects.

> +    }
> +

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160421/41497b0e/attachment-0001.sig>


More information about the libvir-list mailing list