int gpfswrap_set_share(int fd, unsigned int allow, unsigned int deny) { if (gpfs_set_share_fn == NULL) { errno = ENOSYS; return -1; } return gpfs_set_share_fn(fd, allow, deny); }
bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask, uint32 share_access) { unsigned int allow = GPFS_SHARE_NONE; unsigned int deny = GPFS_DENY_NONE; int result; if (gpfs_set_share_fn == NULL) { return False; } if ((fsp == NULL) || (fsp->fh == NULL) || (fsp->fh->fd < 0)) { /* No real file, don't disturb */ return True; } allow |= (access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA| DELETE_ACCESS)) ? GPFS_SHARE_WRITE : 0; allow |= (access_mask & (FILE_READ_DATA|FILE_EXECUTE)) ? GPFS_SHARE_READ : 0; if (allow == GPFS_SHARE_NONE) { DEBUG(10, ("special case am=no_access:%x\n",access_mask)); } else { deny |= (share_access & FILE_SHARE_WRITE) ? 0 : GPFS_DENY_WRITE; deny |= (share_access & (FILE_SHARE_READ)) ? 0 : GPFS_DENY_READ; } DEBUG(10, ("am=%x, allow=%d, sa=%x, deny=%d\n", access_mask, allow, share_access, deny)); result = gpfs_set_share_fn(fsp->fh->fd, allow, deny); if (result != 0) { if (errno == ENOSYS) { DEBUG(5, ("VFS module vfs_gpfs loaded, but no gpfs " "support has been compiled into Samba. Allowing access\n")); return True; } else { DEBUG(10, ("gpfs_set_share failed: %s\n", strerror(errno))); } } return (result == 0); }