[Libguestfs] [PATCH] inspect: Include more information for augeas parse errors (RHBZ#1229119)
Pino Toscano
ptoscano at redhat.com
Fri Oct 16 09:29:01 UTC 2015
On Friday 16 October 2015 10:24:18 Richard W.M. Jones wrote:
> If Augeas fails to parse a file, more information is available in at
> least these fields:
>
> ><fs> aug-ls /augeas/files/etc/fstab/error
> /augeas/files/etc/fstab/error/char
> /augeas/files/etc/fstab/error/lens
> /augeas/files/etc/fstab/error/line
> /augeas/files/etc/fstab/error/message
> /augeas/files/etc/fstab/error/pos
>
> Pull out some of these fields and add them to the error message.
> The new error message looks like this:
>
> virt-v2v: error: libguestfs error: /etc/fstab:17:4: augeas parse failure:
> Iterated lens matched less than it should
>
> This updates commit 279addeb7dd4f5f2446a3995eb7704980c08b5ff.
> ---
> src/inspect-fs-unix.c | 32 ++++++++++++++++++++++++--------
> 1 file changed, 24 insertions(+), 8 deletions(-)
>
> diff --git a/src/inspect-fs-unix.c b/src/inspect-fs-unix.c
> index 968aa40..4fac7f4 100644
> --- a/src/inspect-fs-unix.c
> +++ b/src/inspect-fs-unix.c
> @@ -1985,7 +1985,6 @@ inspect_with_augeas (guestfs_h *g, struct inspect_fs *fs,
> CLEANUP_FREE char *pathexpr = NULL;
> CLEANUP_FREE_STRING_LIST char **matches = NULL;
> char **match;
> - size_t len;
>
> /* Security: Refuse to do this if a config file is too large. */
> for (i = 0; configfiles[i] != NULL; ++i) {
> @@ -2023,16 +2022,33 @@ inspect_with_augeas (guestfs_h *g, struct inspect_fs *fs,
> goto out;
>
> /* Check that augeas did not get a parse error for any of the configfiles,
> - * otherwise we are silently missing information. */
> + * otherwise we are silently missing information.
> + */
> matches = guestfs_aug_match (g, "/augeas/files//error");
> for (match = matches; *match != NULL; ++match) {
> for (i = 0; configfiles[i] != NULL; ++i) {
> - len = strlen (configfiles[i]);
> - if (strlen (*match) == (13 /* len(/augeas/files) */ + len + 6 /* len(/error) */) &&
> - STRPREFIX(*match, "/augeas/files") &&
> - STREQLEN(*match + 13, configfiles[i], len) &&
> - STREQ(*match + 13 + len, "/error")) {
> - error (g, _("augeas could not parse %s"), configfiles[i]);
> + CLEANUP_FREE char *errorpath =
> + safe_asprintf (g, "/augeas/files%s/error", configfiles[i]);
> +
> + if (STREQ (*match, errorpath)) {
> + /* Get the various error details. */
> + guestfs_push_error_handler (g, NULL, NULL);
> + CLEANUP_FREE char *messagepath =
> + safe_asprintf (g, "%s/message", errorpath);
> + CLEANUP_FREE char *message = guestfs_aug_get (g, messagepath);
> + CLEANUP_FREE char *linepath =
> + safe_asprintf (g, "%s/line", errorpath);
> + CLEANUP_FREE char *line = guestfs_aug_get (g, linepath);
> + CLEANUP_FREE char *charpath =
> + safe_asprintf (g, "%s/char", errorpath);
> + CLEANUP_FREE char *charp = guestfs_aug_get (g, charpath);
> + guestfs_pop_error_handler (g);
> +
> + error (g, _("%s:%s:%s: augeas parse failure: %s"),
> + configfiles[i],
> + line ? : "<none>",
> + charp ? : "<none>",
> + message ? : "<none>");
> goto out;
> }
> }
LGTM.
Thanks for the update,
--
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20151016/99a3e06a/attachment.sig>
More information about the Libguestfs
mailing list