smbcquota patch from metze
[sfrench/samba-autobuild/.git] / source / libsmb / clifsinfo.c
1 /* 
2    Unix SMB/CIFS implementation.
3    FS info functions
4    Copyright (C) Stefan (metze) Metzmacher      2003
5    
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.
10    
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.
15    
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.
19 */
20
21 #include "includes.h"
22
23
24 BOOL cli_get_fs_attr_info(struct cli_state *cli, uint32 *fs_attr)
25 {
26         BOOL ret = False;
27         uint16 setup;
28         char param[2];
29         char *rparam=NULL, *rdata=NULL;
30         unsigned int rparam_count=0, rdata_count=0;
31
32         if (!cli||!fs_attr)
33                 smb_panic("cli_get_fs_attr_info() called with NULL Pionter!");
34
35         setup = TRANSACT2_QFSINFO;
36         
37         SSVAL(param,0,SMB_QUERY_FS_ATTRIBUTE_INFO);
38
39         if (!cli_send_trans(cli, SMBtrans2, 
40                     NULL, 
41                     0, 0,
42                     &setup, 1, 0,
43                     param, 2, 0,
44                     NULL, 0, 560)) {
45                 goto cleanup;
46         }
47         
48         if (!cli_receive_trans(cli, SMBtrans2,
49                               &rparam, &rparam_count,
50                               &rdata, &rdata_count)) {
51                 goto cleanup;
52         }
53
54         if (cli_is_error(cli)) {
55                 ret = False;
56                 goto cleanup;
57         } else {
58                 ret = True;
59         }
60
61         if (rdata_count < 12) {
62                 goto cleanup;
63         }
64
65         *fs_attr = IVAL(rdata,0);
66
67         /* todo: but not yet needed 
68          *       return the other stuff
69          */
70
71 cleanup:
72         SAFE_FREE(rparam);
73         SAFE_FREE(rdata);
74
75         return ret;     
76 }