2
Unix SMB/CIFS implementation.
4
Copyright (C) Stefan (metze) Metzmacher 2003
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23
/****************************************************************************
24
Get UNIX extensions version info.
25
****************************************************************************/
27
BOOL cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor, uint16 *pminor,
28
uint32 *pcaplow, uint32 *pcaphigh)
33
char *rparam=NULL, *rdata=NULL;
34
unsigned int rparam_count=0, rdata_count=0;
36
setup = TRANSACT2_QFSINFO;
38
SSVAL(param,0,SMB_QUERY_CIFS_UNIX_INFO);
40
if (!cli_send_trans(cli, SMBtrans2,
49
if (!cli_receive_trans(cli, SMBtrans2,
50
&rparam, &rparam_count,
51
&rdata, &rdata_count)) {
55
if (cli_is_error(cli)) {
62
if (rdata_count < 12) {
66
*pmajor = SVAL(rdata,0);
67
*pminor = SVAL(rdata,2);
68
*pcaplow = IVAL(rdata,4);
69
*pcaphigh = IVAL(rdata,8);
71
/* todo: but not yet needed
72
* return the other stuff
82
/****************************************************************************
83
Set UNIX extensions capabilities.
84
****************************************************************************/
86
BOOL cli_set_unix_extensions_capabilities(struct cli_state *cli, uint16 major, uint16 minor,
87
uint32 caplow, uint32 caphigh)
93
char *rparam=NULL, *rdata=NULL;
94
unsigned int rparam_count=0, rdata_count=0;
96
setup = TRANSACT2_SETFSINFO;
99
SSVAL(param,2,SMB_SET_CIFS_UNIX_INFO);
103
SIVAL(data,4,caplow);
104
SIVAL(data,8,caphigh);
106
if (!cli_send_trans(cli, SMBtrans2,
115
if (!cli_receive_trans(cli, SMBtrans2,
116
&rparam, &rparam_count,
117
&rdata, &rdata_count)) {
121
if (cli_is_error(cli)) {
135
BOOL cli_get_fs_attr_info(struct cli_state *cli, uint32 *fs_attr)
140
char *rparam=NULL, *rdata=NULL;
141
unsigned int rparam_count=0, rdata_count=0;
144
smb_panic("cli_get_fs_attr_info() called with NULL Pionter!");
146
setup = TRANSACT2_QFSINFO;
148
SSVAL(param,0,SMB_QUERY_FS_ATTRIBUTE_INFO);
150
if (!cli_send_trans(cli, SMBtrans2,
159
if (!cli_receive_trans(cli, SMBtrans2,
160
&rparam, &rparam_count,
161
&rdata, &rdata_count)) {
165
if (cli_is_error(cli)) {
172
if (rdata_count < 12) {
176
*fs_attr = IVAL(rdata,0);
178
/* todo: but not yet needed
179
* return the other stuff
189
BOOL cli_get_fs_volume_info_old(struct cli_state *cli, fstring volume_name, uint32 *pserial_number)
194
char *rparam=NULL, *rdata=NULL;
195
unsigned int rparam_count=0, rdata_count=0;
198
setup = TRANSACT2_QFSINFO;
200
SSVAL(param,0,SMB_INFO_VOLUME);
202
if (!cli_send_trans(cli, SMBtrans2,
211
if (!cli_receive_trans(cli, SMBtrans2,
212
&rparam, &rparam_count,
213
&rdata, &rdata_count)) {
217
if (cli_is_error(cli)) {
224
if (rdata_count < 5) {
228
if (pserial_number) {
229
*pserial_number = IVAL(rdata,0);
231
nlen = CVAL(rdata,l2_vol_cch);
232
clistr_pull(cli, volume_name, rdata + l2_vol_szVolLabel, sizeof(fstring), nlen, STR_NOALIGN);
234
/* todo: but not yet needed
235
* return the other stuff
245
BOOL cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name, uint32 *pserial_number, time_t *pdate)
250
char *rparam=NULL, *rdata=NULL;
251
unsigned int rparam_count=0, rdata_count=0;
254
setup = TRANSACT2_QFSINFO;
256
SSVAL(param,0,SMB_QUERY_FS_VOLUME_INFO);
258
if (!cli_send_trans(cli, SMBtrans2,
267
if (!cli_receive_trans(cli, SMBtrans2,
268
&rparam, &rparam_count,
269
&rdata, &rdata_count)) {
273
if (cli_is_error(cli)) {
280
if (rdata_count < 19) {
285
*pdate = interpret_long_date(rdata);
287
if (pserial_number) {
288
*pserial_number = IVAL(rdata,8);
290
nlen = IVAL(rdata,12);
291
clistr_pull(cli, volume_name, rdata + 18, sizeof(fstring), nlen, STR_UNICODE);
293
/* todo: but not yet needed
294
* return the other stuff