dir: verified pathnames fallout
authorMarc Dionne <marc.c.dionne@gmail.com>
Sun, 21 Aug 2011 16:02:29 +0000 (12:02 -0400)
committerDerrick Brashear <shadow@dementix.org>
Tue, 23 Aug 2011 16:38:35 +0000 (09:38 -0700)
Fix some issues introduced with the verified directory path names
commit in master:
- In GetVerifiedBlob, the output parameter is set to NULL on entry
and dereferenced later on.
- For Linux, the code in afs_linux_readdir was changed to pass a
DirEntry to GetVerifiedBlob.  This is incorrect, the function still
expects a DirBuffer pointer.
- In afs_dir_IsEmpty, the assignment of ep was removed, leaving
the function to dereference this pointer which was never set.

Change-Id: I9045076ebe636cf68c19487c0d58baebf2de7dd1
Reviewed-on: http://gerrit.openafs.org/5292
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>

src/afs/LINUX/osi_vnodeops.c
src/dir/dir.c

index ca1998a..f7d5277 100644 (file)
@@ -340,7 +340,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
        if (!dirpos)
            break;
 
-       code = afs_dir_GetVerifiedBlob(tdc, dirpos, &de);
+       code = afs_dir_GetVerifiedBlob(tdc, dirpos, &entry);
        if (code) {
            afs_warn("Corrupt directory (inode %lx, dirpos %d)",
                     (unsigned long)&tdc->f.inode, dirpos);
@@ -350,6 +350,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
            goto out;
         }
 
+       de = (struct DirEntry *)entry.data;
        ino = afs_calc_inum (avc->f.fid.Cell, avc->f.fid.Fid.Volume,
                             ntohl(de->fid.vnode));
        len = strlen(de->name);
index 8772c8a..570c2db 100644 (file)
@@ -475,7 +475,7 @@ afs_dir_IsEmpty(dir_file_t dir)
            /* Walk down the hash table list. */
            if (afs_dir_GetVerifiedBlob(dir, num, &entrybuf) != 0);
                break;
-
+           ep = (struct DirEntry *)entrybuf.data;
            if (strcmp(ep->name, "..") && strcmp(ep->name, ".")) {
                DRelease(&entrybuf, 0);
                DRelease(&headerbuf, 0);
@@ -540,8 +540,6 @@ afs_dir_GetVerifiedBlob(dir_file_t file, afs_int32 blobno,
     int code;
     char *cp;
 
-    outbuf = NULL;
-
     code = GetBlobWithLimit(file, blobno, &buffer, &maxlen);
     if (code)
        return code;