Module Name:    src
Committed By:   riastradh
Date:           Sat Sep  2 17:41:43 UTC 2023

Modified Files:
        src/tests/usr.sbin/certctl: t_certctl.sh
        src/usr.sbin/certctl: certctl.sh

Log Message:
certctl(8): Fix some bugs with evil pathnames.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.sbin/certctl/t_certctl.sh
cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/certctl/certctl.sh

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/certctl/t_certctl.sh
diff -u src/tests/usr.sbin/certctl/t_certctl.sh:1.6 src/tests/usr.sbin/certctl/t_certctl.sh:1.7
--- src/tests/usr.sbin/certctl/t_certctl.sh:1.6	Sat Sep  2 17:41:33 2023
+++ src/tests/usr.sbin/certctl/t_certctl.sh	Sat Sep  2 17:41:43 2023
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: t_certctl.sh,v 1.6 2023/09/02 17:41:33 riastradh Exp $
+#	$NetBSD: t_certctl.sh,v 1.7 2023/09/02 17:41:43 riastradh Exp $
 #
 # Copyright (c) 2023 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -319,8 +319,6 @@ evilcertsdir_body()
 
 	setupconf certs1
 
-	atf_expect_fail "mistakes were made with evil pathnames"
-
 	# initial (re)hash, nonexistent certs directory
 	atf_check -s exit:0 $CERTCTL rehash
 	atf_check -s exit:0 certctl -C certs.conf \

Index: src/usr.sbin/certctl/certctl.sh
diff -u src/usr.sbin/certctl/certctl.sh:1.3 src/usr.sbin/certctl/certctl.sh:1.4
--- src/usr.sbin/certctl/certctl.sh:1.3	Mon Aug 28 22:25:50 2023
+++ src/usr.sbin/certctl/certctl.sh	Sat Sep  2 17:41:43 2023
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: certctl.sh,v 1.3 2023/08/28 22:25:50 riastradh Exp $
+#	$NetBSD: certctl.sh,v 1.4 2023/09/02 17:41:43 riastradh Exp $
 #
 # Copyright (c) 2023 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -432,7 +432,7 @@ rehash()
 	if [ -f "$certsdir/.certctl" ]; then
 		# Directory exists and is managed by certctl(8).
 		# Safe to delete it and everything in it.
-		run rm -rf "$certsdir"
+		run rm -rf -- "$certsdir"
 	elif [ -h "$certsdir" ]; then
 		# Paranoia: refuse to chase a symlink.  (Caveat: this
 		# is not secure against an adversary who can recreate
@@ -445,15 +445,15 @@ rehash()
 	elif [ ! -d "$certsdir" ]; then
 		error "certificates directory is not a directory"
 		return 1
-	elif ! find "$certsdir" -maxdepth 0 -type d -empty -exit 1; then
+	elif ! find -f "$certsdir" -- -maxdepth 0 -type d -empty -exit 1; then
 		# certsdir exists, is a directory, and is empty.  Safe
 		# to delete it with rmdir and take it over.
-		run rmdir "$certsdir"
+		run rmdir -- "$certsdir"
 	else
 		error "existing certificates; set manual or move them"
 		return 1
 	fi
-	run mkdir "$certsdir"
+	run mkdir -- "$certsdir"
 	if $vflag; then
 		printf '# initialize %s\n' "$certsdir"
 	fi

Reply via email to