[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Thu Feb 11 05:29:15 MST 2010


The branch, master has been updated
       via  25001bb... s3-spoolss: implement spoolss_EnumJobs level 3.
      from  5e1dd19... testprogs: one more error code for spoolss test.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 25001bbd1b0b32073073dab7cf5b78a2b902163f
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 11 00:44:06 2010 +0100

    s3-spoolss: implement spoolss_EnumJobs level 3.
    
    Level 3 has been added with NT 4.0 and Windows 7 (at least 64bit version) makes
    use of it in order to display queued jobs. Windows 7 will *not* fall back to
    level 2 if we just return WERR_UNKNOWN_LEVEL, instead there will be no printjobs
    displayed at all.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/rpc_server/srv_spoolss_nt.c |   76 +++++++++++++++++++++++++++++++++++
 1 files changed, 76 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 7a4c9c9..882193a 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -6111,6 +6111,27 @@ static WERROR fill_job_info2(TALLOC_CTX *mem_ctx,
 }
 
 /****************************************************************************
+fill_job_info3
+****************************************************************************/
+
+static WERROR fill_job_info3(TALLOC_CTX *mem_ctx,
+			     struct spoolss_JobInfo3 *r,
+			     const print_queue_struct *queue,
+			     const print_queue_struct *next_queue,
+			     int position, int snum,
+			     const NT_PRINTER_INFO_LEVEL *ntprinter)
+{
+	r->job_id		= queue->job;
+	r->next_job_id		= 0;
+	if (next_queue) {
+		r->next_job_id	= next_queue->job;
+	}
+	r->reserved		= 0;
+
+	return WERR_OK;
+}
+
+/****************************************************************************
  Enumjobs at level 1.
 ****************************************************************************/
 
@@ -6208,6 +6229,57 @@ static WERROR enumjobs_level2(TALLOC_CTX *mem_ctx,
 	return WERR_OK;
 }
 
+/****************************************************************************
+ Enumjobs at level 3.
+****************************************************************************/
+
+static WERROR enumjobs_level3(TALLOC_CTX *mem_ctx,
+			      const print_queue_struct *queue,
+			      uint32_t num_queues, int snum,
+                              const NT_PRINTER_INFO_LEVEL *ntprinter,
+			      union spoolss_JobInfo **info_p,
+			      uint32_t *count)
+{
+	union spoolss_JobInfo *info;
+	int i;
+	WERROR result = WERR_OK;
+
+	info = TALLOC_ARRAY(mem_ctx, union spoolss_JobInfo, num_queues);
+	W_ERROR_HAVE_NO_MEMORY(info);
+
+	*count = num_queues;
+
+	for (i=0; i<*count; i++) {
+		const print_queue_struct *next_queue = NULL;
+
+		if (i+1 < *count) {
+			next_queue = &queue[i+1];
+		}
+
+		result = fill_job_info3(info,
+					&info[i].info3,
+					&queue[i],
+					next_queue,
+					i,
+					snum,
+					ntprinter);
+		if (!W_ERROR_IS_OK(result)) {
+			goto out;
+		}
+	}
+
+ out:
+	if (!W_ERROR_IS_OK(result)) {
+		TALLOC_FREE(info);
+		*count = 0;
+		return result;
+	}
+
+	*info_p = info;
+
+	return WERR_OK;
+}
+
 /****************************************************************
  _spoolss_EnumJobs
 ****************************************************************/
@@ -6264,6 +6336,10 @@ WERROR _spoolss_EnumJobs(pipes_struct *p,
 		result = enumjobs_level2(p->mem_ctx, queue, count, snum,
 					 ntprinter, r->out.info, r->out.count);
 		break;
+	case 3:
+		result = enumjobs_level3(p->mem_ctx, queue, count, snum,
+					 ntprinter, r->out.info, r->out.count);
+		break;
 	default:
 		result = WERR_UNKNOWN_LEVEL;
 		break;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list