1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

libcli/raw: add RAW_RENAME_NTTRANS support

metze

Signed-off-by: Stefan Metzmacher <metze@samba.org>
(This used to be commit bfe773a620)
This commit is contained in:
Stefan Metzmacher 2008-03-11 19:11:57 +01:00 committed by Jeremy Allison
parent de4a495438
commit 6743de076d
2 changed files with 38 additions and 1 deletions

View File

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

View File

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