Skip to content

mtree bugs with filenames containing wildcards #101

Description

@jgoerzen

Let's say I have a directory containing these files, one of which contains an asterisk:

file*
file2.txt
file.txt
file3.txt

Further assume they are different sizes and have different content.

If, in the output from mtree -c, file* is emitted before the others, the later mtree verify will apparently match all four files using the rule file* and emit errors on the other three. I observed this in the wild.

A workaround is to manually edit the emitted mtree data and move file* to be after the other non-wildcard files; then it will properly verify.

Additionally, the support for wildcards in the mtree format is not documented that I can see, and probably should be. Or perhaps it should be removed, since AFAICT, no tools are generating mtree files intentionally using this feature.

I observe a call to fnmatch in verify.c which MAY be the cause of this issue. (I am not certain).

Activity

  1. bsiegert commented on Feb 28, 2022

    @bsiegert
    Contributor

    Isn't mtree part of the base system? Could you send this as a bug report upstream please? (https://www.netbsd.org/support/send-pr.html)

  2. jgoerzen commented on Mar 1, 2022

    @jgoerzen
    Author
  3. sskras commented on Mar 1, 2022

    @sskras

    I also submitted an upstream issue (about another problem) on 2022-01-10.
    Received zero response so far.

    So I am not sure what is the workflow here.

  4. bsiegert commented on Mar 1, 2022

    @bsiegert
    Contributor

    @sskras If your bug report was about a different problem, then it does not belong here.

    There is no SLO on replies to bug reports.

  5. jgoerzen commented on Mar 1, 2022

    @jgoerzen
    Author

    @bsiegert So I just realized something:

    There is mtree in two places:

    https://github.com/NetBSD/pkgsrc/tree/trunk/pkgtools/mtree/files (which is what this issue pertains to)

    and

    https://github.com/NetBSD/src/tree/trunk/usr.sbin/mtree

    (and of course their CVS origins)

    I note that these two trees aren't identical, and in fact are rather divergent. The pkgsrc version -- this one -- is portable, and in fact I maintain mtree-netbsd for Debian based on this version.

    The NetBSD/src version is not portable, but appears newer (for instance, having added -F).

    I did have engagement on 56733 but did not at the time realize that we were talking about two different mtrees!

    So I am very much talking about the pkgsrc one, which is https://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/pkgtools/mtree/index.html . Presumably it is portable because pkgsrc itself is portable, to *BSD, Linux, and so forth.

    I don't know how the NetBSD/src mtree flows into the pkgsrc mtree -- perhaps, at the moment, the answer is "it doesn't" - fair enough. All I know is that this patch fixes the issue for me:

    --- verify.c.orig       2018-08-22 15:48:38.000000000 -0500
    +++ verify.c    2022-03-01 09:45:04.854574448 -0600
    @@ -142,9 +142,7 @@
                    if (specdepth != p->fts_level)
                            goto extra;
                    for (ep = level; ep; ep = ep->next)
    -                       if ((ep->flags & F_MAGIC &&
    -                           !fnmatch(ep->name, p->fts_name, FNM_PATHNAME)) ||
    -                           !strcmp(ep->name, p->fts_name)) {
    +                       if (!strcmp(ep->name, p->fts_name)) {
                                    ep->flags |= F_VISIT;
                                    if (compare(ep, p))
                                            rval = MISMATCHEXIT;
    
  6. jgoerzen commented on Mar 1, 2022

    @jgoerzen
    Author

    Noting this from an email conversation:

    There are some other mtree implementations and forks from NetBSD; for instance:

    Like the pkrsrc mtree, these two seem to be outdated relative to the
    usr.sbin mtree.

    Other implementations:

    The NetBSD pkgsrc tree is directly used as part of the Arch Linux
    packaging format; https://aur.archlinux.org/packages/nmtree for details.
    They also have a "git" mtree derived from archiecobbs/nmtree as above.

    So effectively NetBSD pkgsrc tree is the ultimate upstream for a number
    of other projects. It is probably reasonable to point many of those to
    use archiecobbs/nmtree but I thought I ought to write down all the
    options here for others that may be looking.

  7. added a commit that references this issue on Sep 21, 2022
  8. added a commit that references this issue on Nov 14, 2022
  9. added a commit that references this issue on Dec 7, 2022
  10. added a commit that references this issue on Jan 22, 2023
  11. 139 remaining items

  12. added a commit that references this issue on May 21, 2026
  13. added a commit that references this issue on Jun 24, 2026
  14. added a commit that references this issue on Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions