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