[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Sun Oct 24 04:24:02 MDT 2010
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 <vl at samba.org>
Date: Sun Oct 24 11:38:22 2010 +0200
s3: Remove unused cli_get_ea_list_fnum
Autobuild-User: Volker Lendecke <vlendec at samba.org>
Autobuild-Date: Sun Oct 24 10:23:29 UTC 2010 on sn-devel-104
commit 5a17d26e47c1e3478866cbdbc5254eae0fa10f45
Author: Volker Lendecke <vl at samba.org>
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 <vl at samba.org>
Date: Sat Oct 23 22:37:16 2010 +0200
s3: Convert cli_qfileinfo_basic to cli_qfileinfo
commit d864b1bace0038b86cb393ca811dcce2e938bebd
Author: Volker Lendecke <vl at samba.org>
Date: Sat Oct 23 09:43:31 2010 +0200
s3: Convert cli_qfilename to cli_qfileinfo
commit 94232578064e146b810f1320f67e1ab485737a17
Author: Volker Lendecke <vl at samba.org>
Date: Sat Oct 23 09:35:49 2010 +0200
s3: Add async cli_qfileinfo
commit 03333fc68cf596a85fb81d202b5fdc1879928f76
Author: Volker Lendecke <vl at samba.org>
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, ¶m_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, ¶m_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
More information about the samba-cvs
mailing list