s3: Add utility function for copying an smb_filename struct
authorTim Prouty <tprouty@samba.org>
Wed, 10 Jun 2009 00:04:10 +0000 (17:04 -0700)
committerTim Prouty <tprouty@samba.org>
Wed, 10 Jun 2009 20:13:27 +0000 (13:13 -0700)
source3/include/proto.h
source3/smbd/filename.c

index 9b297155e9cf320f41acc5563a0b77ede11a2b41..f5e44bad64685eece1119c3b100327f6320a7008 100644 (file)
@@ -6362,6 +6362,9 @@ int fsp_stat(files_struct *fsp, SMB_STRUCT_STAT *pst);
 
 NTSTATUS get_full_smb_filename(TALLOC_CTX *ctx, const struct smb_filename *smb_fname,
                              char **full_name);
+NTSTATUS copy_smb_filename(TALLOC_CTX *ctx,
+                          const struct smb_filename *smb_fname_in,
+                          struct smb_filename **smb_fname_out);
 NTSTATUS unix_convert(TALLOC_CTX *ctx,
                      connection_struct *conn,
                      const char *orig_path,
index 059dca29c8dfc3abfac337b953fd182c80401558..989733260705f5d6c6c78c0653327219f1ad3f65 100644 (file)
@@ -97,6 +97,45 @@ NTSTATUS get_full_smb_filename(TALLOC_CTX *ctx, const struct smb_filename *smb_f
        return NT_STATUS_OK;
 }
 
+NTSTATUS copy_smb_filename(TALLOC_CTX *ctx,
+                          const struct smb_filename *smb_fname_in,
+                          struct smb_filename **smb_fname_out)
+{
+
+       *smb_fname_out = TALLOC_ZERO_P(ctx, struct smb_filename);
+       if (*smb_fname_out == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       if (smb_fname_in->base_name) {
+               (*smb_fname_out)->base_name =
+                   talloc_strdup(*smb_fname_out, smb_fname_in->base_name);
+               if ((*smb_fname_out)->base_name)
+                       goto no_mem_err;
+       }
+
+       if (smb_fname_in->stream_name) {
+               (*smb_fname_out)->stream_name =
+                   talloc_strdup(*smb_fname_out, smb_fname_in->stream_name);
+               if ((*smb_fname_out)->stream_name)
+                       goto no_mem_err;
+       }
+
+       if (smb_fname_in->original_lcomp) {
+               (*smb_fname_out)->original_lcomp =
+                   talloc_strdup(*smb_fname_out, smb_fname_in->original_lcomp);
+               if ((*smb_fname_out)->original_lcomp)
+                       goto no_mem_err;
+       }
+
+       (*smb_fname_out)->st = smb_fname_in->st;
+       return NT_STATUS_OK;
+
+ no_mem_err:
+       TALLOC_FREE(*smb_fname_out);
+       return NT_STATUS_NO_MEMORY;
+}
+
 /****************************************************************************
 This routine is called to convert names from the dos namespace to unix
 namespace. It needs to handle any case conversions, mangling, format changes,