rsync include/exclude -> glibc bug

Florian Lohoff flo at rfc822.org
Wed Oct 27 11:30:01 CEST 1999




Juhu *,
Wer sich schon immer mal gewundert hat warum die rsync include/exclude
dinger nicht so wirklich funktionieren - Habe mit meinen Bugreports
gerade nen glibc 2.0 bug aufgedeckt ... :(

glibc 2.1.2 ist gefixed ....

So long ...
Flo

----- Forwarded message from Dave Dykstra <dwd at bell-labs.com> -----
Message-Id: <9910261418.ZM26964 at ihgp1.ih.lucent.com>
Date: Tue, 26 Oct 1999 14:18:54 -0500
References: <E10272884C59D211B75500A0C9DCFA8A34EB1E at jupiter.orbit-chicago.com> 
	<19991026165524.J1207 at paradigm.rfc822.org> 
	<9910261020.ZM25064 at ihgp1.ih.lucent.com> 
	<19991026173800.B13848 at paradigm.rfc822.org>
Reply-To: Dave Dykstra <dwd at bell-labs.com>
To: Florian Lohoff <flo at rfc822.org>
Subject: Re: include/exclude mess/-> libpcre ?
Cc: Multiple recipients of list RSYNC <rsync at samba.anu.edu.au>

On Oct 26,  5:38pm, Florian Lohoff wrote:
> > Works for me.  Are you using rsync 2.3.1?
> 
> Yes - No-go ...
> 
> #!/bin/sh
> 
> rsync -vv -Hlrt --delete \
>         --include "/potato/" \
>         --include "/potato/*" \
>         --include "/potato/*/source" \
>         --include "/potato/*/source/**" \
>         --exclude "**" \
>         source.rfc822.org::debian/dists/potato \
>         /tmp/try
> 
> [...]
> receiving file list ... done
> created directory /tmp/try
> potato/
> deleting in potato
> potato/contrib/
> potato/contrib/binary-all/
> potato/contrib/binary-all/admin/
> potato/contrib/binary-all/base/
> potato/contrib/binary-all/comm/
> [...]
> 
> (root at source)~# rsync --version
> rsync version 2.3.1  protocol version 20
> 
> Written by Andrew Tridgell and Paul Mackerras
> 
> 
> (root at paradigm)~$ rsync --version
> rsync version 2.3.1  protocol version 20
> 
> Written by Andrew Tridgell and Paul Mackerras


Aha, it only failes on Linux, not on solaris.  Looks to me like the Linux
fnmatch() with option FNM_PATHNAME is broken: it doesn't stop at slashes
like it is supposed to.  I tried it out on Redhat 6.0 with the following
test program:

    #include "fnmatch.h"

    int main(int argc,char **argv)
    {
	    printf("fnmatch(%s,%s,FNM_PATHNAME): %d\n",argv[1],argv[2],
			fnmatch(argv[1],argv[2],FNM_PATHNAME));
	    return(0);
    }

This reports a match with "a/b/* a/b/c/d".

Can somebody knowledgable in Linux bug reporting/fixing followup?  I tried
forcing rsync's configure to use its builtin fnmatch, but more will need to
be done because then it complains about some missing defines.

The man page descriptions of FNM_PATHNAME are different:

    Solaris:
              If set, a slash (/) character in  string  will  be
              explicitly  matched by a slash in pattern; it will
              not be matched  by  either  the  asterisk  (*)  or
              question-mark  (?)  special  characters,  nor by a
              bracket ([]) expression.

              If not set, the slash character is treated  as  an
              ordinary character.

    Linux:
              If  this  flag is set, match a slash in string only
              with a slash in pattern and not, for example,  with
              a [] - sequence containing a slash.

but I think they intend to say the same thing.

- Dave Dykstra


----- End forwarded message -----

-- 
Florian Lohoff		flo at rfc822.org		      	+49-5241-470566
  ...  The failure can be random; however, when it does occur, it is
  catastrophic and is repeatable  ...             Cisco Field Notice




More information about the Linux mailing list