libcli/raw: add RAW_RENAME_NTTRANS support
authorStefan Metzmacher <metze@samba.org>
Tue, 11 Mar 2008 18:11:57 +0000 (19:11 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 11 Mar 2008 18:49:00 +0000 (11:49 -0700)
metze

Signed-off-by: Stefan Metzmacher <metze@samba.org>
(This used to be commit bfe773a620640fa46efe008f38144f5452350825)

source4/libcli/raw/interfaces.h
source4/libcli/raw/rawfile.c

index 24e8ad4afcfee34d0ab0ab1c16934a8e625b88ba..3965c58204ce1da16e3dd11e5691ff22c9844d28 100644 (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 {
index d9383401b7af00f2155d652ea445adac5c9599a1..725034c3a91539f3080ecdc688c8bde1142b110b 100644 (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)) {