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);
}