chown on a symlink should only chown the symlink itself when -h
is specified, when no options are provided the target should be chown'd.
---
chgrp.c | 2 +-
chown.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/chgrp.c b/chgrp.c
index 5d3a71b..7ee3553 100644
--- a/chgrp.c
+++ b/chgrp.c
@@ -18,7 +18,7 @@ chgrp(const char *path, struct stat *st, void *data, struct
recursor *r)
char *chownf_name;
int (*chownf)(const char *, uid_t, gid_t);
- if (r->follow == 'P' || (r->follow == 'H' && r->depth) || (hflag &&
!(r->depth))) {
+ if ((r->maxdepth == 0 && r->follow == 'P') || (r->follow == 'H' &&
r->depth) || (hflag && !(r->depth))) {
chownf_name = "lchown";
chownf = lchown;
} else {
diff --git a/chown.c b/chown.c
index 748ce97..2d32efb 100644
--- a/chown.c
+++ b/chown.c
@@ -21,7 +21,7 @@ chownpwgr(const char *path, struct stat *st, void *data,
struct recursor *r)
char *chownf_name;
int (*chownf)(const char *, uid_t, gid_t);
- if (r->follow == 'P' || (r->follow == 'H' && r->depth) || (hflag &&
!(r->depth))) {
+ if ((r->maxdepth == 0 && r->follow == 'P') || (r->follow == 'H' &&
r->depth) || (hflag && !(r->depth))) {
chownf_name = "lchown";
chownf = lchown;
} else {
--
2.21.0