summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/close.c3
-rw-r--r--source3/smbd/files.c6
-rw-r--r--source3/smbd/negprot.c3
-rw-r--r--source3/smbd/open.c16
4 files changed, 13 insertions, 15 deletions
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 42b16bc7ac..e9606cdfbe 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -117,7 +117,8 @@ void close_file(files_struct *fsp, BOOL normal_close)
del_share_mode(token, fsp);
}
- fd_attempt_close(fsp->fd_ptr);
+ if(fd_attempt_close(fsp->fd_ptr) == 0)
+ fsp->fd_ptr = NULL;
if (lp_share_modes(SNUM(conn)))
unlock_share_entry(conn, dev, inode, token);
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 163e4f0cf2..0b72bcf0fa 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -133,8 +133,8 @@ file_fd_struct *fd_get_already_open(SMB_STRUCT_STAT *sbuf)
(unsigned int)fd_ptr->dev, (double)fd_ptr->inode,
fd_ptr->ref_count));
#else /* LARGE_SMB_INO_T */
- DEBUG(3,("Re-used file_fd_struct dev = %x, inode = %x, ref_count = %d\n",
- (unsigned int)fd_ptr->dev, fd_ptr->inode,
+ DEBUG(3,("Re-used file_fd_struct dev = %x, inode = %lx, ref_count = %d\n",
+ (unsigned int)fd_ptr->dev, (unsigned long)fd_ptr->inode,
fd_ptr->ref_count));
#endif /* LARGE_SMB_INO_T */
return fd_ptr;
@@ -315,7 +315,7 @@ void file_sync_all(connection_struct *conn)
/****************************************************************************
free up a fd_ptr
****************************************************************************/
-static void fd_ptr_free(file_fd_struct *fd_ptr)
+void fd_ptr_free(file_fd_struct *fd_ptr)
{
DLIST_REMOVE(FileFd, fd_ptr);
diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c
index 8e996cac21..b1e8a65c94 100644
--- a/source3/smbd/negprot.c
+++ b/source3/smbd/negprot.c
@@ -156,7 +156,8 @@ reply for the nt protocol
static int reply_nt1(char *outbuf)
{
/* dual names + lock_and_read + nt SMBs + remote API calls */
- int capabilities = CAP_NT_FIND|CAP_LOCK_AND_READ|CAP_RPC_REMOTE_APIS |CAP_NT_SMBS;
+ int capabilities = CAP_NT_FIND|CAP_LOCK_AND_READ|CAP_RPC_REMOTE_APIS |
+ lp_nt_smb_support() ? CAP_NT_SMBS : 0;
/*
other valid capabilities which we may support at some time...
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 45d919187f..a72469f2b2 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -170,13 +170,10 @@ int fd_attempt_close(file_fd_struct *fd_ptr)
close(fd_ptr->fd_readonly);
if(fd_ptr->fd_writeonly != -1)
close(fd_ptr->fd_writeonly);
- fd_ptr->fd = -1;
- fd_ptr->fd_readonly = -1;
- fd_ptr->fd_writeonly = -1;
- fd_ptr->real_open_flags = -1;
- fd_ptr->dev = (SMB_DEV_T)-1;
- fd_ptr->inode = (SMB_INO_T)-1;
- fd_ptr->uid_cache_count = 0;
+ /*
+ * Delete this fd_ptr.
+ */
+ fd_ptr_free(fd_ptr);
} else {
fd_remove_from_uid_cache(fd_ptr, (uid_t)current_user.uid);
}
@@ -457,10 +454,9 @@ static void open_file(files_struct *fsp,connection_struct *conn,
if (p) *p = 0;
if (sys_disk_free(dname,&dum1,&dum2,&dum3) <
lp_minprintspace(SNUM(conn))) {
- fd_attempt_close(fd_ptr);
- fsp->fd_ptr = 0;
- if(fd_ptr->ref_count == 0)
+ if(fd_attempt_close(fd_ptr) == 0)
dos_unlink(fname);
+ fsp->fd_ptr = 0;
errno = ENOSPC;
return;
}