The Samba-Bugzilla – Attachment 15865 Details for
Bug 14256
smbd does a chdir() twice per request
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for 4.12 cherry-picked from master
bug14256-v412.patch (text/plain), 3.18 KB, created by
Ralph Böhme
on 2020-03-16 13:32:01 UTC
(
hide
)
Description:
Patch for 4.12 cherry-picked from master
Filename:
MIME Type:
Creator:
Ralph Böhme
Created:
2020-03-16 13:32:01 UTC
Size:
3.18 KB
patch
obsolete
>From e2d2be40358c507341cf40f76b78227afb2fcebc Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Wed, 22 Jan 2020 10:52:39 +0100 >Subject: [PATCH] smbd: avoid double chdir() in chdir_current_service() > >Since 8e81090789e4cc3ba9e5aa792d4e52971909c894 we're doing chdir() twice, first >into conn->connectpath, then into conn->origpath. > >Before commit 8e81090789e4cc3ba9e5aa792d4e52971909c894 if >chdir(conn->connectpath) succeeded, we wouldn't do the second chdir(). > >While at it, simplify the logging logic: if chdir() fails in this core function, >just always log is as error including the unix token. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14256 >RN: smbd does a chdir() twice per request > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Andreas Schneider <asn@samba.org> > >Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org> >Autobuild-Date(master): Thu Feb 6 11:44:07 UTC 2020 on sn-devel-184 > >(cherry picked from commit f705629a171c1411131164f3adff36175154c093) >--- > source3/smbd/service.c | 67 ++++++++++++++++++------------------------ > 1 file changed, 29 insertions(+), 38 deletions(-) > >diff --git a/source3/smbd/service.c b/source3/smbd/service.c >index 1abc23ad422..03125a30dad 100644 >--- a/source3/smbd/service.c >+++ b/source3/smbd/service.c >@@ -146,55 +146,46 @@ bool chdir_current_service(connection_struct *conn) > const struct smb_filename origpath_fname = { > .base_name = conn->origpath, > }; >+ int saved_errno = 0; >+ char *utok_str = NULL; > int ret; > > conn->lastused_count++; > > ret = vfs_ChDir(conn, &connectpath_fname); >- if (ret != 0) { >- int saved_errno = errno; >- >- if (saved_errno == EACCES) { >- char *str = utok_string( >- talloc_tos(), >- conn->session_info->unix_token); >- DBG_WARNING("vfs_ChDir(%s) got " >- "permission denied, current " >- "token: %s\n", >- conn->connectpath, str); >- TALLOC_FREE(str); >- } else { >- DBG_ERR("vfs_ChDir(%s) failed: " >- "%s!\n", >- conn->connectpath, >- strerror(saved_errno)); >- } >+ if (ret == 0) { >+ return true; >+ } >+ saved_errno = errno; >+ >+ utok_str = utok_string(talloc_tos(), >+ conn->session_info->unix_token); >+ if (utok_str == NULL) { >+ errno = saved_errno; > return false; > } > >+ DBG_ERR("vfs_ChDir(%s) failed: %s. Current token: %s\n", >+ conn->connectpath, >+ strerror(saved_errno), >+ utok_str); >+ > ret = vfs_ChDir(conn, &origpath_fname); >- if (ret != 0) { >- int saved_errno = errno; >- >- if (saved_errno == EACCES) { >- char *str = utok_string( >- talloc_tos(), >- conn->session_info->unix_token); >- DBG_WARNING("vfs_ChDir(%s) got " >- "permission denied, current " >- "token: %s\n", >- conn->origpath, str); >- TALLOC_FREE(str); >- } else { >- DBG_ERR("vfs_ChDir(%s) failed: " >- "%s!\n", >- conn->origpath, >- strerror(saved_errno)); >- } >- return false; >+ if (ret == 0) { >+ TALLOC_FREE(utok_str); >+ return true; > } >+ saved_errno = errno; > >- return true; >+ DBG_ERR("vfs_ChDir(%s) failed: %s. Current token: %s\n", >+ conn->origpath, >+ strerror(saved_errno), >+ utok_str); >+ >+ if (saved_errno != 0) { >+ errno = saved_errno; >+ } >+ return false; > } > > /**************************************************************************** >-- >2.24.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
jra
:
review+
Actions:
View
Attachments on
bug 14256
:
15864
| 15865 |
15868