Date: Sun, 14 Feb 1999 04:48:23 +0100 (CET) From: andreas@infosys.heitec.net To: FreeBSD-gnats-submit@FreeBSD.ORG Cc: gnats@openbsd.org Subject: bin/10071: chflags does strange things Message-ID: <199902140348.EAA33722@weiden.infosys.heitec.net>
index | next in thread | raw e-mail
>Number: 10071
>Category: bin
>Synopsis: flags given to chflags depend on sequence
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat Feb 13 20:00:00 PST 1999
>Closed-Date:
>Last-Modified:
>Originator: Andreas Klussmann
>Release: FreeBSD 4.0-CURRENT i386 (ctm 5068)
>Organization:
HEITEC Informationssysteme GmbH; Naegelsbachstrasse 26; 91052 Erlangen
>Environment:
FreeBSD, OpenBSD; perhaps NetBSD
kern_securelevel_enable set to NO
>Description:
chflags clears all flags supplied on the command line after a clearing flag like dump(!) or noschg, etc.
The error is in /usr/src/bin/ls/stat_flags.c in a loop scanning the arguments. The variable 'clear', which
is used as flag for the prepended 'no' string, is only initialised before the loop begins intead of beeing
reset on every iteration.
>How-To-Repeat:
# touch /tmp/flags
# chflags schg,uchg /tmp/flags
# ls -lo /tmp/flags
-rwx------ 1 root wheel uchg,schg 0 Feb 14 04:29 /tmp/flags
# chflags dump,schg,uchg /tmp/flags
# ls -lo /tmp/flags
-rwx------ 1 root wheel - 0 Feb 14 04:29 /tmp/flags
# chflags noschg,dump,uchg /tmp/flags
# ls -lo /tmp/flags
-rwx------ 1 root wheel uchg,nodump 0 Feb 14 04:29 /tmp/flags
>Fix:
# cd /usr/src/bin/ls
# cvs diff -u
cvs diff: Diffing .
Index: stat_flags.c
===================================================================
RCS file: /home/cvs/src/bin/ls/stat_flags.c,v
retrieving revision 1.9
diff -u -r1.9 stat_flags.c
--- stat_flags.c 1998/01/09 06:14:59 1.9
+++ stat_flags.c 1999/02/14 03:16:31
@@ -118,13 +118,13 @@
int clear;
char *string, *p;
- clear = 0;
if (setp)
*setp = 0;
if (clrp)
*clrp = 0;
string = *stringp;
while ((p = strsep(&string, "\t ,")) != NULL) {
+ clear = 0;
*stringp = p;
if (*p == '\0')
continue;
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199902140348.EAA33722>
