svn commit: samba r23213 - in branches/SAMBA_3_0_26/source/rpc_server: .

jerry at samba.org jerry at samba.org
Tue May 29 16:54:02 GMT 2007


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);
 	}



More information about the samba-cvs mailing list