diff options
author | Volker Lendecke <vl@samba.org> | 2008-12-30 22:49:01 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2008-12-31 10:51:44 +0100 |
commit | ce2ff557bda5560cb9b614313d9ee0adbd57633d (patch) | |
tree | d0ddb26093b8b193f859b72504aeba1552e76883 | |
parent | cb5db966e34310af16499b657c83f30a1758fc06 (diff) | |
download | samba-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.h | 3 | ||||
-rw-r--r-- | source3/printing/printfsp.c | 10 | ||||
-rw-r--r-- | source3/smbd/open.c | 2 | ||||
-rw-r--r-- | source3/smbd/reply.c | 3 |
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); |