Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jun 2000 16:40:03 -0700 (PDT)
From:      Kelly Yancey <kbyanc@posi.net>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/19514: patch to prevent tail'ing directories
Message-ID:  <200006282340.QAA32963@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/19514; it has been noted by GNATS.

From: Kelly Yancey <kbyanc@posi.net>
To: Bruce Evans <bde@zeta.org.au>
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: bin/19514: patch to prevent tail'ing directories
Date: Wed, 28 Jun 2000 19:32:53 -0400 (EDT)

 On Tue, 27 Jun 2000, Bruce Evans wrote:
 
 > POSIX.2 (in the old draft that I have) specifically requires "tail -c"
 > to accept arbitrary data.  tail(1) without -c is only required to handle
 > text files.  head(1) is only required to handle text files.  cat(1) is
 > required to handle all types of files.
 > 
 
   I just researched this in the SUS and found the same thing. So contrary
 to my previous post, do not close this PR yet. Instead, please apply the
 following patch instead. It keeps us SUS and POSIX compliant in this
 regards, but is still 'user-friendly'.
 
 Index: usr.bin/tail/tail.c
 ===================================================================
 RCS file: /home/cvs/src/usr.bin/tail/tail.c,v
 retrieving revision 1.6
 diff -u -r1.6 tail.c
 --- usr.bin/tail/tail.c 1999/07/04 17:26:03     1.6
 +++ usr.bin/tail/tail.c 2000/06/28 23:23:24
 @@ -69,7 +69,7 @@
 	FILE *fp;
 	long off;
 	enum STYLE style;
 -	int ch, first;
 +	int ch, first, num;
 	char *p;
  
 	/*
 @@ -164,6 +164,7 @@
 		}
 	}
  
 +	num = 0;
 	if (*argv)
 		for (first = 1; fname = *argv++;) {
 			if ((fp = fopen(fname, "r")) == NULL ||
 @@ -171,7 +172,25 @@
 				ierr();
 				continue;
 			}
 -			if (argc > 1) {
 +				if (style == FLINES || style == RLINES) {
 +				/*
 +				 * SUS says that `line' mode is only required
 +				 * to support text files. We support everything
 +				 * that `makes sense'.
 +				 */
 +				if (S_ISDIR(sb.st_mode)) {
 +					warnx("%s is a directory", fname);
 +					continue;
 +				} else if (S_ISLNK(sb.st_mode)) {
 +					warnx("%s is a symlink", fname);
 +					continue;
 +				} else if (S_ISWHT(sb.st_mode)) {
 +					warnx("%s is a whiteout entry", fname);
 +					continue;
 +				}
 +			}
 +			num++;
 +			if (num > 1) {
 				(void)printf("%s==> %s <==\n",
 				    first ? "" : "\n", fname);
 				first = 0;
 
 
   Thanks,
 
   Kelly
 
 --
 Kelly Yancey  -  kbyanc@posi.net  -  Belmont, CA
 System Administrator, eGroups.com                  http://www.egroups.com/
 Maintainer, BSD Driver Database       http://www.posi.net/freebsd/drivers/
 Coordinator, Team FreeBSD        http://www.posi.net/freebsd/Team-FreeBSD/
 
 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




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