[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-1331-g8cf78ff

Jeremy Allison jra at samba.org
Thu Apr 30 22:29:04 GMT 2009


The branch, master has been updated
       via  8cf78ff55312768d0b454b1d7e0560e04e6296da (commit)
      from  ab4b8c9c0438bc5afca17e3ebf05dde6f98bc0aa (commit)

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


- Log -----------------------------------------------------------------
commit 8cf78ff55312768d0b454b1d7e0560e04e6296da
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Apr 30 15:26:43 2009 -0700

    Get medieval on our ass about SMB1 file descriptors being 16 bits, not an int.
    Convert all uses of cli_open(), cli_nt_createXXX to NTSTATUS versions.
    This is smaller than it looks, it just fixes a lot of old code.
    Next up, ensure all cli_XX functions return NTSTATUS.
    Jeremy.

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

Summary of changes:
 source3/client/client.c         |   38 ++--
 source3/client/clitar.c         |   11 +-
 source3/client/smbspool.c       |    5 +-
 source3/include/client.h        |    2 +-
 source3/include/proto.h         |   72 +++---
 source3/libgpo/gpo_filesync.c   |    6 +-
 source3/libsmb/clientgen.c      |    2 +-
 source3/libsmb/clifile.c        |   63 +++--
 source3/libsmb/clioplock.c      |    7 +-
 source3/libsmb/cliprint.c       |    2 +-
 source3/libsmb/cliquota.c       |   12 +-
 source3/libsmb/clirap.c         |    6 +-
 source3/libsmb/clireadwrite.c   |   12 +-
 source3/libsmb/clisecdesc.c     |    4 +-
 source3/libsmb/libsmb_file.c    |   16 +-
 source3/libsmb/libsmb_xattr.c   |   21 +-
 source3/torture/denytest.c      |   34 ++-
 source3/torture/locktest.c      |   35 ++--
 source3/torture/locktest2.c     |    8 +-
 source3/torture/mangle_test.c   |    8 +-
 source3/torture/masktest.c      |    5 +-
 source3/torture/nbio.c          |   18 +-
 source3/torture/scanner.c       |   22 +-
 source3/torture/torture.c       |  580 ++++++++++++++++-----------------------
 source3/torture/utable.c        |   17 +-
 source3/utils/net_rpc.c         |    7 +-
 source3/utils/net_rpc_printer.c |   31 +-
 source3/utils/smbcacls.c        |   33 +--
 source3/utils/smbcquotas.c      |    4 +-
 29 files changed, 482 insertions(+), 599 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/client/client.c b/source3/client/client.c
index 7dda981..becb066 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -535,12 +535,12 @@ static void display_finfo(file_info *finfo, const char *dir)
 		dir_total += finfo->size;
 	} else {
 		char *afname = NULL;
-		int fnum;
+		uint16_t fnum;
 
 		/* skip if this is . or .. */
 		if ( strequal(finfo->name,"..") || strequal(finfo->name,".") )
 			return;
-		/* create absolute filename for cli_nt_create() FIXME */
+		/* create absolute filename for cli_ntcreate() FIXME */
 		afname = talloc_asprintf(ctx,
 					"%s%s%s",
 					dir,
@@ -554,8 +554,9 @@ static void display_finfo(file_info *finfo, const char *dir)
 		d_printf( "MODE:%s\n", attrib_string(finfo->mode));
 		d_printf( "SIZE:%.0f\n", (double)finfo->size);
 		d_printf( "MTIME:%s", time_to_asc(t));
-		fnum = cli_nt_create(finfo->cli, afname, CREATE_ACCESS_READ);
-		if (fnum == -1) {
+		if (!NT_STATUS_IS_OK(cli_ntcreate(finfo->cli, afname, 0,
+				CREATE_ACCESS_READ, 0, FILE_SHARE_READ|FILE_SHARE_WRITE,
+				FILE_OPEN, 0x0, 0x0, &fnum))) {
 			DEBUG( 0, ("display_finfo() Failed to open %s: %s\n",
 				afname,
 				cli_errstr( finfo->cli)));
@@ -999,7 +1000,8 @@ static NTSTATUS writefile_sink(char *buf, size_t n, void *priv)
 static int do_get(const char *rname, const char *lname_in, bool reget)
 {
 	TALLOC_CTX *ctx = talloc_tos();
-	int handle = 0, fnum;
+	int handle = 0;
+	uint16_t fnum;
 	bool newhandle = false;
 	struct timeval tp_start;
 	uint16 attr;
@@ -1028,9 +1030,7 @@ static int do_get(const char *rname, const char *lname_in, bool reget)
 
 	GetTimeOfDay(&tp_start);
 
-	fnum = cli_open(targetcli, targetname, O_RDONLY, DENY_NONE);
-
-	if (fnum == -1) {
+	if (!NT_STATUS_IS_OK(cli_open(targetcli, targetname, O_RDONLY, DENY_NONE, &fnum))) {
 		d_printf("%s opening remote file %s\n",cli_errstr(cli),rname);
 		return 1;
 	}
@@ -1618,7 +1618,7 @@ static int cmd_allinfo(void)
 static int do_put(const char *rname, const char *lname, bool reput)
 {
 	TALLOC_CTX *ctx = talloc_tos();
-	int fnum;
+	uint16_t fnum;
 	XFILE *f;
 	SMB_OFF_T start = 0;
 	int rc = 0;
@@ -1636,8 +1636,8 @@ static int do_put(const char *rname, const char *lname, bool reput)
 	GetTimeOfDay(&tp_start);
 
 	if (reput) {
-		fnum = cli_open(targetcli, targetname, O_RDWR|O_CREAT, DENY_NONE);
-		if (fnum >= 0) {
+		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) &&
 			    !cli_getattrE(targetcli, fnum, NULL, &start, NULL, NULL, NULL)) {
 				d_printf("getattrib: %s\n",cli_errstr(cli));
@@ -1645,10 +1645,10 @@ static int do_put(const char *rname, const char *lname, bool reput)
 			}
 		}
 	} else {
-		fnum = cli_open(targetcli, targetname, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE);
+		status = cli_open(targetcli, targetname, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE, &fnum);
 	}
 
-	if (fnum == -1) {
+	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("%s opening remote file %s\n",cli_errstr(targetcli),rname);
 		return 1;
 	}
@@ -2207,7 +2207,7 @@ static int cmd_open(void)
 	char *buf = NULL;
 	char *targetname = NULL;
 	struct cli_state *targetcli;
-	int fnum;
+	uint16_t fnum = (uint16_t)-1;
 
 	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
 		d_printf("open <filename>\n");
@@ -2226,10 +2226,12 @@ static int cmd_open(void)
 		return 1;
 	}
 
-	fnum = cli_nt_create(targetcli, targetname, FILE_READ_DATA|FILE_WRITE_DATA);
-	if (fnum == -1) {
-		fnum = cli_nt_create(targetcli, targetname, FILE_READ_DATA);
-		if (fnum != -1) {
+	if (!NT_STATUS_IS_OK(cli_ntcreate(targetcli, targetname, 0,
+			FILE_READ_DATA|FILE_WRITE_DATA, 0,
+			FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0, &fnum))) {
+		if (NT_STATUS_IS_OK(cli_ntcreate(targetcli, targetname, 0,
+				FILE_READ_DATA, 0,
+				FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0, &fnum))) {
 			d_printf("open file %s: for read/write fnum %d\n", targetname, fnum);
 		} else {
 			d_printf("Failed to open file %s. %s\n", targetname, cli_errstr(cli));
diff --git a/source3/client/clitar.c b/source3/client/clitar.c
index fd37576..3cc1a25 100644
--- a/source3/client/clitar.c
+++ b/source3/client/clitar.c
@@ -613,7 +613,7 @@ append one remote file to the tar file
 
 static void do_atar(const char *rname_in,char *lname,file_info *finfo1)
 {
-	int fnum = -1;
+	uint16_t fnum = (uint16_t)-1;
 	uint64_t nread=0;
 	char ftype;
 	file_info2 finfo;
@@ -660,9 +660,7 @@ static void do_atar(const char *rname_in,char *lname,file_info *finfo1)
 		goto cleanup;
 	}
 
-	fnum = cli_open(cli, rname, O_RDONLY, DENY_NONE);
-
-	if (fnum == -1) {
+	if (!NT_STATUS_IS_OK(cli_open(cli, rname, O_RDONLY, DENY_NONE, &fnum))) {
 		DEBUG(0,("%s opening remote file %s (%s)\n",
 				cli_errstr(cli),rname, client_get_cur_dir()));
 		goto cleanup;
@@ -998,13 +996,14 @@ static int skip_file(int skipsize)
 
 static int get_file(file_info2 finfo)
 {
-	int fnum = -1, pos = 0, dsize = 0, bpos = 0;
+	uint16_t fnum;
+	int pos = 0, dsize = 0, bpos = 0;
 	uint64_t rsize = 0;
 
 	DEBUG(5, ("get_file: file: %s, size %.0f\n", finfo.name, (double)finfo.size));
 
 	if (ensurepath(finfo.name) &&
-			(fnum=cli_open(cli, finfo.name, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE)) == -1) {
+			(!NT_STATUS_IS_OK(cli_open(cli, finfo.name, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE,&fnum)))) {
 		DEBUG(0, ("abandoning restore\n"));
 		return(False);
 	}
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c
index a276353..6b099db 100644
--- a/source3/client/smbspool.c
+++ b/source3/client/smbspool.c
@@ -553,7 +553,7 @@ smb_print(struct cli_state * cli,	/* I - SMB connection */
 	  char *title,		/* I - Title/job name */
 	  FILE * fp)
 {				/* I - File to print */
-	int             fnum;	/* File number */
+	uint16_t             fnum;	/* File number */
 	int             nbytes,	/* Number of bytes read */
 	                tbytes;	/* Total bytes read */
 	char            buffer[8192],	/* Buffer for copy */
@@ -574,8 +574,7 @@ smb_print(struct cli_state * cli,	/* I - SMB connection */
          * Open the printer device...
          */
 
-	fnum = cli_open(cli, title, O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
-	if (fnum == -1) {
+	if (!NT_STATUS_IS_OK(cli_open(cli, title, O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum))) {
 		fprintf(stderr, "ERROR: %s opening remote spool %s\n",
 			cli_errstr(cli), title);
 		return (get_exit_code(cli, cli_nt_error(cli)));
diff --git a/source3/include/client.h b/source3/include/client.h
index 6d84f48..6f56468 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -259,7 +259,7 @@ struct cli_state {
 	bool use_level_II_oplocks; /* should we use level II oplocks? */
 
 	/* a oplock break request handler */
-	bool (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
+	NTSTATUS (*oplock_handler)(struct cli_state *cli, uint16_t fnum, unsigned char level);
 
 	bool force_dos_errors;
 	bool case_sensitive; /* False by default. */
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 11fd45e..f60fc9d 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -2375,12 +2375,7 @@ struct tevent_req *cli_rmdir_send(TALLOC_CTX *mem_ctx,
 				  const char *dname);
 NTSTATUS cli_rmdir_recv(struct tevent_req *req);
 NTSTATUS cli_rmdir(struct cli_state *cli, const char *dname);
-int cli_nt_delete_on_close(struct cli_state *cli, int fnum, bool flag);
-int cli_nt_create_full(struct cli_state *cli, const char *fname,
-		 uint32_t CreatFlags, uint32_t DesiredAccess,
-		 uint32_t FileAttributes, uint32_t ShareAccess,
-		 uint32_t CreateDisposition, uint32_t CreateOptions,
-		 uint8_t SecuityFlags);
+int cli_nt_delete_on_close(struct cli_state *cli, uint16_t fnum, bool flag);
 struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
 				     struct event_context *ev,
 				     struct cli_state *cli,
@@ -2403,7 +2398,6 @@ NTSTATUS cli_ntcreate(struct cli_state *cli,
 		      uint32_t CreateOptions,
 		      uint8_t SecurityFlags,
 		      uint16_t *pfid);
-int cli_nt_create(struct cli_state *cli, const char *fname, uint32_t DesiredAccess);
 uint8_t *smb_bytes_push_str(uint8_t *buf, bool ucs2, const char *str,
 			    size_t str_len, size_t *pconverted_size);
 struct tevent_req *cli_open_create(TALLOC_CTX *mem_ctx,
@@ -2414,32 +2408,32 @@ struct tevent_req *cli_open_create(TALLOC_CTX *mem_ctx,
 struct tevent_req *cli_open_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
 				 struct cli_state *cli, const char *fname,
 				 int flags, int share_mode);
-NTSTATUS cli_open_recv(struct tevent_req *req, int *fnum);
-int cli_open(struct cli_state *cli, const char *fname, int flags, int share_mode);
+NTSTATUS cli_open_recv(struct tevent_req *req, uint16_t *fnum);
+NTSTATUS cli_open(struct cli_state *cli, const char *fname, int flags, int share_mode, uint16_t *pfnum);
 struct tevent_req *cli_close_create(TALLOC_CTX *mem_ctx,
 				    struct event_context *ev,
-				    struct cli_state *cli, int fnum,
+				    struct cli_state *cli, uint16_t fnum,
 				    struct tevent_req **psubreq);
 struct tevent_req *cli_close_send(TALLOC_CTX *mem_ctx,
 				  struct event_context *ev,
-				  struct cli_state *cli, int fnum);
+				  struct cli_state *cli, uint16_t fnum);
 NTSTATUS cli_close_recv(struct tevent_req *req);
-bool cli_close(struct cli_state *cli, int fnum);
-bool cli_ftruncate(struct cli_state *cli, int fnum, uint64_t size);
-NTSTATUS cli_locktype(struct cli_state *cli, int fnum,
+bool cli_close(struct cli_state *cli, uint16_t fnum);
+bool cli_ftruncate(struct cli_state *cli, uint16_t fnum, uint64_t size);
+NTSTATUS cli_locktype(struct cli_state *cli, uint16_t fnum,
 		      uint32_t offset, uint32_t len,
 		      int timeout, unsigned char locktype);
-bool cli_lock(struct cli_state *cli, int fnum,
+bool cli_lock(struct cli_state *cli, uint16_t fnum,
 	      uint32_t offset, uint32_t len, int timeout, enum brl_type lock_type);
-bool cli_unlock(struct cli_state *cli, int fnum, uint32_t offset, uint32_t len);
-bool cli_lock64(struct cli_state *cli, int fnum,
+bool cli_unlock(struct cli_state *cli, uint16_t fnum, uint32_t offset, uint32_t len);
+bool cli_lock64(struct cli_state *cli, uint16_t fnum,
 		uint64_t offset, uint64_t len, int timeout, enum brl_type lock_type);
-bool cli_unlock64(struct cli_state *cli, int fnum, uint64_t offset, uint64_t len);
-bool cli_posix_lock(struct cli_state *cli, int fnum,
+bool cli_unlock64(struct cli_state *cli, uint16_t fnum, uint64_t offset, uint64_t len);
+bool cli_posix_lock(struct cli_state *cli, uint16_t fnum,
 			uint64_t offset, uint64_t len,
 			bool wait_lock, enum brl_type lock_type);
-bool cli_posix_unlock(struct cli_state *cli, int fnum, uint64_t offset, uint64_t len);
-bool cli_posix_getlock(struct cli_state *cli, int fnum, uint64_t *poffset, uint64_t *plen);
+bool cli_posix_unlock(struct cli_state *cli, uint16_t fnum, uint64_t offset, uint64_t len);
+bool cli_posix_getlock(struct cli_state *cli, uint16_t fnum, uint64_t *poffset, uint64_t *plen);
 bool cli_getattrE(struct cli_state *cli, int fd,
 		  uint16_t *attr, SMB_OFF_T *size,
 		  time_t *change_time,
@@ -2465,14 +2459,14 @@ 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);
 int cli_ctemp(struct cli_state *cli, const char *path, char **tmp_path);
-NTSTATUS cli_raw_ioctl(struct cli_state *cli, int fnum, uint32_t code, DATA_BLOB *blob);
+NTSTATUS cli_raw_ioctl(struct cli_state *cli, uint16_t fnum, uint32_t code, DATA_BLOB *blob);
 bool cli_set_ea_path(struct cli_state *cli, const char *path, const char *ea_name, const char *ea_val, size_t ea_len);
-bool cli_set_ea_fnum(struct cli_state *cli, int fnum, const char *ea_name, const char *ea_val, size_t ea_len);
+bool cli_set_ea_fnum(struct cli_state *cli, uint16_t fnum, const char *ea_name, const char *ea_val, size_t ea_len);
 bool cli_get_ea_list_path(struct cli_state *cli, const char *path,
 		TALLOC_CTX *ctx,
 		size_t *pnum_eas,
 		struct ea_struct **pea_list);
-bool cli_get_ea_list_fnum(struct cli_state *cli, int 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);
@@ -2564,9 +2558,9 @@ struct tevent_req *cli_oplock_ack_send(TALLOC_CTX *mem_ctx,
 				       struct cli_state *cli,
 				       uint16_t fnum, uint8_t level);
 NTSTATUS cli_oplock_ack_recv(struct tevent_req *req);
-bool cli_oplock_ack(struct cli_state *cli, int fnum, unsigned char level);
+NTSTATUS cli_oplock_ack(struct cli_state *cli, uint16_t fnum, unsigned char level);
 void cli_oplock_handler(struct cli_state *cli, 
-			bool (*handler)(struct cli_state *, int, unsigned char));
+			NTSTATUS (*handler)(struct cli_state *, uint16_t, unsigned char));
 
 /* The following definitions come from libsmb/cliprint.c  */
 
@@ -2574,11 +2568,11 @@ int cli_print_queue(struct cli_state *cli,
 		    void (*fn)(struct print_job_info *));
 int cli_printjob_del(struct cli_state *cli, int job);
 int cli_spl_open(struct cli_state *cli, const char *fname, int flags, int share_mode);
-bool cli_spl_close(struct cli_state *cli, int fnum);
+bool cli_spl_close(struct cli_state *cli, uint16_t fnum);
 
 /* The following definitions come from libsmb/cliquota.c  */
 
-bool cli_get_quota_handle(struct cli_state *cli, int *quota_fnum);
+NTSTATUS cli_get_quota_handle(struct cli_state *cli, uint16_t *quota_fnum);
 void free_ntquota_list(SMB_NTQUOTA_LIST **qt_list);
 bool cli_get_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt);
 bool cli_set_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt);
@@ -2626,8 +2620,8 @@ bool 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, int fnum, char *name, size_t namelen);
-bool cli_qfileinfo(struct cli_state *cli, int fnum,
+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,
@@ -2636,7 +2630,7 @@ bool cli_qfileinfo(struct cli_state *cli, int fnum,
                    SMB_INO_T *ino);
 bool cli_qpathinfo_basic( struct cli_state *cli, const char *name,
                           SMB_STRUCT_STAT *sbuf, uint32 *attributes );
-bool cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char **poutdata, uint32 *poutlen);
+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);
 
 /* The following definitions come from libsmb/clirap2.c  */
@@ -2693,12 +2687,12 @@ int cli_NetConnectionEnum(struct cli_state *cli, const char *qualifier,
 
 struct tevent_req *cli_read_andx_create(TALLOC_CTX *mem_ctx,
 					struct event_context *ev,
-					struct cli_state *cli, int fnum,
+					struct cli_state *cli, uint16_t fnum,
 					off_t offset, size_t size,
 					struct tevent_req **psmbreq);
 struct tevent_req *cli_read_andx_send(TALLOC_CTX *mem_ctx,
 				      struct event_context *ev,
-				      struct cli_state *cli, int fnum,
+				      struct cli_state *cli, uint16_t fnum,
 				      off_t offset, size_t size);
 NTSTATUS cli_read_andx_recv(struct tevent_req *req, ssize_t *received,
 			    uint8_t **rcvbuf);
@@ -2715,14 +2709,14 @@ NTSTATUS cli_pull(struct cli_state *cli, uint16_t fnum,
 		  off_t start_offset, SMB_OFF_T size, size_t window_size,
 		  NTSTATUS (*sink)(char *buf, size_t n, void *priv),
 		  void *priv, SMB_OFF_T *received);
-ssize_t cli_read(struct cli_state *cli, int fnum, char *buf,
+ssize_t cli_read(struct cli_state *cli, uint16_t fnum, char *buf,
 		 off_t offset, size_t size);
-ssize_t cli_readraw(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size);
+ssize_t cli_readraw(struct cli_state *cli, uint16_t fnum, char *buf, off_t offset, size_t size);
 ssize_t cli_write(struct cli_state *cli,
-    	         int fnum, uint16 write_mode,
+    	         uint16_t fnum, uint16 write_mode,
 		 const char *buf, off_t offset, size_t size);
 ssize_t cli_smbwrite(struct cli_state *cli,
-		     int fnum, char *buf, off_t offset, size_t size1);
+		     uint16_t fnum, char *buf, off_t offset, size_t size1);
 struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
 					 struct event_context *ev,
 					 struct cli_state *cli, uint16_t fnum,
@@ -2753,9 +2747,9 @@ NTSTATUS cli_push(struct cli_state *cli, uint16_t fnum, uint16_t mode,
 
 /* The following definitions come from libsmb/clisecdesc.c  */
 
-SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, 
+SEC_DESC *cli_query_secdesc(struct cli_state *cli, uint16_t fnum, 
 			    TALLOC_CTX *mem_ctx);
-bool cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd);
+bool cli_set_secdesc(struct cli_state *cli, uint16_t fnum, SEC_DESC *sd);
 
 /* The following definitions come from libsmb/clispnego.c  */
 
diff --git a/source3/libgpo/gpo_filesync.c b/source3/libgpo/gpo_filesync.c
index 6d64d7b..d4b623a 100644
--- a/source3/libgpo/gpo_filesync.c
+++ b/source3/libgpo/gpo_filesync.c
@@ -39,15 +39,15 @@ NTSTATUS gpo_copy_file(TALLOC_CTX *mem_ctx,
 		       const char *unix_path)
 {
 	NTSTATUS result;
-	int fnum;
+	uint16_t fnum;
 	int fd = 0;
 	char *data = NULL;
 	static int io_bufsize = 64512;
 	int read_size = io_bufsize;
 	off_t nread = 0;
 
-	if ((fnum = cli_open(cli, nt_path, O_RDONLY, DENY_NONE)) == -1) {
-		result = NT_STATUS_NO_SUCH_FILE;
+	result = cli_open(cli, nt_path, O_RDONLY, DENY_NONE, &fnum);
+	if (!NT_STATUS_IS_OK(result)) {
 		goto out;
 	}
 
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index 45addc2..b06a6fa 100644
--- a/source3/libsmb/clientgen.c
+++ b/source3/libsmb/clientgen.c
@@ -234,7 +234,7 @@ bool cli_receive_smb(struct cli_state *cli)
 			if (cli->oplock_handler) {
 				int fnum = SVAL(cli->inbuf,smb_vwv2);
 				unsigned char level = CVAL(cli->inbuf,smb_vwv3+1);
-				if (!cli->oplock_handler(cli, fnum, level)) {
+				if (!NT_STATUS_IS_OK(cli->oplock_handler(cli, fnum, level))) {
 					return false;
 				}
 			}
diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c
index 54c5947..0573041 100644
--- a/source3/libsmb/clifile.c
+++ b/source3/libsmb/clifile.c
@@ -1083,7 +1083,7 @@ NTSTATUS cli_rmdir(struct cli_state *cli, const char *dname)
  Set or clear the delete on close flag.
 ****************************************************************************/
 
-int cli_nt_delete_on_close(struct cli_state *cli, int fnum, bool flag)
+int cli_nt_delete_on_close(struct cli_state *cli, uint16_t fnum, bool flag)
 {
 	unsigned int data_len = 1;
 	unsigned int param_len = 6;
@@ -1125,6 +1125,7 @@ int cli_nt_delete_on_close(struct cli_state *cli, int fnum, bool flag)
  Used in smbtorture.
 ****************************************************************************/
 
+#if 0
 int cli_nt_create_full(struct cli_state *cli, const char *fname,
 		       uint32_t CreatFlags, uint32_t DesiredAccess,
 		       uint32_t FileAttributes, uint32_t ShareAccess,
@@ -1181,6 +1182,7 @@ int cli_nt_create_full(struct cli_state *cli, const char *fname,
 
 	return SVAL(cli->inbuf,smb_vwv2 + 1);
 }
+#endif
 
 struct cli_ntcreate_state {
 	uint16_t vwv[24];
@@ -1344,6 +1346,7 @@ NTSTATUS cli_ntcreate(struct cli_state *cli,
 	return status;
 }
 
+#if 0
 /****************************************************************************
  Open a file.
 ****************************************************************************/
@@ -1353,6 +1356,7 @@ int cli_nt_create(struct cli_state *cli, const char *fname, uint32_t DesiredAcce
 	return cli_nt_create_full(cli, fname, 0, DesiredAccess, 0,
 				FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0);
 }
+#endif
 
 uint8_t *smb_bytes_push_str(uint8_t *buf, bool ucs2,
 			    const char *str, size_t str_len,
@@ -1411,7 +1415,7 @@ uint8_t *smb_bytes_push_str(uint8_t *buf, bool ucs2,
 
 struct cli_open_state {
 	uint16_t vwv[15];
-	int fnum;
+	uint16_t fnum;
 	struct iovec bytes;
 };
 
@@ -1544,7 +1548,7 @@ static void cli_open_done(struct tevent_req *subreq)
 	tevent_req_done(req);
 }
 
-NTSTATUS cli_open_recv(struct tevent_req *req, int *fnum)
+NTSTATUS cli_open_recv(struct tevent_req *req, uint16_t *pfnum)
 {
 	struct cli_open_state *state = tevent_req_data(
 		req, struct cli_open_state);
@@ -1553,18 +1557,17 @@ NTSTATUS cli_open_recv(struct tevent_req *req, int *fnum)
 	if (tevent_req_is_nterror(req, &status)) {
 		return status;
 	}
-	*fnum = state->fnum;
+	*pfnum = state->fnum;
 	return NT_STATUS_OK;
 }
 
-int cli_open(struct cli_state *cli, const char *fname, int flags,
-	     int share_mode)
+NTSTATUS cli_open(struct cli_state *cli, const char *fname, int flags,
+	     int share_mode, uint16_t *pfnum)
 {
 	TALLOC_CTX *frame = talloc_stackframe();
 	struct event_context *ev;
 	struct tevent_req *req;
 	NTSTATUS status = NT_STATUS_OK;
-	int result = -1;
 
 	if (cli_has_async_calls(cli)) {
 		/*
@@ -1591,13 +1594,13 @@ int cli_open(struct cli_state *cli, const char *fname, int flags,
 		goto fail;
 	}
 
-	cli_open_recv(req, &result);
+	status = cli_open_recv(req, pfnum);
  fail:
 	TALLOC_FREE(frame);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list