summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-01-21 20:24:23 +0100
committerVolker Lendecke <vl@samba.org>2008-01-22 12:29:02 +0100
commita4c2b04a2b46fd308e98cc83c26de8307f5196a5 (patch)
tree61b5ba52f477e7c62ec7650ff48c367402f4d645
parentf5df4a100accd163dcd4f41e3bbcd17bb655d1fe (diff)
downloadsamba-a4c2b04a2b46fd308e98cc83c26de8307f5196a5.tar.gz
samba-a4c2b04a2b46fd308e98cc83c26de8307f5196a5.tar.xz
samba-a4c2b04a2b46fd308e98cc83c26de8307f5196a5.zip
Hide streams from the EA API
(This used to be commit e9bb3d5067b74a29beb778f85687829778e42b5b)
-rw-r--r--source3/include/smb.h2
-rw-r--r--source3/modules/vfs_streams_xattr.c14
-rw-r--r--source3/smbd/trans2.c8
3 files changed, 14 insertions, 10 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 25421115c85..7de3568701f 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -1904,6 +1904,8 @@ struct ea_list {
#define SAMBA_POSIX_INHERITANCE_EA_NAME "user.SAMBA_PAI"
/* EA to use for DOS attributes */
#define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB"
+/* Prefix for DosStreams in the vfs_streams_xattr module */
+#define SAMBA_XATTR_DOSSTREAM_PREFIX "user.DosStream."
#define UUID_SIZE 16
diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c
index 965d57ff88d..766e7d10ab1 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -26,8 +26,6 @@
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_VFS
-#define XATTR_DOSSTREAM_PREFIX "user.DosStream."
-
struct stream_io {
char *base;
char *xattr_name;
@@ -140,7 +138,7 @@ static int streams_xattr_stat(vfs_handle_struct *handle, const char *fname,
}
xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
- XATTR_DOSSTREAM_PREFIX, sname);
+ SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
if (xattr_name == NULL) {
errno = ENOMEM;
goto fail;
@@ -187,7 +185,7 @@ static int streams_xattr_lstat(vfs_handle_struct *handle, const char *fname,
}
xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
- XATTR_DOSSTREAM_PREFIX, sname);
+ SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
if (xattr_name == NULL) {
errno = ENOMEM;
goto fail;
@@ -239,7 +237,7 @@ static int streams_xattr_open(vfs_handle_struct *handle, const char *fname,
}
xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
- XATTR_DOSSTREAM_PREFIX, sname);
+ SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
if (xattr_name == NULL) {
errno = ENOMEM;
goto fail;
@@ -373,7 +371,7 @@ static int streams_xattr_unlink(vfs_handle_struct *handle, const char *fname)
}
xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
- XATTR_DOSSTREAM_PREFIX, sname);
+ SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
if (xattr_name == NULL) {
errno = ENOMEM;
goto fail;
@@ -403,7 +401,7 @@ static NTSTATUS walk_xattr_streams(connection_struct *conn, files_struct *fsp,
NTSTATUS status;
char **names;
size_t i, num_names;
- size_t prefix_len = strlen(XATTR_DOSSTREAM_PREFIX);
+ size_t prefix_len = strlen(SAMBA_XATTR_DOSSTREAM_PREFIX);
status = get_ea_names_from_file(talloc_tos(), conn, fsp, fname,
&names, &num_names);
@@ -414,7 +412,7 @@ static NTSTATUS walk_xattr_streams(connection_struct *conn, files_struct *fsp,
for (i=0; i<num_names; i++) {
struct ea_struct ea;
- if (strncmp(names[i], XATTR_DOSSTREAM_PREFIX,
+ if (strncmp(names[i], SAMBA_XATTR_DOSSTREAM_PREFIX,
prefix_len) != 0) {
continue;
}
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 896d2dee142..b5b3ea751b5 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -105,9 +105,13 @@ static bool samba_private_attr_name(const char *unix_ea_name)
for (i = 0; prohibited_ea_names[i]; i++) {
if (strequal( prohibited_ea_names[i], unix_ea_name))
- return True;
+ return true;
}
- return False;
+ if (StrnCaseCmp(unix_ea_name, SAMBA_XATTR_DOSSTREAM_PREFIX,
+ strlen(SAMBA_XATTR_DOSSTREAM_PREFIX)) == 0) {
+ return true;
+ }
+ return false;
}
/****************************************************************************