r11135: should fix seg fault in addprinter code reported by Marcin. Allocate memory...
authorGerald Carter <jerry@samba.org>
Tue, 18 Oct 2005 02:37:13 +0000 (02:37 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:05:02 +0000 (11:05 -0500)
source/rpc_server/srv_spoolss_nt.c

index 5233d6c252df040734f2a77bea58473b1bee2d53..a8fc1bc2293a86e9542cf19c7c94b4b959a9fc18 100644 (file)
@@ -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,