]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Report sockets as NFS style reparse points
authorVolker Lendecke <vl@samba.org>
Sun, 7 Jul 2024 18:39:30 +0000 (20:39 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 12 Jul 2024 20:35:34 +0000 (20:35 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
selftest/knownfail.d/reparse
source3/modules/util_reparse.c

index 1b07b904c56a61773e750728c4981f0e4ce94d99..11d094aa5c698580b2c4be996fbc38800cd8ef66 100644 (file)
@@ -1,3 +1,2 @@
 ^samba.tests.reparsepoints.samba.tests.reparsepoints.ReparsePoints.test_create_reparse_directory
 ^samba.tests.reparsepoints.samba.tests.reparsepoints.ReparsePoints.test_create_reparse_nonempty_directory
-^samba.tests.reparsepoints.samba.tests.reparsepoints.ReparsePoints.test_sock_reparse
index d267cfb6f0c07c4fc92724f37864d617d6e6f632..9a2ae531e7fddcc188fb137b7e0673f928716ea2 100644 (file)
@@ -120,6 +120,21 @@ static NTSTATUS fsctl_get_reparse_point_fifo(struct files_struct *fsp,
                fsp, &reparse_data, ctx, _out_data, max_out_len, _out_len);
 }
 
+static NTSTATUS fsctl_get_reparse_point_sock(struct files_struct *fsp,
+                                            TALLOC_CTX *ctx,
+                                            uint8_t **_out_data,
+                                            uint32_t max_out_len,
+                                            uint32_t *_out_len)
+{
+       struct reparse_data_buffer reparse_data = {
+               .tag = IO_REPARSE_TAG_NFS,
+               .parsed.nfs.type = NFS_SPECFILE_SOCK,
+       };
+
+       return fsctl_get_reparse_point_int(
+               fsp, &reparse_data, ctx, _out_data, max_out_len, _out_len);
+}
+
 NTSTATUS fsctl_get_reparse_point(struct files_struct *fsp,
                                 TALLOC_CTX *mem_ctx,
                                 uint32_t *_reparse_tag,
@@ -151,6 +166,11 @@ NTSTATUS fsctl_get_reparse_point(struct files_struct *fsp,
                status = fsctl_get_reparse_point_fifo(
                        fsp, mem_ctx, &out_data, max_out_len, &out_len);
                break;
+       case S_IFSOCK:
+               DBG_DEBUG("%s is a socket\n", fsp_str_dbg(fsp));
+               status = fsctl_get_reparse_point_sock(
+                       fsp, mem_ctx, &out_data, max_out_len, &out_len);
+               break;
        default:
                break;
        }