summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnand Avati <avati@redhat.com>2013-04-29 15:21:00 -0700
committerKarolin Seeger <kseeger@samba.org>2013-05-07 10:32:42 +0200
commited22de6479971421b8e32188bfea4521a5f1c0cc (patch)
tree49b80f19018d493ab3aa675cca09fbbf71540b58
parenta752308b89677d571300487858ba2509fe37ee6d (diff)
downloadsamba-ed22de6479971421b8e32188bfea4521a5f1c0cc.tar.gz
check_parent_exists() can change errno. Ensure we preserve it across calls.
Reviewed-by: Jeremy Allison <jra@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org> Autobuild-User(master): Volker Lendecke <vl@samba.org> Autobuild-Date(master): Tue Apr 30 11:00:11 CEST 2013 on sn-devel-104 (cherry picked from commit 7e807934e6550308efed814a20ce6d6dabbad557) Fix bug #9833 - Function called in unix_convert() path can overwrite errno. Autobuild-User(v4-0-test): Karolin Seeger <kseeger@samba.org> Autobuild-Date(v4-0-test): Tue May 7 10:32:43 CEST 2013 on sn-devel-104
-rw-r--r--source3/smbd/filename.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index 0be566f8975..9b05de368c1 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -450,13 +450,17 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
if (errno == ENOENT) {
/* Optimization when creating a new file - only
- the last component doesn't exist. */
+ the last component doesn't exist.
+ NOTE : check_parent_exists() doesn't preserve errno.
+ */
+ int saved_errno = errno;
status = check_parent_exists(ctx,
conn,
posix_pathnames,
smb_fname,
&dirpath,
&start);
+ errno = saved_errno;
if (!NT_STATUS_IS_OK(status)) {
goto fail;
}
@@ -529,13 +533,16 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
* Optimization for common case where the wildcard
* is in the last component and the client already
* sent the correct case.
+ * NOTE : check_parent_exists() doesn't preserve errno.
*/
+ int saved_errno = errno;
status = check_parent_exists(ctx,
conn,
posix_pathnames,
smb_fname,
&dirpath,
&start);
+ errno = saved_errno;
if (!NT_STATUS_IS_OK(status)) {
goto fail;
}