Module Name:    src
Committed By:   christos
Date:           Sat Dec  2 13:24:00 UTC 2023

Modified Files:
        src/tests/usr.sbin/mtree: t_mtree.sh
        src/usr.sbin/mtree: specspec.c

Log Message:
PR/57735: Jose Louis Duran: mtree -f file1 -f file2 does not consider type
changes.
(FreeBSD https://github.com/freebsd/freebsd-src/commit/\
    4f4b548b1d21ae16955b09f9b717524167a7d97e)


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/tests/usr.sbin/mtree/t_mtree.sh
cvs rdiff -u -r1.4 -r1.5 src/usr.sbin/mtree/specspec.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.sbin/mtree/t_mtree.sh
diff -u src/tests/usr.sbin/mtree/t_mtree.sh:1.8 src/tests/usr.sbin/mtree/t_mtree.sh:1.9
--- src/tests/usr.sbin/mtree/t_mtree.sh:1.8	Thu Sep  7 00:05:21 2017
+++ src/tests/usr.sbin/mtree/t_mtree.sh	Sat Dec  2 08:23:59 2023
@@ -1,4 +1,4 @@
-# $NetBSD: t_mtree.sh,v 1.8 2017/09/07 04:05:21 nakayama Exp $
+# $NetBSD: t_mtree.sh,v 1.9 2023/12/02 13:23:59 christos Exp $
 #
 # Copyright (c) 2009, 2012 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -411,6 +411,77 @@ netbsd6_nonemptydir_body() 
 	FLAVOR=netbsd6 nonemptydir_body
 }
 
+atf_test_case mtree_specspec_type
+mtree_specspec_type_head()
+{
+	atf_set "descr" "Test that spec comparisons detect type changes"
+}
+
+mtree_specspec_type_body()
+{
+	mkdir testdir
+
+	touch testdir/bar
+	mtree -c -p testdir > mtree1.spec
+
+	if [ ! -f mtree1.spec ]; then
+		atf_fail "mtree failed"
+	fi
+
+	rm -f testdir/bar
+	ln -s foo testdir/bar
+	# uid change is expected to be ignored as done in -C
+	chown -h operator testdir/bar
+	mtree -c -p testdir > mtree2.spec
+
+	if [ ! -f mtree2.spec ]; then
+		atf_fail "mtree failed"
+	fi
+
+	atf_check -s ignore -o save:output \
+	    -x "mtree -f mtree1.spec -f mtree2.spec"
+
+	if ! cut -f 3 output | egrep -q "bar file" || \
+	    ! cut -f 3 output | egrep -q "bar link"; then
+		atf_fail "mtree did not detect type change"
+	fi
+}
+
+atf_test_case mtree_specspec_type
+mtree_specspec_type_head()
+{
+	atf_set "descr" "Test that spec comparisons detect type changes"
+}
+
+mtree_specspec_type_body()
+{
+	mkdir testdir
+
+	touch testdir/bar
+	mtree -c -p testdir > mtree1.spec
+
+	if [ ! -f mtree1.spec ]; then
+		atf_fail "mtree failed"
+	fi
+
+	rm -f testdir/bar
+	ln -s foo testdir/bar
+	# uid change is expected to be ignored as done in -C
+	chown -h operator testdir/bar
+	mtree -c -p testdir > mtree2.spec
+
+	if [ ! -f mtree2.spec ]; then
+		atf_fail "mtree failed"
+	fi
+
+	atf_check -s ignore -o save:output \
+	    -x "mtree -f mtree1.spec -f mtree2.spec"
+
+	if ! cut -f 3 output | egrep -q "bar file" || \
+	    ! cut -f 3 output | egrep -q "bar link"; then
+		atf_fail "mtree did not detect type change"
+	fi
+}
 
 atf_test_case mtree_onlyfile
 atf_test_case netbsd6_onlyfile
@@ -459,6 +530,7 @@ atf_init_test_cases()
 	atf_add_test_case mtree_ignore
 	atf_add_test_case mtree_merge
 	atf_add_test_case mtree_nonemptydir
+	atf_add_test_case mtree_specspec_type
 	atf_add_test_case mtree_onlyfile
 
 	atf_add_test_case netbsd6_create

Index: src/usr.sbin/mtree/specspec.c
diff -u src/usr.sbin/mtree/specspec.c:1.4 src/usr.sbin/mtree/specspec.c:1.5
--- src/usr.sbin/mtree/specspec.c:1.4	Thu Dec 14 13:34:41 2017
+++ src/usr.sbin/mtree/specspec.c	Sat Dec  2 08:24:00 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: specspec.c,v 1.4 2017/12/14 18:34:41 christos Exp $	*/
+/*	$NetBSD: specspec.c,v 1.5 2023/12/02 13:24:00 christos Exp $	*/
 
 /*-
  * Copyright (c) 2003 Poul-Henning Kamp
@@ -31,7 +31,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: specspec.c,v 1.4 2017/12/14 18:34:41 christos Exp $");
+__RCSID("$NetBSD: specspec.c,v 1.5 2023/12/02 13:24:00 christos Exp $");
 
 #include <err.h>
 #include <grp.h>
@@ -145,7 +145,7 @@ compare_nodes(NODE *n1, NODE *n2, char c
 		return (1);
 	}
 	if (n1->type != n2->type) {
-		differs = 0;
+		differs = F_TYPE;
 		mismatch(n1, n2, differs, path);
 		return (1);
 	}

Reply via email to