summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortb <tb@openbsd.org>2017-02-17 09:59:31 +0000
committertb <tb@openbsd.org>2017-02-17 09:59:31 +0000
commit62a9160f38ae967fdec1a664f42debeed6dacffd (patch)
tree713de41206bac5401497d26c7d7f338aec058d6b
parentFix inverted PMAP_CANFAIL logic. (diff)
downloadwireguard-openbsd-62a9160f38ae967fdec1a664f42debeed6dacffd.tar.xz
wireguard-openbsd-62a9160f38ae967fdec1a664f42debeed6dacffd.zip
Add tests for chmod's interaction with symlinks: missing tests for -h and
add tests for the regression introduced in chmod.c r1.33 that transferred the permissions from the link to the target file in some circumstances. There are no tests for chflags since I couldn't come up with testcases without undesirable side-effects like breaking make clean. Four of these tests fail and will be fixed in the upcoming r1.40 to chmod. Prompted by a bug report from Christopher Wellons
-rw-r--r--regress/bin/chmod/Makefile111
1 files changed, 110 insertions, 1 deletions
diff --git a/regress/bin/chmod/Makefile b/regress/bin/chmod/Makefile
index 3767b1eaaa9..2857b1b7043 100644
--- a/regress/bin/chmod/Makefile
+++ b/regress/bin/chmod/Makefile
@@ -1,8 +1,16 @@
-# $OpenBSD: Makefile,v 1.1 2015/06/15 09:23:12 florian Exp $
+# $OpenBSD: Makefile,v 1.2 2017/02/17 09:59:31 tb Exp $
REGRESS_TARGETS= chmod_abs_0000 chmod_abs_0644
REGRESS_TARGETS+= chmod_sym_0644 chmod_sym_0000
REGRESS_TARGETS+= chmod_R_0755 chmod_RP_0755 chmod_RH_0755 chmod_RL_0755
+REGRESS_TARGETS+= chmod_h_abs_0000 chmod_h_abs_0644
+REGRESS_TARGETS+= chmod_h_sym_0000 chmod_h_sym_0644
+REGRESS_TARGETS+= chmod_h_go_minus_r chmod_h_go_minus_rx
+REGRESS_TARGETS+= chmod_h_go_plus_r chmod_h_go_plus_rx
+REGRESS_TARGETS+= chmod_via_link_abs_0000 chmod_via_link_abs_0644
+REGRESS_TARGETS+= chmod_via_link_sym_0000 chmod_via_link_sym_0644
+REGRESS_TARGETS+= chmod_via_link_go_minus_r chmod_via_link_go_minus_rx
+REGRESS_TARGETS+= chmod_via_link_go_plus_r chmod_via_link_go_plus_rx
REGRESS_TARGETS+= chmod_error
REGRESS_TARGETS+= chgrp_id chgrp_name
@@ -25,6 +33,11 @@ prepfile: clean
@/bin/chmod 000 regress/file
@[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+chmod_prepsymlink: prepfile
+ @/bin/ln -s ${.OBJDIR}/regress/file ${.OBJDIR}/regress/link
+ @/bin/chmod -h 755 regress/link
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
prepdir: clean
@/bin/mkdir -p regress/dir
@/usr/bin/touch regress/dir/file1
@@ -123,6 +136,102 @@ chmod_RL_0755: prepdir
@[ `/usr/bin/stat -f '%p' regress/dir` == '40755' ]
@[ `/usr/bin/stat -f '%p' regress/link_target_file` == '100755' ]
+chmod_h_abs_0000: chmod_prepsymlink
+ @echo chmod -h 0000
+ @/bin/chmod -h 0000 regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120000' ]
+
+chmod_h_abs_0644: chmod_prepsymlink
+ @echo chmod -h 0644
+ @/bin/chmod -h 0644 regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120644' ]
+
+chmod_h_sym_0000: chmod_prepsymlink
+ @echo chmod -h sym 0000
+ @/bin/chmod -h a-rwx regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120000' ]
+
+chmod_h_sym_0644: chmod_prepsymlink
+ @echo chmod -h sym 0644
+ @/bin/chmod -h u=rw,go=r regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120644' ]
+
+chmod_h_go_minus_r: chmod_prepsymlink
+ @echo chmod -h go-r
+ @/bin/chmod -h go-r regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120711' ]
+
+chmod_h_go_minus_rx: chmod_prepsymlink
+ @echo chmod -h go-rx
+ @/bin/chmod -h go-rx regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120700' ]
+
+chmod_h_go_plus_r: chmod_prepsymlink
+ @echo chmod -h go+r
+ @/bin/chmod -h go+r regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_h_go_plus_rx: chmod_prepsymlink
+ @echo chmod -h go+rx
+ @/bin/chmod -h go+rx regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_abs_0000: chmod_prepsymlink
+ @echo chmod via symlink 0000
+ @/bin/chmod 0000 regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_abs_0644: chmod_prepsymlink
+ @echo chmod via symlink 0644
+ @/bin/chmod 0644 regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100644' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_sym_0000: chmod_prepsymlink
+ @echo chmod via symlink sym 0000
+ @/bin/chmod a-rwx regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_sym_0644: chmod_prepsymlink
+ @echo chmod via symlink sym 0644
+ @/bin/chmod u=rw,go=r regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100644' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_go_minus_r: chmod_prepsymlink
+ @echo chmod via symlink go-r
+ @/bin/chmod go-r regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_go_minus_rx: chmod_prepsymlink
+ @echo chmod via symlink go-rx
+ @/bin/chmod go-rx regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100000' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_go_plus_r: chmod_prepsymlink
+ @echo chmod via symlink go+r
+ @/bin/chmod go+r regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100044' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
+chmod_via_link_go_plus_rx: chmod_prepsymlink
+ @echo chmod via symlink go+rx
+ @/bin/chmod go+rx regress/link
+ @[ `/usr/bin/stat -f '%p' regress/file` == '100055' ]
+ @[ `/usr/bin/stat -f '%p' regress/link` == '120755' ]
+
chmod_error:
@echo chmod error
@/bin/chmod foo bar 2> ${.OBJDIR}/chmod.error || /usr/bin/true