[augeas-devel] Why does Augeas fail to handle empty files?

Mol, Xavier (SCC) xavier.mol at kit.edu
Wed Feb 24 07:27:08 UTC 2016


Hi David,

 

this is how I reproduce the error:

 

[root ~]# augtool --version

augtool 1.4.0 <http://augeas.net/>

Copyright (C) 2007-2011 David Lutterkort

License LGPLv2+: GNU LGPL version 2.1 or later

                 <http://www.gnu.org/licenses/lgpl-2.1.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

 

Written by David Lutterkort

 

[root ~]# touch /etc/dcache/layouts/empty.conf

[root ~]# augtool -A -t 'DCacheLayout_old incl "/etc/dcache/layouts/*.conf"'

augtool> print /files/etc/dcache/layouts/empty.conf

/files/etc/dcache/layouts/empty.conf

augtool> set /files/etc/dcache/layouts/empty.conf/properties/word spam

augtool> save

error: Failed to execute command

saving failed (run 'errors' for details)

augtool> errors

Error in /etc/dcache/layouts/empty.conf (put_failed)

  Failed to match

        { /properties/ }?

(    { /#comment/ = /[^\001-\004\t\n\r ][^\001-\004\n]*[^\001-\004\t\n\r ]|[^\001-\004\t\n\r ]/ }

      | { }

      | { /domain/ = /[$.0-9A-Z_a-{}-]+/ })*

  with tree

    {  } { "properties" }

  Lens: /usr/share/augeas/lenses/dcachelayout_old.aug:30.12-.46:

 

 

Creating the file through augtool works fine:

 

augtool> rm /files/etc/dcache/layouts/empty.conf

rm : /files/etc/dcache/layouts/empty.conf 4

augtool> save

Saved 1 file(s)

augtool> set /files/etc/dcache/layouts/empty.conf/properties/word spam

augtool> save

Saved 1 file(s)

 

 

 

Ciao,

Xavier.

 

From: David Lutterkort [mailto:lutter at watzmann.net] 
Sent: Wednesday, February 24, 2016 12:57 AM
To: Mol, Xavier (SCC)
Cc: Raphaël Pinson; augeas-devel at redhat.com
Subject: Re: [augeas-devel] Why does Augeas fail to handle empty files?

 

On Tue, Feb 23, 2016 at 12:49 AM, Mol, Xavier (SCC) <xavier.mol at kit.edu> wrote:

Hello David,

 

attached you can find my custom lens that I was talking about.

 

I don't know how to simulate my test cases with this lens through Augeas unit tests, I'm sorry. I'm afraid, that this problem will not be reproducable with them.

 

This module contains two different definitions for the final lens 'lns':

 

- let lns = properties? . ( filler | domain )*

Using this definition, the lens fails to update empty files. It can be used to create new files and update existing non-empty files just fine. To reproduce the error (after you have imported the lens), create an empty file before running augtool (e.g. with 'touch /etc/dcache/layouts/empty.conf', which will be autoloaded, or any other location – you know how to do that ;-) ).

 

This seemed to work for me .. creating the empty file and running augtool, I did not get any errors. Even when I do 'clear /etc/dcache/layouts/empty.conf' and then save, things seem to work without errors.

Could you also send me the commands I need to perform on augtool to get an error (or the undesired behaviuor) ?

 

 

- let lns = ( properties? . ( filler | domain )* )?

This definition can handle existing empty files, but augparse generates a huge error that I won't paste here ("illegal optional expression: /…/ matches the empty word").

 

The complaint here is that when you have a construct 'lns ?' and lns matches the empty string, Augeas doesn't know whether it should treat that as "the whole construct 'lns ?' did not match" or "we did match an instance of lns, it just happened to be the empty string". The reason that is important is that in the first case we completely ignore lns, while in the second we do whatever lns says. For example, think of something like '[ label "foo"]?' ... if the input is an empty string, should we create that node or not ?

David

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20160224/b2b64dd6/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 6401 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20160224/b2b64dd6/attachment.p7s>


More information about the augeas-devel mailing list