From owner-freebsd-audit Mon Apr 9 21:26: 6 2001 Delivered-To: freebsd-audit@freebsd.org Received: from bazooka.unixfreak.org (bazooka.unixfreak.org [63.198.170.138]) by hub.freebsd.org (Postfix) with ESMTP id A548B37B62F for ; Mon, 9 Apr 2001 21:25:55 -0700 (PDT) (envelope-from dima@unixfreak.org) Received: from spike.unixfreak.org (spike [63.198.170.139]) by bazooka.unixfreak.org (Postfix) with ESMTP id 52D9D3E09 for ; Mon, 9 Apr 2001 21:25:55 -0700 (PDT) To: audit@freebsd.org Subject: Fixes to src/sbin/dump/traverse.c Date: Mon, 09 Apr 2001 21:25:55 -0700 From: Dima Dorfman Message-Id: <20010410042555.52D9D3E09@bazooka.unixfreak.org> Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Attached is a patch that makes some [relatively minor] fixes to src/sbin/dump/traverse.c. Most of these bugs were caused by incorrect assumptions I made when porting over NetBSD's code to handle the nodump filesystem flag on directories (revs. 1.12 and 1.10.2.2). The first two hunks' purpose should be pretty obvious from the comment update; basically, mapdirs() tests directory inodes for being in dumpdirmap but not in usedinomap to detect whether that directory has inherited, or has set, the nodump flag. Currently, this test will fail when it shouldn't when doing a dump with level > 0 and when no directories on the filesystem were changed. The third hunk corrects a small bogon with regards to handling the -h option. If someone could look this over and, if acceptable, commit it, I'd appreciate. The patch is pretty small, so it would be desireable to see it in 4.3-RELEASE (although I'm not going to push very hard for that this late). Thanks in advance, Dima Dorfman dima@unixfreak.org Index: traverse.c =================================================================== RCS file: /st/src/FreeBSD/src/sbin/dump/traverse.c,v retrieving revision 1.12 diff -u -r1.12 traverse.c --- traverse.c 2001/03/03 11:35:50 1.12 +++ traverse.c 2001/04/07 22:50:35 @@ -155,13 +155,15 @@ if ((mode = (dp->di_mode & IFMT)) == 0) continue; /* - * All dirs go in dumpdirmap; only inodes that are to - * be dumped go in usedinomap and dumpinomap, however. + * Everything must go in usedinomap so that a check + * for "in dumpdirmap but not in usedinomap" to detect + * dirs with nodump set has a chance of succeeding + * (this is used in mapdirs()). */ + SETINO(ino, usedinomap); if (mode == IFDIR) SETINO(ino, dumpdirmap); if (WANTTODUMP(dp)) { - SETINO(ino, usedinomap); SETINO(ino, dumpinomap); if (mode != IFREG && mode != IFDIR && mode != IFLNK) *tapesize += 1; @@ -169,8 +171,11 @@ *tapesize += blockest(dp); continue; } - if (mode == IFDIR) + if (mode == IFDIR) { + if (!nonodump && (dp->di_flags & UF_NODUMP)) + CLRINO(ino, usedinomap); anydirskipped = 1; + } } /* * Restore gets very upset if the root is not dumped, @@ -218,7 +223,7 @@ * it isn't in usedinomap, we have to go through it to * propagate the nodump flag. */ - nodump = (TSTINO(ino, usedinomap) == 0); + nodump = !nonodump && (TSTINO(ino, usedinomap) == 0); if ((isdir & 1) == 0 || (TSTINO(ino, dumpinomap) && !nodump)) continue; dp = getino(ino); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message