summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2004-06-26 00:47:58 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:52:03 -0500
commit7f05a7d0c85fd3deaf5e3e263cf8b0f05d4a7f01 (patch)
tree1c27279f98198e128b8e93e1833670dca0513b41
parente13ba6ebd51c1a34fab07368bc45fa165eaa6b95 (diff)
downloadsamba-7f05a7d0c85fd3deaf5e3e263cf8b0f05d4a7f01.tar.gz
samba-7f05a7d0c85fd3deaf5e3e263cf8b0f05d4a7f01.tar.bz2
samba-7f05a7d0c85fd3deaf5e3e263cf8b0f05d4a7f01.zip
r1260: Added new parameter in the protocol section. "defer sharing violations",
by default set to "yes" (to correctly emulate Windows). I've added this to ensure if we find a critical problem with this new code when 3.0.5 ships it can be turned off to test for bugs. Jeremy. (This used to be commit bee0619cc476335e19a5f76179832802587563d1)
-rw-r--r--source3/param/loadparm.c4
-rw-r--r--source3/smbd/open.c8
2 files changed, 12 insertions, 0 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 12bbebcaa8..107e500a51 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -417,6 +417,7 @@ typedef struct
BOOL bMap_acl_inherit;
BOOL bAfs_Share;
BOOL bEASupport;
+ BOOL bDeferSharingViolations;
param_opt_struct *param_opt;
char dummy[3]; /* for alignment */
@@ -540,6 +541,7 @@ static service sDefault = {
False, /* bMap_acl_inherit */
False, /* bAfs_Share */
False, /* bEASupport */
+ True, /* bDeferSharingViolations */
NULL, /* Parametric options */
@@ -892,6 +894,7 @@ static struct parm_struct parm_table[] = {
{"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED},
{"acl compatibility", P_STRING, P_GLOBAL, &Globals.szAclCompat, handle_acl_compatibility, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
+ { "defer sharing violations", P_BOOL, P_LOCAL, &sDefault.bDeferSharingViolations, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
{"ea support", P_BOOL, P_LOCAL, &sDefault.bEASupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
{"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
{"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED},
@@ -1890,6 +1893,7 @@ FN_LOCAL_BOOL(lp_use_client_driver, bUseClientDriver)
FN_LOCAL_BOOL(lp_default_devmode, bDefaultDevmode)
FN_LOCAL_BOOL(lp_nt_acl_support, bNTAclSupport)
FN_LOCAL_BOOL(lp_ea_support, bEASupport)
+FN_LOCAL_BOOL(lp_defer_sharing_violations, bDeferSharingViolations)
FN_LOCAL_BOOL(_lp_use_sendfile, bUseSendfile)
FN_LOCAL_BOOL(lp_profile_acls, bProfileAcls)
FN_LOCAL_BOOL(lp_map_acl_inherit, bMap_acl_inherit)
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 330080353c..119eb04e09 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -786,6 +786,10 @@ static void delete_defered_open_entry_record(connection_struct *conn, SMB_DEV_T
deferred_open_entry *de_array = NULL;
int num_de_entries, i;
+ if (!lp_defer_sharing_violations(SNUM(conn))) {
+ return;
+ }
+
num_de_entries = get_deferred_opens(conn, dev, inode, &de_array);
for (i = 0; i < num_de_entries; i++) {
deferred_open_entry *entry = &de_array[i];
@@ -814,6 +818,10 @@ void defer_open_sharing_error(connection_struct *conn, struct timeval *ptv,
int num_de_entries, i;
struct dev_inode_bundle dib;
+ if (!lp_defer_sharing_violations(SNUM(conn))) {
+ return;
+ }
+
dib.dev = dev;
dib.inode = inode;