[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Mon Jun 15 19:26:03 UTC 2020


The branch, master has been updated
       via  a4f2b8daee9 vfs: Move reparse point functions to util_reparse.c
       via  1cb17b5472b ldb: Avoid a cast (unsigned long long) in ldbmodify.c
       via  0c18e2fdd49 lib: Remove an unused macro
       via  9f7791a909a libsmb: Add overflow protection to symlink_reparse_buffer_marshall()
       via  10d883105a0 libcli: Add tevent_req_received() calls to smb2cli_create_recv()
       via  c751c710620 libcli: Move IO_REPARSE_TAG definitions to smb_constants.h
       via  7e73527ad35 libcli: Slightly simplify smb2cli_req_recv() with an early return
       via  d304341ea39 smbd: Apply a bit of README.Coding to unix_convert()
       via  1943e967a06 smbd: Reduce indentation in check_reduced_name()
       via  1e7ff44fd46 lib: Move a #define ip_equal_v4() to nmbd/nmbd.h
       via  38814784cf0 smbd: Fix typos
       via  b654f2565b0 tsocket: Fix a typo
       via  86008f5e6f2 net: Align integer types
      from  d827392f2ab replmd: slightly clarify a comment

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit a4f2b8daee9b54e68a6c46d029bba4c1578aaf21
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 11 15:15:02 2020 +0200

    vfs: Move reparse point functions to util_reparse.c
    
    Shamelessly copied from from Jeremy's smb2-unix branch :-)
    
    No change in behaviour, but we will have to cope with reparse points in the
    future.
    
    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): Mon Jun 15 19:25:40 UTC 2020 on sn-devel-184

commit 1cb17b5472b18572d14a52a0c9ddb8064322a383
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jun 15 12:32:36 2020 +0200

    ldb: Avoid a cast (unsigned long long) in ldbmodify.c
    
    We have %zu for size_t
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 0c18e2fdd491736190cfdff3f51733c5c6e6b309
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 11 14:49:58 2020 +0200

    lib: Remove an unused macro
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9f7791a909a17bfbeaa06145d803654b76441d3f
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 11 14:42:49 2020 +0200

    libsmb: Add overflow protection to symlink_reparse_buffer_marshall()
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 10d883105a02c49c86a7a79020337c1f8b419afb
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 9 18:54:07 2020 +0200

    libcli: Add tevent_req_received() calls to smb2cli_create_recv()
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c751c710620686c01eefbe83245d6fdbdc47cd32
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 9 17:18:35 2020 +0200

    libcli: Move IO_REPARSE_TAG definitions to smb_constants.h
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 7e73527ad3523efa4ce24e92a2cd194b59967852
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 9 16:15:46 2020 +0200

    libcli: Slightly simplify smb2cli_req_recv() with an early return
    
    One if-condition less
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit d304341ea398d12d1f530b01b7e12e4839d23dab
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jun 15 12:16:36 2020 +0200

    smbd: Apply a bit of README.Coding to unix_convert()
    
    Looking at that more closely right now...
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1943e967a06ee83c7fed36280f8577f6245fb266
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jun 12 11:36:56 2020 +0200

    smbd: Reduce indentation in check_reduced_name()
    
    No change in behaviour.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1e7ff44fd46f34e1df50bb7c55334b0ed5501d18
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 11 14:48:48 2020 +0200

    lib: Move a #define ip_equal_v4() to nmbd/nmbd.h
    
    It's only used there
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 38814784cf004a77e7bf4bf17854b1b47570ef61
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Jun 13 15:32:31 2020 +0200

    smbd: Fix typos
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit b654f2565b0ffca56c13ff24000f8c606253011e
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 14 16:36:23 2020 +0200

    tsocket: Fix a typo
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 86008f5e6f28d7c9d756ddf25f7aaf119378b52e
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jun 14 10:45:39 2020 +0200

    net: Align integer types
    
    "i" is used to loop over an int as well. Introduce an int helper
    variable that is autoconverted without warnings
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/ldb/tools/ldbmodify.c                          |  9 +-
 lib/tsocket/tsocket_guide.txt                      |  2 +-
 libcli/smb/smb2cli_create.c                        |  2 +
 libcli/smb/smbXcli_base.c                          |  7 +-
 libcli/smb/smb_constants.h                         | 16 ++++
 source3/include/ntioctl.h                          |  9 --
 source3/include/smb_macros.h                       | 13 ---
 source3/libsmb/reparse_symlink.c                   | 10 ++-
 source3/modules/util_reparse.c                     | 50 +++++++++++
 .../srv_epmapper.h => modules/util_reparse.h}      | 37 ++++-----
 source3/modules/vfs_default.c                      | 20 +++--
 source3/modules/wscript_build                      |  6 +-
 source3/nmbd/nmbd.h                                |  6 ++
 source3/smbd/filename.c                            | 39 +++++----
 source3/smbd/vfs.c                                 | 97 +++++++++++-----------
 source3/utils/net_ads.c                            |  6 +-
 16 files changed, 203 insertions(+), 126 deletions(-)
 create mode 100644 source3/modules/util_reparse.c
 copy source3/{rpc_server/epmapper/srv_epmapper.h => modules/util_reparse.h} (54%)


Changeset truncated at 500 lines:

diff --git a/lib/ldb/tools/ldbmodify.c b/lib/ldb/tools/ldbmodify.c
index 9b4d7b7d917..73df41787e2 100644
--- a/lib/ldb/tools/ldbmodify.c
+++ b/lib/ldb/tools/ldbmodify.c
@@ -107,10 +107,13 @@ static int process_file(struct ldb_context *ldb, FILE *f, unsigned int *count)
 			if (errstr == NULL) {
 				errstr = ldb_errstring(ldb);
 			}
-			fprintf(stderr, "ERR: (%s) \"%s\" on DN %s at block before line %llu\n",
+			fprintf(stderr,
+				"ERR: (%s) \"%s\" on DN %s at block before "
+				"line %zu\n",
 				ldb_strerror(ret),
-				errstr, ldb_dn_get_linearized(ldif->msg->dn), 
-				(unsigned long long)state.line_no);
+				errstr,
+				ldb_dn_get_linearized(ldif->msg->dn),
+				state.line_no);
 			fun_ret = ret;
 		} else {
 			(*count)++;
diff --git a/lib/tsocket/tsocket_guide.txt b/lib/tsocket/tsocket_guide.txt
index 45e20b5103a..9a96b0432bd 100644
--- a/lib/tsocket/tsocket_guide.txt
+++ b/lib/tsocket/tsocket_guide.txt
@@ -128,7 +128,7 @@ functions similar to the readv(2)/writev(2)/close(2) syscalls.
 The tstream_pending_bytes() function is able to report how many bytes of
 the incoming stream have been received but have not been consumed yet.
 It returns -1 and sets 'errno' on failure.
-Otherwise it returns the number of uncomsumed bytes (it can return 0!).
+Otherwise it returns the number of unconsumed bytes (it can return 0!).
 
   ssize_t tstream_pending_bytes(struct tstream_context *stream);
 
diff --git a/libcli/smb/smb2cli_create.c b/libcli/smb/smb2cli_create.c
index 778b501fae7..325bc79f9cd 100644
--- a/libcli/smb/smb2cli_create.c
+++ b/libcli/smb/smb2cli_create.c
@@ -249,6 +249,7 @@ NTSTATUS smb2cli_create_recv(struct tevent_req *req,
 	NTSTATUS status;
 
 	if (tevent_req_is_nterror(req, &status)) {
+		tevent_req_received(req);
 		return status;
 	}
 	*fid_persistent = state->fid_persistent;
@@ -260,6 +261,7 @@ NTSTATUS smb2cli_create_recv(struct tevent_req *req,
 		blobs->num_blobs = state->blobs.num_blobs;
 		blobs->blobs = talloc_move(mem_ctx, &state->blobs.blobs);
 	}
+	tevent_req_received(req);
 	return NT_STATUS_OK;
 }
 
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index 895fa64fcf5..3e5bee92ed1 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -4012,15 +4012,10 @@ NTSTATUS smb2cli_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
 	if (tevent_req_is_nterror(req, &status)) {
 		for (i=0; i < num_expected; i++) {
 			if (NT_STATUS_EQUAL(status, expected[i].status)) {
-				found_status = true;
-				break;
+				return NT_STATUS_UNEXPECTED_NETWORK_ERROR;
 			}
 		}
 
-		if (found_status) {
-			return NT_STATUS_UNEXPECTED_NETWORK_ERROR;
-		}
-
 		return status;
 	}
 
diff --git a/libcli/smb/smb_constants.h b/libcli/smb/smb_constants.h
index 07c22209881..ee350d14154 100644
--- a/libcli/smb/smb_constants.h
+++ b/libcli/smb/smb_constants.h
@@ -582,4 +582,20 @@ enum csc_policy {
 	(FSCTL_NETWORK_FILESYSTEM | FSCTL_ACCESS_ANY | 0x0200 | FSCTL_METHOD_BUFFERED)
 #define FSCTL_VALIDATE_NEGOTIATE_INFO	(FSCTL_NETWORK_FILESYSTEM | FSCTL_ACCESS_ANY | 0x0204 | FSCTL_METHOD_BUFFERED)
 
+/*
+ * A few values from [MS-FSCC] 2.1.2.1 Reparse Tags
+ */
+
+#define IO_REPARSE_TAG_SYMLINK	     0xA000000C
+#define IO_REPARSE_TAG_MOUNT_POINT   0xA0000003
+#define IO_REPARSE_TAG_HSM           0xC0000004
+#define IO_REPARSE_TAG_SIS           0x80000007
+#define IO_REPARSE_TAG_DFS	     0x8000000A
+#define IO_REPARSE_TAG_NFS	     0x80000014
+
+/*
+ * Flag from [MS-FSCC] 2.1.2.4 Symbolic Link Reparse Data Buffer
+ */
+#define SYMLINK_FLAG_RELATIVE	     0x00000001
+
 #endif /* _SMB_CONSTANTS_H */
diff --git a/source3/include/ntioctl.h b/source3/include/ntioctl.h
index 199a2476cb6..1c2e5d5eb07 100644
--- a/source3/include/ntioctl.h
+++ b/source3/include/ntioctl.h
@@ -20,15 +20,6 @@
 #ifndef _NTIOCTL_H
 #define _NTIOCTL_H
 
-#define IO_REPARSE_TAG_SYMLINK	     0xA000000C
-#define SYMLINK_FLAG_RELATIVE	     0x00000001
-
-#define IO_REPARSE_TAG_MOUNT_POINT   0xA0000003
-#define IO_REPARSE_TAG_HSM           0xC0000004
-#define IO_REPARSE_TAG_SIS           0x80000007
-#define IO_REPARSE_TAG_DFS	     0x8000000A
-#define IO_REPARSE_TAG_NFS	     0x80000014
-
 /* Sub-types for IO_REPARSE_TAG_NFS */
 #define NFS_SPECFILE_LNK	     0x00000000014B4E4C
 #define NFS_SPECFILE_CHR	     0x0000000000524843
diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h
index 90ec794a519..1513696f766 100644
--- a/source3/include/smb_macros.h
+++ b/source3/include/smb_macros.h
@@ -164,19 +164,6 @@
 #define ENCRYPTION_REQUIRED(conn) ((conn) ? ((conn)->encrypt_level == SMB_SIGNING_REQUIRED) : false)
 #define IS_CONN_ENCRYPTED(conn) ((conn) ? (conn)->encrypted_tid : false)
 
-/****************************************************************************
-true if two IPv4 addresses are equal
-****************************************************************************/
-
-#define ip_equal_v4(ip1,ip2) ((ip1).s_addr == (ip2).s_addr)
-
-/*****************************************************************
- splits out the last subkey of a key
- *****************************************************************/  
-
-#define reg_get_subkey(full_keyname, key_name, subkey_name) \
-	split_at_last_component(full_keyname, key_name, '\\', subkey_name)
-
 /****************************************************************************
  Return True if the offset is at zero.
 ****************************************************************************/
diff --git a/source3/libsmb/reparse_symlink.c b/source3/libsmb/reparse_symlink.c
index f981b5fcce7..b0b51814a55 100644
--- a/source3/libsmb/reparse_symlink.c
+++ b/source3/libsmb/reparse_symlink.c
@@ -53,7 +53,15 @@ bool symlink_reparse_buffer_marshall(
 				   &print_utf16, &print_len)) {
 		goto fail;
 	}
-	dst_len = 20 + subst_len + print_len;
+
+	dst_len = subst_len + 20;
+	if (dst_len < 20) {
+		goto fail;
+	}
+	dst_len += print_len;
+	if (dst_len < print_len) {
+		goto fail;
+	}
 	dst = talloc_array(mem_ctx, uint8_t, dst_len);
 	if (dst == NULL) {
 		goto fail;
diff --git a/source3/modules/util_reparse.c b/source3/modules/util_reparse.c
new file mode 100644
index 00000000000..fe259b50646
--- /dev/null
+++ b/source3/modules/util_reparse.c
@@ -0,0 +1,50 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * Utility functions for reparse points.
+ *
+ * Copyright (C) Jeremy Allison 2018
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "util_reparse.h"
+
+NTSTATUS fsctl_get_reparse_point(struct files_struct *fsp,
+				 TALLOC_CTX *ctx,
+				 char **out_data,
+				 uint32_t max_out_len,
+				 uint32_t *out_len)
+{
+	DBG_DEBUG("Called on %s\n", fsp_fnum_dbg(fsp));
+	return NT_STATUS_NOT_A_REPARSE_POINT;
+}
+
+NTSTATUS fsctl_set_reparse_point(struct files_struct *fsp,
+				 TALLOC_CTX *ctx,
+				 const uint8_t *in_data,
+				 uint32_t in_len)
+{
+	DBG_DEBUG("Called on %s\n", fsp_fnum_dbg(fsp));
+	return NT_STATUS_NOT_A_REPARSE_POINT;
+}
+
+NTSTATUS fsctl_del_reparse_point(struct files_struct *fsp,
+				 TALLOC_CTX *ctx,
+				 const uint8_t *in_data,
+				 uint32_t in_len)
+{
+	DBG_DEBUG("Called on %s\n", fsp_fnum_dbg(fsp));
+	return NT_STATUS_NOT_A_REPARSE_POINT;
+}
diff --git a/source3/rpc_server/epmapper/srv_epmapper.h b/source3/modules/util_reparse.h
similarity index 54%
copy from source3/rpc_server/epmapper/srv_epmapper.h
copy to source3/modules/util_reparse.h
index 7ec35ace666..102605edd19 100644
--- a/source3/rpc_server/epmapper/srv_epmapper.h
+++ b/source3/modules/util_reparse.h
@@ -1,9 +1,8 @@
 /*
  * Unix SMB/CIFS implementation.
+ * Utility functions for reparse points.
  *
- * Endpoint server for the epmapper pipe
- *
- * Copyright (C) 2010-2011 Andreas Schneider <asn at samba.org>
+ * Copyright (C) Jeremy Allison 2018
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,23 +18,23 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef _SRV_EPMAPPER_H_
-#define _SRV_EPMAPPER_H_
-
-struct dcesrv_connection;
+#ifndef __UTIL_REPARSE_H__
+#define __UTIL_REPARSE_H__
 
-/**
- * @brief Cleanup memory and other stuff.
- */
-void srv_epmapper_cleanup(void);
+NTSTATUS fsctl_get_reparse_point(struct files_struct *fsp,
+				 TALLOC_CTX *ctx,
+				 char **out_data,
+				 uint32_t max_out_len,
+				 uint32_t *out_len);
 
-/**
- * @brief Cleanup function used to delete endpoints when a ncalrpc connection
- *        from an external daemon is lost
- */
-void srv_epmapper_delete_endpoints(struct dcesrv_connection *conn,
-				   void *private_data);
+NTSTATUS fsctl_set_reparse_point(struct files_struct *fsp,
+				 TALLOC_CTX *ctx,
+				 const uint8_t *in_data,
+				 uint32_t in_len);
 
-#endif /*_SRV_EPMAPPER_H_ */
+NTSTATUS fsctl_del_reparse_point(struct files_struct *fsp,
+				 TALLOC_CTX *ctx,
+				 const uint8_t *in_data,
+				 uint32_t in_len);
 
-/* vim: set ts=8 sw=8 noet cindent syntax=c.doxygen: */
+#endif /* __UTIL_REPARSE_H__ */
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index fb9d16efd6b..cf5e1cbc296 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -35,6 +35,7 @@
 #include "lib/pthreadpool/pthreadpool_tevent.h"
 #include "librpc/gen_ndr/ndr_ioctl.h"
 #include "offload_token.h"
+#include "util_reparse.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_VFS
@@ -1367,18 +1368,21 @@ static NTSTATUS vfswrap_fsctl(struct vfs_handle_struct *handle,
 
 	case FSCTL_GET_REPARSE_POINT:
 	{
-		/* Fail it with STATUS_NOT_A_REPARSE_POINT */
-		DEBUG(10, ("FSCTL_GET_REPARSE_POINT: called on %s. "
-			   "Status: NOT_IMPLEMENTED\n", fsp_fnum_dbg(fsp)));
-		return NT_STATUS_NOT_A_REPARSE_POINT;
+		status = fsctl_get_reparse_point(
+			fsp, ctx, out_data, max_out_len, out_len);
+		return status;
 	}
 
 	case FSCTL_SET_REPARSE_POINT:
 	{
-		/* Fail it with STATUS_NOT_A_REPARSE_POINT */
-		DEBUG(10, ("FSCTL_SET_REPARSE_POINT: called on %s. "
-			   "Status: NOT_IMPLEMENTED\n", fsp_fnum_dbg(fsp)));
-		return NT_STATUS_NOT_A_REPARSE_POINT;
+		status = fsctl_set_reparse_point(fsp, ctx, _in_data, in_len);
+		return status;
+	}
+
+	case FSCTL_DELETE_REPARSE_POINT:
+	{
+		status = fsctl_del_reparse_point(fsp, ctx, _in_data, in_len);
+		return status;
 	}
 
 	case FSCTL_GET_SHADOW_COPY_DATA:
diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
index 7f056f2b7f7..09528f38070 100644
--- a/source3/modules/wscript_build
+++ b/source3/modules/wscript_build
@@ -39,6 +39,10 @@ bld.SAMBA3_SUBSYSTEM('OFFLOAD_TOKEN',
                     source='offload_token.c',
                     deps='samba-util')
 
+bld.SAMBA3_SUBSYSTEM('UTIL_REPARSE',
+                    source='util_reparse.c',
+                    deps='samba-util')
+
 bld.SAMBA3_SUBSYSTEM('HASH_INODE',
                     source='hash_inode.c',
                     deps='gnutls')
@@ -50,7 +54,7 @@ bld.SAMBA3_SUBSYSTEM('HASH_INODE',
 bld.SAMBA3_MODULE('vfs_default',
                  subsystem='vfs',
                  source='vfs_default.c',
-                 deps='samba-util NDR_DFSBLOBS OFFLOAD_TOKEN',
+                 deps='samba-util NDR_DFSBLOBS OFFLOAD_TOKEN UTIL_REPARSE',
                  init_function='',
                  internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_default'),
                  enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_default'))
diff --git a/source3/nmbd/nmbd.h b/source3/nmbd/nmbd.h
index 47940e19401..551868e29ad 100644
--- a/source3/nmbd/nmbd.h
+++ b/source3/nmbd/nmbd.h
@@ -28,4 +28,10 @@
 #include "libsmb/nmblib.h"
 #include "nmbd/nmbd_proto.h"
 
+/****************************************************************************
+true if two IPv4 addresses are equal
+****************************************************************************/
+
+#define ip_equal_v4(ip1,ip2) ((ip1).s_addr == (ip2).s_addr)
+
 #endif /* _NMBD_NMBD_H_ */
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index 72fae4048d3..73ea63ffd25 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -973,8 +973,9 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
 	if (state->conn->printer) {
 		/* we don't ever use the filenames on a printer share as a
 			filename - so don't convert them */
-		if (!(state->smb_fname->base_name = talloc_strdup(state->smb_fname,
-							   state->orig_path))) {
+		state->smb_fname->base_name = talloc_strdup(
+			state->smb_fname, state->orig_path);
+		if (state->smb_fname->base_name == NULL) {
 			status = NT_STATUS_NO_MEMORY;
 			goto err;
 		}
@@ -991,7 +992,9 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
 	}
 
 	/* Start with the full orig_path as given by the caller. */
-	if (!(state->smb_fname->base_name = talloc_strdup(state->smb_fname, state->orig_path))) {
+	state->smb_fname->base_name = talloc_strdup(
+		state->smb_fname, state->orig_path);
+	if (state->smb_fname->base_name == NULL) {
 		DBG_ERR("talloc_strdup failed\n");
 		status = NT_STATUS_NO_MEMORY;
 		goto err;
@@ -1012,7 +1015,8 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
 	 */
 
 	if (state->smb_fname->base_name[0] == '\0') {
-		if (!(state->smb_fname->base_name = talloc_strdup(state->smb_fname, "."))) {
+		state->smb_fname->base_name = talloc_strdup(state->smb_fname, ".");
+		if (state->smb_fname->base_name == NULL) {
 			status = NT_STATUS_NO_MEMORY;
 			goto err;
 		}
@@ -1111,7 +1115,7 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
 	 * If we're providing case insensitive semantics or
 	 * the underlying filesystem is case insensitive,
 	 * then a case-normalized hit in the stat-cache is
-	 * authoratitive. JRA.
+	 * authoritative. JRA.
 	 *
 	 * Note: We're only checking base_name.  The stream_name will be
 	 * added and verified in build_stream_path().
@@ -1139,10 +1143,13 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
 	 * building the directories with talloc_asprintf and free it.
 	 */
 
-	if ((state->dirpath == NULL) && (!(state->dirpath = talloc_strdup(state->mem_ctx,".")))) {
-		DBG_ERR("talloc_strdup failed\n");
-		status = NT_STATUS_NO_MEMORY;
-		goto err;
+	if (state->dirpath == NULL) {
+		state->dirpath = talloc_strdup(state->mem_ctx,".");
+		if (state->dirpath == NULL) {
+			DBG_ERR("talloc_strdup failed\n");
+			status = NT_STATUS_NO_MEMORY;
+			goto err;
+		}
 	}
 
 	/*
@@ -1376,13 +1383,17 @@ NTSTATUS unix_convert(TALLOC_CTX *mem_ctx,
  fail:
 	DBG_DEBUG("Conversion failed: dirpath [%s] name [%s]\n",
 		  state->dirpath, state->name);
-	if (state->dirpath && !ISDOT(state->dirpath)) {
-		state->smb_fname->base_name = talloc_asprintf(state->smb_fname, "%s/%s",
-						       state->dirpath, state->name);
+	if ((state->dirpath != NULL) && !ISDOT(state->dirpath)) {
+		state->smb_fname->base_name = talloc_asprintf(
+			state->smb_fname,
+			"%s/%s",
+			state->dirpath,
+			state->name);
 	} else {
-		state->smb_fname->base_name = talloc_strdup(state->smb_fname, state->name);
+		state->smb_fname->base_name = talloc_strdup(
+			state->smb_fname, state->name);
 	}
-	if (!state->smb_fname->base_name) {
+	if (state->smb_fname->base_name == NULL) {
 		DBG_ERR("talloc_asprintf failed\n");
 		status = NT_STATUS_NO_MEMORY;
 		goto err;
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index 85b23d35ba6..38b4070139d 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -1293,59 +1293,58 @@ NTSTATUS check_reduced_name(connection_struct *conn,
 	resolved_fname = SMB_VFS_REALPATH(conn, ctx, smb_fname);
 
 	if (resolved_fname == NULL) {
-		switch (errno) {
-			case ENOTDIR:
-				DEBUG(3,("check_reduced_name: Component not a "
-					 "directory in getting realpath for "
-					 "%s\n", fname));
-				return NT_STATUS_OBJECT_PATH_NOT_FOUND;
-			case ENOENT:
-			{
-				struct smb_filename *dir_fname = NULL;
-				struct smb_filename *last_component = NULL;
-
-				/* Last component didn't exist.
-				   Remove it and try and canonicalise
-				   the directory name. */
-
-				ok = parent_smb_fname(ctx,
-						      smb_fname,
-						      &dir_fname,
-						      &last_component);
-				if (!ok) {
-					return NT_STATUS_NO_MEMORY;
-				}
+		struct smb_filename *dir_fname = NULL;
+		struct smb_filename *last_component = NULL;
+
+		if (errno == ENOTDIR) {
+			DBG_NOTICE("Component not a directory in getting "
+				   "realpath for %s\n",
+				   fname);
+			return NT_STATUS_OBJECT_PATH_NOT_FOUND;
+		}
+		if (errno != ENOENT) {
+			NTSTATUS status = map_nt_error_from_unix(errno);
+			DBG_NOTICE("couldn't get realpath for %s: %s\n",
+				   fname,
+				   strerror(errno));
+			return status;
+		}
 
-				resolved_fname = SMB_VFS_REALPATH(conn,
-							ctx,
-							dir_fname);
-				if (resolved_fname == NULL) {
-					NTSTATUS status = map_nt_error_from_unix(errno);


-- 
Samba Shared Repository



More information about the samba-cvs mailing list