diff options
author | Gerald Carter <jerry@samba.org> | 2005-10-18 02:37:13 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:05:02 -0500 |
commit | 6f72169c7cee4d8334c15e3add711cd1716e618a (patch) | |
tree | 17de17773da710fc2a7a092239615b273aaee5f0 | |
parent | aab2f04e022b4e8b733cf0710b58cc12367f1337 (diff) | |
download | samba-6f72169c7cee4d8334c15e3add711cd1716e618a.tar.gz samba-6f72169c7cee4d8334c15e3add711cd1716e618a.tar.bz2 samba-6f72169c7cee4d8334c15e3add711cd1716e618a.zip |
r11135: should fix seg fault in addprinter code reported by Marcin. Allocate memory in convert_printer_info() if necessary
(This used to be commit 7ada5da8e94a08a9a3e488172fa04ce688882299)
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 5233d6c252..a8fc1bc229 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1729,20 +1729,29 @@ WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u, static BOOL convert_printer_info(const SPOOL_PRINTER_INFO_LEVEL *uni, NT_PRINTER_INFO_LEVEL *printer, uint32 level) { - BOOL ret = True; + BOOL ret; switch (level) { case 2: - /* printer->info_2 is already a valid printer */ + /* allocate memory if needed. Messy because + convert_printer_info is used to update an existing + printer or build a new one */ + + if ( !printer->info_2 ) { + printer->info_2 = TALLOC_ZERO_P( printer, NT_PRINTER_INFO_LEVEL_2 ); + if ( !printer->info_2 ) { + DEBUG(0,("convert_printer_info: talloc() failed!\n")); + return False; + } + } + ret = uni_2_asc_printer_info_2(uni->info_2, printer->info_2); printer->info_2->setuptime = time(NULL); - break; - default: - break; + return ret; } - return ret; + return False; } static BOOL convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *uni, |