From 8e46d9c279acd0d14e77b6cc3b05e2fdcc45e8b6 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Mon, 28 May 2001 12:58:10 +0000 Subject: [PATCH] Follow symbolic links named as command line arguments if run without -R. This is required by symlink(7), ``Commands not traversing a file tree'' subsection, third paragraph: : It is important to realize that this rule includes commands which may : optionally traverse file trees, e.g. the command ``chown file'' is : included in this rule, while the command ``chown -R file'' is not. For chown(8) and chgrp(1), this is also is compliance with the latest POSIX 1003.1-200x draft. MFC after: 1 week --- bin/chflags/chflags.c | 5 +++-- bin/chmod/chmod.c | 5 +++-- usr.bin/chflags/chflags.c | 5 +++-- usr.sbin/chown/chown.c | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bin/chflags/chflags.c b/bin/chflags/chflags.c index 40c5b3f432b8..f46baa0efaeb 100644 --- a/bin/chflags/chflags.c +++ b/bin/chflags/chflags.c @@ -99,15 +99,16 @@ main(argc, argv) if (argc < 2) usage(); - fts_options = FTS_PHYSICAL; if (Rflag) { + fts_options = FTS_PHYSICAL; if (Hflag) fts_options |= FTS_COMFOLLOW; if (Lflag) { fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL; } - } + } else + fts_options = FTS_LOGICAL; flags = *argv; if (*flags >= '0' && *flags <= '7') { diff --git a/bin/chmod/chmod.c b/bin/chmod/chmod.c index 112915159645..7a843c755bf7 100644 --- a/bin/chmod/chmod.c +++ b/bin/chmod/chmod.c @@ -134,8 +134,8 @@ done: argv += optind; if (argc < 2) usage(); - fts_options = FTS_PHYSICAL; if (Rflag) { + fts_options = FTS_PHYSICAL; if (hflag) errx(1, "the -R and -h options may not be specified together."); @@ -145,7 +145,8 @@ done: argv += optind; fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL; } - } + } else + fts_options = FTS_LOGICAL; mode = *argv; if (*mode >= '0' && *mode <= '7') { diff --git a/usr.bin/chflags/chflags.c b/usr.bin/chflags/chflags.c index 40c5b3f432b8..f46baa0efaeb 100644 --- a/usr.bin/chflags/chflags.c +++ b/usr.bin/chflags/chflags.c @@ -99,15 +99,16 @@ main(argc, argv) if (argc < 2) usage(); - fts_options = FTS_PHYSICAL; if (Rflag) { + fts_options = FTS_PHYSICAL; if (Hflag) fts_options |= FTS_COMFOLLOW; if (Lflag) { fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL; } - } + } else + fts_options = FTS_LOGICAL; flags = *argv; if (*flags >= '0' && *flags <= '7') { diff --git a/usr.sbin/chown/chown.c b/usr.sbin/chown/chown.c index dacf623bb06a..b86af0e42730 100644 --- a/usr.sbin/chown/chown.c +++ b/usr.sbin/chown/chown.c @@ -122,8 +122,8 @@ main(argc, argv) if (argc < 2) usage(); - fts_options = FTS_PHYSICAL; if (Rflag) { + fts_options = FTS_PHYSICAL; if (hflag && (Lflag || Hflag)) errx(1, "the -R and -h options may not be specified together"); if (Hflag) @@ -132,7 +132,8 @@ main(argc, argv) fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL; } - } + } else + fts_options = FTS_LOGICAL; uid = gid = -1; if (ischown) {