summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2009-04-01 20:20:44 -0700
committerJeremy Allison <jra@samba.org>2009-04-01 20:20:44 -0700
commit1258ed8b1c52eff93aaa8fe132643e6c2ac31e56 (patch)
tree36734756e93a27d1e17a5d58e67ee87f545d9217 /source3
parentaef0bdc6a1ffdf746ce9ce27c45b3ca4f6593ba9 (diff)
parent87fe4d732d18d18ed56c99cba6a395a0bf9e9d95 (diff)
downloadsamba-1258ed8b1c52eff93aaa8fe132643e6c2ac31e56.tar.gz
samba-1258ed8b1c52eff93aaa8fe132643e6c2ac31e56.tar.bz2
samba-1258ed8b1c52eff93aaa8fe132643e6c2ac31e56.zip
Merge branch 'master' of ssh://jra@git.samba.org/data/git/samba
Diffstat (limited to 'source3')
-rw-r--r--source3/modules/onefs_open.c37
-rw-r--r--source3/utils/net_conf.c22
2 files changed, 27 insertions, 32 deletions
diff --git a/source3/modules/onefs_open.c b/source3/modules/onefs_open.c
index d628443ef9..f315b34c8b 100644
--- a/source3/modules/onefs_open.c
+++ b/source3/modules/onefs_open.c
@@ -199,23 +199,6 @@ static NTSTATUS onefs_open_file(files_struct *fsp,
if ((conn->fs_capabilities & FILE_NAMED_STREAMS) && stream != NULL) {
SMB_ASSERT(fsp->base_fsp);
- /*
- * We have never seen an oplock taken on a stream, and our
- * current implementation doesn't support it. If a request is
- * seen, log a loud error message and ignore the requested
- * oplock.
- */
- if ((oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK) !=
- NO_OPLOCK) {
- DEBUG(0, ("Oplock(%d) being requested on a stream! "
- "Ignoring oplock request: base=%s, "
- "stream=%s\n",
- oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK,
- base, stream));
- /* Recover by requesting NO_OPLOCK instead. */
- oplock_request &= SAMBA_PRIVATE_OPLOCK_MASK;
- }
-
DEBUG(10,("Opening a stream: base=%s(%d), stream=%s\n",
base, fsp->base_fsp->fh->fd, stream));
@@ -522,10 +505,7 @@ NTSTATUS onefs_open_file_ntcreate(connection_struct *conn,
*
* 1. Open the base file of a stream: Always done stat-only
*
- * 2. Open the stream: Oplocks are disallowed on streams, so an
- * oplock will never be contended.
- *
- * 3. open_file_fchmod(), which is called from 3 places:
+ * 2. open_file_fchmod(), which is called from 3 places:
* A. try_chown: Posix acls only. Never called on onefs.
* B. set_ea_dos_attributes: Can't be called from onefs, because
* SMB_VFS_SETXATTR return ENOSYS.
@@ -1773,6 +1753,21 @@ static NTSTATUS onefs_create_file_unixpath(connection_struct *conn,
"failed: %s\n", base, nt_errstr(status)));
goto fail;
}
+
+ /*
+ * Testing against windows xp/2003/vista shows that oplocks
+ * can actually be requested and granted on streams (see the
+ * RAW-OPLOCK-STREAM1 smbtorture test).
+ */
+ if ((oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK) !=
+ NO_OPLOCK) {
+ DEBUG(5, ("Oplock(%d) being requested on a stream! "
+ "Ignoring oplock request: fname=%s\n",
+ oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK,
+ fname));
+ /* Request NO_OPLOCK instead. */
+ oplock_request &= SAMBA_PRIVATE_OPLOCK_MASK;
+ }
}
/* Covert generic bits in the security descriptor. */
diff --git a/source3/utils/net_conf.c b/source3/utils/net_conf.c
index 38a2553e53..b65202ee69 100644
--- a/source3/utils/net_conf.c
+++ b/source3/utils/net_conf.c
@@ -300,7 +300,7 @@ static int net_conf_import(struct net_context *c, struct smbconf_ctx *conf_ctx,
net_conf_import_usage(c, argc, argv);
goto done;
case 2:
- servicename = talloc_strdup_lower(mem_ctx, argv[1]);
+ servicename = talloc_strdup(mem_ctx, argv[1]);
if (servicename == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -501,7 +501,7 @@ static int net_conf_showshare(struct net_context *c,
goto done;
}
- sharename = talloc_strdup_lower(mem_ctx, argv[0]);
+ sharename = talloc_strdup(mem_ctx, argv[0]);
if (sharename == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -514,7 +514,7 @@ static int net_conf_showshare(struct net_context *c,
goto done;
}
- d_printf("[%s]\n", sharename);
+ d_printf("[%s]\n", service->name);
for (count = 0; count < service->num_params; count++) {
d_printf("\t%s = %s\n", service->param_names[count],
@@ -600,7 +600,7 @@ static int net_conf_addshare(struct net_context *c,
}
case 2:
path = argv[1];
- sharename = talloc_strdup_lower(mem_ctx, argv[0]);
+ sharename = talloc_strdup(mem_ctx, argv[0]);
if (sharename == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -728,7 +728,7 @@ static int net_conf_delshare(struct net_context *c,
net_conf_delshare_usage(c, argc, argv);
goto done;
}
- sharename = talloc_strdup_lower(mem_ctx, argv[0]);
+ sharename = talloc_strdup(mem_ctx, argv[0]);
if (sharename == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -761,7 +761,7 @@ static int net_conf_setparm(struct net_context *c, struct smbconf_ctx *conf_ctx,
net_conf_setparm_usage(c, argc, argv);
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -813,7 +813,7 @@ static int net_conf_getparm(struct net_context *c, struct smbconf_ctx *conf_ctx,
net_conf_getparm_usage(c, argc, argv);
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -863,7 +863,7 @@ static int net_conf_delparm(struct net_context *c, struct smbconf_ctx *conf_ctx,
net_conf_delparm_usage(c, argc, argv);
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -916,7 +916,7 @@ static int net_conf_getincludes(struct net_context *c,
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -956,7 +956,7 @@ static int net_conf_setincludes(struct net_context *c,
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
@@ -996,7 +996,7 @@ static int net_conf_delincludes(struct net_context *c,
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;