[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Mon May 3 06:44:46 MDT 2010


The branch, master has been updated
       via  5efdd13... s4-smbtorture: add test_netprintjobsetinfo to RAP-PRINTING.
       via  44fdec0... s4-smbtorture: add smbcli_rap_netprintjobsetinfo().
       via  4578269... s4-smbtorture: add rap_cli_push_param() and rap_cli_push_sendbuf().
      from  fe33db6... s3-lanman: exit early for unsupported levels in api_PrintJobInfo().

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


- Log -----------------------------------------------------------------
commit 5efdd13d12a0c4daf0d659556ea0eba4625499f4
Author: Günther Deschner <gd at samba.org>
Date:   Mon May 3 11:57:06 2010 +0200

    s4-smbtorture: add test_netprintjobsetinfo to RAP-PRINTING.
    
    Guenther

commit 44fdec02fc03f5af5a081e80e8eda12ebc5f31ba
Author: Günther Deschner <gd at samba.org>
Date:   Mon May 3 11:46:57 2010 +0200

    s4-smbtorture: add smbcli_rap_netprintjobsetinfo().
    
    Guenther

commit 457826947f97ad914e5e4543a9c668bd8b4fa019
Author: Günther Deschner <gd at samba.org>
Date:   Mon May 3 11:45:52 2010 +0200

    s4-smbtorture: add rap_cli_push_param() and rap_cli_push_sendbuf().
    
    Guenther

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

Summary of changes:
 source4/torture/rap/printing.c |   82 ++++++++++++++++++++++++++++++++++++++
 source4/torture/rap/rap.c      |   86 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 168 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rap/printing.c b/source4/torture/rap/printing.c
index 6161239..0be477c 100644
--- a/source4/torture/rap/printing.c
+++ b/source4/torture/rap/printing.c
@@ -330,6 +330,38 @@ static bool test_netprintjobgetinfo_byid(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_netprintjobsetinfo_byid(struct torture_context *tctx,
+					 struct smbcli_state *cli,
+					 uint16_t JobID)
+{
+	struct rap_NetPrintJobSetInfo r;
+	uint16_t levels[] = { 0, 1, 2 };
+	NTSTATUS status;
+	int i;
+	const char *comment = "tortured by samba";
+
+	r.in.JobID = JobID;
+	r.in.bufsize = strlen(comment);
+	r.in.ParamNum = RAP_PARAM_JOBCOMMENT;
+	r.in.Param.string = comment;
+
+	for (i=0; i < ARRAY_SIZE(levels); i++) {
+
+		r.in.level = levels[i];
+
+		torture_comment(tctx, "Testing rap_NetPrintJobSetInfo(%d) level %d\n", r.in.JobID, r.in.level);
+
+		status = smbcli_rap_netprintjobsetinfo(cli->tree, lp_iconv_convenience(tctx->lp_ctx), tctx, &r);
+		if (!NT_STATUS_IS_OK(status)) {
+			torture_warning(tctx, "smbcli_rap_netprintjobsetinfo failed with %s\n", nt_errstr(status));
+			continue;
+		}
+	}
+
+	return true;
+}
+
+
 static bool test_netprintjobgetinfo_byqueue(struct torture_context *tctx,
 					    struct smbcli_state *cli,
 					    const char *PrintQueueName)
@@ -355,6 +387,30 @@ static bool test_netprintjobgetinfo_byqueue(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_netprintjobsetinfo_byqueue(struct torture_context *tctx,
+					    struct smbcli_state *cli,
+					    const char *PrintQueueName)
+{
+	struct rap_NetPrintJobEnum r;
+	int i;
+
+	r.in.PrintQueueName = PrintQueueName;
+	r.in.bufsize = 8192;
+	r.in.level = 0;
+
+	torture_assert_ntstatus_ok(tctx,
+		smbcli_rap_netprintjobenum(cli->tree, lp_iconv_convenience(tctx->lp_ctx), tctx, &r),
+		"failed to enumerate jobs");
+
+	for (i=0; i < r.out.count; i++) {
+
+		torture_assert(tctx,
+			test_netprintjobsetinfo_byid(tctx, cli, r.out.info[i].info0.JobID),
+			"failed to set job info");
+	}
+
+	return true;
+}
 
 static bool test_netprintjobenum(struct torture_context *tctx,
 				 struct smbcli_state *cli)
@@ -406,6 +462,31 @@ static bool test_netprintjobgetinfo(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_netprintjobsetinfo(struct torture_context *tctx,
+				    struct smbcli_state *cli)
+{
+	struct rap_NetPrintQEnum r;
+	int i;
+
+	r.in.level = 5;
+	r.in.bufsize = 8192;
+
+	torture_assert_ntstatus_ok(tctx,
+		smbcli_rap_netprintqenum(cli->tree, lp_iconv_convenience(tctx->lp_ctx), tctx, &r),
+		"failed to enum printq");
+
+	for (i=0; i < r.out.count; i++) {
+
+		const char *printqname = r.out.info[i].info5.PrintQueueName;
+
+		torture_assert(tctx,
+			test_netprintjobsetinfo_byqueue(tctx, cli, printqname),
+			"failed to set printjobs on print queue");
+	}
+
+	return true;
+}
+
 static bool test_rap_print(struct torture_context *tctx,
 			   struct smbcli_state *cli)
 {
@@ -431,6 +512,7 @@ struct torture_suite *torture_rap_printing(TALLOC_CTX *mem_ctx)
 	torture_suite_add_1smb_test(suite, "rap_printq", test_netprintq);
 	torture_suite_add_1smb_test(suite, "rap_printjob_enum", test_netprintjobenum);
 	torture_suite_add_1smb_test(suite, "rap_printjob_getinfo", test_netprintjobgetinfo);
+	torture_suite_add_1smb_test(suite, "rap_printjob_setinfo", test_netprintjobsetinfo);
 	torture_suite_add_1smb_test(suite, "rap_printjob", test_netprintjob);
 
 	return suite;
diff --git a/source4/torture/rap/rap.c b/source4/torture/rap/rap.c
index ead7f8a..0542379 100644
--- a/source4/torture/rap/rap.c
+++ b/source4/torture/rap/rap.c
@@ -141,6 +141,20 @@ static void rap_cli_push_rcvbuf(struct rap_call *call, int len)
 	call->rcv_datalen = len;
 }
 
+static void rap_cli_push_sendbuf(struct rap_call *call, int len)
+{
+	rap_cli_push_paramdesc(call, 's');
+	rap_cli_push_paramdesc(call, 'T');
+	ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, len);
+	call->rcv_datalen = len;
+}
+
+static void rap_cli_push_param(struct rap_call *call, uint16_t val)
+{
+	rap_cli_push_paramdesc(call, 'P');
+	ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, val);
+}
+
 static void rap_cli_expect_multiple_entries(struct rap_call *call)
 {
 	rap_cli_push_paramdesc(call, 'e');
@@ -1276,6 +1290,78 @@ NTSTATUS smbcli_rap_netprintjobgetinfo(struct smbcli_tree *tree,
 	return result;
 }
 
+NTSTATUS smbcli_rap_netprintjobsetinfo(struct smbcli_tree *tree,
+				       struct smb_iconv_convenience *iconv_convenience,
+				       TALLOC_CTX *mem_ctx,
+				       struct rap_NetPrintJobSetInfo *r)
+{
+	struct rap_call *call;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	if (!(call = new_rap_cli_call(mem_ctx, iconv_convenience, RAP_WPrintJobSetInfo))) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	rap_cli_push_word(call, r->in.JobID);
+	rap_cli_push_word(call, r->in.level);
+	rap_cli_push_sendbuf(call, r->in.bufsize);
+	rap_cli_push_param(call, r->in.ParamNum);
+
+	switch (r->in.ParamNum) {
+	case RAP_PARAM_JOBNUM:
+	case RAP_PARAM_JOBPOSITION:
+	case RAP_PARAM_JOBSTATUS:
+		NDR_GOTO(ndr_push_uint16(call->ndr_push_param, NDR_SCALARS, r->in.Param.value));
+		break;
+	case RAP_PARAM_USERNAME:
+	case RAP_PARAM_NOTIFYNAME:
+	case RAP_PARAM_DATATYPE:
+	case RAP_PARAM_PARAMETERS_STRING:
+	case RAP_PARAM_JOBSTATUSSTR:
+	case RAP_PARAM_JOBCOMMENT:
+		NDR_GOTO(ndr_push_string(call->ndr_push_param, NDR_SCALARS, r->in.Param.string));
+		break;
+	case RAP_PARAM_TIMESUBMITTED:
+	case RAP_PARAM_JOBSIZE:
+		NDR_GOTO(ndr_push_uint32(call->ndr_push_param, NDR_SCALARS, r->in.Param.value4));
+		break;
+	default:
+		result = NT_STATUS_INVALID_PARAMETER;
+		break;
+	}
+
+	/* not really sure if this is correct */
+	rap_cli_expect_format(call, "WB21BB16B10zWWzDDz");
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_IN_DEBUG(rap_NetPrintJobSetInfo, r);
+	}
+
+	result = rap_cli_do_call(tree, iconv_convenience, call);
+
+	if (!NT_STATUS_IS_OK(result))
+		goto done;
+
+	result = NT_STATUS_INVALID_PARAMETER;
+
+	NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
+	NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
+
+	result = NT_STATUS_OK;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_OUT_DEBUG(rap_NetPrintJobSetInfo, r);
+	}
+
+ done:
+	talloc_free(call);
+	return result;
+}
+
 static bool test_netservergetinfo(struct torture_context *tctx, 
 				  struct smbcli_state *cli)
 {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list