[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, &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


More information about the samba-cvs mailing list