{
struct nfs4acl_config *config = NULL;
mode_t expected_mode;
- int saved_errno = 0;
int ret;
SMB_VFS_HANDLE_GET_DATA(handle, config,
return true;
}
- become_root();
ret = SMB_VFS_NEXT_REMOVEXATTR(handle,
smb_fname,
config->xattr_name);
- if (ret != 0) {
- saved_errno = errno;
- }
- unbecome_root();
- if (saved_errno != 0) {
- errno = saved_errno;
- }
if (ret != 0 && errno != ENOATTR) {
DBG_ERR("Removing NFS4 xattr failed: %s\n", strerror(errno));
return false;
}
do {
- int saved_errno = 0;
allocsize *= 4;
ok = data_blob_realloc(mem_ctx, blob, allocsize);
return NT_STATUS_NO_MEMORY;
}
- become_root();
if (fsp != NULL && fsp->fh->fd != -1) {
length = SMB_VFS_NEXT_FGETXATTR(handle,
fsp,
blob->data,
blob->length);
}
- if (length == -1) {
- saved_errno = errno;
- }
- unbecome_root();
- if (saved_errno != 0) {
- errno = saved_errno;
- }
} while (length == -1 && errno == ERANGE && allocsize <= 65536);
if (length == -1) {
return false;
}
- become_root();
if (fsp->fh->fd != -1) {
ret = SMB_VFS_NEXT_FSETXATTR(handle, fsp, config->xattr_name,
blob.data, blob.length, 0);
if (ret != 0) {
saved_errno = errno;
}
- unbecome_root();
data_blob_free(&blob);
if (saved_errno != 0) {
errno = saved_errno;
expected_mode = 0;
}
if ((existing_mode & expected_mode) != expected_mode) {
- int saved_errno = 0;
restored_mode = existing_mode | expected_mode;
- become_root();
if (fsp->fh->fd != -1) {
ret = SMB_VFS_NEXT_FCHMOD(handle,
fsp,
fsp->fsp_name,
restored_mode);
}
- if (ret != 0) {
- saved_errno = errno;
- }
- unbecome_root();
- if (saved_errno != 0) {
- errno = saved_errno;
- }
if (ret != 0) {
DBG_ERR("Resetting POSIX mode on [%s] from [0%o]: %s\n",
fsp_str_dbg(fsp), existing_mode,
fsp_str_dbg(fsp),
dom_sid_str_buf(psd->owner_sid, &buf));
- become_root();
status = smb_set_nt_acl_nfs4(handle,
fsp,
&config->nfs4_params,
security_info_sent,
psd,
nfs4acl_smb4acl_set_fn);
- unbecome_root();
return status;
}