non-POSIX directory mode bits that are used by AIX.
#ifdef HAVE_CHMOD
if (!S_ISLNK(st->st_mode)) {
- if (st->st_mode != file->mode) {
+ if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
updated = 1;
- if (do_chmod(fname,file->mode) != 0) {
+ if (do_chmod(fname,(file->mode & CHMOD_BITS)) != 0) {
rprintf(FERROR,"failed to set permissions on %s : %s\n",
fname,strerror(errno));
return 0;
#define S_IWUSR 0200
#endif
+#ifndef ACCESSPERMS
+#define ACCESSPERMS 0777
+#endif
+
+#ifndef S_ISVTX
+#define S_ISVTX 0
+#endif
+
+#define CHMOD_BITS (S_ISUID | S_ISGID | S_ISVTX | ACCESSPERMS)
+
#ifndef _S_IFMT
#define _S_IFMT 0170000
#endif
#define IS_DEVICE(mode) (S_ISCHR(mode) || S_ISBLK(mode) || S_ISSOCK(mode) || S_ISFIFO(mode))
-#ifndef ACCESSPERMS
-#define ACCESSPERMS 0777
-#endif
/* Initial mask on permissions given to temporary files. Mask off setuid
bits and group access because of potential race-condition security
holes, and mask other access because mode 707 is bizarre */