Date: Tue, 12 Jun 2001 03:08:49 -0700 (PDT) From: bill@twwells.com To: freebsd-gnats-submit@FreeBSD.org Subject: misc/28095: [PATCH] pax may descend into directories even when -d specified Message-ID: <200106121008.f5CA8nC54137@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 28095 >Category: misc >Synopsis: [PATCH] pax may descend into directories even when -d specified >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Jun 12 03:10:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Bill Wells >Release: 4.3-STABLE >Organization: >Environment: >Description: When the -d option is specified and a -T, -G, or -U option causes a directory to be skipped, pax will descend into that directory. Other selection options may have a similar problem. I have not addressed that. >How-To-Repeat: pax -w -v -d -G tty -f /dev/null /usr/bin This will dump wall and write, which are group tty, even though the -d option says to not descend into /usr/bin. >Fix: Sorry for the very likely screwiness of this patch; this is not my normal interface. When my system is back up, I'll e-mail the patch if requested. diff -bru pax.orig/ar_subs.c pax/ar_subs.c --- pax.orig/ar_subs.c Fri Aug 27 16:14:39 1999 +++ pax/ar_subs.c Tue Jun 12 02:53:37 2001 @@ -395,8 +395,10 @@ /* * check if this file meets user specified options match. */ - if (sel_chk(arcn) != 0) + if (sel_chk(arcn) != 0) { + ftree_notsel(arcn); continue; + } fd = -1; if (uflag) { /* @@ -791,9 +793,10 @@ /* * check if this file meets user specified options */ - if (sel_chk(arcn) != 0) + if (sel_chk(arcn) != 0) { + ftree_notsel(arcn); continue; - + } /* * if there is already a file in the destination directory with * the same name and it is newer, skip the one stored on the diff -bru pax.orig/extern.h pax/extern.h --- pax.orig/extern.h Mon Mar 5 04:30:41 2001 +++ pax/extern.h Tue Jun 12 02:48:42 2001 @@ -157,6 +157,7 @@ int ftree_start __P((void)); int ftree_add __P((register char *)); void ftree_sel __P((register ARCHD *)); +void ftree_notsel __P((register ARCHD *)); void ftree_chk __P((void)); int next_file __P((register ARCHD *)); diff -bru pax.orig/ftree.c pax/ftree.c --- pax.orig/ftree.c Fri Aug 27 16:14:42 1999 +++ pax/ftree.c Tue Jun 12 02:48:21 2001 @@ -234,6 +234,24 @@ } /* + * ftree_notsel() + * this entry has been skipped by pax. + */ + +#if __STDC__ +void +ftree_notsel(register ARCHD *arcn) +#else +void +ftree_notsel(arcn) + register ARCHD *arcn; +#endif +{ + if (ftent != NULL) + (void)fts_set(ftsp, ftent, FTS_SKIP); +} + +/* * ftree_chk() * called at end on pax execution. Prints all those file args that did not * have a selected member (reference count still 0) >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200106121008.f5CA8nC54137>