a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * This file and its contents are supplied under the terms of the
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * You may only use this file in accordance with the terms of version
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * 1.0 of the CDDL.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * A full copy of the text of the CDDL should have accompanied this
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * source. A copy of the CDDL is also available via the Internet at
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Dispatch function for SMB2_QUERY_INFO
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * [MS-FSCC 2.4] If a file system does not support ...
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * an Information Classs, NT_STATUS_INVALID_PARAMETER...
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_all(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_basic(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_standard(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_internal(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_ea_size(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_access(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_name(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_position(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_full_ea(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_mode(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_alignment(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_all(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_altname(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_stream(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_pipe(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_pipe_lcl(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_pipe_rem(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_compr(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_opens(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb2_qif_tags(smb_request_t *, smb_queryinfo_t *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qinfo_file(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Which attributes do we need from the FS?
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross status = smb2_ofile_getattr(sr, of, &qi->qi_attr);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileAllInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * This returns a concatenation of:
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileBasicInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileStandardInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileInternalInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileEaInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FilePositionInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileModeInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileAlignmentInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileNameInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_all(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileBasicInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * case SMB_QUERY_FILE_BASIC_INFO:
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * case SMB_FILE_BASIC_INFORMATION:
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_basic(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross ASSERT((sa->sa_mask & SMB_AT_BASIC) == SMB_AT_BASIC);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileStandardInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_QUERY_FILE_STANDARD_INFO
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_FILE_STANDARD_INFORMATION
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_standard(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross ASSERT((sa->sa_mask & SMB_AT_STANDARD) == SMB_AT_STANDARD);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileInternalInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_FILE_INTERNAL_INFORMATION
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_internal(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross ASSERT((sa->sa_mask & SMB_AT_NODEID) == SMB_AT_NODEID);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileEaInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_QUERY_FILE_EA_INFO
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_FILE_EA_INFORMATION
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_ea_size(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileFullEaInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * We could put EAs in a named stream...
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross/* ARGSUSED */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_full_ea(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileAccessInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_access(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileNameInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_QUERY_FILE_NAME_INFO
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_FILE_NAME_INFORMATION
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_name(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross 0, /* FileIndex (l) */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FilePositionInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_position(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileModeInformation [MS-FSA 2.4.24]
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * XXX: These mode flags are supposed to be on the open handle,
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * XXX: or I think so. Not yet... (just put zero for now)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_mode(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileAlignmentInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_alignment(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileAlternateNameInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_QUERY_FILE_ALT_NAME_INFO
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * SMB_FILE_ALT_NAME_INFORMATION
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_altname(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross if ((of->f_tree->t_flags & SMB_TREE_SHORTNAMES) == 0)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* fill in qi->qi_shortname */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileStreamInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_stream(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross ASSERT((attr->sa_mask & SMB_AT_STANDARD) == SMB_AT_STANDARD);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross status = smb_query_stream_info(sr, &sr->raw_data, qi);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FilePipeInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_pipe(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross nonblock = 0; /* XXX todo: Get this from the pipe handle. */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FilePipeLocalInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross/* ARGSUSED */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_pipe_lcl(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross return (NT_STATUS_INVALID_PARAMETER); /* XXX todo */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FilePipeRemoteInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross/* ARGSUSED */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_pipe_rem(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross return (NT_STATUS_INVALID_PARAMETER); /* XXX todo */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileCompressionInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * XXX: For now, just say "not compressed".
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_compr(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross uint16_t CompressionFormat = 0; /* COMPRESSION_FORMAT_NONE */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileNetworkOpenInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb2_qif_opens(smb_request_t *sr, smb_queryinfo_t *qi)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * FileAttributeTagInformation
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * If dattr includes FILE_ATTRIBUTE_REPARSE_POINT, the
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * second dword should be the reparse tag. Otherwise
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * the tag value should be set to zero.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * We don't support reparse points, so we set the tag