smbclient: query disk usage relative to current directory
authorUri Simchoni <uri@samba.org>
Tue, 5 Jan 2016 22:08:25 +0000 (00:08 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 5 Jan 2016 23:54:18 +0000 (00:54 +0100)
When querying disk usage in the "dir" and "du" commands,
use the current directory. This behavior is compatible
with Windows command shell "dir" command.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11662

Signed-off-by: Uri Simchoni <uri@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/client/client.c
source3/libsmb/cli_smb2_fnum.c
source3/libsmb/cli_smb2_fnum.h
source3/libsmb/clifile.c
source3/libsmb/proto.h
source3/torture/nbio.c

index 034b48a26780f59abfc42e35db685d0ca1476db6..ad56f26d88683221da1c7f542318e1829628e9f5 100644 (file)
@@ -312,7 +312,7 @@ static int do_dskattr(void)
                return 1;
        }
 
-       status = cli_disk_size(targetcli, &bsize, &total, &avail);
+       status = cli_disk_size(targetcli, targetpath, &bsize, &total, &avail);
        if (!NT_STATUS_IS_OK(status)) {
                d_printf("Error in dskattr: %s\n", nt_errstr(status));
                return 1;
index 816ad1374a30928953a04f5484f8e0436e4d809a..c9f40605e880900fd7c3780175d816103b330170 100644 (file)
@@ -1592,7 +1592,8 @@ NTSTATUS cli_smb2_setattrE(struct cli_state *cli,
  Synchronous only.
 ***************************************************************/
 
-NTSTATUS cli_smb2_dskattr(struct cli_state *cli, uint64_t *bsize, uint64_t *total, uint64_t *avail)
+NTSTATUS cli_smb2_dskattr(struct cli_state *cli, const char *path,
+                         uint64_t *bsize, uint64_t *total, uint64_t *avail)
 {
        NTSTATUS status;
        uint16_t fnum = 0xffff;
@@ -1619,7 +1620,7 @@ NTSTATUS cli_smb2_dskattr(struct cli_state *cli, uint64_t *bsize, uint64_t *tota
 
        /* First open the top level directory. */
        status = cli_smb2_create_fnum(cli,
-                       "",
+                       path,
                        0,                      /* create_flags */
                        FILE_READ_ATTRIBUTES,   /* desired_access */
                        FILE_ATTRIBUTE_DIRECTORY, /* file attributes */
index c97bc76786ab13c149e7de4669e95193d9ecc1ab..ceb5629903656c8a2b653f3b7e5d354ce40f3580 100644 (file)
@@ -117,6 +117,7 @@ NTSTATUS cli_smb2_setattrE(struct cli_state *cli,
                         time_t access_time,
                         time_t write_time);
 NTSTATUS cli_smb2_dskattr(struct cli_state *cli,
+                       const char *path,
                        uint64_t *bsize,
                        uint64_t *total,
                        uint64_t *avail);
index 9e1975b10610ffbd359afbdf019248032be8025e..364376b7e90a1d3baecc91c8e9b109c175083f4c 100644 (file)
@@ -4199,7 +4199,8 @@ NTSTATUS cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail)
        return status;
 }
 
-NTSTATUS cli_disk_size(struct cli_state *cli, uint64_t *bsize, uint64_t *total, uint64_t *avail)
+NTSTATUS cli_disk_size(struct cli_state *cli, const char *path, uint64_t *bsize,
+                      uint64_t *total, uint64_t *avail)
 {
        uint64_t sectors_per_block;
        uint64_t bytes_per_sector;
@@ -4207,7 +4208,7 @@ NTSTATUS cli_disk_size(struct cli_state *cli, uint64_t *bsize, uint64_t *total,
        NTSTATUS status;
 
        if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
-               return cli_smb2_dskattr(cli, bsize, total, avail);
+               return cli_smb2_dskattr(cli, path, bsize, total, avail);
        }
 
        /*
index 5ebcf5f072b9c0f75e60d94fab32daa9698595f6..c32bba7ca599e79524e9ba31ef415d4be48866be 100644 (file)
@@ -513,7 +513,8 @@ struct tevent_req *cli_dskattr_send(TALLOC_CTX *mem_ctx,
 NTSTATUS cli_dskattr_recv(struct tevent_req *req, int *bsize, int *total,
                          int *avail);
 NTSTATUS cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail);
-NTSTATUS cli_disk_size(struct cli_state *cli, uint64_t *bsize, uint64_t *total, uint64_t *avail);
+NTSTATUS cli_disk_size(struct cli_state *cli, const char *path, uint64_t *bsize,
+                      uint64_t *total, uint64_t *avail);
 struct tevent_req *cli_ctemp_send(TALLOC_CTX *mem_ctx,
                                struct tevent_context *ev,
                                struct cli_state *cli,
index 6373a107ef3e14d5c86cdf67e285b93b1c56cdab..6c87f9ab8c8e994f7393fd25ace7ece94cd07339 100644 (file)
@@ -287,7 +287,7 @@ void nb_qfsinfo(int level)
 {
        uint64_t bsize, total, avail;
        /* this is not the right call - we need cli_qfsinfo() */
-       cli_disk_size(c, &bsize, &total, &avail);
+       cli_disk_size(c, "", &bsize, &total, &avail);
 }
 
 static NTSTATUS find_fn(const char *mnt, struct file_info *finfo, const char *name,