[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Fri Oct 16 21:28:03 UTC 2015
The branch, master has been updated
via 2881679 vfs_streams_xattr: fix and simplify streams_xattr_get_name()
via fedd096 vfs_fruit: hide the Netatalk metadata xattr in streaminfo
via c8ee1a0 vfs_fruit: add and use define for the Netatalk metadata xattr
via c4bdba9 s3.lib: Remove invalid switch case from sysquotas_nfs
from 2bad085 build: Build *_wrapper without -DNDEBUG for in-tree use
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 2881679e3ecbaf07cdd82ba65af8d55e5e3be800
Author: Ralph Boehme <slow at samba.org>
Date: Mon Aug 24 17:45:14 2015 +0200
vfs_streams_xattr: fix and simplify streams_xattr_get_name()
streams_xattr_get_name() fails to chop off the stream type in case
config->store_stream_type is false and the passed stream name contains a
stream type.
Eg when the passed in stream name is ":mystream:$DATA", but
config->store_stream_type is false, we must generate a xattr name of
"mystream" or "user.mystream".
Bug: https://bugzilla.samba.org/show_bug.cgi?id=11466
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Fri Oct 16 23:27:01 CEST 2015 on sn-devel-104
commit fedd09662c889fb796135d86836c160171fac68d
Author: Ralph Boehme <slow at samba.org>
Date: Mon Aug 24 17:43:40 2015 +0200
vfs_fruit: hide the Netatalk metadata xattr in streaminfo
Bug: https://bugzilla.samba.org/show_bug.cgi?id=11466
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit c8ee1a059b4484575b03ac76b469df85cdabdd9a
Author: Ralph Boehme <slow at samba.org>
Date: Mon Aug 24 17:42:35 2015 +0200
vfs_fruit: add and use define for the Netatalk metadata xattr
Bug: https://bugzilla.samba.org/show_bug.cgi?id=11466
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit c4bdba97b4b09196765bb3a486b16294c28772b8
Author: Anoop C S <anoopcs at redhat.com>
Date: Fri Oct 9 11:32:52 2015 +0000
s3.lib: Remove invalid switch case from sysquotas_nfs
getquota_rslt structure from rquota.h defines the enum
named status whose values start from 1. But in
sysquotas_nfs.c we have an invalid check for status 0.
This change is to remove that particular switch case.
Signed-off-by: Anoop C S <anoopcs at redhat.com>
Reviewed-by: Michael Adam <obnox at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/lib/sysquotas_nfs.c | 7 -----
source3/modules/vfs_fruit.c | 56 ++++++++++++++++++++++++++++++++++---
source3/modules/vfs_streams_xattr.c | 39 +++++++++++++-------------
3 files changed, 71 insertions(+), 31 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/lib/sysquotas_nfs.c b/source3/lib/sysquotas_nfs.c
index 58eedf0..4b37e34 100644
--- a/source3/lib/sysquotas_nfs.c
+++ b/source3/lib/sysquotas_nfs.c
@@ -211,19 +211,12 @@ int sys_get_nfs_quota(const char *path, const char *bdev,
/*
* gqr.status returns
- * 0 if the rpc call fails,
* 1 if quotas exist,
* 2 if there is no quota set, and
* 3 if no permission to get the quota.
*/
switch (gq_rslt.GQR_STATUS) {
- case 0:
- DEBUG(3, ("sys_get_nfs_quotas: Remote Quotas Failed! "
- "Error '%i'\n", gq_rslt.GQR_STATUS));
- ret = -1;
- goto out;
-
case 1:
DEBUG(10, ("sys_get_nfs_quotas: Good quota data\n"));
dp->bsize = (uint64_t)gq_rslt.GQR_RQUOTA.rq_bsize;
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index 25a86c1..a09e288 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -104,11 +104,12 @@ static int vfs_fruit_debug_level = DBGC_VFS;
* REVIEW:
* This is hokey, but what else can we do?
*/
+#define NETATALK_META_XATTR "org.netatalk.Metadata"
#if defined(HAVE_ATTROPEN) || defined(FREEBSD)
-#define AFPINFO_EA_NETATALK "org.netatalk.Metadata"
+#define AFPINFO_EA_NETATALK NETATALK_META_XATTR
#define AFPRESOURCE_EA_NETATALK "org.netatalk.ResourceFork"
#else
-#define AFPINFO_EA_NETATALK "user.org.netatalk.Metadata"
+#define AFPINFO_EA_NETATALK "user." NETATALK_META_XATTR
#define AFPRESOURCE_EA_NETATALK "user.org.netatalk.ResourceFork"
#endif
@@ -1522,6 +1523,37 @@ static bool add_fruit_stream(TALLOC_CTX *mem_ctx, unsigned int *num_streams,
return true;
}
+static bool del_fruit_stream(TALLOC_CTX *mem_ctx, unsigned int *num_streams,
+ struct stream_struct **streams,
+ const char *name)
+{
+ struct stream_struct *tmp = *streams;
+ int i;
+
+ if (*num_streams == 0) {
+ return true;
+ }
+
+ for (i = 0; i < *num_streams; i++) {
+ if (strequal_m(tmp[i].name, name)) {
+ break;
+ }
+ }
+
+ if (i == *num_streams) {
+ return true;
+ }
+
+ TALLOC_FREE(tmp[i].name);
+ if (*num_streams - 1 > i) {
+ memmove(&tmp[i], &tmp[i+1],
+ (*num_streams - i - 1) * sizeof(struct stream_struct));
+ }
+
+ *num_streams -= 1;
+ return true;
+}
+
static bool empty_finderinfo(const struct adouble *ad)
{
@@ -3095,6 +3127,7 @@ static NTSTATUS fruit_streaminfo(vfs_handle_struct *handle,
struct fruit_config_data *config = NULL;
struct smb_filename *smb_fname = NULL;
struct adouble *ad = NULL;
+ NTSTATUS status;
SMB_VFS_HANDLE_GET_DATA(handle, config, struct fruit_config_data,
return NT_STATUS_UNSUCCESSFUL);
@@ -3143,8 +3176,23 @@ static NTSTATUS fruit_streaminfo(vfs_handle_struct *handle,
TALLOC_FREE(smb_fname);
- return SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx,
- pnum_streams, pstreams);
+ status = SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx,
+ pnum_streams, pstreams);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ if (config->meta == FRUIT_META_NETATALK) {
+ /* Remove the Netatalk xattr from the list */
+ if (!del_fruit_stream(mem_ctx, pnum_streams, pstreams,
+ ":" NETATALK_META_XATTR ":$DATA")) {
+ TALLOC_FREE(ad);
+ TALLOC_FREE(smb_fname);
+ return NT_STATUS_NO_MEMORY;
+ }
+ }
+
+ return NT_STATUS_OK;
}
static int fruit_ntimes(vfs_handle_struct *handle,
diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c
index 92bd1c9..b54809f 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -106,12 +106,18 @@ static NTSTATUS streams_xattr_get_name(vfs_handle_struct *handle,
const char *stream_name,
char **xattr_name)
{
+ char *sname;
char *stype;
struct streams_xattr_config *config;
SMB_VFS_HANDLE_GET_DATA(handle, config, struct streams_xattr_config,
return NT_STATUS_UNSUCCESSFUL);
+ sname = talloc_strdup(ctx, stream_name + 1);
+ if (sname == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
/*
* With vfs_fruit option "fruit:encoding = native" we're
* already converting stream names that contain illegal NTFS
@@ -126,41 +132,34 @@ static NTSTATUS streams_xattr_get_name(vfs_handle_struct *handle,
* In check_path_syntax() we've already ensured the streamname
* we got from the client is valid.
*/
- stype = strrchr_m(stream_name + 1, ':');
+ stype = strrchr_m(sname, ':');
if (stype) {
+ /*
+ * We only support one stream type: "$DATA"
+ */
if (strcasecmp_m(stype, ":$DATA") != 0) {
+ talloc_free(sname);
return NT_STATUS_INVALID_PARAMETER;
}
+
+ /* Split name and type */
+ stype[0] = '\0';
}
- *xattr_name = talloc_asprintf(ctx, "%s%s",
+ *xattr_name = talloc_asprintf(ctx, "%s%s%s",
config->prefix,
- stream_name + 1);
+ sname,
+ config->store_stream_type ? ":$DATA" : "");
if (*xattr_name == NULL) {
+ talloc_free(sname);
return NT_STATUS_NO_MEMORY;
}
- if (stype != NULL) {
- /* Normalize the stream type to upercase. */
- if (!strupper_m(strrchr_m(*xattr_name, ':') + 1)) {
- return NT_STATUS_INVALID_PARAMETER;
- }
- } else if (config->store_stream_type) {
- /*
- * Append an explicit stream type if one wasn't
- * specified.
- */
- *xattr_name = talloc_asprintf(ctx, "%s%s",
- *xattr_name, ":$DATA");
- if (*xattr_name == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
- }
-
DEBUG(10, ("xattr_name: %s, stream_name: %s\n", *xattr_name,
stream_name));
+ talloc_free(sname);
return NT_STATUS_OK;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list