r3207: - reformat error msgs in BASE-DIR* tests
authorAndrew Tridgell <tridge@samba.org>
Mon, 25 Oct 2004 07:58:47 +0000 (07:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:04:41 +0000 (13:04 -0500)
- added support for mandatory attributes in old style directory search

- we now pass BASE-DIR1 and BASE-DIR2
(This used to be commit efaa0eaec49e952aa515c3448246d9048a484c26)

source4/ntvfs/posix/pvfs_search.c
source4/ntvfs/posix/pvfs_unlink.c
source4/ntvfs/posix/pvfs_util.c
source4/ntvfs/posix/vfs_posix.h
source4/script/tests/test_posix.sh
source4/torture/basic/dir.c

index 1464609e989cbcbc62fddf334a72500dc7b8fb13..ff9ad20b4310c04c2ee9db7d125745bfe977eb67 100644 (file)
@@ -54,7 +54,7 @@ static NTSTATUS fill_search_info(struct pvfs_state *pvfs,
                return status;
        }
 
-       if (!pvfs_match_attrib(pvfs, name, search->search_attrib)) {
+       if (!pvfs_match_attrib(pvfs, name, search->search_attrib, search->must_attrib)) {
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
        }
 
@@ -296,7 +296,8 @@ static NTSTATUS pvfs_search_first_old(struct ntvfs_module_context *ntvfs,
        search->handle = id;
        search->dir = dir;
        search->current_index = 0;
-       search->search_attrib = search_attrib;
+       search->search_attrib = search_attrib & 0xFF;
+       search->must_attrib = (search_attrib>>8) & 0xFF;
 
        talloc_set_destructor(search, pvfs_search_destructor);
 
@@ -425,6 +426,7 @@ NTSTATUS pvfs_search_first(struct ntvfs_module_context *ntvfs,
        search->dir = dir;
        search->current_index = 0;
        search->search_attrib = search_attrib;
+       search->must_attrib = 0;
 
        talloc_set_destructor(search, pvfs_search_destructor);
 
index 10a27a5de7d545388353fc47030ec37e35b576e5..12ab583082ba0dc5a023a918211399476d6d5bde 100644 (file)
@@ -42,7 +42,7 @@ static NTSTATUS pvfs_unlink_one(struct pvfs_state *pvfs, TALLOC_CTX *mem_ctx,
        }
 
        /* make sure its matches the given attributes */
-       if (!pvfs_match_attrib(pvfs, name, attrib)) {
+       if (!pvfs_match_attrib(pvfs, name, attrib, 0)) {
                talloc_free(name);
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
        }
index 3c65453798b1e9309b7676e464525a25bd7a62bf..ae1dc6236d6a7a06b1e38435abc870a6a57a3357 100644 (file)
@@ -49,11 +49,15 @@ NTSTATUS pvfs_map_errno(struct pvfs_state *pvfs, int unix_errno)
   this is used by calls like unlink and search which take an attribute
   and only include special files if they match the given attribute
 */
-BOOL pvfs_match_attrib(struct pvfs_state *pvfs, struct pvfs_filename *name, uint32_t attrib)
+BOOL pvfs_match_attrib(struct pvfs_state *pvfs, struct pvfs_filename *name, 
+                      uint32_t attrib, uint32_t must_attrib)
 {
        if ((name->dos.attrib & ~attrib) & 
            (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_SYSTEM)) {
                return False;
        }
+       if (must_attrib & ~name->dos.attrib) {
+               return False;
+       }
        return True;
 }
index d4c0b19974b8009ccf7b3e1e72ac3c6197bb4a34..656ac853804c92c6cf85025511f87217562fe152 100644 (file)
@@ -90,6 +90,7 @@ struct pvfs_search_state {
        uint16_t handle;
        uint_t current_index;
        uint16_t search_attrib;
+       uint16_t must_attrib;
        struct pvfs_dir *dir;
 };
 
index 1953f43e769fe792c2523bf7689c06e1a891bf5e..88608a59c95d57ab4b965dc9410b346c9c15ad0a 100755 (executable)
@@ -30,7 +30,7 @@ testit() {
 
 tests="BASE-FDPASS BASE-LOCK1 BASE-LOCK2 BASE-LOCK3 BASE-LOCK4"
 tests="$tests BASE-LOCK5 BASE-LOCK6 BASE-LOCK7 BASE-UNLINK BASE-ATTR"
-tests="$tests BASE-NEGNOWAIT BASE-DIR BASE-VUID"
+tests="$tests BASE-NEGNOWAIT BASE-DIR1 BASE-DIR2 BASE-VUID"
 tests="$tests BASE-DENY2 BASE-TCON BASE-TCONDEV BASE-RW1"
 tests="$tests BASE-DENY3 BASE-XCOPY BASE-OPEN"
 tests="$tests BASE-DELETE BASE-PROPERTIES BASE-MANGLE"
@@ -39,7 +39,7 @@ tests="$tests RAW-QFSINFO RAW-QFILEINFO RAW-SFILEINFO-BUG"
 tests="$tests RAW-LOCK RAW-MKDIR RAW-SEEK RAW-CONTEXT BASE-RENAME"
 
 
-soon="BASE-DIR1 BASE-DENY1 BASE-DEFER_OPEN BASE-OPENATTR BASE-CHARSET"
+soon="BASE-DENY1 BASE-DEFER_OPEN BASE-OPENATTR BASE-CHARSET"
 soon="$soon RAW-SFILEINFO RAW-SEARCH RAW-OPEN RAW-OPLOCK RAW-NOTIFY RAW-MUX RAW-IOCTL"
 soon="$soon RAW-CHKPATH RAW-UNLINK RAW-READ RAW-WRITE RAW-RENAME RAW-CLOSE BASE-TRANS2"
 
index a5996ae5ab808137c6aa6952361eb7fbb29466e9..de2944e7fe44182cdaf762e2402ee18799e8baac 100644 (file)
@@ -53,7 +53,8 @@ BOOL torture_dirtest1(int dummy)
                asprintf(&fname, "\\%x", (int)random());
                fnum = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
                if (fnum == -1) {
-                       fprintf(stderr,"Failed to open %s\n", fname);
+                       fprintf(stderr,"(%s) Failed to open %s\n", 
+                               __location__, fname);
                        return False;
                }
                smbcli_close(cli->tree, fnum);
@@ -117,7 +118,8 @@ BOOL torture_dirtest2(int dummy)
                fnum = smbcli_nt_create_full(cli->tree, fname, 0, GENERIC_RIGHTS_FILE_ALL_ACCESS, FILE_ATTRIBUTE_ARCHIVE,
                                   NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_WRITE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
                if (fnum == -1) {
-                       fprintf(stderr,"Failed to open %s, error=%s\n", fname, smbcli_errstr(cli->tree));
+                       fprintf(stderr,"(%s) Failed to open %s, error=%s\n", 
+                               __location__, fname, smbcli_errstr(cli->tree));
                        return False;
                }
                free(fname);
@@ -127,7 +129,8 @@ BOOL torture_dirtest2(int dummy)
                char *fname;
                asprintf(&fname, "\\LISTDIR\\d%d", i);
                if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, fname))) {
-                       fprintf(stderr,"Failed to open %s, error=%s\n", fname, smbcli_errstr(cli->tree));
+                       fprintf(stderr,"(%s) Failed to open %s, error=%s\n", 
+                               __location__, fname, smbcli_errstr(cli->tree));
                        return False;
                }
                free(fname);
@@ -139,8 +142,8 @@ BOOL torture_dirtest2(int dummy)
        /* We should see (torture_entries) each of files & directories + . and .. */
        if (num_seen != (2*torture_entries)+2) {
                correct = False;
-               fprintf(stderr,"entry count mismatch, should be %d, was %d\n",
-                       (2*torture_entries)+2, num_seen);
+               fprintf(stderr,"(%s) entry count mismatch, should be %d, was %d\n",
+                       __location__, (2*torture_entries)+2, num_seen);
        }
                
 
@@ -151,21 +154,22 @@ BOOL torture_dirtest2(int dummy)
        printf("num_seen = %d\n", num_seen );
        if (num_seen != torture_entries+2) {
                correct = False;
-               fprintf(stderr,"entry count mismatch, should be %d, was %d\n",
-                       torture_entries+2, num_seen);
+               fprintf(stderr,"(%s) entry count mismatch, should be %d, was %d\n",
+                       __location__, torture_entries+2, num_seen);
        }
 
        num_seen = smbcli_list_old(cli->tree, "\\LISTDIR\\*", (FILE_ATTRIBUTE_ARCHIVE<<8)|FILE_ATTRIBUTE_DIRECTORY, list_fn, NULL);
        printf("num_seen = %d\n", num_seen );
        if (num_seen != torture_entries) {
                correct = False;
-               fprintf(stderr,"entry count mismatch, should be %d, was %d\n",
-                       torture_entries, num_seen);
+               fprintf(stderr,"(%s) entry count mismatch, should be %d, was %d\n",
+                       __location__, torture_entries, num_seen);
        }
 
        /* Delete everything. */
        if (smbcli_deltree(cli->tree, "\\LISTDIR") == -1) {
-               fprintf(stderr,"Failed to deltree %s, error=%s\n", "\\LISTDIR", smbcli_errstr(cli->tree));
+               fprintf(stderr,"(%s) Failed to deltree %s, error=%s\n", "\\LISTDIR", 
+                       __location__, smbcli_errstr(cli->tree));
                return False;
        }