[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Wed Nov 1 19:57:01 UTC 2023
The branch, master has been updated
via 1862561d1a1 smbd: Open file as REPARSE_POINT in unlink_internals()
via 0fc160c6675 smbd: Open file as REPARSE_POINT in reply_rmdir()
via 93f0a367125 smbd: Open file as REPARSE_POINT in rename_internals()
via 879db14ff69 smbd: Open file as REPARSE_POINT in smb_posix_unlink()
via bdc6d3be4ce smbd: Remove unused FAKE_FILE_TYPE_NAMED_PIPE enum
via 92606a46b33 smbd: Move filename_convert_smb1_search_path() to smb1-only code
via ea168705457 smbd: Fix previous_slash()
via 170b67b3b06 manpages: Add a missing space
via 45ec0f61fdc libcli: SMBntcreateX can return STOPPED_ON_SYMLINK
via 9e5d752591b smbd: "have_proc_fds" can only work for a real fd
via a181283f5ce smbd: Remove code #ifdef'ed out >23years ago
via ba2bc30785a smbd: Fix some whitespace
via 846adcb259b smbd: Save errno around unbecome_root()
via 252d2cc76ab smbd: Fix a typo
via d2afaf21c55 smbd: Fix whitespace
via 28873a84d28 smbd: Fix whitespace
via 32d15770da6 smbd: Simplify reopen_from_fsp()
via 3c20ea9df2c smbd: Simplify reopen_from_fsp()
via 9f63fad392f smbd: Simplify sys_proc_fd_path()
from de20ee1adad WHATSNEW: Mention logged on users list removal
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 1862561d1a1dc56f76e02e2116e52239e48a8274
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 25 09:50:23 2023 +0200
smbd: Open file as REPARSE_POINT in unlink_internals()
In the future we'll block opening symlinks as such in
SMB_VFS_CREATE_FILE() unless we open as reparse points.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Wed Nov 1 19:56:33 UTC 2023 on atb-devel-224
commit 0fc160c6675d786d2666878e3a5f6d7a71e3aba7
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 25 09:49:32 2023 +0200
smbd: Open file as REPARSE_POINT in reply_rmdir()
In the future we'll block opening symlinks as such in
SMB_VFS_CREATE_FILE() unless we open as reparse points.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 93f0a3671256d7bb66c64e31607660611e83af59
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 25 09:36:58 2023 +0200
smbd: Open file as REPARSE_POINT in rename_internals()
In the future we'll block opening symlinks as such in
SMB_VFS_CREATE_FILE() unless we open as reparse points.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 879db14ff69126af7b1c7336a36f33e003e8863c
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 25 09:29:13 2023 +0200
smbd: Open file as REPARSE_POINT in smb_posix_unlink()
In the future we'll block opening symlinks as such in
SMB_VFS_CREATE_FILE() unless we open as reparse points.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit bdc6d3be4cee4319b8c3951eb29c37d89518553e
Author: Volker Lendecke <vl at samba.org>
Date: Mon Oct 16 17:17:46 2023 +0200
smbd: Remove unused FAKE_FILE_TYPE_NAMED_PIPE enum
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 92606a46b330c2a0f182a8f68c7c99d13acd7d81
Author: Volker Lendecke <vl at samba.org>
Date: Tue Oct 10 15:36:56 2023 +0200
smbd: Move filename_convert_smb1_search_path() to smb1-only code
Just general cleanup.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit ea1687054570d653b2f19197436ff00dc08089c2
Author: Volker Lendecke <vl at samba.org>
Date: Tue Oct 24 13:18:32 2023 +0200
smbd: Fix previous_slash()
Untested code is broken code... previous_slash() did not return a
pointer to the slash but after it. This went undetected because so far
we never call symlink_target_path() with "unparsed==0". Once we
started doing that, we would find that the "unparsed==0" case actually
puts parent on the "previous slash", not the character behind it.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 170b67b3b06f0582de2d2463983ad5d1e08cbe37
Author: Volker Lendecke <vl at samba.org>
Date: Fri Oct 27 09:55:54 2023 +0200
manpages: Add a missing space
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 45ec0f61fdcab7c0c4764f5e1c26faa06b02594e
Author: Volker Lendecke <vl at samba.org>
Date: Tue Oct 24 18:46:55 2023 +0200
libcli: SMBntcreateX can return STOPPED_ON_SYMLINK
This does not count as NT_STATUS_IS_ERR, as it starts with 0x8 instead
of 0xC. So we return NT_STATUS_INVALID_NETWORK_RESPONSE, which is
wrong.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 9e5d752591b8d3c3c9a9ab7992d68070ab275400
Author: Volker Lendecke <vl at samba.org>
Date: Sun Oct 22 16:25:53 2023 +0200
smbd: "have_proc_fds" can only work for a real fd
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit a181283f5ce0fbcdb83969d5ae25a9b6dd193390
Author: Volker Lendecke <vl at samba.org>
Date: Mon Oct 16 17:42:37 2023 +0200
smbd: Remove code #ifdef'ed out >23years ago
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit ba2bc30785a0b6c1d45efb3c21ebd84abe733777
Author: Volker Lendecke <vl at samba.org>
Date: Mon Oct 16 17:38:02 2023 +0200
smbd: Fix some whitespace
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 846adcb259bae548f40f0c4bc7d8f2fec9d5e0fb
Author: Volker Lendecke <vl at samba.org>
Date: Mon Oct 16 12:00:39 2023 +0200
smbd: Save errno around unbecome_root()
Probably not required, but better safe than sorry.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 252d2cc76ab09b3d0c8ece2a6267f93ecf813b41
Author: Volker Lendecke <vl at samba.org>
Date: Fri Oct 13 16:19:41 2023 +0200
smbd: Fix a typo
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit d2afaf21c555db599415b50aff32ac03b36dc589
Author: Volker Lendecke <vl at samba.org>
Date: Tue Oct 10 16:00:14 2023 +0200
smbd: Fix whitespace
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 28873a84d285366ba7bbe2edfd431104bb11564a
Author: Volker Lendecke <vl at samba.org>
Date: Tue Oct 10 15:10:06 2023 +0200
smbd: Fix whitespace
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 32d15770da6562871d93006a2ee383d4f68bc660
Author: Volker Lendecke <vl at samba.org>
Date: Sun Oct 15 14:48:40 2023 +0200
smbd: Simplify reopen_from_fsp()
Add the checks in reopen_from_procfd() into an if-condition, remove
the MORE_PROCESSING_REQUIRED logic that confused me.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 3c20ea9df2ce8ce1b5c0f7a9a067e64ef61158a6
Author: Volker Lendecke <vl at samba.org>
Date: Sun Oct 15 14:31:03 2023 +0200
smbd: Simplify reopen_from_fsp()
Pass down a dummy "file_created" variable in open_directory(), remove
a unneeded if-condition.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 9f63fad392f3cff34d6a8e318e0427499170c417
Author: Volker Lendecke <vl at samba.org>
Date: Sun Oct 15 11:39:32 2023 +0200
smbd: Simplify sys_proc_fd_path()
We know the buffer size up-front, create a struct for that. Also, I
think if we ever hit another /proc pattern this is very likely on a
different OS that could be handled by an #ifdef.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
docs-xml/manpages/vfs_virusfilter.8.xml | 2 +-
source3/include/fake_file.h | 1 -
source3/include/proto.h | 5 +-
source3/lib/system.c | 55 +++-----------
source3/libsmb/async_smb.c | 5 ++
source3/modules/vfs_btrfs.c | 14 ++--
source3/modules/vfs_default.c | 106 +++++++++-----------------
source3/modules/vfs_gpfs.c | 55 +++++---------
source3/modules/vfs_posixacl.c | 29 ++-----
source3/smbd/close.c | 6 +-
source3/smbd/dosmode.c | 2 +-
source3/smbd/fake_file.c | 10 +--
source3/smbd/filename.c | 131 ++++++--------------------------
source3/smbd/ntquotas.c | 20 ++---
source3/smbd/open.c | 103 ++++++++-----------------
source3/smbd/proto.h | 7 --
source3/smbd/smb1_pipes.c | 10 ---
source3/smbd/smb1_reply.c | 3 +-
source3/smbd/smb1_trans2.c | 2 +-
source3/smbd/smb1_utils.c | 83 ++++++++++++++++++++
source3/smbd/smb1_utils.h | 7 ++
source3/smbd/smb2_reply.c | 5 +-
22 files changed, 258 insertions(+), 403 deletions(-)
Changeset truncated at 500 lines:
diff --git a/docs-xml/manpages/vfs_virusfilter.8.xml b/docs-xml/manpages/vfs_virusfilter.8.xml
index 88f91d73a42..f73c41e1dcf 100644
--- a/docs-xml/manpages/vfs_virusfilter.8.xml
+++ b/docs-xml/manpages/vfs_virusfilter.8.xml
@@ -64,7 +64,7 @@
<para>If this option is not set, the default path depends on the
configured AV scanning engine.
</para>
- <para>For the <emphasis>sophos</emphasis>backend the default is
+ <para>For the <emphasis>sophos</emphasis> backend the default is
<emphasis>/var/run/savdi/sssp.sock</emphasis>.</para>
<para>For the <emphasis>fsav</emphasis> backend the default is
<emphasis>/tmp/.fsav-0</emphasis>.</para>
diff --git a/source3/include/fake_file.h b/source3/include/fake_file.h
index 434bc485d5e..f688ed296fd 100644
--- a/source3/include/fake_file.h
+++ b/source3/include/fake_file.h
@@ -23,7 +23,6 @@
enum FAKE_FILE_TYPE {
FAKE_FILE_TYPE_NONE = 0,
FAKE_FILE_TYPE_QUOTA,
- FAKE_FILE_TYPE_NAMED_PIPE,
FAKE_FILE_TYPE_NAMED_PIPE_PROXY
};
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 8a6b944a0d6..bbb089a5908 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -208,8 +208,11 @@ char *sys_realpath(const char *path);
int sys_get_number_of_cores(void);
#endif
+struct sys_proc_fd_path_buf {
+ char buf[35]; /* "/proc/self/fd/" + strlen(2^64) + 0-terminator */
+};
bool sys_have_proc_fds(void);
-const char *sys_proc_fd_path(int fd, char *buf, size_t bufsize);
+char *sys_proc_fd_path(int fd, struct sys_proc_fd_path_buf *buf);
struct stat;
void init_stat_ex_from_stat (struct stat_ex *dst,
diff --git a/source3/lib/system.c b/source3/lib/system.c
index 7c9a6b5fa08..132e5827b37 100644
--- a/source3/lib/system.c
+++ b/source3/lib/system.c
@@ -1016,22 +1016,10 @@ int sys_get_number_of_cores(void)
}
#endif
-static struct proc_fd_pattern {
- const char *pattern;
- const char *test_path;
-} proc_fd_patterns[] = {
- /* Linux */
- { "/proc/self/fd/%d", "/proc/self/fd/0" },
- { NULL, NULL },
-};
-
-static const char *proc_fd_pattern;
-
bool sys_have_proc_fds(void)
{
- static bool checked;
- static bool have_proc_fds;
- struct proc_fd_pattern *p = NULL;
+ static bool checked = false;
+ static bool have_proc_fds = false;
struct stat sb;
int ret;
@@ -1039,42 +1027,19 @@ bool sys_have_proc_fds(void)
return have_proc_fds;
}
- for (p = &proc_fd_patterns[0]; p->test_path != NULL; p++) {
- ret = stat(p->test_path, &sb);
- if (ret != 0) {
- continue;
- }
- have_proc_fds = true;
- proc_fd_pattern = p->pattern;
- break;
- }
-
+ ret = stat("/proc/self/fd/0", &sb);
+ have_proc_fds = (ret == 0);
checked = true;
+
return have_proc_fds;
}
-const char *sys_proc_fd_path(int fd, char *buf, size_t bufsize)
+char *sys_proc_fd_path(int fd, struct sys_proc_fd_path_buf *buf)
{
- int written;
+ int written =
+ snprintf(buf->buf, sizeof(buf->buf), "/proc/self/fd/%d", fd);
- if (!sys_have_proc_fds()) {
- return NULL;
- }
-
-#if defined(__clang__)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wformat-nonliteral"
-#endif
- written = snprintf(buf,
- bufsize,
- proc_fd_pattern,
- fd);
-#if defined(__clang__)
-#pragma clang diagnostic pop
-#endif
- if (written >= bufsize) {
- return NULL;
- }
+ SMB_ASSERT(sys_have_proc_fds() && (written >= 0));
- return buf;
+ return buf->buf;
}
diff --git a/source3/libsmb/async_smb.c b/source3/libsmb/async_smb.c
index bcb24a47943..38e0bb93ca5 100644
--- a/source3/libsmb/async_smb.c
+++ b/source3/libsmb/async_smb.c
@@ -201,6 +201,11 @@ NTSTATUS cli_smb_recv(struct tevent_req *req,
is_expected = true;
}
+ if ((state->smb_command == SMBntcreateX) &&
+ NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) {
+ min_wct = 0;
+ }
+
map_dos_errors = state->cli->map_dos_errors;
state->cli->raw_status = status;
talloc_free(state->ptr);
diff --git a/source3/modules/vfs_btrfs.c b/source3/modules/vfs_btrfs.c
index 12517941ad0..90312524287 100644
--- a/source3/modules/vfs_btrfs.c
+++ b/source3/modules/vfs_btrfs.c
@@ -466,8 +466,7 @@ static NTSTATUS btrfs_fget_compression(struct vfs_handle_struct *handle,
struct files_struct *fsp,
uint16_t *_compression_fmt)
{
- char buf[PATH_MAX];
- const char *p = NULL;
+ struct sys_proc_fd_path_buf buf;
int ret;
long flags = 0;
int fsp_fd = fsp_get_pathref_fd(fsp);
@@ -493,14 +492,11 @@ static NTSTATUS btrfs_fget_compression(struct vfs_handle_struct *handle,
return NT_STATUS_NOT_IMPLEMENTED;
}
- p = sys_proc_fd_path(fsp_fd, buf, sizeof(buf));
- if (p == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
-
- fd = open(p, O_RDONLY);
+ fd = open(sys_proc_fd_path(fsp_fd, &buf), O_RDONLY);
if (fd == -1) {
- DBG_DEBUG("/proc open of %s failed: %s\n", p, strerror(errno));
+ DBG_DEBUG("/proc open of %s failed: %s\n",
+ buf.buf,
+ strerror(errno));
return map_nt_error_from_unix(errno);
}
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 7fa6872d171..d1a19568e4e 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -738,11 +738,22 @@ static int vfswrap_openat(vfs_handle_struct *handle,
mode);
if (became_root) {
+ int err = errno;
unbecome_root();
+ errno = err;
}
done:
- fsp->fsp_flags.have_proc_fds = fsp->conn->have_proc_fds;
+ if (result >= 0) {
+ fsp->fsp_flags.have_proc_fds = fsp->conn->have_proc_fds;
+ } else {
+ /*
+ * "/proc/self/fd/-1" never exists. Indicate to upper
+ * layers that for this fsp a possible name-based
+ * fallback is the only way to go.
+ */
+ fsp->fsp_flags.have_proc_fds = false;
+ }
out:
END_PROFILE(syscall_openat);
@@ -2677,15 +2688,10 @@ static int vfswrap_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t m
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *p = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
+
+ result = chmod(sys_proc_fd_path(fd, &buf), mode);
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p != NULL) {
- result = chmod(p, mode);
- } else {
- result = -1;
- }
END_PROFILE(syscall_fchmod);
return result;
}
@@ -2713,15 +2719,10 @@ static int vfswrap_fchown(vfs_handle_struct *handle, files_struct *fsp, uid_t ui
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *p = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
+
+ result = chown(sys_proc_fd_path(fd, &buf), uid, gid);
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p != NULL) {
- result = chown(p, uid, gid);
- } else {
- result = -1;
- }
END_PROFILE(syscall_fchown);
return result;
}
@@ -2846,19 +2847,12 @@ static int vfswrap_fntimes(vfs_handle_struct *handle,
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *p = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p != NULL) {
- /*
- * The dirfd argument of utimensat is ignored when
- * pathname is an absolute path
- */
- result = utimensat(AT_FDCWD, p, times, 0);
- } else {
- result = -1;
- }
+ result = utimensat(AT_FDCWD,
+ sys_proc_fd_path(fd, &buf),
+ times,
+ 0);
goto out;
}
@@ -3274,15 +3268,9 @@ static int vfswrap_fchflags(vfs_handle_struct *handle,
}
if (fsp->fsp_flags.have_proc_fds) {
- const char *p = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
-
- return chflags(p, flags);
+ return chflags(sys_proc_fd_path(fd, &buf), flags);
}
/*
@@ -3521,15 +3509,9 @@ static ssize_t vfswrap_fgetxattr(struct vfs_handle_struct *handle,
}
if (fsp->fsp_flags.have_proc_fds) {
- const char *p = NULL;
- char buf[PATH_MAX];
-
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
+ struct sys_proc_fd_path_buf buf;
- return getxattr(p, name, value, size);
+ return getxattr(sys_proc_fd_path(fd, &buf), name, value, size);
}
/*
@@ -3847,15 +3829,9 @@ static ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files
}
if (fsp->fsp_flags.have_proc_fds) {
- const char *p = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
-
- return listxattr(p, list, size);
+ return listxattr(sys_proc_fd_path(fd, &buf), list, size);
}
/*
@@ -3875,15 +3851,9 @@ static int vfswrap_fremovexattr(struct vfs_handle_struct *handle, struct files_s
}
if (fsp->fsp_flags.have_proc_fds) {
- const char *p = NULL;
- char buf[PATH_MAX];
-
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
+ struct sys_proc_fd_path_buf buf;
- return removexattr(p, name);
+ return removexattr(sys_proc_fd_path(fd, &buf), name);
}
/*
@@ -3903,15 +3873,13 @@ static int vfswrap_fsetxattr(struct vfs_handle_struct *handle, struct files_stru
}
if (fsp->fsp_flags.have_proc_fds) {
- const char *p = NULL;
- char buf[PATH_MAX];
-
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
+ struct sys_proc_fd_path_buf buf;
- return setxattr(p, name, value, size, flags);
+ return setxattr(sys_proc_fd_path(fd, &buf),
+ name,
+ value,
+ size,
+ flags);
}
/*
diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
index 21ede6cea5a..1c11809fb1b 100644
--- a/source3/modules/vfs_gpfs.c
+++ b/source3/modules/vfs_gpfs.c
@@ -1446,7 +1446,7 @@ static NTSTATUS vfs_gpfs_fget_dos_attributes(struct vfs_handle_struct *handle,
{
struct gpfs_config_data *config;
int fd = fsp_get_pathref_fd(fsp);
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
const char *p = NULL;
struct gpfs_iattr64 iattr = { };
unsigned int litemask = 0;
@@ -1463,10 +1463,7 @@ static NTSTATUS vfs_gpfs_fget_dos_attributes(struct vfs_handle_struct *handle,
if (fsp->fsp_flags.is_pathref && !config->pathref_ok.gpfs_fstat_x) {
if (fsp->fsp_flags.have_proc_fds) {
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
+ p = sys_proc_fd_path(fd, &buf);
} else {
p = fsp->fsp_name->base_name;
}
@@ -1560,20 +1557,17 @@ static NTSTATUS vfs_gpfs_fset_dos_attributes(struct vfs_handle_struct *handle,
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *p = NULL;
- char buf[PATH_MAX];
-
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
+ struct sys_proc_fd_path_buf buf;
- ret = gpfswrap_set_winattrs_path(p,
+ ret = gpfswrap_set_winattrs_path(sys_proc_fd_path(fd, &buf),
GPFS_WINATTR_SET_ATTRS,
&attrs);
if (ret == -1) {
- DBG_WARNING("Setting winattrs failed for [%s][%s]: %s\n",
- p, fsp_str_dbg(fsp), strerror(errno));
+ DBG_WARNING("Setting winattrs failed for "
+ "[%s][%s]: %s\n",
+ buf.buf,
+ fsp_str_dbg(fsp),
+ strerror(errno));
return map_nt_error_from_unix(errno);
}
return NT_STATUS_OK;
@@ -1728,18 +1722,16 @@ static int smbd_gpfs_set_times(struct files_struct *fsp,
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *p = NULL;
- char buf[PATH_MAX];
-
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
+ struct sys_proc_fd_path_buf buf;
- rc = gpfswrap_set_times_path(buf, flags, gpfs_times);
+ rc = gpfswrap_set_times_path(sys_proc_fd_path(fd, &buf),
+ flags,
+ gpfs_times);
if (rc != 0) {
DBG_WARNING("gpfs_set_times_path(%s,%s) failed: %s\n",
- fsp_str_dbg(fsp), p, strerror(errno));
+ fsp_str_dbg(fsp),
+ buf.buf,
+ strerror(errno));
}
return rc;
}
@@ -1816,17 +1808,12 @@ static int vfs_gpfs_fntimes(struct vfs_handle_struct *handle,
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *p = NULL;
- char buf[PATH_MAX];
-
- p = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (p == NULL) {
- return -1;
- }
+ struct sys_proc_fd_path_buf buf;
- ret = gpfswrap_set_winattrs_path(p,
- GPFS_WINATTR_SET_CREATION_TIME,
- &attrs);
+ ret = gpfswrap_set_winattrs_path(
+ sys_proc_fd_path(fd, &buf),
+ GPFS_WINATTR_SET_CREATION_TIME,
+ &attrs);
if (ret == -1 && errno != ENOSYS) {
DBG_WARNING("Set GPFS ntimes failed %d\n", ret);
return -1;
diff --git a/source3/modules/vfs_posixacl.c b/source3/modules/vfs_posixacl.c
index 2c2b68931a0..feb819de982 100644
--- a/source3/modules/vfs_posixacl.c
+++ b/source3/modules/vfs_posixacl.c
@@ -58,15 +58,9 @@ SMB_ACL_T posixacl_sys_acl_get_fd(vfs_handle_struct *handle,
acl = acl_get_fd(fsp_get_io_fd(fsp));
} else if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *proc_fd_path = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- proc_fd_path = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (proc_fd_path == NULL) {
- return NULL;
- }
-
- acl = acl_get_file(proc_fd_path, acl_type);
+ acl = acl_get_file(sys_proc_fd_path(fd, &buf), acl_type);
} else {
/*
* This is no longer a handle based call.
@@ -112,15 +106,9 @@ int posixacl_sys_acl_set_fd(vfs_handle_struct *handle,
if (!fsp->fsp_flags.is_pathref && type == SMB_ACL_TYPE_ACCESS) {
res = acl_set_fd(fd, acl);
} else if (fsp->fsp_flags.have_proc_fds) {
- const char *proc_fd_path = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- proc_fd_path = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (proc_fd_path == NULL) {
- acl_free(acl);
- return -1;
- }
- res = acl_set_file(proc_fd_path, acl_type, acl);
+ res = acl_set_file(sys_proc_fd_path(fd, &buf), acl_type, acl);
} else {
/*
* This is no longer a handle based call.
@@ -139,14 +127,9 @@ int posixacl_sys_acl_delete_def_fd(vfs_handle_struct *handle,
{
--
Samba Shared Repository
More information about the samba-cvs
mailing list