Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 May 2010 22:00:29 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r207483 - head/usr.bin/pathchk
Message-ID:  <201005012200.o41M0TUI059601@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sat May  1 22:00:28 2010
New Revision: 207483
URL: http://svn.freebsd.org/changeset/base/207483

Log:
  pathchk: Add the new POSIX -P option.
  
  This option checks for empty pathnames and components starting with '-'.
  Our -p option also checks for the latter, which remains the case.
  
  MFC after:	1 week

Modified:
  head/usr.bin/pathchk/pathchk.1
  head/usr.bin/pathchk/pathchk.c

Modified: head/usr.bin/pathchk/pathchk.1
==============================================================================
--- head/usr.bin/pathchk/pathchk.1	Sat May  1 21:59:06 2010	(r207482)
+++ head/usr.bin/pathchk/pathchk.1	Sat May  1 22:00:28 2010	(r207483)
@@ -27,7 +27,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 21, 2002
+.Dd May 1, 2010
 .Dt PATHCHK 1
 .Os
 .Sh NAME
@@ -35,7 +35,7 @@
 .Nd check pathnames
 .Sh SYNOPSIS
 .Nm
-.Op Fl p
+.Op Fl pP
 .Ar pathname ...
 .Sh DESCRIPTION
 The
@@ -95,6 +95,16 @@ No component may start with the hyphen
 .Pq Ql \&-
 character.
 .El
+.It Fl P
+In addition to the default or
+.Fl p
+checks, write a diagnostic for each argument that:
+.Bl -bullet
+.It
+Is empty.
+.It
+Contains a component that starts with a hyphen.
+.El
 .El
 .Sh EXIT STATUS
 .Ex -std

Modified: head/usr.bin/pathchk/pathchk.c
==============================================================================
--- head/usr.bin/pathchk/pathchk.c	Sat May  1 21:59:06 2010	(r207482)
+++ head/usr.bin/pathchk/pathchk.c	Sat May  1 22:00:28 2010	(r207483)
@@ -51,6 +51,7 @@ static int	 portable(const char *);
 static void	 usage(void);
 
 static int	 pflag;			/* Perform portability checks */
+static int	 Pflag;			/* Check for empty paths, leading '-' */
 
 int
 main(int argc, char *argv[])
@@ -58,11 +59,14 @@ main(int argc, char *argv[])
 	int ch, rval;
 	const char *arg;
 
-	while ((ch = getopt(argc, argv, "p")) > 0) {
+	while ((ch = getopt(argc, argv, "pP")) > 0) {
 		switch (ch) {
 		case 'p':
 			pflag = 1;
 			break;
+		case 'P':
+			Pflag = 1;
+			break;
 		default:
 			usage();
 			/*NOTREACHED*/
@@ -102,6 +106,15 @@ check(const char *path)
 
 	p = pathd;
 
+	if (Pflag && *p == '\0') {
+		warnx("%s: empty pathname", path);
+		goto bad;
+	}
+	if ((Pflag || pflag) && (*p == '-' || strstr(p, "/-") != NULL)) {
+		warnx("%s: contains a component starting with '-'", path);
+		goto bad;
+	}
+
 	if (!pflag) {
 		errno = 0;
 		namemax = pathconf(*p == '/' ? "/" : ".", _PC_NAME_MAX);
@@ -182,9 +195,6 @@ portable(const char *path)
 	    "0123456789._-";
 	long s;
 
-	if (*path == '-')
-		return (*path);
-
 	s = strspn(path, charset);
 	if (path[s] != '\0')
 		return (path[s]);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005012200.o41M0TUI059601>