diff options
| author | Stefan Metzmacher <metze@samba.org> | 2008-03-11 19:11:57 +0100 | 
|---|---|---|
| committer | Jeremy Allison <jra@samba.org> | 2008-03-11 11:49:00 -0700 | 
| commit | 6743de076db8f8ddadb59b13f2ceaabb17f385d0 (patch) | |
| tree | 01600b9a8cc90061a310b9e83fc6bfb6e468a14b | |
| parent | de4a4954383584b349f9fd1605a88851dc5d261c (diff) | |
| download | samba-6743de076db8f8ddadb59b13f2ceaabb17f385d0.tar.gz samba-6743de076db8f8ddadb59b13f2ceaabb17f385d0.tar.bz2 samba-6743de076db8f8ddadb59b13f2ceaabb17f385d0.zip | |
libcli/raw: add RAW_RENAME_NTTRANS support
metze
Signed-off-by: Stefan Metzmacher <metze@samba.org>
(This used to be commit bfe773a620640fa46efe008f38144f5452350825)
| -rw-r--r-- | source4/libcli/raw/interfaces.h | 13 | ||||
| -rw-r--r-- | source4/libcli/raw/rawfile.c | 26 | 
2 files changed, 38 insertions, 1 deletions
| diff --git a/source4/libcli/raw/interfaces.h b/source4/libcli/raw/interfaces.h index 24e8ad4afc..3965c58204 100644 --- a/source4/libcli/raw/interfaces.h +++ b/source4/libcli/raw/interfaces.h @@ -175,7 +175,7 @@ struct smb_rmdir {  };  /* struct used in rename() call */ -enum smb_rename_level {RAW_RENAME_RENAME, RAW_RENAME_NTRENAME}; +enum smb_rename_level {RAW_RENAME_RENAME, RAW_RENAME_NTRENAME, RAW_RENAME_NTTRANS};  union smb_rename {  	struct { @@ -206,6 +206,17 @@ union smb_rename {  			const char *new_name;  		} in;  	} ntrename; + +	/* NT TRANS rename interface */ +	struct { +		enum smb_rename_level level; + +		struct { +			union smb_handle file; +			uint16_t flags;/* see RENAME_REPLACE_IF_EXISTS */ +			const char *new_name; +		} in; +	} nttrans;  };  enum smb_tcon_level { diff --git a/source4/libcli/raw/rawfile.c b/source4/libcli/raw/rawfile.c index d9383401b7..725034c3a9 100644 --- a/source4/libcli/raw/rawfile.c +++ b/source4/libcli/raw/rawfile.c @@ -36,6 +36,8 @@ struct smbcli_request *smb_raw_rename_send(struct smbcli_tree *tree,  					union smb_rename *parms)  {  	struct smbcli_request *req = NULL;  +	struct smb_nttrans nt; +	TALLOC_CTX *mem_ctx;  	switch (parms->generic.level) {  	case RAW_RENAME_RENAME: @@ -53,6 +55,30 @@ struct smbcli_request *smb_raw_rename_send(struct smbcli_tree *tree,  		smbcli_req_append_ascii4(req, parms->ntrename.in.old_name, STR_TERMINATE);  		smbcli_req_append_ascii4(req, parms->ntrename.in.new_name, STR_TERMINATE);  		break; + +	case RAW_RENAME_NTTRANS: + +		mem_ctx = talloc_new(tree); + +		nt.in.max_setup = 0; +		nt.in.max_param = 0; +		nt.in.max_data = 0; +		nt.in.setup_count = 0; +		nt.in.setup = NULL; +		nt.in.function = NT_TRANSACT_RENAME; +		nt.in.params = data_blob_talloc(mem_ctx, NULL, 4); +		nt.in.data = data_blob(NULL, 0); + +		SSVAL(nt.in.params.data, VWV(0), parms->nttrans.in.file.fnum); +		SSVAL(nt.in.params.data, VWV(1), parms->nttrans.in.flags); + +		smbcli_blob_append_string(tree->session, mem_ctx, +					  &nt.in.params, parms->nttrans.in.new_name, +					  STR_TERMINATE); + +		req = smb_raw_nttrans_send(tree, &nt); +		talloc_free(mem_ctx); +		return req;  	}  	if (!smbcli_request_send(req)) { | 
