clitrans2.c

来自「samba最新软件」· C语言 代码 · 共 225 行

C
225
字号
/*    Unix SMB/CIFS implementation.   client trans2 calls   Copyright (C) James J Myers 2003	<myersjj@samba.org>      This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 3 of the License, or   (at your option) any later version.      This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.      You should have received a copy of the GNU General Public License   along with this program.  If not, see <http://www.gnu.org/licenses/>.*/#include "includes.h"#include "libcli/raw/libcliraw.h"#include "libcli/libcli.h"/****************************************************************************send a qpathinfo call****************************************************************************/NTSTATUS smbcli_qpathinfo(struct smbcli_tree *tree, const char *fname, 		       time_t *c_time, time_t *a_time, time_t *m_time, 		       size_t *size, uint16_t *mode){	union smb_fileinfo parms;	TALLOC_CTX *mem_ctx;	NTSTATUS status;	mem_ctx = talloc_init("smbcli_qpathinfo");	if (!mem_ctx) return NT_STATUS_NO_MEMORY;	parms.standard.level = RAW_FILEINFO_STANDARD;	parms.standard.in.file.path = fname;	status = smb_raw_pathinfo(tree, mem_ctx, &parms);	talloc_free(mem_ctx);	if (!NT_STATUS_IS_OK(status))		return status;	if (c_time) {		*c_time = parms.standard.out.create_time;	}	if (a_time) {		*a_time = parms.standard.out.access_time;	}	if (m_time) {		*m_time = parms.standard.out.write_time;	}	if (size) {		*size = parms.standard.out.size;	}	if (mode) {		*mode = parms.standard.out.attrib;	}	return status;}/****************************************************************************send a qpathinfo call with the SMB_QUERY_FILE_ALL_INFO info level****************************************************************************/NTSTATUS smbcli_qpathinfo2(struct smbcli_tree *tree, const char *fname, 			time_t *c_time, time_t *a_time, time_t *m_time, 			time_t *w_time, size_t *size, uint16_t *mode,			ino_t *ino){	union smb_fileinfo parms;	TALLOC_CTX *mem_ctx;	NTSTATUS status;	mem_ctx = talloc_init("smbcli_qfilename");	if (!mem_ctx) return NT_STATUS_NO_MEMORY;	parms.all_info.level = RAW_FILEINFO_ALL_INFO;	parms.all_info.in.file.path = fname;	status = smb_raw_pathinfo(tree, mem_ctx, &parms);	talloc_free(mem_ctx);	if (!NT_STATUS_IS_OK(status))		return status;	if (c_time) {		*c_time = nt_time_to_unix(parms.all_info.out.create_time);	}	if (a_time) {		*a_time = nt_time_to_unix(parms.all_info.out.access_time);	}	if (m_time) {		*m_time = nt_time_to_unix(parms.all_info.out.change_time);	}	if (w_time) {		*w_time = nt_time_to_unix(parms.all_info.out.write_time);	}	if (size) {		*size = parms.all_info.out.size;	}	if (mode) {		*mode = parms.all_info.out.attrib;	}	return status;}/****************************************************************************send a qfileinfo QUERY_FILE_NAME_INFO call****************************************************************************/NTSTATUS smbcli_qfilename(struct smbcli_tree *tree, int fnum, const char **name){	union smb_fileinfo parms;	TALLOC_CTX *mem_ctx;	NTSTATUS status;	mem_ctx = talloc_init("smbcli_qfilename");	if (!mem_ctx) return NT_STATUS_NO_MEMORY;	parms.name_info.level = RAW_FILEINFO_NAME_INFO;	parms.name_info.in.file.fnum = fnum;	status = smb_raw_fileinfo(tree, mem_ctx, &parms);	if (!NT_STATUS_IS_OK(status)) {		talloc_free(mem_ctx);		*name = NULL;		return status;	}	*name = strdup(parms.name_info.out.fname.s);	talloc_free(mem_ctx);	return status;}/****************************************************************************send a qfileinfo call****************************************************************************/NTSTATUS smbcli_qfileinfo(struct smbcli_tree *tree, int fnum, 		       uint16_t *mode, size_t *size,		       time_t *c_time, time_t *a_time, time_t *m_time, 		       time_t *w_time, ino_t *ino){	union smb_fileinfo parms;	TALLOC_CTX *mem_ctx;	NTSTATUS status;	mem_ctx = talloc_init("smbcli_qfileinfo");	if (!mem_ctx) 		return NT_STATUS_NO_MEMORY;	parms.all_info.level = RAW_FILEINFO_ALL_INFO;	parms.all_info.in.file.fnum = fnum;	status = smb_raw_fileinfo(tree, mem_ctx, &parms);	talloc_free(mem_ctx);	if (!NT_STATUS_IS_OK(status)) {		return status;	}	if (c_time) {		*c_time = nt_time_to_unix(parms.all_info.out.create_time);	}	if (a_time) {		*a_time = nt_time_to_unix(parms.all_info.out.access_time);	}	if (m_time) {		*m_time = nt_time_to_unix(parms.all_info.out.change_time);	}	if (w_time) {		*w_time = nt_time_to_unix(parms.all_info.out.write_time);	}	if (mode) {		*mode = parms.all_info.out.attrib;	}	if (size) {		*size = (size_t)parms.all_info.out.size;	}	if (ino) {		*ino = 0;	}	return status;}/****************************************************************************send a qpathinfo SMB_QUERY_FILE_ALT_NAME_INFO call****************************************************************************/NTSTATUS smbcli_qpathinfo_alt_name(struct smbcli_tree *tree, const char *fname, 				const char **alt_name){	union smb_fileinfo parms;	TALLOC_CTX *mem_ctx;	NTSTATUS status;	parms.alt_name_info.level = RAW_FILEINFO_ALT_NAME_INFO;	parms.alt_name_info.in.file.path = fname;	mem_ctx = talloc_init("smbcli_qpathinfo_alt_name");	if (!mem_ctx) return NT_STATUS_NO_MEMORY;	status = smb_raw_pathinfo(tree, mem_ctx, &parms);	if (!NT_STATUS_IS_OK(status)) {		talloc_free(mem_ctx);		*alt_name = NULL;		return smbcli_nt_error(tree);	}	if (!parms.alt_name_info.out.fname.s) {		*alt_name = strdup("");	} else {		*alt_name = strdup(parms.alt_name_info.out.fname.s);	}	talloc_free(mem_ctx);	return NT_STATUS_OK;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?