diff options
-rw-r--r-- | source3/include/proto.h | 2 | ||||
-rw-r--r-- | source3/param/loadparm.c | 21 | ||||
-rw-r--r-- | source3/smbd/filename.c | 2 | ||||
-rw-r--r-- | source3/smbd/service.c | 9 | ||||
-rw-r--r-- | source3/smbd/vfs.c | 2 |
5 files changed, 26 insertions, 10 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 3549ea6c62..c10a885396 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -4393,7 +4393,7 @@ void lp_set_posix_default_cifsx_readwrite_locktype(enum brl_flavour val); int lp_min_receive_file_size(void); char* lp_perfcount_module(void); void lp_set_passdb_backend(const char *backend); -bool lp_safe_widelinks(int snum); +void widelinks_warning(int snum); /* The following definitions come from param/util.c */ diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 4b6fa83b04..579f847b97 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -5676,7 +5676,6 @@ FN_LOCAL_BOOL(lp_oplocks, bOpLocks) FN_LOCAL_BOOL(lp_level2_oplocks, bLevel2OpLocks) FN_LOCAL_BOOL(lp_onlyuser, bOnlyUser) FN_LOCAL_PARM_BOOL(lp_manglednames, bMangledNames) -FN_LOCAL_BOOL(lp_widelinks, bWidelinks) FN_LOCAL_BOOL(lp_symlinks, bSymlinks) FN_LOCAL_BOOL(lp_syncalways, bSyncAlways) FN_LOCAL_BOOL(lp_strict_allocate, bStrictAllocate) @@ -9898,12 +9897,28 @@ void lp_set_passdb_backend(const char *backend) even after a configuration file reload. ********************************************************************/ -bool lp_safe_widelinks(int snum) +static bool lp_widelinks_internal(int snum) +{ + return (bool)(LP_SNUM_OK(snum)? ServicePtrs[(snum)]->bWidelinks : + sDefault.bWidelinks); +} + +void widelinks_warning(int snum) +{ + if (lp_unix_extensions() && lp_widelinks_internal(snum)) { + DEBUG(0,("Share '%s' has wide links and unix extensions enabled. " + "These parameters are incompatible. " + "Wide links will be disabled for this share.\n", + lp_servicename(snum) )); + } +} + +bool lp_widelinks(int snum) { /* wide links is always incompatible with unix extensions */ if (lp_unix_extensions()) { return false; } - return lp_widelinks(snum); + return lp_widelinks_internal(snum); } diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 73a3c36062..ab79dfd926 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -854,7 +854,7 @@ NTSTATUS check_name(connection_struct *conn, const char *name) } } - if (!lp_safe_widelinks(SNUM(conn)) || !lp_symlinks(SNUM(conn))) { + if (!lp_widelinks(SNUM(conn)) || !lp_symlinks(SNUM(conn))) { NTSTATUS status = check_reduced_name(conn,name); if (!NT_STATUS_IS_OK(status)) { DEBUG(5,("check_name: name %s failed with %s\n",name, diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 45df7c14fe..7dddff5259 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -857,10 +857,11 @@ connection_struct *make_connection_snum(struct smbd_server_connection *sconn, conn); } -/* ROOT Activities: */ - /* explicitly check with lp_widelinks() instead of using - * lp_safe_widelinks() here so that we can correctly warn +/* ROOT Activities: */ + /* explicitly check widelinks here so that we can correctly warn * in the logs. */ + widelinks_warning(snum); + if (lp_unix_extensions() && lp_widelinks(snum)) { DEBUG(0,("Share '%s' has wide links and unix extensions enabled. " "These parameters are incompatible. " @@ -973,7 +974,7 @@ connection_struct *make_connection_snum(struct smbd_server_connection *sconn, * below this directory. We must do this after the VFS init as we * depend on the realpath() pointer in the vfs table. JRA. */ - if (!lp_safe_widelinks(snum)) { + if (!lp_widelinks(snum)) { if (!canonicalize_connect_path(conn)) { DEBUG(0, ("canonicalize_connect_path failed " "for service %s, path %s\n", diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index b575800335..94bdb1f495 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -928,7 +928,7 @@ NTSTATUS check_reduced_name(connection_struct *conn, const char *fname) } /* Check for widelinks allowed. */ - if (!lp_safe_widelinks(SNUM(conn))) { + if (!lp_widelinks(SNUM(conn))) { const char *conn_rootdir; conn_rootdir = SMB_VFS_CONNECTPATH(conn, fname); |