From archie@packetdesign.com  Tue Jun 26 11:16:28 2001
Return-Path: <archie@packetdesign.com>
Received: from mailman.packetdesign.com (dns.packetdesign.com [65.192.41.10])
	by hub.freebsd.org (Postfix) with ESMTP id CFA6337B401
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 26 Jun 2001 11:16:28 -0700 (PDT)
	(envelope-from archie@packetdesign.com)
Received: from bubba.packetdesign.com (bubba.packetdesign.com [192.168.0.223])
	by mailman.packetdesign.com (8.11.0/8.11.0) with ESMTP id f5QIGS223614
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 26 Jun 2001 11:16:28 -0700 (PDT)
	(envelope-from archie@packetdesign.com)
Received: (from archie@localhost)
	by bubba.packetdesign.com (8.11.3/8.11.1) id f5QIGSr95549;
	Tue, 26 Jun 2001 11:16:28 -0700 (PDT)
	(envelope-from archie)
Message-Id: <200106261816.f5QIGSr95549@bubba.packetdesign.com>
Date: Tue, 26 Jun 2001 11:16:28 -0700 (PDT)
From: Archie Cobbs <archie@packetdesign.com>
Reply-To: archie@packetdesign.com
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: mtree fails to report directory hierarchy mismatch
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         28424
>Category:       bin
>Synopsis:       mtree(8) fails to report directory hierarchy mismatch
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    brooks
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jun 26 11:20:01 PDT 2001
>Closed-Date:    
>Last-Modified:  Thu Sep 27 07:35:38 UTC 2012
>Originator:     Archie Cobbs
>Release:        FreeBSD 4.3-STABLE i386
>Organization:
Packet Design
>Environment:
System: FreeBSD freefall.freebsd.org 4.3-STABLE FreeBSD 4.3-STABLE #0: Sun Jun  3 03:04:36 PDT 2001     peter@freefall.freebsd.org:/c/src/sys/compile/FREEFALL  i386

>Description:

	mtree(1) is supposed to exit with a value of 2 if the
	hierarchy does not match the specification. However, in
	a certain situation it exits 0 when it should exit 2.

>How-To-Repeat:

	$ mkdir xx
	$ mkdir xx/yy
	$ mtree -dc -p xx -k uid,gid,mode > xx.mtree
	$ cat xx.mtree
	#          user: archie
	#       machine: freefall.freebsd.org
	#          tree: /d/home/archie/xx
	#          date: Tue Jun 26 11:12:16 2001
	# .
	/set type=dir uid=743 gid=743 mode=0755
	.              
	# ./yy
	yy             
	# ./yy
	..
	..
	$ rmdir xx/yy
	$ mtree -de -f xx.mtree -p xx && echo 'hierarchy matches spec'
	./yy missing
	hierarchy matches spec

>Fix:

	?

>Release-Note:
>Audit-Trail:

From: "Andrew L. Neporada" <andr@dgap.mipt.ru>
To: bug-followup@freebsd.org
Cc:  
Subject: [PATCH] Re: bin/28424 mtree fails to report directory hierarchy
 mismatch
Date: Sat, 16 Mar 2002 06:24:03 +0300 (MSK)

   This message is in MIME format.  The first part should be readable text,
   while the remaining parts are likely unreadable without MIME-aware tools.
   Send mail to mime@docserver.cac.washington.edu for more info.
 
 --0-954267614-1016249043=:9110
 Content-Type: TEXT/PLAIN; charset=US-ASCII
 
 Attached patch solves (I hope) this problem. This patch also introduces
 slightly enhanced exit status reporting:
 
 0 - directory matches spec, success
 1 - "hard error" -- spec/dir not found, wrong options, etc.
 2 - directory/spec mismatch that was fixed successfully
 3 - unfixed directory/spec mismatch
 
 Please comment/review.
 
 				Andrew.
 
 --0-954267614-1016249043=:9110
 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mtree.diff"
 Content-Transfer-Encoding: BASE64
 Content-ID: <20020316062403.J9110@nas.dgap.mipt.ru>
 Content-Description: mtree.diff
 Content-Disposition: attachment; filename="mtree.diff"
 
 SW5kZXg6IGNvbXBhcmUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT
 IGZpbGU6IC9ob21lL25jdnMvc3JjL3Vzci5zYmluL210cmVlL2NvbXBhcmUu
 Yyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjANCmRpZmYgLXUgLXIxLjIw
 IGNvbXBhcmUuYw0KLS0tIGNvbXBhcmUuYwk2IE9jdCAyMDAwIDEyOjQ4OjU1
 IC0wMDAwCTEuMjANCisrKyBjb21wYXJlLmMJNyBNYXIgMjAwMiAyMjo1Njoy
 NSAtMDAwMA0KQEAgLTYyLDYgKzYyLDcgQEANCiANCiBleHRlcm4gaW50IHVm
 bGFnOw0KIGV4dGVybiBpbnQgbGluZW5vOw0KK2V4dGVybiBpbnQgcnZhbDsN
 CiANCiBzdGF0aWMgY2hhciAqZnR5cGUgX19QKCh1X2ludCkpOw0KIA0KQEAg
 LTExNSw2ICsxMTYsNyBAQA0KIHR5cGVlcnI6CQlMQUJFTDsNCiAJCQkodm9p
 ZClwcmludGYoIlx0dHlwZSBleHBlY3RlZCAlcyBmb3VuZCAlc1xuIiwNCiAJ
 CQkgICAgZnR5cGUocy0+dHlwZSksIGlub3R5cGUocC0+ZnRzX3N0YXRwLT5z
 dF9tb2RlKSk7DQorCQkJRkFJTEVEOw0KIAkJCXJldHVybiAobGFiZWwpOw0K
 IAkJfQ0KIAkJYnJlYWs7DQpAQCAtMTI0LDExICsxMjYsMTMgQEANCiAJCUxB
 QkVMOw0KIAkJKHZvaWQpcHJpbnRmKCIlc3VzZXIgZXhwZWN0ZWQgJWx1IGZv
 dW5kICVsdSIsDQogCQkgICAgdGFiLCAodV9sb25nKXMtPnN0X3VpZCwgKHVf
 bG9uZylwLT5mdHNfc3RhdHAtPnN0X3VpZCk7DQorCQlGSVhFRDsNCiAJCWlm
 ICh1ZmxhZykNCi0JCQlpZiAoY2hvd24ocC0+ZnRzX2FjY3BhdGgsIHMtPnN0
 X3VpZCwgLTEpKQ0KKwkJCWlmIChjaG93bihwLT5mdHNfYWNjcGF0aCwgcy0+
 c3RfdWlkLCAtMSkpIHsNCiAJCQkJKHZvaWQpcHJpbnRmKCIgbm90IG1vZGlm
 aWVkOiAlc1xuIiwNCiAJCQkJICAgIHN0cmVycm9yKGVycm5vKSk7DQotCQkJ
 ZWxzZQ0KKwkJCQlGQUlMRUQ7DQorCQkJfSBlbHNlDQogCQkJCSh2b2lkKXBy
 aW50ZigiIG1vZGlmaWVkXG4iKTsNCiAJCWVsc2UNCiAJCQkodm9pZClwcmlu
 dGYoIlxuIik7DQpAQCAtMTM4LDExICsxNDIsMTMgQEANCiAJCUxBQkVMOw0K
 IAkJKHZvaWQpcHJpbnRmKCIlc2dpZCBleHBlY3RlZCAlbHUgZm91bmQgJWx1
 IiwNCiAJCSAgICB0YWIsICh1X2xvbmcpcy0+c3RfZ2lkLCAodV9sb25nKXAt
 PmZ0c19zdGF0cC0+c3RfZ2lkKTsNCisJCUZJWEVEOw0KIAkJaWYgKHVmbGFn
 KQ0KLQkJCWlmIChjaG93bihwLT5mdHNfYWNjcGF0aCwgLTEsIHMtPnN0X2dp
 ZCkpDQorCQkJaWYgKGNob3duKHAtPmZ0c19hY2NwYXRoLCAtMSwgcy0+c3Rf
 Z2lkKSkgew0KIAkJCQkodm9pZClwcmludGYoIiBub3QgbW9kaWZpZWQ6ICVz
 XG4iLA0KIAkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsNCi0JCQllbHNlDQor
 CQkJCUZBSUxFRDsNCisJCQl9IGVsc2UNCiAJCQkJKHZvaWQpcHJpbnRmKCIg
 bW9kaWZpZWRcbiIpOw0KIAkJZWxzZQ0KIAkJCSh2b2lkKXByaW50ZigiXG4i
 KTsNCkBAIC0xNTQsMTEgKzE2MCwxMyBAQA0KIAkJTEFCRUw7DQogCQkodm9p
 ZClwcmludGYoIiVzcGVybWlzc2lvbnMgZXhwZWN0ZWQgJSNvIGZvdW5kICUj
 byIsDQogCQkgICAgdGFiLCBzLT5zdF9tb2RlLCBwLT5mdHNfc3RhdHAtPnN0
 X21vZGUgJiBNQklUUyk7DQorCQlGSVhFRDsNCiAJCWlmICh1ZmxhZykNCi0J
 CQlpZiAoY2htb2QocC0+ZnRzX2FjY3BhdGgsIHMtPnN0X21vZGUpKQ0KKwkJ
 CWlmIChjaG1vZChwLT5mdHNfYWNjcGF0aCwgcy0+c3RfbW9kZSkpIHsNCiAJ
 CQkJKHZvaWQpcHJpbnRmKCIgbm90IG1vZGlmaWVkOiAlc1xuIiwNCiAJCQkJ
 ICAgIHN0cmVycm9yKGVycm5vKSk7DQotCQkJZWxzZQ0KKwkJCQlGQUlMRUQ7
 DQorCQkJfSBlbHNlDQogCQkJCSh2b2lkKXByaW50ZigiIG1vZGlmaWVkXG4i
 KTsNCiAJCWVsc2UNCiAJCQkodm9pZClwcmludGYoIlxuIik7DQpAQCAtMTY5
 LDYgKzE3Nyw3IEBADQogCQlMQUJFTDsNCiAJCSh2b2lkKXByaW50ZigiJXNs
 aW5rX2NvdW50IGV4cGVjdGVkICV1IGZvdW5kICV1XG4iLA0KIAkJICAgIHRh
 Yiwgcy0+c3RfbmxpbmssIHAtPmZ0c19zdGF0cC0+c3RfbmxpbmspOw0KKwkJ
 RkFJTEVEOw0KIAkJdGFiID0gIlx0IjsNCiAJfQ0KIAlpZiAocy0+ZmxhZ3Mg
 JiBGX1NJWkUgJiYgcy0+c3Rfc2l6ZSAhPSBwLT5mdHNfc3RhdHAtPnN0X3Np
 emUgJiYNCkBAIC0xNzYsNiArMTg1LDcgQEANCiAJCUxBQkVMOw0KIAkJKHZv
 aWQpcHJpbnRmKCIlc3NpemUgZXhwZWN0ZWQgJXFkIGZvdW5kICVxZFxuIiwN
 CiAJCSAgICB0YWIsIHMtPnN0X3NpemUsIHAtPmZ0c19zdGF0cC0+c3Rfc2l6
 ZSk7DQorCQlGQUlMRUQ7DQogCQl0YWIgPSAiXHQiOw0KIAl9DQogCS8qDQpA
 QCAtMTkwLDYgKzIwMCw3IEBADQogCQkgICAgdGFiLCBjdGltZSgmcy0+c3Rf
 bXRpbWVzcGVjLnR2X3NlYykpOw0KIAkJKHZvaWQpcHJpbnRmKCJmb3VuZCAl
 LjI0c1xuIiwNCiAJCSAgICBjdGltZSgmcC0+ZnRzX3N0YXRwLT5zdF9tdGlt
 ZXNwZWMudHZfc2VjKSk7DQorCQlGQUlMRUQ7DQogCQl0YWIgPSAiXHQiOw0K
 IAl9DQogCWlmIChzLT5mbGFncyAmIEZfQ0tTVU0pIHsNCkBAIC0xOTcsMTIg
 KzIwOCwxNCBAQA0KIAkJCUxBQkVMOw0KIAkJCSh2b2lkKXByaW50ZigiJXNj
 a3N1bTogJXM6ICVzXG4iLA0KIAkJCSAgICB0YWIsIHAtPmZ0c19hY2NwYXRo
 LCBzdHJlcnJvcihlcnJubykpOw0KKwkJCUZBSUxFRDsNCiAJCQl0YWIgPSAi
 XHQiOw0KIAkJfSBlbHNlIGlmIChjcmMoZmQsICZ2YWwsICZsZW4pKSB7DQog
 CQkJKHZvaWQpY2xvc2UoZmQpOw0KIAkJCUxBQkVMOw0KIAkJCSh2b2lkKXBy
 aW50ZigiJXNja3N1bTogJXM6ICVzXG4iLA0KIAkJCSAgICB0YWIsIHAtPmZ0
 c19hY2NwYXRoLCBzdHJlcnJvcihlcnJubykpOw0KKwkJCUZBSUxFRDsNCiAJ
 CQl0YWIgPSAiXHQiOw0KIAkJfSBlbHNlIHsNCiAJCQkodm9pZCljbG9zZShm
 ZCk7DQpAQCAtMjEwLDYgKzIyMyw3IEBADQogCQkJCUxBQkVMOw0KIAkJCQko
 dm9pZClwcmludGYoIiVzY2tzdW0gZXhwZWN0ZWQgJWx1IGZvdW5kICVsdVxu
 IiwNCiAJCQkJICAgIHRhYiwgcy0+Y2tzdW0sIHZhbCk7DQorCQkJCUZBSUxF
 RDsNCiAJCQl9DQogCQkJdGFiID0gIlx0IjsNCiAJCX0NCkBAIC0yMjksMTIg
 KzI0MywxNCBAQA0KIAkJZmZsYWdzID0gZmxhZ3NfdG9fc3RyaW5nKHAtPmZ0
 c19zdGF0cC0+c3RfZmxhZ3MpOw0KIAkJKHZvaWQpcHJpbnRmKCIgZm91bmQg
 XCIlc1wiIiwgZmZsYWdzKTsNCiAJCWZyZWUoZmZsYWdzKTsNCisJCUZJWEVE
 Ow0KIA0KIAkJaWYgKHVmbGFnKQ0KLQkJCWlmIChjaGZsYWdzKHAtPmZ0c19h
 Y2NwYXRoLCBzLT5zdF9mbGFncykpDQorCQkJaWYgKGNoZmxhZ3MocC0+ZnRz
 X2FjY3BhdGgsIHMtPnN0X2ZsYWdzKSkgew0KIAkJCQkodm9pZClwcmludGYo
 IiBub3QgbW9kaWZpZWQ6ICVzXG4iLA0KIAkJCQkgICAgc3RyZXJyb3IoZXJy
 bm8pKTsNCi0JCQllbHNlDQorCQkJCUZBSUxFRDsNCisJCQl9IGVsc2UNCiAJ
 CQkJKHZvaWQpcHJpbnRmKCIgbW9kaWZpZWRcbiIpOw0KIAkJZWxzZQ0KIAkJ
 CSh2b2lkKXByaW50ZigiXG4iKTsNCkBAIC0yNDksMTEgKzI2NSwxMyBAQA0K
 IAkJCUxBQkVMOw0KIAkJCXByaW50ZigiJXNNRDU6ICVzOiAlc1xuIiwgdGFi
 LCBwLT5mdHNfYWNjcGF0aCwNCiAJCQkgICAgICAgc3RyZXJyb3IoZXJybm8p
 KTsNCisJCQlGQUlMRUQ7DQogCQkJdGFiID0gIlx0IjsNCiAJCX0gZWxzZSBp
 ZiAoc3RyY21wKG5ld19kaWdlc3QsIHMtPm1kNWRpZ2VzdCkpIHsNCiAJCQlM
 QUJFTDsNCiAJCQlwcmludGYoIiVzTUQ1IGV4cGVjdGVkICVzIGZvdW5kICVz
 XG4iLCB0YWIsIHMtPm1kNWRpZ2VzdCwNCiAJCQkgICAgICAgbmV3X2RpZ2Vz
 dCk7DQorCQkJRkFJTEVEOw0KIAkJCXRhYiA9ICJcdCI7DQogCQl9DQogCX0N
 CkBAIC0yNjcsMTEgKzI4NSwxMyBAQA0KIAkJCUxBQkVMOw0KIAkJCXByaW50
 ZigiJXNTSEEtMTogJXM6ICVzXG4iLCB0YWIsIHAtPmZ0c19hY2NwYXRoLA0K
 IAkJCSAgICAgICBzdHJlcnJvcihlcnJubykpOw0KKwkJCUZBSUxFRDsNCiAJ
 CQl0YWIgPSAiXHQiOw0KIAkJfSBlbHNlIGlmIChzdHJjbXAobmV3X2RpZ2Vz
 dCwgcy0+c2hhMWRpZ2VzdCkpIHsNCiAJCQlMQUJFTDsNCiAJCQlwcmludGYo
 IiVzU0hBLTEgZXhwZWN0ZWQgJXMgZm91bmQgJXNcbiIsIA0KIAkJCSAgICAg
 ICB0YWIsIHMtPnNoYTFkaWdlc3QsIG5ld19kaWdlc3QpOw0KKwkJCUZBSUxF
 RDsNCiAJCQl0YWIgPSAiXHQiOw0KIAkJfQ0KIAl9DQpAQCAtMjg1LDExICsz
 MDUsMTMgQEANCiAJCQlMQUJFTDsNCiAJCQlwcmludGYoIiVzUklQRU1EMTYw
 OiAlczogJXNcbiIsIHRhYiwNCiAJCQkgICAgICAgcC0+ZnRzX2FjY3BhdGgs
 IHN0cmVycm9yKGVycm5vKSk7DQorCQkJRkFJTEVEOw0KIAkJCXRhYiA9ICJc
 dCI7DQogCQl9IGVsc2UgaWYgKHN0cmNtcChuZXdfZGlnZXN0LCBzLT5ybWQx
 NjBkaWdlc3QpKSB7DQogCQkJTEFCRUw7DQogCQkJcHJpbnRmKCIlc1JJUEVN
 RDE2MCBleHBlY3RlZCAlcyBmb3VuZCAlc1xuIiwNCiAJCQkgICAgICAgdGFi
 LCBzLT5ybWQxNjBkaWdlc3QsIG5ld19kaWdlc3QpOw0KKwkJCUZBSUxFRDsN
 CiAJCQl0YWIgPSAiXHQiOw0KIAkJfQ0KIAl9DQpAQCAtMzAwLDYgKzMyMiw3
 IEBADQogCQlMQUJFTDsNCiAJCSh2b2lkKXByaW50ZigiJXNsaW5rX3JlZiBl
 eHBlY3RlZCAlcyBmb3VuZCAlc1xuIiwNCiAJCSAgICAgIHRhYiwgY3AsIHMt
 PnNsaW5rKTsNCisJCUZBSUxFRDsNCiAJfQ0KIAlyZXR1cm4gKGxhYmVsKTsN
 CiB9DQpJbmRleDogZXh0ZXJuLmgNCj09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
 ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy91c3Iuc2Jpbi9tdHJlZS9leHRl
 cm4uaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEu
 NSBleHRlcm4uaA0KLS0tIGV4dGVybi5oCTE3IEp1biAyMDAwIDE0OjE5OjMz
 IC0wMDAwCTEuNQ0KKysrIGV4dGVybi5oCTcgTWFyIDIwMDIgMjI6NTY6MjUg
 LTAwMDANCkBAIC00Myw3ICs0Myw3IEBADQogdV9pbnQJIHBhcnNla2V5IF9f
 UCgoY2hhciAqLCBpbnQgKikpOw0KIGNoYXIJKnJsaW5rIF9fUCgoY2hhciAq
 KSk7DQogTk9ERQkqc3BlYyBfX1AoKHZvaWQpKTsNCi1pbnQJIHZlcmlmeSBf
 X1AoKHZvaWQpKTsNCit2b2lkCSB2ZXJpZnkgX19QKCh2b2lkKSk7DQogDQog
 aW50CSBjaGVja19leGNsdWRlcyBfX1AoKGNvbnN0IGNoYXIgKiwgY29uc3Qg
 Y2hhciAqKSk7DQogdm9pZAkgaW5pdF9leGNsdWRlcyBfX1AoKHZvaWQpKTsN
 CkluZGV4OiBtdHJlZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
 ZmlsZTogL2hvbWUvbmN2cy9zcmMvdXNyLnNiaW4vbXRyZWUvbXRyZWUuYyx2
 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgNCmRpZmYgLXUgLXIxLjE4IG10
 cmVlLmMNCi0tLSBtdHJlZS5jCTI1IFNlcCAyMDAwIDE2OjI0OjIyIC0wMDAw
 CTEuMTgNCisrKyBtdHJlZS5jCTkgTWFyIDIwMDIgMjE6MDY6NDcgLTAwMDAN
 CkBAIC01OSw2ICs1OSw3IEBADQogDQogaW50IGZ0c29wdGlvbnMgPSBGVFNf
 UEhZU0lDQUw7DQogaW50IGNmbGFnLCBkZmxhZywgZWZsYWcsIGlmbGFnLCBu
 ZmxhZywgcWZsYWcsIHJmbGFnLCBzZmxhZywgdWZsYWcsIFVmbGFnOw0KK2lu
 dCBydmFsOw0KIHVfaW50IGtleXM7DQogY2hhciBmdWxscGF0aFtNQVhQQVRI
 TEVOXTsNCiANCkBAIC03MSw3ICs3Miw2IEBADQogew0KIAlpbnQgY2g7DQog
 CWNoYXIgKmRpciwgKnA7DQotCWludCBzdGF0dXM7DQogDQogCWRpciA9IE5V
 TEw7DQogCWtleXMgPSBLRVlERUZBVUxUOw0KQEAgLTE2NCwxMCArMTY0LDEw
 IEBADQogCQljd2FsaygpOw0KIAkJZXhpdCgwKTsNCiAJfQ0KLQlzdGF0dXMg
 PSB2ZXJpZnkoKTsNCi0JaWYgKFVmbGFnICYgKHN0YXR1cyA9PSBNSVNNQVRD
 SEVYSVQpKQ0KLQkJc3RhdHVzID0gMDsNCi0JZXhpdChzdGF0dXMpOw0KKwl2
 ZXJpZnkoKTsNCisJaWYgKFVmbGFnICYgKHJ2YWwgPT0gTUlTTUFUQ0hGSVhF
 RCkpDQorCQlydmFsID0gMDsNCisJZXhpdChydmFsKTsNCiB9DQogDQogc3Rh
 dGljIHZvaWQNCkluZGV4OiBtdHJlZS5oDQo9PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09DQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvdXNyLnNiaW4vbXRyZWUv
 bXRyZWUuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQ0KZGlmZiAtdSAt
 cjEuNSBtdHJlZS5oDQotLS0gbXRyZWUuaAk5IERlYyAxOTk5IDIwOjM4OjM1
 IC0wMDAwCTEuNQ0KKysrIG10cmVlLmgJOSBNYXIgMjAwMiAyMDo0NzowOCAt
 MDAwMA0KQEAgLTQwLDcgKzQwLDEwIEBADQogI2RlZmluZQlLRVlERUZBVUxU
 IFwNCiAJKEZfR0lEIHwgRl9NT0RFIHwgRl9OTElOSyB8IEZfU0laRSB8IEZf
 U0xJTksgfCBGX1RJTUUgfCBGX1VJRCB8IEZfRkxBR1MpDQogDQotI2RlZmlu
 ZQlNSVNNQVRDSEVYSVQJMg0KKyNkZWZpbmUJTUlTTUFUQ0hGSVhFRAkyDQor
 I2RlZmluZQlGSVhGQUlMRUQJMw0KKyNkZWZpbmUJRklYRUQJaWYgKHJ2YWwg
 IT0gRklYRkFJTEVEKSBydmFsID0gTUlTTUFUQ0hGSVhFRDsNCisjZGVmaW5l
 CUZBSUxFRAlydmFsID0gRklYRkFJTEVEOw0KIA0KIHR5cGVkZWYgc3RydWN0
 IF9ub2RlIHsNCiAJc3RydWN0IF9ub2RlCSpwYXJlbnQsICpjaGlsZDsJLyog
 dXAsIGRvd24gKi8NCkluZGV4OiB2ZXJpZnkuYw0KPT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3Vzci5zYmluL210
 cmVlL3ZlcmlmeS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQ0KZGlm
 ZiAtdSAtcjEuMTUgdmVyaWZ5LmMNCi0tLSB2ZXJpZnkuYwkzIE9jdCAyMDAw
 IDEzOjEzOjQ3IC0wMDAwCTEuMTUNCisrKyB2ZXJpZnkuYwk5IE1hciAyMDAy
 IDIwOjM5OjQxIC0wMDAwDQpAQCAtNTYsMzEgKzU2LDI5IEBADQogZXh0ZXJu
 IGludCBkZmxhZywgZWZsYWcsIHFmbGFnLCByZmxhZywgc2ZsYWcsIHVmbGFn
 Ow0KIGV4dGVybiBjaGFyIGZ1bGxwYXRoW01BWFBBVEhMRU5dOw0KIGV4dGVy
 biBpbnQgbGluZW5vOw0KK2V4dGVybiBpbnQgcnZhbDsNCiANCiBzdGF0aWMg
 Tk9ERSAqcm9vdDsNCiBzdGF0aWMgY2hhciBwYXRoW01BWFBBVEhMRU5dOw0K
 IA0KIHN0YXRpYyB2b2lkCW1pc3MgX19QKChOT0RFICosIGNoYXIgKikpOw0K
 LXN0YXRpYyBpbnQJdndhbGsgX19QKCh2b2lkKSk7DQorc3RhdGljIHZvaWQJ
 dndhbGsgX19QKCh2b2lkKSk7DQogDQotaW50DQordm9pZA0KIHZlcmlmeSgp
 DQogew0KLQlpbnQgcnZhbDsNCi0NCiAJcm9vdCA9IHNwZWMoKTsNCi0JcnZh
 bCA9IHZ3YWxrKCk7DQorCXZ3YWxrKCk7DQogCW1pc3Mocm9vdCwgcGF0aCk7
 DQotCXJldHVybiAocnZhbCk7DQogfQ0KIA0KLXN0YXRpYyBpbnQNCit2b2lk
 DQogdndhbGsoKQ0KIHsNCiAJcmVnaXN0ZXIgRlRTICp0Ow0KIAlyZWdpc3Rl
 ciBGVFNFTlQgKnA7DQogCXJlZ2lzdGVyIE5PREUgKmVwLCAqbGV2ZWw7DQot
 CWludCBzcGVjZGVwdGgsIHJ2YWw7DQorCWludCBzcGVjZGVwdGg7DQogCWNo
 YXIgKmFyZ3ZbMl07DQogDQogCWFyZ3ZbMF0gPSAiLiI7DQpAQCAtMTIyLDkg
 KzEyMCw4IEBADQogCQkJICAgICFmbm1hdGNoKGVwLT5uYW1lLCBwLT5mdHNf
 bmFtZSwgRk5NX1BBVEhOQU1FKSkgfHwNCiAJCQkgICAgIXN0cmNtcChlcC0+
 bmFtZSwgcC0+ZnRzX25hbWUpKSB7DQogCQkJCWVwLT5mbGFncyB8PSBGX1ZJ
 U0lUOw0KLQkJCQlpZiAoKGVwLT5mbGFncyAmIEZfTk9DSEFOR0UpID09IDAg
 JiYNCi0JCQkJICAgIGNvbXBhcmUoZXAtPm5hbWUsIGVwLCBwKSkNCi0JCQkJ
 CXJ2YWwgPSBNSVNNQVRDSEVYSVQ7DQorCQkJCWlmICgoZXAtPmZsYWdzICYg
 Rl9OT0NIQU5HRSkgPT0gMCkNCisJCQkJCSh2b2lkKWNvbXBhcmUoZXAtPm5h
 bWUsIGVwLCBwKTsNCiAJCQkJaWYgKGVwLT5mbGFncyAmIEZfSUdOKQ0KIAkJ
 CQkJKHZvaWQpZnRzX3NldCh0LCBwLCBGVFNfU0tJUCk7DQogCQkJCWVsc2Ug
 aWYgKGVwLT5jaGlsZCAmJiBlcC0+dHlwZSA9PSBGX0RJUiAmJg0KQEAgLTEz
 OSwxNSArMTM2LDE4IEBADQogCQkJY29udGludWU7DQogZXh0cmE6DQogCQlp
 ZiAoIWVmbGFnKSB7DQorCQkJRklYRUQ7DQogCQkJKHZvaWQpcHJpbnRmKCIl
 cyBleHRyYSIsIFJQKHApKTsNCiAJCQlpZiAocmZsYWcpIHsNCiAJCQkJaWYg
 KChTX0lTRElSKHAtPmZ0c19zdGF0cC0+c3RfbW9kZSkNCiAJCQkJICAgID8g
 cm1kaXIgOiB1bmxpbmspKHAtPmZ0c19hY2NwYXRoKSkgew0KIAkJCQkJKHZv
 aWQpcHJpbnRmKCIsIG5vdCByZW1vdmVkOiAlcyIsDQogCQkJCQkgICAgc3Ry
 ZXJyb3IoZXJybm8pKTsNCisJCQkJCUZBSUxFRDsNCiAJCQkJfSBlbHNlDQog
 CQkJCQkodm9pZClwcmludGYoIiwgcmVtb3ZlZCIpOw0KLQkJCX0NCisJCQl9
 IGVsc2UNCisJCQkJRkFJTEVEOw0KIAkJCSh2b2lkKXB1dGNoYXIoJ1xuJyk7
 DQogCQl9DQogCQkodm9pZClmdHNfc2V0KHQsIHAsIEZUU19TS0lQKTsNCkBA
 IC0xNTUsNyArMTU1LDYgQEANCiAJKHZvaWQpZnRzX2Nsb3NlKHQpOw0KIAlp
 ZiAoc2ZsYWcpDQogCQl3YXJueCgiJXMgY2hlY2tzdW06ICVsdSIsIGZ1bGxw
 YXRoLCBjcmNfdG90YWwpOw0KLQlyZXR1cm4gKHJ2YWwpOw0KIH0NCiANCiBz
 dGF0aWMgdm9pZA0KQEAgLTE3OCw4ICsxNzcsMTAgQEANCiAgDQogCQkJaWYg
 KHFmbGFnICYmIHN0YXQocGF0aCwgJnN0YXRidWYpID09IDApDQogCQkJCXAt
 PmZsYWdzIHw9IEZfVklTSVQ7DQotCQkJZWxzZQ0KKwkJCWVsc2Ugew0KIAkJ
 CQkodm9pZClwcmludGYoIiVzIG1pc3NpbmciLCBwYXRoKTsNCisJCQkJRklY
 RUQ7DQorCQkJfQ0KIAkJfQ0KIAkJaWYgKHAtPnR5cGUgIT0gRl9ESVIgJiYg
 cC0+dHlwZSAhPSBGX0xJTkspIHsNCiAJCQlwdXRjaGFyKCdcbicpOw0KQEAg
 LTE5NywxNCArMTk4LDE3IEBADQogCQkJZWxzZSBpZiAoIShwLT5mbGFncyAm
 IChGX0dJRCB8IEZfR05BTUUpKSkNCiAJCQkJKHZvaWQpcHJpbnRmKCIgKCVz
 IG5vdCBjcmVhdGVkOiBncm91cCBub3Qgc3BlY2lmaWVkKSIsIHR5cGUpOw0K
 IAkJCWVsc2UgaWYgKHAtPnR5cGUgPT0gRl9MSU5LKSB7DQotCQkJCWlmIChz
 eW1saW5rKHAtPnNsaW5rLCBwYXRoKSkNCisJCQkJaWYgKHN5bWxpbmsocC0+
 c2xpbmssIHBhdGgpKSB7DQogCQkJCQkodm9pZClwcmludGYoIiAoc3ltbGlu
 ayBub3QgY3JlYXRlZDogJXMpXG4iLA0KIAkJCQkJICAgIHN0cmVycm9yKGVy
 cm5vKSk7DQotCQkJCWVsc2UNCisJCQkJCUZBSUxFRDsNCisJCQkJfSBlbHNl
 DQogCQkJCQkodm9pZClwcmludGYoIiAoY3JlYXRlZClcbiIpOw0KLQkJCQlp
 ZiAobGNob3duKHBhdGgsIHAtPnN0X3VpZCwgcC0+c3RfZ2lkKSkNCisJCQkJ
 aWYgKGxjaG93bihwYXRoLCBwLT5zdF91aWQsIHAtPnN0X2dpZCkpIHsNCiAJ
 CQkJCSh2b2lkKXByaW50ZigiJXM6IHVzZXIvZ3JvdXAgbm90IG1vZGlmaWVk
 OiAlc1xuIiwNCiAJCQkJCSAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOw0K
 KwkJCQkJRkFJTEVEOw0KKwkJCQl9DQogCQkJCWNvbnRpbnVlOw0KIAkJCX0g
 ZWxzZSBpZiAoIShwLT5mbGFncyAmIEZfTU9ERSkpDQogCQkJICAgICh2b2lk
 KXByaW50ZigiIChkaXJlY3Rvcnkgbm90IGNyZWF0ZWQ6IG1vZGUgbm90IHNw
 ZWNpZmllZCkiKTsNCkBAIC0yMTUsNiArMjE5LDggQEANCiAJCQkJY3JlYXRl
 ID0gMTsNCiAJCQkJKHZvaWQpcHJpbnRmKCIgKGNyZWF0ZWQpIik7DQogCQkJ
 fQ0KKwkJCWlmICghY3JlYXRlKQ0KKwkJCQlGQUlMRUQ7DQogCQl9DQogCQlp
 ZiAoIShwLT5mbGFncyAmIEZfVklTSVQpKQ0KIAkJCSh2b2lkKXB1dGNoYXIo
 J1xuJyk7DQpAQCAtMjMxLDE0ICsyMzcsMTkgQEANCiAJCQkgICAgcGF0aCwg
 c3RyZXJyb3IoZXJybm8pKTsNCiAJCQkodm9pZClwcmludGYoIiVzOiB3YXJu
 aW5nOiBmaWxlIG1vZGUgJXNub3Qgc2V0XG4iLCBwYXRoLA0KIAkJCSAgICAo
 cC0+ZmxhZ3MgJiBGX0ZMQUdTKSA/ICJhbmQgZmlsZSBmbGFncyAiIDogIiIp
 Ow0KKwkJCUZBSUxFRDsNCiAJCQljb250aW51ZTsNCiAJCX0NCi0JCWlmIChj
 aG1vZChwYXRoLCBwLT5zdF9tb2RlKSkNCisJCWlmIChjaG1vZChwYXRoLCBw
 LT5zdF9tb2RlKSkgew0KIAkJCSh2b2lkKXByaW50ZigiJXM6IHBlcm1pc3Np
 b25zIG5vdCBzZXQ6ICVzXG4iLA0KIAkJCSAgICBwYXRoLCBzdHJlcnJvcihl
 cnJubykpOw0KKwkJCUZBSUxFRDsNCisJCX0NCiAJCWlmICgocC0+ZmxhZ3Mg
 JiBGX0ZMQUdTKSAmJiBwLT5zdF9mbGFncyAmJg0KLQkJICAgIGNoZmxhZ3Mo
 cGF0aCwgcC0+c3RfZmxhZ3MpKQ0KKwkJICAgIGNoZmxhZ3MocGF0aCwgcC0+
 c3RfZmxhZ3MpKSB7DQogCQkJKHZvaWQpcHJpbnRmKCIlczogZmlsZSBmbGFn
 cyBub3Qgc2V0OiAlc1xuIiwNCiAJCQkgICAgcGF0aCwgc3RyZXJyb3IoZXJy
 bm8pKTsNCisJCQlGQUlMRUQ7DQorCQl9DQogCX0NCiB9DQo=
 --0-954267614-1016249043=:9110--

From: "Andrew L. Neporada" <andr@dgap.mipt.ru>
To: bug-followup@freebsd.org
Cc:  
Subject: [PATCH] Re: bin/28424 mtree fails to report directory hierarchy
 mismatch
Date: Sat, 16 Mar 2002 23:32:03 +0300 (MSK)

 Sorry for MIME. Plain text version:
 
 Index: compare.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.sbin/mtree/compare.c,v
 retrieving revision 1.20
 diff -u -r1.20 compare.c
 --- compare.c	6 Oct 2000 12:48:55 -0000	1.20
 +++ compare.c	7 Mar 2002 22:56:25 -0000
 @@ -62,6 +62,7 @@
 
  extern int uflag;
  extern int lineno;
 +extern int rval;
 
  static char *ftype __P((u_int));
 
 @@ -115,6 +116,7 @@
  typeerr:		LABEL;
  			(void)printf("\ttype expected %s found %s\n",
  			    ftype(s->type), inotype(p->fts_statp->st_mode));
 +			FAILED;
  			return (label);
  		}
  		break;
 @@ -124,11 +126,13 @@
  		LABEL;
  		(void)printf("%suser expected %lu found %lu",
  		    tab, (u_long)s->st_uid, (u_long)p->fts_statp->st_uid);
 +		FIXED;
  		if (uflag)
 -			if (chown(p->fts_accpath, s->st_uid, -1))
 +			if (chown(p->fts_accpath, s->st_uid, -1)) {
  				(void)printf(" not modified: %s\n",
  				    strerror(errno));
 -			else
 +				FAILED;
 +			} else
  				(void)printf(" modified\n");
  		else
  			(void)printf("\n");
 @@ -138,11 +142,13 @@
  		LABEL;
  		(void)printf("%sgid expected %lu found %lu",
  		    tab, (u_long)s->st_gid, (u_long)p->fts_statp->st_gid);
 +		FIXED;
  		if (uflag)
 -			if (chown(p->fts_accpath, -1, s->st_gid))
 +			if (chown(p->fts_accpath, -1, s->st_gid)) {
  				(void)printf(" not modified: %s\n",
  				    strerror(errno));
 -			else
 +				FAILED;
 +			} else
  				(void)printf(" modified\n");
  		else
  			(void)printf("\n");
 @@ -154,11 +160,13 @@
  		LABEL;
  		(void)printf("%spermissions expected %#o found %#o",
  		    tab, s->st_mode, p->fts_statp->st_mode & MBITS);
 +		FIXED;
  		if (uflag)
 -			if (chmod(p->fts_accpath, s->st_mode))
 +			if (chmod(p->fts_accpath, s->st_mode)) {
  				(void)printf(" not modified: %s\n",
  				    strerror(errno));
 -			else
 +				FAILED;
 +			} else
  				(void)printf(" modified\n");
  		else
  			(void)printf("\n");
 @@ -169,6 +177,7 @@
  		LABEL;
  		(void)printf("%slink_count expected %u found %u\n",
  		    tab, s->st_nlink, p->fts_statp->st_nlink);
 +		FAILED;
  		tab = "\t";
  	}
  	if (s->flags & F_SIZE && s->st_size != p->fts_statp->st_size &&
 @@ -176,6 +185,7 @@
  		LABEL;
  		(void)printf("%ssize expected %qd found %qd\n",
  		    tab, s->st_size, p->fts_statp->st_size);
 +		FAILED;
  		tab = "\t";
  	}
  	/*
 @@ -190,6 +200,7 @@
  		    tab, ctime(&s->st_mtimespec.tv_sec));
  		(void)printf("found %.24s\n",
  		    ctime(&p->fts_statp->st_mtimespec.tv_sec));
 +		FAILED;
  		tab = "\t";
  	}
  	if (s->flags & F_CKSUM) {
 @@ -197,12 +208,14 @@
  			LABEL;
  			(void)printf("%scksum: %s: %s\n",
  			    tab, p->fts_accpath, strerror(errno));
 +			FAILED;
  			tab = "\t";
  		} else if (crc(fd, &val, &len)) {
  			(void)close(fd);
  			LABEL;
  			(void)printf("%scksum: %s: %s\n",
  			    tab, p->fts_accpath, strerror(errno));
 +			FAILED;
  			tab = "\t";
  		} else {
  			(void)close(fd);
 @@ -210,6 +223,7 @@
  				LABEL;
  				(void)printf("%scksum expected %lu found %lu\n",
  				    tab, s->cksum, val);
 +				FAILED;
  			}
  			tab = "\t";
  		}
 @@ -229,12 +243,14 @@
  		fflags = flags_to_string(p->fts_statp->st_flags);
  		(void)printf(" found \"%s\"", fflags);
  		free(fflags);
 +		FIXED;
 
  		if (uflag)
 -			if (chflags(p->fts_accpath, s->st_flags))
 +			if (chflags(p->fts_accpath, s->st_flags)) {
  				(void)printf(" not modified: %s\n",
  				    strerror(errno));
 -			else
 +				FAILED;
 +			} else
  				(void)printf(" modified\n");
  		else
  			(void)printf("\n");
 @@ -249,11 +265,13 @@
  			LABEL;
  			printf("%sMD5: %s: %s\n", tab, p->fts_accpath,
  			       strerror(errno));
 +			FAILED;
  			tab = "\t";
  		} else if (strcmp(new_digest, s->md5digest)) {
  			LABEL;
  			printf("%sMD5 expected %s found %s\n", tab, s->md5digest,
  			       new_digest);
 +			FAILED;
  			tab = "\t";
  		}
  	}
 @@ -267,11 +285,13 @@
  			LABEL;
  			printf("%sSHA-1: %s: %s\n", tab, p->fts_accpath,
  			       strerror(errno));
 +			FAILED;
  			tab = "\t";
  		} else if (strcmp(new_digest, s->sha1digest)) {
  			LABEL;
  			printf("%sSHA-1 expected %s found %s\n",
  			       tab, s->sha1digest, new_digest);
 +			FAILED;
  			tab = "\t";
  		}
  	}
 @@ -285,11 +305,13 @@
  			LABEL;
  			printf("%sRIPEMD160: %s: %s\n", tab,
  			       p->fts_accpath, strerror(errno));
 +			FAILED;
  			tab = "\t";
  		} else if (strcmp(new_digest, s->rmd160digest)) {
  			LABEL;
  			printf("%sRIPEMD160 expected %s found %s\n",
  			       tab, s->rmd160digest, new_digest);
 +			FAILED;
  			tab = "\t";
  		}
  	}
 @@ -300,6 +322,7 @@
  		LABEL;
  		(void)printf("%slink_ref expected %s found %s\n",
  		      tab, cp, s->slink);
 +		FAILED;
  	}
  	return (label);
  }
 Index: extern.h
 ===================================================================
 RCS file: /home/ncvs/src/usr.sbin/mtree/extern.h,v
 retrieving revision 1.5
 diff -u -r1.5 extern.h
 --- extern.h	17 Jun 2000 14:19:33 -0000	1.5
 +++ extern.h	7 Mar 2002 22:56:25 -0000
 @@ -43,7 +43,7 @@
  u_int	 parsekey __P((char *, int *));
  char	*rlink __P((char *));
  NODE	*spec __P((void));
 -int	 verify __P((void));
 +void	 verify __P((void));
 
  int	 check_excludes __P((const char *, const char *));
  void	 init_excludes __P((void));
 Index: mtree.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.sbin/mtree/mtree.c,v
 retrieving revision 1.18
 diff -u -r1.18 mtree.c
 --- mtree.c	25 Sep 2000 16:24:22 -0000	1.18
 +++ mtree.c	9 Mar 2002 21:06:47 -0000
 @@ -59,6 +59,7 @@
 
  int ftsoptions = FTS_PHYSICAL;
  int cflag, dflag, eflag, iflag, nflag, qflag, rflag, sflag, uflag, Uflag;
 +int rval;
  u_int keys;
  char fullpath[MAXPATHLEN];
 
 @@ -71,7 +72,6 @@
  {
  	int ch;
  	char *dir, *p;
 -	int status;
 
  	dir = NULL;
  	keys = KEYDEFAULT;
 @@ -164,10 +164,10 @@
  		cwalk();
  		exit(0);
  	}
 -	status = verify();
 -	if (Uflag & (status == MISMATCHEXIT))
 -		status = 0;
 -	exit(status);
 +	verify();
 +	if (Uflag & (rval == MISMATCHFIXED))
 +		rval = 0;
 +	exit(rval);
  }
 
  static void
 Index: mtree.h
 ===================================================================
 RCS file: /home/ncvs/src/usr.sbin/mtree/mtree.h,v
 retrieving revision 1.5
 diff -u -r1.5 mtree.h
 --- mtree.h	9 Dec 1999 20:38:35 -0000	1.5
 +++ mtree.h	9 Mar 2002 20:47:08 -0000
 @@ -40,7 +40,10 @@
  #define	KEYDEFAULT \
  	(F_GID | F_MODE | F_NLINK | F_SIZE | F_SLINK | F_TIME | F_UID | F_FLAGS)
 
 -#define	MISMATCHEXIT	2
 +#define	MISMATCHFIXED	2
 +#define	FIXFAILED	3
 +#define	FIXED	if (rval != FIXFAILED) rval = MISMATCHFIXED;
 +#define	FAILED	rval = FIXFAILED;
 
  typedef struct _node {
  	struct _node	*parent, *child;	/* up, down */
 Index: verify.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.sbin/mtree/verify.c,v
 retrieving revision 1.15
 diff -u -r1.15 verify.c
 --- verify.c	3 Oct 2000 13:13:47 -0000	1.15
 +++ verify.c	9 Mar 2002 20:39:41 -0000
 @@ -56,31 +56,29 @@
  extern int dflag, eflag, qflag, rflag, sflag, uflag;
  extern char fullpath[MAXPATHLEN];
  extern int lineno;
 +extern int rval;
 
  static NODE *root;
  static char path[MAXPATHLEN];
 
  static void	miss __P((NODE *, char *));
 -static int	vwalk __P((void));
 +static void	vwalk __P((void));
 
 -int
 +void
  verify()
  {
 -	int rval;
 -
  	root = spec();
 -	rval = vwalk();
 +	vwalk();
  	miss(root, path);
 -	return (rval);
  }
 
 -static int
 +void
  vwalk()
  {
  	register FTS *t;
  	register FTSENT *p;
  	register NODE *ep, *level;
 -	int specdepth, rval;
 +	int specdepth;
  	char *argv[2];
 
  	argv[0] = ".";
 @@ -122,9 +120,8 @@
  			    !fnmatch(ep->name, p->fts_name, FNM_PATHNAME)) ||
  			    !strcmp(ep->name, p->fts_name)) {
  				ep->flags |= F_VISIT;
 -				if ((ep->flags & F_NOCHANGE) == 0 &&
 -				    compare(ep->name, ep, p))
 -					rval = MISMATCHEXIT;
 +				if ((ep->flags & F_NOCHANGE) == 0)
 +					(void)compare(ep->name, ep, p);
  				if (ep->flags & F_IGN)
  					(void)fts_set(t, p, FTS_SKIP);
  				else if (ep->child && ep->type == F_DIR &&
 @@ -139,15 +136,18 @@
  			continue;
  extra:
  		if (!eflag) {
 +			FIXED;
  			(void)printf("%s extra", RP(p));
  			if (rflag) {
  				if ((S_ISDIR(p->fts_statp->st_mode)
  				    ? rmdir : unlink)(p->fts_accpath)) {
  					(void)printf(", not removed: %s",
  					    strerror(errno));
 +					FAILED;
  				} else
  					(void)printf(", removed");
 -			}
 +			} else
 +				FAILED;
  			(void)putchar('\n');
  		}
  		(void)fts_set(t, p, FTS_SKIP);
 @@ -155,7 +155,6 @@
  	(void)fts_close(t);
  	if (sflag)
  		warnx("%s checksum: %lu", fullpath, crc_total);
 -	return (rval);
  }
 
  static void
 @@ -178,8 +177,10 @@
 
  			if (qflag && stat(path, &statbuf) == 0)
  				p->flags |= F_VISIT;
 -			else
 +			else {
  				(void)printf("%s missing", path);
 +				FIXED;
 +			}
  		}
  		if (p->type != F_DIR && p->type != F_LINK) {
  			putchar('\n');
 @@ -197,14 +198,17 @@
  			else if (!(p->flags & (F_GID | F_GNAME)))
  				(void)printf(" (%s not created: group not specified)", type);
  			else if (p->type == F_LINK) {
 -				if (symlink(p->slink, path))
 +				if (symlink(p->slink, path)) {
  					(void)printf(" (symlink not created: %s)\n",
  					    strerror(errno));
 -				else
 +					FAILED;
 +				} else
  					(void)printf(" (created)\n");
 -				if (lchown(path, p->st_uid, p->st_gid))
 +				if (lchown(path, p->st_uid, p->st_gid)) {
  					(void)printf("%s: user/group not modified: %s\n",
  					    path, strerror(errno));
 +					FAILED;
 +				}
  				continue;
  			} else if (!(p->flags & F_MODE))
  			    (void)printf(" (directory not created: mode not specified)");
 @@ -215,6 +219,8 @@
  				create = 1;
  				(void)printf(" (created)");
  			}
 +			if (!create)
 +				FAILED;
  		}
  		if (!(p->flags & F_VISIT))
  			(void)putchar('\n');
 @@ -231,14 +237,19 @@
  			    path, strerror(errno));
  			(void)printf("%s: warning: file mode %snot set\n", path,
  			    (p->flags & F_FLAGS) ? "and file flags " : "");
 +			FAILED;
  			continue;
  		}
 -		if (chmod(path, p->st_mode))
 +		if (chmod(path, p->st_mode)) {
  			(void)printf("%s: permissions not set: %s\n",
  			    path, strerror(errno));
 +			FAILED;
 +		}
  		if ((p->flags & F_FLAGS) && p->st_flags &&
 -		    chflags(path, p->st_flags))
 +		    chflags(path, p->st_flags)) {
  			(void)printf("%s: file flags not set: %s\n",
  			    path, strerror(errno));
 +			FAILED;
 +		}
  	}
  }
 
State-Changed-From-To: open->feedback 
State-Changed-By: remko 
State-Changed-When: Wed Mar 7 21:24:24 UTC 2007 
State-Changed-Why:  
Hi Archie, is this still relevant ? 


Responsible-Changed-From-To: freebsd-bugs->remko 
Responsible-Changed-By: remko 
Responsible-Changed-When: Wed Mar 7 21:24:24 UTC 2007 
Responsible-Changed-Why:  
grab the pr 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28424 

From: "Archie Cobbs" <archie@awarix.com>
To: remko@freebsd.org, bug-followup@freebsd.org
Cc:  
Subject: Re: [Fwd: Re: bin/28424: mtree fails to report directory hierarchy mismatch]
Date: Wed, 7 Mar 2007 16:09:51 -0600

 On 3/7/07, Remko Lodder <remko@freebsd.org> wrote:
 > State-Changed-From-To: open->feedback
 > State-Changed-By: remko
 > State-Changed-When: Wed Mar 7 21:24:24 UTC 2007
 > State-Changed-Why:
 > Hi Archie, is this still relevant ?
 
 Unfortunately I don't have a way to test that patch. So if you've
 applied the patch and can no longer reproduce the problem using the
 steps described in the bug then consider it fixed.
 
 Thanks!
 -Archie
 
 __________________________________________________________________________
 Archie Cobbs      *        CTO, Awarix        *      http://www.awarix.com
State-Changed-From-To: feedback->open 
State-Changed-By: linimon 
State-Changed-When: Sat Mar 1 19:45:12 UTC 2008 
State-Changed-Why:  
Feedback received. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28424 
Responsible-Changed-From-To: remko->brooks 
Responsible-Changed-By: remko 
Responsible-Changed-When: Thu Sep 27 07:35:06 UTC 2012 
Responsible-Changed-Why:  
Hi Brooks, 

This is potentially interesting for you since you have a project working 
on mtree. If not, please reassign it to the pool, I sadly cannot resolve 
this. 

Thanks 
remko 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28424 
>Unformatted:
