diff options
Diffstat (limited to 'source3/modules')
-rw-r--r-- | source3/modules/vfs_gpfs.c | 32 | ||||
-rw-r--r-- | source3/modules/vfs_gpfs.h | 2 | ||||
-rw-r--r-- | source3/modules/vfs_onefs.c | 12 |
3 files changed, 30 insertions, 16 deletions
diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 3c061ece79..b304d8bdc2 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -341,7 +341,7 @@ static bool gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl) gacl_len = sizeof(struct gpfs_acl) + (smb_get_naces(smbacl)-1)*sizeof(gpfs_ace_v4_t); - gacl = TALLOC_SIZE(mem_ctx, gacl_len); + gacl = (struct gpfs_acl *)TALLOC_SIZE(mem_ctx, gacl_len); if (gacl == NULL) { DEBUG(0, ("talloc failed\n")); errno = ENOMEM; @@ -556,9 +556,9 @@ static SMB_ACL_T gpfsacl_get_posix_acl(const char *path, gpfs_aclType_t type) return result; } -SMB_ACL_T gpfsacl_sys_acl_get_file(vfs_handle_struct *handle, - const char *path_p, - SMB_ACL_TYPE_T type) +static SMB_ACL_T gpfsacl_sys_acl_get_file(vfs_handle_struct *handle, + const char *path_p, + SMB_ACL_TYPE_T type) { gpfs_aclType_t gpfs_type; @@ -577,8 +577,8 @@ SMB_ACL_T gpfsacl_sys_acl_get_file(vfs_handle_struct *handle, return gpfsacl_get_posix_acl(path_p, gpfs_type); } -SMB_ACL_T gpfsacl_sys_acl_get_fd(vfs_handle_struct *handle, - files_struct *fsp) +static SMB_ACL_T gpfsacl_sys_acl_get_fd(vfs_handle_struct *handle, + files_struct *fsp) { return gpfsacl_get_posix_acl(fsp->fsp_name, GPFS_ACL_TYPE_ACCESS); } @@ -600,7 +600,7 @@ static struct gpfs_acl *smb2gpfs_acl(const SMB_ACL_T pacl, len = sizeof(struct gpfs_acl) - sizeof(union gpfs_ace_union) + (pacl->count)*sizeof(gpfs_ace_v1_t); - result = SMB_MALLOC(len); + result = (struct gpfs_acl *)SMB_MALLOC(len); if (result == NULL) { errno = ENOMEM; return result; @@ -670,10 +670,10 @@ static struct gpfs_acl *smb2gpfs_acl(const SMB_ACL_T pacl, return result; } -int gpfsacl_sys_acl_set_file(vfs_handle_struct *handle, - const char *name, - SMB_ACL_TYPE_T type, - SMB_ACL_T theacl) +static int gpfsacl_sys_acl_set_file(vfs_handle_struct *handle, + const char *name, + SMB_ACL_TYPE_T type, + SMB_ACL_T theacl) { struct gpfs_acl *gpfs_acl; int result; @@ -689,15 +689,15 @@ int gpfsacl_sys_acl_set_file(vfs_handle_struct *handle, return result; } -int gpfsacl_sys_acl_set_fd(vfs_handle_struct *handle, - files_struct *fsp, - SMB_ACL_T theacl) +static int gpfsacl_sys_acl_set_fd(vfs_handle_struct *handle, + files_struct *fsp, + SMB_ACL_T theacl) { return gpfsacl_sys_acl_set_file(handle, fsp->fsp_name, SMB_ACL_TYPE_ACCESS, theacl); } -int gpfsacl_sys_acl_delete_def_file(vfs_handle_struct *handle, - const char *path) +static int gpfsacl_sys_acl_delete_def_file(vfs_handle_struct *handle, + const char *path) { errno = ENOTSUP; return -1; diff --git a/source3/modules/vfs_gpfs.h b/source3/modules/vfs_gpfs.h index 3c499b0850..efca5603aa 100644 --- a/source3/modules/vfs_gpfs.h +++ b/source3/modules/vfs_gpfs.h @@ -29,4 +29,6 @@ bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask, int set_gpfs_lease(int fd, int leasetype); int smbd_gpfs_getacl(char *pathname, int flags, void *acl); int smbd_gpfs_putacl(char *pathname, int flags, void *acl); +int smbd_gpfs_get_realfilename_path(char *pathname, char *filenamep, + int *buflen); void init_gpfs(void); diff --git a/source3/modules/vfs_onefs.c b/source3/modules/vfs_onefs.c index ad59c2b32d..e4a0febbec 100644 --- a/source3/modules/vfs_onefs.c +++ b/source3/modules/vfs_onefs.c @@ -153,10 +153,21 @@ static int onefs_get_real_filename(vfs_handle_struct *handle, const char *path, char **found_name) { SMB_STRUCT_STAT sb; + struct connection_struct *conn = handle->conn; struct stat_extra se; int result; + char *unmangled_name = NULL; char *full_name = NULL; + /* First demangle the name if necessary. */ + if (!conn->case_sensitive && mangle_is_mangled(name, conn->params) && + mangle_lookup_name_from_8_3(mem_ctx, name, &unmangled_name, + conn->params)) { + /* Name is now unmangled. */ + name = unmangled_name; + } + + /* Do the case insensitive stat. */ ZERO_STRUCT(se); se.se_version = ESTAT_CURRENT_VERSION; se.se_flags = ESTAT_CASE_INSENSITIVE | ESTAT_SYMLINK_NOFOLLOW; @@ -184,6 +195,7 @@ static int onefs_get_real_filename(vfs_handle_struct *handle, const char *path, done: TALLOC_FREE(full_name); + TALLOC_FREE(unmangled_name); return result; } |