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)) { |