smbd: Remove struct open_symlink_err
authorVolker Lendecke <vl@samba.org>
Sun, 4 Feb 2024 17:07:19 +0000 (18:07 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 28 Mar 2024 08:05:35 +0000 (08:05 +0000)
This was just a wrapper for a single pointer, remove it

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/smbd/filename.c
source3/smbd/files.c
source3/smbd/proto.h

index 92194a371433ac4b8f828bacb3678c4eedcee0c5..4370d7330483a3cc88fc1a7ea08be6bdff6cc979 100644 (file)
@@ -737,12 +737,12 @@ static NTSTATUS filename_convert_dirfsp_nosymlink(
        NTTIME twrp,
        struct files_struct **_dirfsp,
        struct smb_filename **_smb_fname,
-       struct open_symlink_err **_symlink_err)
+       struct reparse_data_buffer **_symlink_err)
 {
        struct smb_filename *smb_dirname = NULL;
        struct smb_filename *smb_fname_rel = NULL;
        struct smb_filename *smb_fname = NULL;
-       struct open_symlink_err *symlink_err = NULL;
+       struct reparse_data_buffer *symlink_err = NULL;
        const bool posix = (ucf_flags & UCF_POSIX_PATHNAMES);
        char *dirname = NULL;
        const char *fname_rel = NULL;
@@ -847,7 +847,7 @@ static NTSTATUS filename_convert_dirfsp_nosymlink(
 
                if (NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) {
                        struct symlink_reparse_struct
-                               *lnk = &symlink_err->reparse->parsed.lnk;
+                               *lnk = &symlink_err->parsed.lnk;
                        size_t unparsed = lnk->unparsed_path_length;
                        size_t name_in_len, dirname_len;
 
@@ -960,10 +960,10 @@ static NTSTATUS filename_convert_dirfsp_nosymlink(
                 * Upper layers might need the link target. Here we
                 * still have the relname around, get the symlink err.
                 */
-               status = create_open_symlink_err(mem_ctx,
-                                                smb_dirname->fsp,
-                                                smb_fname_rel,
-                                                &symlink_err);
+               status = read_symlink_reparse(mem_ctx,
+                                             smb_dirname->fsp,
+                                             smb_fname_rel,
+                                             &symlink_err);
                if (!NT_STATUS_IS_OK(status)) {
                        DBG_DEBUG("Could not read symlink for %s: %s\n",
                                  smb_fname_str_dbg(
@@ -1136,7 +1136,7 @@ NTSTATUS filename_convert_dirfsp(
        struct files_struct **_dirfsp,
        struct smb_filename **_smb_fname)
 {
-       struct open_symlink_err *symlink_err = NULL;
+       struct reparse_data_buffer *symlink_err = NULL;
        struct symlink_reparse_struct *lnk = NULL;
        NTSTATUS status;
        char *target = NULL;
@@ -1172,7 +1172,7 @@ next:
        if (!NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) {
                return status;
        }
-       lnk = &symlink_err->reparse->parsed.lnk;
+       lnk = &symlink_err->parsed.lnk;
 
        /*
         * If we're on an MSDFS share, see if this is
index e223034acc06b9ce512043b1273f7e42563a9f52..046b58023bd98045ecc3e9603b7504996159e0e3 100644 (file)
@@ -816,29 +816,6 @@ static bool full_path_extend(char **dir, const char *atname)
        return (*dir) != NULL;
 }
 
-NTSTATUS create_open_symlink_err(TALLOC_CTX *mem_ctx,
-                                files_struct *dirfsp,
-                                struct smb_filename *smb_relname,
-                                struct open_symlink_err **_err)
-{
-       struct open_symlink_err *err = NULL;
-       NTSTATUS status;
-
-       err = talloc_zero(mem_ctx, struct open_symlink_err);
-       if (err == NULL) {
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       status = read_symlink_reparse(err, dirfsp, smb_relname, &err->reparse);
-       if (!NT_STATUS_IS_OK(status)) {
-               TALLOC_FREE(err);
-               return status;
-       }
-
-       *_err = err;
-       return NT_STATUS_OK;
-}
-
 /*
  * Create the memcache-key for GETREALFILENAME_CACHE: This supplements
  * the stat cache for the last component to be looked up. Cache
@@ -1017,14 +994,15 @@ lookup:
        return fd;
 }
 
-NTSTATUS openat_pathref_fsp_nosymlink(TALLOC_CTX *mem_ctx,
-                                     struct connection_struct *conn,
-                                     struct files_struct *in_dirfsp,
-                                     const char *path_in,
-                                     NTTIME twrp,
-                                     bool posix,
-                                     struct smb_filename **_smb_fname,
-                                     struct open_symlink_err **_symlink_err)
+NTSTATUS openat_pathref_fsp_nosymlink(
+       TALLOC_CTX *mem_ctx,
+       struct connection_struct *conn,
+       struct files_struct *in_dirfsp,
+       const char *path_in,
+       NTTIME twrp,
+       bool posix,
+       struct smb_filename **_smb_fname,
+       struct reparse_data_buffer **_symlink_err)
 {
        struct files_struct *dirfsp = in_dirfsp;
        struct smb_filename full_fname = {
@@ -1038,7 +1016,7 @@ NTSTATUS openat_pathref_fsp_nosymlink(TALLOC_CTX *mem_ctx,
                .flags = full_fname.flags,
        };
        struct smb_filename *result = NULL;
-       struct open_symlink_err *symlink_err = NULL;
+       struct reparse_data_buffer *symlink_err = NULL;
        struct files_struct *fsp = NULL;
        char *path = NULL, *next = NULL;
        bool ok, is_toplevel;
@@ -1234,12 +1212,12 @@ next:
                 * below.
                 */
 
-               status = create_open_symlink_err(mem_ctx,
-                                                dirfsp,
-                                                &rel_fname,
-                                                &symlink_err);
+               status = read_symlink_reparse(mem_ctx,
+                                             dirfsp,
+                                             &rel_fname,
+                                             &symlink_err);
                if (!NT_STATUS_IS_OK(status)) {
-                       DBG_DEBUG("create_open_symlink_err failed: %s\n",
+                       DBG_DEBUG("read_symlink_reparse failed: %s\n",
                                  nt_errstr(status));
                        goto fail;
                }
@@ -1301,13 +1279,13 @@ next:
                 * freadlink.
                 */
 
-               status = create_open_symlink_err(mem_ctx,
-                                                dirfsp,
-                                                NULL,
-                                                &symlink_err);
+               status = read_symlink_reparse(mem_ctx,
+                                             dirfsp,
+                                             NULL,
+                                             &symlink_err);
 
                if (!NT_STATUS_IS_OK(status)) {
-                       DBG_DEBUG("create_open_symlink_err failed: %s\n",
+                       DBG_DEBUG("read_symlink_reparse failed: %s\n",
                                  nt_errstr(status));
                        status = NT_STATUS_NOT_A_DIRECTORY;
                        goto fail;
@@ -1322,8 +1300,7 @@ next:
                        goto fail;
                }
 
-               symlink_err->reparse->parsed.lnk
-                       .unparsed_path_length = unparsed;
+               symlink_err->parsed.lnk.unparsed_path_length = unparsed;
 
                status = NT_STATUS_STOPPED_ON_SYMLINK;
                goto fail;
@@ -1401,10 +1378,10 @@ done:
                 * Last component was a symlink we opened with O_PATH, fail it
                 * here.
                 */
-               status = create_open_symlink_err(mem_ctx,
-                                                fsp,
-                                                NULL,
-                                                &symlink_err);
+               status = read_symlink_reparse(mem_ctx,
+                                             fsp,
+                                             NULL,
+                                             &symlink_err);
                if (!NT_STATUS_IS_OK(status)) {
                        return status;
                }
index c668a62b6e63590a9cc0bf4156538513c048bce3..4f0b7ac35da4cb4b605892bfc0360083499176b5 100644 (file)
@@ -377,23 +377,17 @@ NTSTATUS open_stream_pathref_fsp(
        struct files_struct **_base_fsp,
        struct smb_filename *smb_fname);
 
-struct open_symlink_err {
-       struct reparse_data_buffer *reparse;
-};
+struct reparse_data_buffer;
 
-NTSTATUS create_open_symlink_err(TALLOC_CTX *mem_ctx,
-                                files_struct *dirfsp,
-                                struct smb_filename *smb_relname,
-                                struct open_symlink_err **_err);
-
-NTSTATUS openat_pathref_fsp_nosymlink(TALLOC_CTX *mem_ctx,
-                                     struct connection_struct *conn,
-                                     struct files_struct *dirfsp,
-                                     const char *path_in,
-                                     NTTIME twrp,
-                                     bool posix,
-                                     struct smb_filename **_smb_fname,
-                                     struct open_symlink_err **_symlink_err);
+NTSTATUS openat_pathref_fsp_nosymlink(
+       TALLOC_CTX *mem_ctx,
+       struct connection_struct *conn,
+       struct files_struct *dirfsp,
+       const char *path_in,
+       NTTIME twrp,
+       bool posix,
+       struct smb_filename **_smb_fname,
+       struct reparse_data_buffer **_symlink_err);
 NTSTATUS openat_pathref_fsp_lcomp(struct files_struct *dirfsp,
                                  struct smb_filename *smb_fname_rel,
                                  uint32_t ucf_flags);
@@ -403,8 +397,6 @@ NTSTATUS readlink_talloc(
        struct smb_filename *smb_relname,
        char **_substitute);
 
-struct reparse_data_buffer;
-
 NTSTATUS read_symlink_reparse(TALLOC_CTX *mem_ctx,
                              struct files_struct *dirfsp,
                              struct smb_filename *smb_relname,