r3575: fixed attribute normalisation in xattr code. RAW-SEARCH now passes again.
authorAndrew Tridgell <tridge@samba.org>
Sat, 6 Nov 2004 09:34:17 +0000 (09:34 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:33 +0000 (13:05 -0500)
source/ntvfs/posix/pvfs_util.c
source/ntvfs/posix/pvfs_xattr.c

index 50a78c296537228fef13bd4765a87a2d2dc04452..92d696970abaae5cced93e02a04f72cbcb60348b 100644 (file)
@@ -63,3 +63,19 @@ NTSTATUS pvfs_match_attrib(struct pvfs_state *pvfs, struct pvfs_filename *name,
        }
        return NT_STATUS_OK;
 }
+
+
+/*
+  normalise a file attribute
+*/
+uint32_t pvfs_attrib_normalise(uint32_t attrib)
+{
+       if (attrib == 0) {
+               attrib = FILE_ATTRIBUTE_NORMAL;
+       }
+       if (attrib != FILE_ATTRIBUTE_NORMAL) {
+               attrib &= ~FILE_ATTRIBUTE_NORMAL;
+       }
+       return attrib;
+}
+
index e086a019bac6a069ef43d4034aa9449371b2cf73..f4063b48b595f1a88b1623e03aecbd83e2af202f 100644 (file)
@@ -184,7 +184,7 @@ NTSTATUS pvfs_dosattrib_load(struct pvfs_state *pvfs, struct pvfs_filename *name
        switch (attrib.version) {
        case 1:
                info1 = &attrib.info.info1;
-               name->dos.attrib = info1->attrib;
+               name->dos.attrib = pvfs_attrib_normalise(info1->attrib);
                name->dos.ea_size = info1->ea_size;
                if (name->st.st_size == info1->size) {
                        name->dos.alloc_size = info1->alloc_size;
@@ -224,6 +224,8 @@ NTSTATUS pvfs_dosattrib_save(struct pvfs_state *pvfs, struct pvfs_filename *name
        attrib.version = 1;
        info1 = &attrib.info.info1;
 
+       name->dos.attrib = pvfs_attrib_normalise(name->dos.attrib);
+
        info1->attrib      = name->dos.attrib;
        info1->ea_size     = name->dos.ea_size;
        info1->size        = name->st.st_size;