From: Jeremy Allison Date: Tue, 13 Sep 2011 23:42:09 +0000 (-0700) Subject: Fix bug #8229 - git patch attached against 3.6.0-rc2 to fix 'widelinks' regression... X-Git-Tag: talloc-2.0.7~62 X-Git-Url: http://git.samba.org/?p=samba.git;a=commitdiff_plain;h=fbbfdbd64818252784e9ba2ab87af3a02bacde22 Fix bug #8229 - git patch attached against 3.6.0-rc2 to fix 'widelinks' regression intro'd in 3.2 Add "allow insecure widelinks" to re-enable the ability (requested by some sites) to have "widelinks = yes" and "unix extensions = yes". Based on an original patch by Linda Walsh Autobuild-User: Jeremy Allison Autobuild-Date: Wed Sep 14 03:55:45 CEST 2011 on sn-devel-104 --- diff --git a/docs-xml/smbdotconf/misc/allowinsecurewidelinks.xml b/docs-xml/smbdotconf/misc/allowinsecurewidelinks.xml new file mode 100644 index 00000000000..a8a099190bc --- /dev/null +++ b/docs-xml/smbdotconf/misc/allowinsecurewidelinks.xml @@ -0,0 +1,37 @@ + + + + In normal operation the option + which allows the server to follow symlinks outside of a share path + is automatically disabled when + are enabled on a Samba server. This is done for security purposes + to prevent UNIX clients creating symlinks to areas of the server + file system that the administrator does not wish to export. + + + Setting to + true disables the link between these two parameters, removing + this protection and allowing a site to configure + the server to follow symlinks (by setting + to "true") even when + is turned on. + + + If is not recommended to enable this option unless you + fully understand the implications of allowing the server to + follow symbolic links created by UNIX clients. For most + normal Samba configurations this would be considered a security + hole and setting this parameter is not recommended. + + + This option was added at the request of sites who had + deliberately set Samba up in this way and needed to continue + supporting this functionality without having to patch the + Samba code. + + +no + diff --git a/docs-xml/smbdotconf/misc/widelinks.xml b/docs-xml/smbdotconf/misc/widelinks.xml index 1c30bb768a3..da1374afab7 100644 --- a/docs-xml/smbdotconf/misc/widelinks.xml +++ b/docs-xml/smbdotconf/misc/widelinks.xml @@ -17,6 +17,10 @@ disabled (with a message in the log file) if the option is on. + + See the parameter + if you wish to change this coupling between the two parameters. + no diff --git a/docs-xml/smbdotconf/protocol/unixextensions.xml b/docs-xml/smbdotconf/protocol/unixextensions.xml index d816648836b..61a39cb7639 100644 --- a/docs-xml/smbdotconf/protocol/unixextensions.xml +++ b/docs-xml/smbdotconf/protocol/unixextensions.xml @@ -14,6 +14,10 @@ Note if this parameter is turned on, the parameter will automatically be disabled. + + See the parameter + if you wish to change this coupling between the two parameters. + yes diff --git a/source3/include/proto.h b/source3/include/proto.h index 47321f3aa43..d3ea6fc8834 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1473,6 +1473,7 @@ bool lp_oplocks(int ); bool lp_level2_oplocks(int ); bool lp_onlyuser(int ); bool lp_manglednames(const struct share_params *p ); +bool lp_allow_insecure_widelinks(void); bool lp_widelinks(int ); bool lp_symlinks(int ); bool lp_syncalways(int ); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 3b5c4df35df..01f6fa2942d 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -3899,6 +3899,15 @@ static struct parm_struct parm_table[] = { .enum_list = NULL, .flags = FLAG_ADVANCED | FLAG_SHARE, }, + { + .label = "allow insecure wide links", + .type = P_BOOL, + .p_class = P_GLOBAL, + .offset = GLOBAL_VAR(bAllowInsecureWidelinks), + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED, + }, { .label = "wide links", .type = P_BOOL, @@ -5390,6 +5399,7 @@ FN_GLOBAL_INTEGER(lp_ctdb_timeout, ctdb_timeout) FN_GLOBAL_INTEGER(lp_ctdb_locktime_warn_threshold, ctdb_locktime_warn_threshold) FN_GLOBAL_BOOL(lp_async_smb_echo_handler, bAsyncSMBEchoHandler) FN_GLOBAL_BOOL(lp_multicast_dns_register, bMulticastDnsRegister) +FN_GLOBAL_BOOL(lp_allow_insecure_widelinks, bAllowInsecureWidelinks) FN_GLOBAL_INTEGER(lp_winbind_cache_time, winbind_cache_time) FN_GLOBAL_INTEGER(lp_winbind_reconnect_delay, winbind_reconnect_delay) FN_GLOBAL_INTEGER(lp_winbind_max_clients, winbind_max_clients) @@ -9637,6 +9647,10 @@ static bool lp_widelinks_internal(int snum) void widelinks_warning(int snum) { + if (lp_allow_insecure_widelinks()) { + return; + } + if (lp_unix_extensions() && lp_widelinks_internal(snum)) { DEBUG(0,("Share '%s' has wide links and unix extensions enabled. " "These parameters are incompatible. " @@ -9649,7 +9663,13 @@ bool lp_widelinks(int snum) { /* wide links is always incompatible with unix extensions */ if (lp_unix_extensions()) { - return false; + /* + * Unless we have "allow insecure widelinks" + * turned on. + */ + if (!lp_allow_insecure_widelinks()) { + return false; + } } return lp_widelinks_internal(snum);