- Don't call do_chmod() unless HAVE_CHMOD is defined.
authorWayne Davison <wayned@samba.org>
Wed, 27 Jul 2005 23:30:53 +0000 (23:30 +0000)
committerWayne Davison <wayned@samba.org>
Wed, 27 Jul 2005 23:30:53 +0000 (23:30 +0000)
- 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

index 2f73ba3..48c7e90 100644 (file)
--- 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;