s3: smbd: Centralize error exits to an 'out' label in hardlink_internals().
authorJeremy Allison <jra@samba.org>
Tue, 19 Jan 2021 20:49:40 +0000 (12:49 -0800)
committerJeremy Allison <jra@samba.org>
Tue, 9 Feb 2021 00:10:29 +0000 (00:10 +0000)
Makes it easier to add TALLOC_FREE's that are always called.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Böhme <slow@samba.org>
source3/smbd/trans2.c

index 72db5489f053b6dde190772bcc1f6c3719afb1ea..a869d034f9f153a2f572a23052196a5bafb767e3 100644 (file)
@@ -6469,13 +6469,15 @@ NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
 
        /* source must already exist. */
        if (!VALID_STAT(smb_fname_old->st)) {
-               return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+               status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
+               goto out;
        }
 
        if (VALID_STAT(smb_fname_new->st)) {
                if (overwrite_if_exists) {
                        if (S_ISDIR(smb_fname_new->st.st_ex_mode)) {
-                               return NT_STATUS_FILE_IS_A_DIRECTORY;
+                               status = NT_STATUS_FILE_IS_A_DIRECTORY;
+                               goto out;
                        }
                        status = unlink_internals(conn,
                                                req,
@@ -6483,29 +6485,33 @@ NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
                                                smb_fname_new,
                                                false);
                        if (!NT_STATUS_IS_OK(status)) {
-                               return status;
+                               goto out;
                        }
                } else {
                        /* Disallow if newname already exists. */
-                       return NT_STATUS_OBJECT_NAME_COLLISION;
+                       status = NT_STATUS_OBJECT_NAME_COLLISION;
+                       goto out;
                }
        }
 
        /* No links from a directory. */
        if (S_ISDIR(smb_fname_old->st.st_ex_mode)) {
-               return NT_STATUS_FILE_IS_A_DIRECTORY;
+               status = NT_STATUS_FILE_IS_A_DIRECTORY;
+               goto out;
        }
 
        /* Setting a hardlink to/from a stream isn't currently supported. */
        ok = is_ntfs_stream_smb_fname(smb_fname_old);
        if (ok) {
                DBG_DEBUG("Old name has streams\n");
-               return NT_STATUS_INVALID_PARAMETER;
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
        ok = is_ntfs_stream_smb_fname(smb_fname_new);
        if (ok) {
                DBG_DEBUG("New name has streams\n");
-               return NT_STATUS_INVALID_PARAMETER;
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
 
        DEBUG(10,("hardlink_internals: doing hard link %s -> %s\n",
@@ -6524,6 +6530,9 @@ NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
                         nt_errstr(status), smb_fname_old->base_name,
                         smb_fname_new->base_name));
        }
+
+  out:
+
        return status;
 }