summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-12-30 22:49:01 +0100
committerVolker Lendecke <vl@samba.org>2008-12-31 10:51:44 +0100
commitce2ff557bda5560cb9b614313d9ee0adbd57633d (patch)
treed0ddb26093b8b193f859b72504aeba1552e76883
parentcb5db966e34310af16499b657c83f30a1758fc06 (diff)
downloadsamba-ce2ff557bda5560cb9b614313d9ee0adbd57633d.tar.gz
samba-ce2ff557bda5560cb9b614313d9ee0adbd57633d.tar.bz2
samba-ce2ff557bda5560cb9b614313d9ee0adbd57633d.zip
Fix an ancient uninitialized variable read
The callers of open_file_ntcreate expect *psbuf to be filled correctly
-rw-r--r--source3/include/proto.h3
-rw-r--r--source3/printing/printfsp.c10
-rw-r--r--source3/smbd/open.c2
-rw-r--r--source3/smbd/reply.c3
4 files changed, 10 insertions, 8 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 7c00d7b110..b187a660b0 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4896,7 +4896,8 @@ bool sysv_cache_reload(void);
NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
const char *fname,
- uint16_t current_vuid, files_struct *fsp);
+ uint16_t current_vuid, files_struct *fsp,
+ SMB_STRUCT_STAT *psbuf);
void print_fsp_end(files_struct *fsp, enum file_close_type close_type);
/* The following definitions come from printing/printing.c */
diff --git a/source3/printing/printfsp.c b/source3/printing/printfsp.c
index 5481d95650..b485711f91 100644
--- a/source3/printing/printfsp.c
+++ b/source3/printing/printfsp.c
@@ -27,10 +27,10 @@ print_job_start().
NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
const char *fname,
- uint16_t current_vuid, files_struct *fsp)
+ uint16_t current_vuid, files_struct *fsp,
+ SMB_STRUCT_STAT *psbuf)
{
int jobid;
- SMB_STRUCT_STAT sbuf;
fstring name;
NTSTATUS status;
@@ -74,9 +74,9 @@ NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
fsp->is_directory = False;
string_set(&fsp->fsp_name,print_job_fname(lp_const_servicename(SNUM(conn)),jobid));
fsp->wcp = NULL;
- SMB_VFS_FSTAT(fsp, &sbuf);
- fsp->mode = sbuf.st_mode;
- fsp->file_id = vfs_file_id_from_sbuf(conn, &sbuf);
+ SMB_VFS_FSTAT(fsp, psbuf);
+ fsp->mode = psbuf->st_mode;
+ fsp->file_id = vfs_file_id_from_sbuf(conn, psbuf);
return NT_STATUS_OK;
}
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index f00361979d..8fe20f9cca 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1360,7 +1360,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
DEBUG(10, ("open_file_ntcreate: printer open fname=%s\n", fname));
- return print_fsp_open(req, conn, fname, req->vuid, fsp);
+ return print_fsp_open(req, conn, fname, req->vuid, fsp, psbuf);
}
if (!parent_dirname_talloc(talloc_tos(), fname, &parent_dir,
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index b8be3ed304..e2a7afe897 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -4594,6 +4594,7 @@ void reply_printopen(struct smb_request *req)
{
connection_struct *conn = req->conn;
files_struct *fsp;
+ SMB_STRUCT_STAT sbuf;
NTSTATUS status;
START_PROFILE(SMBsplopen);
@@ -4618,7 +4619,7 @@ void reply_printopen(struct smb_request *req)
}
/* Open for exclusive use, write only. */
- status = print_fsp_open(req, conn, NULL, req->vuid, fsp);
+ status = print_fsp_open(req, conn, NULL, req->vuid, fsp, &sbuf);
if (!NT_STATUS_IS_OK(status)) {
reply_nterror(req, status);