Maintain a back-pointer to the fsp in struct smb_Dir when opening with FDOPENDIR.
authorJeremy Allison <jra@samba.org>
Wed, 10 Apr 2013 23:21:39 +0000 (16:21 -0700)
committerAndreas Schneider <asn@samba.org>
Fri, 12 Apr 2013 12:29:51 +0000 (14:29 +0200)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/smbd/dir.c

index f1c177f2d7794d59330c09b4c8fad6ba93f3752c..e6233166a0d9e82d492e1cc422f8a965ecaecd66 100644 (file)
@@ -50,6 +50,8 @@ struct smb_Dir {
        struct name_cache_entry *name_cache;
        unsigned int name_cache_index;
        unsigned int file_number;
+       files_struct *fsp; /* Back pointer to containing fsp, only
+                             set from OpenDir_fsp(). */
 };
 
 struct dptr_struct {
@@ -1540,7 +1542,9 @@ static struct smb_Dir *OpenDir_fsp(TALLOC_CTX *mem_ctx, connection_struct *conn,
 
        if (fsp->is_directory && fsp->fh->fd != -1) {
                dirp->dir = SMB_VFS_FDOPENDIR(fsp, mask, attr);
-               if (dirp->dir == NULL) {
+               if (dirp->dir != NULL) {
+                       dirp->fsp = fsp;
+               } else {
                        DEBUG(10,("OpenDir_fsp: SMB_VFS_FDOPENDIR on %s returned "
                                "NULL (%s)\n",
                                dirp->dir_path,