s3: Convert cli_get_posix_fs_info() to cli_trans()
authorVolker Lendecke <vl@samba.org>
Thu, 11 Nov 2010 15:29:33 +0000 (16:29 +0100)
committerVolker Lendecke <vlendec@samba.org>
Sun, 14 Nov 2010 10:24:02 +0000 (10:24 +0000)
Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Sun Nov 14 10:24:02 UTC 2010 on sn-devel-104

source3/include/proto.h
source3/libsmb/clifsinfo.c
source3/libsmb/libsmb_stat.c

index e31d30d96c04661f1a40d3514424bc62548cc743..d199d1e3dfc30d93fa87365d9bf1d8cfd6c0ada0 100644 (file)
@@ -2168,15 +2168,15 @@ NTSTATUS cli_get_fs_full_size_info(struct cli_state *cli,
                                   uint64_t *actual_allocation_units,
                                   uint64_t *sectors_per_allocation_unit,
                                   uint64_t *bytes_per_sector);
-bool cli_get_posix_fs_info(struct cli_state *cli,
-                           uint32 *optimal_transfer_size,
-                           uint32 *block_size,
-                           uint64_t *total_blocks,
-                           uint64_t *blocks_available,
-                           uint64_t *user_blocks_available,
-                           uint64_t *total_file_nodes,
-                           uint64_t *free_file_nodes,
-                           uint64_t *fs_identifier);
+NTSTATUS cli_get_posix_fs_info(struct cli_state *cli,
+                              uint32 *optimal_transfer_size,
+                              uint32 *block_size,
+                              uint64_t *total_blocks,
+                              uint64_t *blocks_available,
+                              uint64_t *user_blocks_available,
+                              uint64_t *total_file_nodes,
+                              uint64_t *free_file_nodes,
+                              uint64_t *fs_identifier);
 NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli, 
                                const char *user,
                                const char *pass,
index 8a158782670df216576ad0e6d4eb1e2638204d45..69e6546b5d7f60aece9a849d59f0e4ff56b7b5fc 100644 (file)
@@ -455,50 +455,34 @@ fail:
        return status;
 }
 
-bool cli_get_posix_fs_info(struct cli_state *cli,
-                           uint32 *optimal_transfer_size,
-                           uint32 *block_size,
-                           uint64_t *total_blocks,
-                           uint64_t *blocks_available,
-                           uint64_t *user_blocks_available,
-                           uint64_t *total_file_nodes,
-                           uint64_t *free_file_nodes,
-                           uint64_t *fs_identifier)
+NTSTATUS cli_get_posix_fs_info(struct cli_state *cli,
+                              uint32 *optimal_transfer_size,
+                              uint32 *block_size,
+                              uint64_t *total_blocks,
+                              uint64_t *blocks_available,
+                              uint64_t *user_blocks_available,
+                              uint64_t *total_file_nodes,
+                              uint64_t *free_file_nodes,
+                              uint64_t *fs_identifier)
 {
-       bool ret = False;
-       uint16 setup;
-       char param[2];
-       char *rparam=NULL, *rdata=NULL;
-       unsigned int rparam_count=0, rdata_count=0;
-
-       setup = TRANSACT2_QFSINFO;
+       uint16 setup[1];
+       uint8_t param[2];
+       uint8_t *rdata = NULL;
+       NTSTATUS status;
 
+       SSVAL(setup, 0, TRANSACT2_QFSINFO);
        SSVAL(param,0,SMB_QUERY_POSIX_FS_INFO);
 
-       if (!cli_send_trans(cli, SMBtrans2,
-                   NULL,
-                   0, 0,
-                   &setup, 1, 0,
-                   param, 2, 0,
-                   NULL, 0, 560)) {
-               goto cleanup;
-       }
-
-       if (!cli_receive_trans(cli, SMBtrans2,
-                              &rparam, &rparam_count,
-                              &rdata, &rdata_count)) {
-               goto cleanup;
-       }
-
-       if (cli_is_error(cli)) {
-               ret = False;
-               goto cleanup;
-       } else {
-               ret = True;
-       }
-
-       if (rdata_count != 56) {
-               goto cleanup;
+       status = cli_trans(talloc_tos(), cli, SMBtrans2, NULL, 0, 0, 0,
+                          setup, 1, 0,
+                          param, 2, 0,
+                          NULL, 0, 560,
+                          NULL,
+                          NULL, 0, NULL, /* rsetup */
+                          NULL, 0, NULL, /* rparam */
+                          &rdata, 56, NULL);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
        }
 
        if (optimal_transfer_size) {
@@ -525,12 +509,7 @@ bool cli_get_posix_fs_info(struct cli_state *cli,
        if (fs_identifier) {
                *fs_identifier = BIG_UINT(rdata,48);
        }
-
-cleanup:
-       SAFE_FREE(rparam);
-       SAFE_FREE(rdata);
-
-       return ret;
+       return NT_STATUS_OK;
 }
 
 
index f34294e0c3e1f1447adb4b52afefbe4297c5b335..9c613508eb4fc41c0e0bc419b030c5ec74a177c3 100644 (file)
@@ -411,17 +411,19 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
                 uint64_t total_file_nodes;
                 uint64_t free_file_nodes;
                 uint64_t fs_identifier;
+               NTSTATUS status;
 
                 /* Has UNIXCIFS. If POSIX filesystem info is available... */
-                if (cli_get_posix_fs_info(cli,
-                                          &optimal_transfer_size,
-                                          &block_size,
-                                          &total_blocks,
-                                          &blocks_available,
-                                          &user_blocks_available,
-                                          &total_file_nodes,
-                                          &free_file_nodes,
-                                          &fs_identifier)) {
+               status = cli_get_posix_fs_info(cli,
+                                              &optimal_transfer_size,
+                                              &block_size,
+                                              &total_blocks,
+                                              &blocks_available,
+                                              &user_blocks_available,
+                                              &total_file_nodes,
+                                              &free_file_nodes,
+                                              &fs_identifier);
+               if (NT_STATUS_IS_OK(status)) {
 
                         /* ... then what's provided here takes precedence. */
                         st->f_bsize =