From d11f5c6e2b0c813136519e39820055cd73cfe463 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Wed, 27 Jul 2005 23:30:53 +0000 Subject: [PATCH] - Don't call do_chmod() unless HAVE_CHMOD is defined. - Made do_chmod() handle symlinks or return 1 if not possible. - We now mask off the mode bits in do_chmod() sing CHMOD_BITS. --- syscall.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/syscall.c b/syscall.c index 2f73ba3b..48c7e901 100644 --- a/syscall.c +++ b/syscall.c @@ -104,7 +104,11 @@ int do_mknod(char *pathname, mode_t mode, dev_t dev) || (bind(sock, (struct sockaddr*)&saddr, sizeof saddr)) < 0) return -1; close(sock); +#ifdef HAVE_CHMOD return do_chmod(pathname, mode); +#else + return 0; +#endif } #endif #ifdef HAVE_MKNOD @@ -137,7 +141,14 @@ int do_chmod(const char *path, mode_t mode) int code; if (dry_run) return 0; RETURN_ERROR_IF_RO_OR_LO; - code = chmod(path, mode); + if (S_ISLNK(mode)) { +#ifdef HAVE_LCHMOD + code = lchmod(path, mode & CHMOD_BITS); +#else + code = 1; +#endif + } else + code = chmod(path, mode & CHMOD_BITS); if (code != 0 && preserve_perms) return code; return 0; -- 2.34.1