The branch, master has been updated
       via  09a1075 s3: Remove unused cli_get_ea_list_fnum
       via  5a17d26 s3: Replace cli_qfileinfo_test with a call to cli_qfileinfo
       via  c095809 s3: Convert cli_qfileinfo_basic to cli_qfileinfo
       via  d864b1b s3: Convert cli_qfilename to cli_qfileinfo
       via  9423257 s3: Add async cli_qfileinfo
       via  03333fc s3: Rename cli_fileinfo() to cli_fileinfo_basic()
      from  a6611c1 torture/local: Depend on NSS_WRAPPER, even if it wasn't 
enabled.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 09a10750445e92b7813459e8c297ff6340a56800
Author: Volker Lendecke <[email protected]>
Date:   Sun Oct 24 11:38:22 2010 +0200

    s3: Remove unused cli_get_ea_list_fnum
    
    Autobuild-User: Volker Lendecke <[email protected]>
    Autobuild-Date: Sun Oct 24 10:23:29 UTC 2010 on sn-devel-104

commit 5a17d26e47c1e3478866cbdbc5254eae0fa10f45
Author: Volker Lendecke <[email protected]>
Date:   Sun Oct 24 11:21:56 2010 +0200

    s3: Replace cli_qfileinfo_test with a call to cli_qfileinfo

commit c095809c0464cd174e0993d8c32434d6f3733342
Author: Volker Lendecke <[email protected]>
Date:   Sat Oct 23 22:37:16 2010 +0200

    s3: Convert cli_qfileinfo_basic to cli_qfileinfo

commit d864b1bace0038b86cb393ca811dcce2e938bebd
Author: Volker Lendecke <[email protected]>
Date:   Sat Oct 23 09:43:31 2010 +0200

    s3: Convert cli_qfilename to cli_qfileinfo

commit 94232578064e146b810f1320f67e1ab485737a17
Author: Volker Lendecke <[email protected]>
Date:   Sat Oct 23 09:35:49 2010 +0200

    s3: Add async cli_qfileinfo

commit 03333fc68cf596a85fb81d202b5fdc1879928f76
Author: Volker Lendecke <[email protected]>
Date:   Sat Oct 23 09:28:47 2010 +0200

    s3: Rename cli_fileinfo() to cli_fileinfo_basic()

-----------------------------------------------------------------------

Summary of changes:
 source3/client/client.c      |   10 ++-
 source3/include/proto.h      |   30 +++++--
 source3/libsmb/clifile.c     |  195 ++++++++++++++++++++++++++++-------------
 source3/libsmb/clirap.c      |  150 +++++++-------------------------
 source3/libsmb/libsmb_file.c |    7 +-
 source3/libsmb/libsmb_stat.c |   17 ++--
 source3/torture/nbio.c       |    3 +-
 source3/torture/torture.c    |   48 +++++------
 source3/torture/utable.c     |    7 +-
 source3/utils/smbcacls.c     |    5 +-
 10 files changed, 238 insertions(+), 234 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/client/client.c b/source3/client/client.c
index e979ddf..761d8d3 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -1084,8 +1084,9 @@ static int do_get(const char *rname, const char 
*lname_in, bool reget)
        }
 
 
-       if (!cli_qfileinfo(targetcli, fnum,
-                          &attr, &size, NULL, NULL, NULL, NULL, NULL) &&
+       if (!NT_STATUS_IS_OK(cli_qfileinfo_basic(
+                                    targetcli, fnum, &attr, &size, NULL, NULL,
+                                    NULL, NULL, NULL)) &&
            !NT_STATUS_IS_OK(cli_getattrE(targetcli, fnum,
                          &attr, &size, NULL, NULL, NULL))) {
                d_printf("getattrib: %s\n",cli_errstr(targetcli));
@@ -1699,7 +1700,10 @@ static int do_put(const char *rname, const char *lname, 
bool reput)
        if (reput) {
                status = cli_open(targetcli, targetname, O_RDWR|O_CREAT, 
DENY_NONE, &fnum);
                if (NT_STATUS_IS_OK(status)) {
-                       if (!cli_qfileinfo(targetcli, fnum, NULL, &start, NULL, 
NULL, NULL, NULL, NULL) &&
+                       if (!NT_STATUS_IS_OK(cli_qfileinfo_basic(
+                                                    targetcli, fnum, NULL,
+                                                    &start, NULL, NULL,
+                                                    NULL, NULL, NULL)) &&
                            !NT_STATUS_IS_OK(cli_getattrE(targetcli, fnum, 
NULL, &start, NULL, NULL, NULL))) {
                                d_printf("getattrib: %s\n",cli_errstr(cli));
                                return 1;
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 6ce27b8..c19dd35 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -2327,14 +2327,15 @@ NTSTATUS cli_qpathinfo_streams(struct cli_state *cli, 
const char *fname,
                               TALLOC_CTX *mem_ctx,
                               unsigned int *pnum_streams,
                               struct stream_struct **pstreams);
-bool cli_qfilename(struct cli_state *cli, uint16_t fnum, char *name, size_t 
namelen);
-bool cli_qfileinfo(struct cli_state *cli, uint16_t fnum,
-                  uint16 *mode, SMB_OFF_T *size,
-                  struct timespec *create_time,
-                   struct timespec *access_time,
-                   struct timespec *write_time,
-                  struct timespec *change_time,
-                   SMB_INO_T *ino);
+NTSTATUS cli_qfilename(struct cli_state *cli, uint16_t fnum, char *name,
+                      size_t namelen);
+NTSTATUS cli_qfileinfo_basic(struct cli_state *cli, uint16_t fnum,
+                            uint16 *mode, SMB_OFF_T *size,
+                            struct timespec *create_time,
+                            struct timespec *access_time,
+                            struct timespec *write_time,
+                            struct timespec *change_time,
+                            SMB_INO_T *ino);
 struct tevent_req *cli_qpathinfo_basic_send(TALLOC_CTX *mem_ctx,
                                            struct event_context *ev,
                                            struct cli_state *cli,
@@ -2343,7 +2344,6 @@ NTSTATUS cli_qpathinfo_basic_recv(struct tevent_req *req,
                                  SMB_STRUCT_STAT *sbuf, uint32 *attributes);
 NTSTATUS cli_qpathinfo_basic(struct cli_state *cli, const char *name,
                             SMB_STRUCT_STAT *sbuf, uint32 *attributes);
-bool cli_qfileinfo_test(struct cli_state *cli, uint16_t fnum, int level, char 
**poutdata, uint32 *poutlen);
 NTSTATUS cli_qpathinfo_alt_name(struct cli_state *cli, const char *fname, 
fstring alt_name);
 struct tevent_req *cli_qpathinfo_send(TALLOC_CTX *mem_ctx,
                                      struct tevent_context *ev,
@@ -2357,6 +2357,18 @@ NTSTATUS cli_qpathinfo(TALLOC_CTX *mem_ctx, struct 
cli_state *cli,
                       uint32_t max_rdata,
                       uint8_t **rdata, uint32_t *num_rdata);
 
+struct tevent_req *cli_qfileinfo_send(TALLOC_CTX *mem_ctx,
+                                     struct tevent_context *ev,
+                                     struct cli_state *cli, uint16_t fnum,
+                                     uint16_t level, uint32_t min_rdata,
+                                     uint32_t max_rdata);
+NTSTATUS cli_qfileinfo_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                           uint8_t **rdata, uint32_t *num_rdata);
+NTSTATUS cli_qfileinfo(TALLOC_CTX *mem_ctx, struct cli_state *cli,
+                      uint16_t fnum, uint16_t level, uint32_t min_rdata,
+                      uint32_t max_rdata,
+                      uint8_t **rdata, uint32_t *num_rdata);
+
 struct tevent_req *cli_flush_send(TALLOC_CTX *mem_ctx,
                                  struct event_context *ev,
                                  struct cli_state *cli,
diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c
index ce8d7a5..b57cba5 100644
--- a/source3/libsmb/clifile.c
+++ b/source3/libsmb/clifile.c
@@ -4206,49 +4206,6 @@ bool cli_set_ea_fnum(struct cli_state *cli, uint16_t 
fnum, const char *ea_name,
  Get an extended attribute list utility fn.
 *********************************************************/
 
-static bool parse_ea_blob(TALLOC_CTX *mem_ctx, const uint8_t *rdata,
-                         size_t rdata_len,
-                         size_t *pnum_eas, struct ea_struct **pea_list);
-
-static bool cli_get_ea_list(struct cli_state *cli,
-               uint16_t setup, char *param, unsigned int param_len,
-               TALLOC_CTX *ctx,
-               size_t *pnum_eas,
-               struct ea_struct **pea_list)
-{
-       unsigned int data_len = 0;
-       unsigned int rparam_len, rdata_len;
-       char *rparam=NULL, *rdata=NULL;
-       bool ret = False;
-
-       *pnum_eas = 0;
-       if (pea_list) {
-               *pea_list = NULL;
-       }
-
-       if (!cli_send_trans(cli, SMBtrans2,
-                       NULL,           /* Name */
-                       -1, 0,          /* fid, flags */
-                       &setup, 1, 0,   /* setup, length, max */
-                       param, param_len, 10, /* param, length, max */
-                       NULL, data_len, cli->max_xmit /* data, length, max */
-                               )) {
-               return False;
-       }
-
-       if (!cli_receive_trans(cli, SMBtrans2,
-                       &rparam, &rparam_len,
-                       &rdata, &rdata_len)) {
-               return False;
-       }
-
-       ret = parse_ea_blob(ctx, (uint8_t *)rdata, rdata_len, pnum_eas,
-                           pea_list);
-       SAFE_FREE(rparam);
-       SAFE_FREE(rdata);
-       return ret;
-}
-
 static bool parse_ea_blob(TALLOC_CTX *ctx, const uint8_t *rdata,
                          size_t rdata_len,
                          size_t *pnum_eas, struct ea_struct **pea_list)
@@ -4449,25 +4406,6 @@ NTSTATUS cli_get_ea_list_path(struct cli_state *cli, 
const char *path,
        return status;
 }
 
-/*********************************************************
- Get an extended attribute list from an fnum.
-*********************************************************/
-
-bool cli_get_ea_list_fnum(struct cli_state *cli, uint16_t fnum,
-               TALLOC_CTX *ctx,
-               size_t *pnum_eas,
-               struct ea_struct **pea_list)
-{
-       uint16_t setup = TRANSACT2_QFILEINFO;
-       char param[6];
-
-       memset(param, 0, 6);
-       SSVAL(param,0,fnum);
-       SSVAL(param,2,SMB_INFO_SET_EA);
-
-       return cli_get_ea_list(cli, setup, param, 6, ctx, pnum_eas, pea_list);
-}
-
 /****************************************************************************
  Convert open "flags" arg to uint32_t on wire.
 ****************************************************************************/
@@ -5265,6 +5203,139 @@ NTSTATUS cli_qpathinfo(TALLOC_CTX *mem_ctx, struct 
cli_state *cli,
        return status;
 }
 
+struct cli_qfileinfo_state {
+       uint16_t setup[1];
+       uint8_t param[4];
+       uint8_t *data;
+       uint32_t min_rdata;
+       uint8_t *rdata;
+       uint32_t num_rdata;
+};
+
+static void cli_qfileinfo_done(struct tevent_req *subreq);
+
+struct tevent_req *cli_qfileinfo_send(TALLOC_CTX *mem_ctx,
+                                     struct tevent_context *ev,
+                                     struct cli_state *cli, uint16_t fnum,
+                                     uint16_t level, uint32_t min_rdata,
+                                     uint32_t max_rdata)
+{
+       struct tevent_req *req, *subreq;
+       struct cli_qfileinfo_state *state;
+
+       req = tevent_req_create(mem_ctx, &state, struct cli_qfileinfo_state);
+       if (req == NULL) {
+               return NULL;
+       }
+       state->min_rdata = min_rdata;
+       SSVAL(state->param, 0, fnum);
+       SSVAL(state->param, 2, level);
+       SSVAL(state->setup, 0, TRANSACT2_QFILEINFO);
+
+       subreq = cli_trans_send(
+               state,                  /* mem ctx. */
+               ev,                     /* event ctx. */
+               cli,                    /* cli_state. */
+               SMBtrans2,              /* cmd. */
+               NULL,                   /* pipe name. */
+               -1,                     /* fid. */
+               0,                      /* function. */
+               0,                      /* flags. */
+               state->setup,           /* setup. */
+               1,                      /* num setup uint16_t words. */
+               0,                      /* max returned setup. */
+               state->param,           /* param. */
+               sizeof(state->param),   /* num param. */
+               2,                      /* max returned param. */
+               NULL,                   /* data. */
+               0,                      /* num data. */
+               max_rdata);             /* max returned data. */
+
+       if (tevent_req_nomem(subreq, req)) {
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq, cli_qfileinfo_done, req);
+       return req;
+}
+
+static void cli_qfileinfo_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct cli_qfileinfo_state *state = tevent_req_data(
+               req, struct cli_qfileinfo_state);
+       NTSTATUS status;
+
+       status = cli_trans_recv(subreq, state, NULL, NULL, 0, NULL,
+                               NULL, 0, NULL,
+                               &state->rdata, state->min_rdata,
+                               &state->num_rdata);
+       if (!NT_STATUS_IS_OK(status)) {
+               tevent_req_nterror(req, status);
+               return;
+       }
+       tevent_req_done(req);
+}
+
+NTSTATUS cli_qfileinfo_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                           uint8_t **rdata, uint32_t *num_rdata)
+{
+       struct cli_qfileinfo_state *state = tevent_req_data(
+               req, struct cli_qfileinfo_state);
+       NTSTATUS status;
+
+       if (tevent_req_is_nterror(req, &status)) {
+               return status;
+       }
+       if (rdata != NULL) {
+               *rdata = talloc_move(mem_ctx, &state->rdata);
+       } else {
+               TALLOC_FREE(state->rdata);
+       }
+       if (num_rdata != NULL) {
+               *num_rdata = state->num_rdata;
+       }
+       return NT_STATUS_OK;
+}
+
+NTSTATUS cli_qfileinfo(TALLOC_CTX *mem_ctx, struct cli_state *cli,
+                      uint16_t fnum, uint16_t level, uint32_t min_rdata,
+                      uint32_t max_rdata,
+                      uint8_t **rdata, uint32_t *num_rdata)
+{
+       TALLOC_CTX *frame = talloc_stackframe();
+       struct event_context *ev;
+       struct tevent_req *req;
+       NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+       if (cli_has_async_calls(cli)) {
+               /*
+                * Can't use sync call while an async call is in flight
+                */
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto fail;
+       }
+       ev = event_context_init(frame);
+       if (ev == NULL) {
+               goto fail;
+       }
+       req = cli_qfileinfo_send(frame, ev, cli, fnum, level, min_rdata,
+                                max_rdata);
+       if (req == NULL) {
+               goto fail;
+       }
+       if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+               goto fail;
+       }
+       status = cli_qfileinfo_recv(req, mem_ctx, rdata, num_rdata);
+ fail:
+       TALLOC_FREE(frame);
+       if (!NT_STATUS_IS_OK(status)) {
+               cli_set_error(cli, status);
+       }
+       return status;
+}
+
 struct cli_flush_state {
        uint16_t vwv[1];
 };
diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c
index 3ac9f44..6af3d15 100644
--- a/source3/libsmb/clirap.c
+++ b/source3/libsmb/clirap.c
@@ -1097,88 +1097,55 @@ static bool parse_streams_blob(TALLOC_CTX *mem_ctx, 
const uint8_t *rdata,
  Send a qfileinfo QUERY_FILE_NAME_INFO call.
 ****************************************************************************/
 
-bool cli_qfilename(struct cli_state *cli, uint16_t fnum, char *name, size_t 
namelen)
+NTSTATUS cli_qfilename(struct cli_state *cli, uint16_t fnum, char *name,
+                      size_t namelen)
 {
-       unsigned int data_len = 0;
-       unsigned int param_len = 0;
-       uint16 setup = TRANSACT2_QFILEINFO;
-       char param[4];
-       char *rparam=NULL, *rdata=NULL;
-
-       param_len = 4;
-       SSVAL(param, 0, fnum);
-       SSVAL(param, 2, SMB_QUERY_FILE_NAME_INFO);
-
-       if (!cli_send_trans(cli, SMBtrans2,
-                            NULL,                         /* name */
-                            -1, 0,                        /* fid, flags */
-                            &setup, 1, 0,                 /* setup, length, 
max */
-                            param, param_len, 2,          /* param, length, 
max */
-                            NULL, data_len, cli->max_xmit /* data, length, max 
*/
-                           )) {
-               return False;
-       }
-
-       if (!cli_receive_trans(cli, SMBtrans2,
-                               &rparam, &param_len,
-                               &rdata, &data_len)) {
-               return False;
-       }
+       uint8_t *rdata;
+       uint32_t num_rdata;
+       NTSTATUS status;
 
-       if (!rdata || data_len < 4) {
-               SAFE_FREE(rparam);
-               SAFE_FREE(rdata);
-               return False;
+       status = cli_qfileinfo(talloc_tos(), cli, fnum,
+                              SMB_QUERY_FILE_NAME_INFO,
+                              4, cli->max_xmit,
+                              &rdata, &num_rdata);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
        }
 
        clistr_pull(cli->inbuf, name, rdata+4, namelen, IVAL(rdata, 0),
                    STR_UNICODE);
-
-       SAFE_FREE(rparam);
-       SAFE_FREE(rdata);
-
-       return True;
+       TALLOC_FREE(rdata);
+       return NT_STATUS_OK;
 }
 
 /****************************************************************************
  Send a qfileinfo call.
 ****************************************************************************/
 
-bool cli_qfileinfo(struct cli_state *cli, uint16_t fnum,
-                  uint16 *mode, SMB_OFF_T *size,
-                  struct timespec *create_time,
-                   struct timespec *access_time,
-                   struct timespec *write_time,
-                  struct timespec *change_time,
-                   SMB_INO_T *ino)
+NTSTATUS cli_qfileinfo_basic(struct cli_state *cli, uint16_t fnum,
+                            uint16 *mode, SMB_OFF_T *size,
+                            struct timespec *create_time,
+                            struct timespec *access_time,
+                            struct timespec *write_time,
+                            struct timespec *change_time,
+                            SMB_INO_T *ino)
 {
-       uint32_t data_len = 0;
-       uint16 setup;
-       uint8_t param[4];
-       uint8_t *rdata=NULL;
+       uint8_t *rdata;
+       uint32_t num_rdata;
        NTSTATUS status;
 
        /* if its a win95 server then fail this - win95 totally screws it
           up */
-       if (cli->win95) return False;
-
-       SSVAL(param, 0, fnum);
-       SSVAL(param, 2, SMB_QUERY_FILE_ALL_INFO);
-
-       SSVAL(&setup, 0, TRANSACT2_QFILEINFO);
-
-       status = cli_trans(talloc_tos(), cli, SMBtrans2,
-                          NULL, -1, 0, 0, /* name, fid, function, flags */
-                          &setup, 1, 0,          /* setup, length, max */
-                          param, 4, 2,   /* param, length, max */
-                          NULL, 0, MIN(cli->max_xmit, 0xffff), /* data, 
length, max */
-                          NULL,                                /* recv_flags2 
*/
-                          NULL, 0, NULL, /* rsetup, length */
-                          NULL, 0, NULL,       /* rparam, length */
-                          &rdata, 68, &data_len);
+       if (cli->win95) {
+               return NT_STATUS_NOT_SUPPORTED;
+       }
 
+       status = cli_qfileinfo(talloc_tos(), cli, fnum,
+                              SMB_QUERY_FILE_ALL_INFO,
+                              68, MIN(cli->max_xmit, 0xffff),
+                              &rdata, &num_rdata);
        if (!NT_STATUS_IS_OK(status)) {
-               return false;
+               return status;
        }
 
        if (create_time) {
@@ -1204,7 +1171,7 @@ bool cli_qfileinfo(struct cli_state *cli, uint16_t fnum,
        }
 
        TALLOC_FREE(rdata);
-       return True;
+       return NT_STATUS_OK;
 }
 
 /****************************************************************************
@@ -1313,61 +1280,6 @@ NTSTATUS cli_qpathinfo_basic(struct cli_state *cli, 
const char *name,
 }
 
 /****************************************************************************
- Send a qfileinfo call.
-****************************************************************************/
-
-bool cli_qfileinfo_test(struct cli_state *cli, uint16_t fnum, int level, char 
**poutdata, uint32 *poutlen)
-{
-       unsigned int data_len = 0;
-       unsigned int param_len = 0;
-       uint16 setup = TRANSACT2_QFILEINFO;
-       char param[4];
-       char *rparam=NULL, *rdata=NULL;
-
-       *poutdata = NULL;
-       *poutlen = 0;
-
-       /* if its a win95 server then fail this - win95 totally screws it
-          up */
-       if (cli->win95)
-               return False;
-
-       param_len = 4;
-
-       SSVAL(param, 0, fnum);
-       SSVAL(param, 2, level);
-
-       if (!cli_send_trans(cli, SMBtrans2,
-                            NULL,                           /* name */
-                            -1, 0,                          /* fid, flags */
-                            &setup, 1, 0,                   /* setup, length, 
max */
-                            param, param_len, 2,            /* param, length, 
max */
-                            NULL, data_len, cli->max_xmit   /* data, length, 
max */
-                           )) {
-               return False;
-       }
-
-       if (!cli_receive_trans(cli, SMBtrans2,
-                               &rparam, &param_len,
-                               &rdata, &data_len)) {
-               return False;
-       }
-
-       *poutdata = (char *)memdup(rdata, data_len);
-       if (!*poutdata) {
-               SAFE_FREE(rdata);
-               SAFE_FREE(rparam);
-               return False;
-       }
-
-       *poutlen = data_len;
-
-       SAFE_FREE(rdata);
-       SAFE_FREE(rparam);
-       return True;
-}
-
-/****************************************************************************
  Send a qpathinfo SMB_QUERY_FILE_ALT_NAME_INFO call.
 ****************************************************************************/
 
diff --git a/source3/libsmb/libsmb_file.c b/source3/libsmb/libsmb_file.c
index 8250da2..6b08b61 100644
--- a/source3/libsmb/libsmb_file.c


-- 
Samba Shared Repository

Reply via email to