diff options
author | Jeremy Allison <jra@samba.org> | 2003-05-22 20:31:35 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-05-22 20:31:35 +0000 |
commit | f161839a7493602ee4e9be2459230634ddfbb2b1 (patch) | |
tree | 68b8ac8cbe51b01035968fec1d3e03cce4fe5eef /source3/smbd | |
parent | 78a4f6fc4b8938fcab5bb3b7ae9c3a151f7070f8 (diff) | |
download | samba-f161839a7493602ee4e9be2459230634ddfbb2b1.tar.gz samba-f161839a7493602ee4e9be2459230634ddfbb2b1.tar.bz2 samba-f161839a7493602ee4e9be2459230634ddfbb2b1.zip |
Stat opens can have fsp->fd == -1 and will have a share entry. Ensure
that file_find_dif will find them. Fixes a core dump in smbd/open.c.
Jeremy.
(This used to be commit 0e2165630d2ce31076fef6d7098e45c8fd327e23)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/files.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 4d1409feac..f0fd6b7a73 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -231,13 +231,21 @@ files_struct *file_find_dif(SMB_DEV_T dev, SMB_INO_T inode, unsigned long file_i files_struct *fsp; for (fsp=Files;fsp;fsp=fsp->next,count++) { - if (fsp->fd != -1 && - fsp->dev == dev && + /* We can have a fsp->fd == -1 here as it could be a stat open. */ + if (fsp->dev == dev && fsp->inode == inode && fsp->file_id == file_id ) { if (count > 10) { DLIST_PROMOTE(Files, fsp); } + /* Paranoia check. */ + if (fsp->fd == -1 && fsp->oplock_type != NO_OPLOCK) { + DEBUG(0,("file_find_dif: file %s dev = %x, inode = %.0f, file_id = %u \ +oplock_type = %u is a stat open with oplock type !\n", fsp->fsp_name, (unsigned int)fsp->dev, + (double)fsp->inode, (unsigned int)fsp->file_id, + (unsigned int)fsp->oplock_type )); + smb_panic("file_find_dif\n"); + } return fsp; } } |