int nfs4_op_nverify(struct nfs_argop4 *op, compound_data_t *data, struct nfs_resop4 *resp) { NVERIFY4args * const arg_NVERIFY4 = &op->nfs_argop4_u.opnverify; NVERIFY4res * const res_NVERIFY4 = &resp->nfs_resop4_u.opnverify; fattr4 file_attr4; int rc = 0; resp->resop = NFS4_OP_NVERIFY; res_NVERIFY4->status = NFS4_OK; /* Do basic checks on a filehandle */ res_NVERIFY4->status = nfs4_sanity_check_FH(data, NO_FILE_TYPE, false); if (res_NVERIFY4->status != NFS4_OK) return res_NVERIFY4->status; /* operation is always permitted on pseudofs */ if (nfs4_Is_Fh_Pseudo(&(data->currentFH))) { res_NVERIFY4->status = NFS4_OK; return res_NVERIFY4->status; } /* Get only attributes that are allowed to be read */ if (!nfs4_Fattr_Check_Access(&arg_NVERIFY4->obj_attributes, FATTR4_ATTR_READ)) { res_NVERIFY4->status = NFS4ERR_INVAL; return res_NVERIFY4->status; } /* Ask only for supported attributes */ if (!nfs4_Fattr_Supported(&arg_NVERIFY4->obj_attributes)) { res_NVERIFY4->status = NFS4ERR_ATTRNOTSUPP; return res_NVERIFY4->status; } res_NVERIFY4->status = cache_entry_To_Fattr(data->current_entry, &file_attr4, data, &(data->currentFH), &(arg_NVERIFY4->obj_attributes.attrmask)); if (res_NVERIFY4->status != NFS4_OK) return res_NVERIFY4->status; rc = nfs4_Fattr_cmp(&arg_NVERIFY4->obj_attributes, &file_attr4); if (rc == false) { res_NVERIFY4->status = NFS4_OK; } else { if (rc == -1) res_NVERIFY4->status = NFS4ERR_INVAL; else res_NVERIFY4->status = NFS4ERR_SAME; } nfs4_Fattr_Free(&file_attr4); return res_NVERIFY4->status; } /* nfs4_op_nverify */
int nfs4_op_verify(struct nfs_argop4 *op, compound_data_t *data, struct nfs_resop4 *resp) { VERIFY4args * const arg_VERIFY4 = &op->nfs_argop4_u.opverify; VERIFY4res * const res_VERIFY4 = &resp->nfs_resop4_u.opverify; fattr4 file_attr4; int rc = 0; struct attrlist attrs; resp->resop = NFS4_OP_VERIFY; res_VERIFY4->status = NFS4_OK; /* Do basic checks on a filehandle */ res_VERIFY4->status = nfs4_sanity_check_FH(data, NO_FILE_TYPE, false); if (res_VERIFY4->status != NFS4_OK) return res_VERIFY4->status; /* Get only attributes that are allowed to be read */ if (!nfs4_Fattr_Check_Access (&arg_VERIFY4->obj_attributes, FATTR4_ATTR_READ)) { res_VERIFY4->status = NFS4ERR_INVAL; return res_VERIFY4->status; } /* Ask only for supported attributes */ if (!nfs4_Fattr_Supported(&arg_VERIFY4->obj_attributes)) { res_VERIFY4->status = NFS4ERR_ATTRNOTSUPP; return res_VERIFY4->status; } fsal_prepare_attrs(&attrs, 0); res_VERIFY4->status = bitmap4_to_attrmask_t(&arg_VERIFY4->obj_attributes.attrmask, &attrs.mask); if (res_VERIFY4->status != NFS4_OK) return res_VERIFY4->status; res_VERIFY4->status = file_To_Fattr(data, attrs.mask, &attrs, &file_attr4, &arg_VERIFY4->obj_attributes.attrmask); if (res_VERIFY4->status != NFS4_OK) return res_VERIFY4->status; /* Done with the attrs */ fsal_release_attrs(&attrs); rc = nfs4_Fattr_cmp(&(arg_VERIFY4->obj_attributes), &file_attr4); if (rc == true) res_VERIFY4->status = NFS4_OK; else if (rc == -1) res_VERIFY4->status = NFS4ERR_INVAL; else res_VERIFY4->status = NFS4ERR_NOT_SAME; nfs4_Fattr_Free(&file_attr4); return res_VERIFY4->status; } /* nfs4_op_verify */
int nfs4_op_verify(struct nfs_argop4 *op, compound_data_t * data, struct nfs_resop4 *resp) { fsal_attrib_list_t file_attr; cache_inode_status_t cache_status; fattr4 file_attr4; int rc = 0; char __attribute__ ((__unused__)) funcname[] = "nfs4_op_verify"; resp->resop = NFS4_OP_VERIFY; res_VERIFY4.status = NFS4_OK; /* If there is no FH */ if(nfs4_Is_Fh_Empty(&(data->currentFH))) { res_VERIFY4.status = NFS4ERR_NOFILEHANDLE; return NFS4ERR_NOFILEHANDLE; } /* If the filehandle is invalid */ if(nfs4_Is_Fh_Invalid(&(data->currentFH))) { res_VERIFY4.status = NFS4ERR_BADHANDLE; return NFS4ERR_BADHANDLE; } /* Tests if the Filehandle is expired (for volatile filehandle) */ if(nfs4_Is_Fh_Expired(&(data->currentFH))) { res_VERIFY4.status = NFS4ERR_FHEXPIRED; return NFS4ERR_FHEXPIRED; } /* operation is always permitted on pseudofs */ if(nfs4_Is_Fh_Pseudo(&(data->currentFH))) { res_VERIFY4.status = NFS4_OK; return res_VERIFY4.status; } /* Get only attributes that are allowed to be read */ if(!nfs4_Fattr_Check_Access(&arg_VERIFY4.obj_attributes, FATTR4_ATTR_READ)) { res_VERIFY4.status = NFS4ERR_INVAL; return res_VERIFY4.status; } /* Ask only for supported attributes */ if(!nfs4_Fattr_Supported(&arg_VERIFY4.obj_attributes)) { res_VERIFY4.status = NFS4ERR_ATTRNOTSUPP; return res_VERIFY4.status; } /* Get the cache inode attribute */ if((cache_status = cache_inode_getattr(data->current_entry, &file_attr, data->ht, data->pclient, data->pcontext, &cache_status)) != CACHE_INODE_SUCCESS) { res_VERIFY4.status = NFS4ERR_INVAL; return res_VERIFY4.status; } if(nfs4_FSALattr_To_Fattr(data->pexport, &file_attr, &file_attr4, data, &(data->currentFH), &(arg_VERIFY4.obj_attributes.attrmask)) != 0) { res_VERIFY4.status = NFS4ERR_SERVERFAULT; return res_VERIFY4.status; } if((rc = nfs4_Fattr_cmp(&(arg_VERIFY4.obj_attributes), &file_attr4)) == TRUE) res_VERIFY4.status = NFS4_OK; else { if(rc == -1) res_VERIFY4.status = NFS4ERR_INVAL; else res_VERIFY4.status = NFS4ERR_NOT_SAME; } return res_VERIFY4.status; } /* nfs4_op_verify */
int nfs4_op_verify(struct nfs_argop4 *op, compound_data_t * data, struct nfs_resop4 *resp) { char __attribute__ ((__unused__)) funcname[] = "nfs4_op_verify"; fsal_attrib_list_t file_attr; cache_inode_status_t cache_status; fattr4 file_attr4; int rc = 0; resp->resop = NFS4_OP_VERIFY; res_VERIFY4.status = NFS4_OK; /* Do basic checks on a filehandle */ res_VERIFY4.status = nfs4_sanity_check_FH(data, 0LL); if(res_VERIFY4.status != NFS4_OK) return res_VERIFY4.status; /* operation is always permitted on pseudofs */ if(nfs4_Is_Fh_Pseudo(&(data->currentFH))) { res_VERIFY4.status = NFS4_OK; return res_VERIFY4.status; } /* Get only attributes that are allowed to be read */ if(!nfs4_Fattr_Check_Access(&arg_VERIFY4.obj_attributes, FATTR4_ATTR_READ)) { res_VERIFY4.status = NFS4ERR_INVAL; return res_VERIFY4.status; } /* Ask only for supported attributes */ if(!nfs4_Fattr_Supported(&arg_VERIFY4.obj_attributes)) { res_VERIFY4.status = NFS4ERR_ATTRNOTSUPP; return res_VERIFY4.status; } /* Get the cache inode attribute */ if((cache_status = cache_inode_getattr(data->current_entry, &file_attr, data->pcontext, &cache_status)) != CACHE_INODE_SUCCESS) { res_VERIFY4.status = NFS4ERR_INVAL; return res_VERIFY4.status; } if(nfs4_FSALattr_To_Fattr(data->pexport, &file_attr, &file_attr4, data, &(data->currentFH), &(arg_VERIFY4.obj_attributes.attrmask)) != 0) { res_VERIFY4.status = NFS4ERR_SERVERFAULT; return res_VERIFY4.status; } if((rc = nfs4_Fattr_cmp(&(arg_VERIFY4.obj_attributes), &file_attr4)) == TRUE) res_VERIFY4.status = NFS4_OK; else { if(rc == -1) res_VERIFY4.status = NFS4ERR_INVAL; else res_VERIFY4.status = NFS4ERR_NOT_SAME; } nfs4_Fattr_Free(&file_attr4); return res_VERIFY4.status; } /* nfs4_op_verify */