Author: jerry
Date: 2007-05-29 16:54:01 +0000 (Tue, 29 May 2007)
New Revision: 23213

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23213

Log:
Merge printer_info6 support from SAMBA_3_0
(TODO check svn annotate in SAMBA_3_0 for release notes)


Modified:
   branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c


Changeset:
Modified: branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c
===================================================================
--- branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c    2007-05-29 
16:46:16 UTC (rev 23212)
+++ branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c    2007-05-29 
16:54:01 UTC (rev 23213)
@@ -4333,6 +4333,32 @@
 }
 
 /********************************************************************
+ * construct_printer_info_6
+ * fill a printer_info_6 struct
+ ********************************************************************/
+
+static BOOL construct_printer_info_6(Printer_entry *print_hnd,
+                                    PRINTER_INFO_6 *printer,
+                                    int snum)
+{
+       NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
+       int count;
+       print_status_struct status;
+
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
+                                        lp_const_servicename(snum))))
+               return False;
+
+       count = print_queue_length(snum, &status);
+
+       printer->status = nt_printq_status(status.status);
+               
+       free_a_printer(&ntprinter, 2);
+
+       return True;
+}
+
+/********************************************************************
  * construct_printer_info_7
  * fill a printer_info_7 struct
  ********************************************************************/
@@ -4960,6 +4986,46 @@
        return result;  
 }
 
+static WERROR getprinter_level_6(Printer_entry *print_hnd,
+                                int snum,
+                                RPC_BUFFER *buffer, uint32 offered,
+                                uint32 *needed)
+{
+       PRINTER_INFO_6 *printer;
+       WERROR result = WERR_OK;
+
+       if ((printer = SMB_MALLOC_P(PRINTER_INFO_6)) == NULL) {
+               return WERR_NOMEM;
+       }
+
+       if (!construct_printer_info_6(print_hnd, printer, snum)) {
+               free_printer_info_6(printer);
+               return WERR_NOMEM;
+       }
+
+       /* check the required size. */
+       *needed += spoolss_size_printer_info_6(printer);
+
+       if (*needed > offered) {
+               result = WERR_INSUFFICIENT_BUFFER;
+               goto out;
+       }
+
+       if (!rpcbuf_alloc_size(buffer, *needed)) {
+               result = WERR_NOMEM;
+               goto out;
+       }
+
+       /* fill the buffer with the structures */
+       smb_io_printer_info_6("", buffer, printer, 0);  
+       
+out:
+       /* clear memory */
+       free_printer_info_6(printer);
+       
+       return result;  
+}
+
 static WERROR getprinter_level_7(Printer_entry *print_hnd, int snum, 
RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_7 *printer=NULL;
@@ -5036,6 +5102,8 @@
                return getprinter_level_4(Printer, snum, buffer, offered, 
needed);
        case 5:         
                return getprinter_level_5(Printer, snum, buffer, offered, 
needed);
+       case 6:         
+               return getprinter_level_6(Printer, snum, buffer, offered, 
needed);
        case 7:
                return getprinter_level_7(Printer, snum, buffer, offered, 
needed);
        }

Reply via email to