summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-01-19 21:53:49 -0800
committerJeremy Allison <jra@samba.org>2008-01-19 21:53:49 -0800
commit0bb6fb7b6f8ea1c039e710f55bba779363716f2d (patch)
treece1a73fdf905ce15507641c92c979a8b5f346780
parent536bff422969f79e92e90ca959716624fbb96ed1 (diff)
downloadsamba-0bb6fb7b6f8ea1c039e710f55bba779363716f2d.tar.gz
samba-0bb6fb7b6f8ea1c039e710f55bba779363716f2d.tar.bz2
samba-0bb6fb7b6f8ea1c039e710f55bba779363716f2d.zip
Couple of minor fixes for POSIX pathname processing in the
new stream code. (1) In smbd/filename, don't split the name at ':' if we know it's a posix path (this should be parameterized....). (2). When calling posix_mkdir, we get the flag FILE_FLAG_POSIX_SEMANTICS passed to open_directory(). I know for a posix client lp_posix_pathnames should be true (which is checked for in is_ntfs_stream_name() but we have an explicit flag here, so let's use it. Jeremy. (This used to be commit 7bb7a0def6518784befa75e5303289d2b4d36dd4)
-rw-r--r--source3/smbd/filename.c18
-rw-r--r--source3/smbd/open.c2
2 files changed, 11 insertions, 9 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index 1d44c7498e..10e9583049 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -214,16 +214,18 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
return NT_STATUS_NO_MEMORY;
}
- stream = strchr_m(name, ':');
+ if (!lp_posix_pathnames()) {
+ stream = strchr_m(name, ':');
- if (stream != NULL) {
- char *tmp = talloc_strdup(ctx, stream);
- if (tmp == NULL) {
- TALLOC_FREE(name);
- return NT_STATUS_NO_MEMORY;
+ if (stream != NULL) {
+ char *tmp = talloc_strdup(ctx, stream);
+ if (tmp == NULL) {
+ TALLOC_FREE(name);
+ return NT_STATUS_NO_MEMORY;
+ }
+ *stream = '\0';
+ stream = tmp;
}
- *stream = '\0';
- stream = tmp;
}
/*
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 0d6e07a032..ad221c3227 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -2106,7 +2106,7 @@ NTSTATUS open_directory(connection_struct *conn,
(unsigned int)create_disposition,
(unsigned int)file_attributes));
- if (is_ntfs_stream_name(fname)) {
+ if (!(file_attributes & FILE_FLAG_POSIX_SEMANTICS) && is_ntfs_stream_name(fname)) {
DEBUG(2, ("open_directory: %s is a stream name!\n", fname));
return NT_STATUS_NOT_A_DIRECTORY;
}