[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Fri Apr 30 09:07:19 MDT 2010
The branch, master has been updated
via b9a97cf... s4-smbtorture: add test_netprintjobgetinfo().
via 7c88d30... s4-smbtorture: add smbcli_rap_netprintjobgetinfo().
via 60736f1... s3: re-run make samba3-idl.
via 24a2ddb... rap: add rap_NetPrintJobGetInfo to IDL.
via 82d4e85... s4-smbtorture: fix smbcli_rap_netprintjobenum().
from 400c07f... s4-smbtorture: add test_netprintjobenum to RAP-PRINTING.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit b9a97cf8649141dcd13f09cd1866d60f090d0bbe
Author: Günther Deschner <gd at samba.org>
Date: Fri Apr 30 17:06:29 2010 +0200
s4-smbtorture: add test_netprintjobgetinfo().
Guenther
commit 7c88d30836f7a1a817bf32e2c5aa200e8808cdf1
Author: Günther Deschner <gd at samba.org>
Date: Fri Apr 30 17:06:03 2010 +0200
s4-smbtorture: add smbcli_rap_netprintjobgetinfo().
Guenther
commit 60736f1e055292aa9f318d71f97d3896f3570f4a
Author: Günther Deschner <gd at samba.org>
Date: Fri Apr 30 17:04:42 2010 +0200
s3: re-run make samba3-idl.
Guenther
commit 24a2ddb6e367f18afb3923b344d268399c36a5b9
Author: Günther Deschner <gd at samba.org>
Date: Fri Apr 30 17:04:14 2010 +0200
rap: add rap_NetPrintJobGetInfo to IDL.
Guenther
commit 82d4e858eaa443a17511d2d6be1c627b2b1c5072
Author: Günther Deschner <gd at samba.org>
Date: Fri Apr 30 17:05:17 2010 +0200
s4-smbtorture: fix smbcli_rap_netprintjobenum().
It is just fine for a printq to have no pending jobs.
Guenther
-----------------------------------------------------------------------
Summary of changes:
librpc/gen_ndr/ndr_rap.c | 64 +++++++++++++++++++++++++++++
librpc/gen_ndr/ndr_rap.h | 7 +++-
librpc/gen_ndr/rap.h | 17 ++++++++
librpc/idl/rap.idl | 10 +++++
source4/torture/rap/printing.c | 82 +++++++++++++++++++++++++++++++++++++-
source4/torture/rap/rap.c | 86 ++++++++++++++++++++++++++++++++++++++++
6 files changed, 264 insertions(+), 2 deletions(-)
Changeset truncated at 500 lines:
diff --git a/librpc/gen_ndr/ndr_rap.c b/librpc/gen_ndr/ndr_rap.c
index f7b8652..a0e3c1f 100644
--- a/librpc/gen_ndr/ndr_rap.c
+++ b/librpc/gen_ndr/ndr_rap.c
@@ -3976,3 +3976,67 @@ _PUBLIC_ void ndr_print_rap_NetPrintJobEnum(struct ndr_print *ndr, const char *n
ndr->depth--;
}
+_PUBLIC_ enum ndr_err_code ndr_push_rap_NetPrintJobGetInfo(struct ndr_push *ndr, int flags, const struct rap_NetPrintJobGetInfo *r)
+{
+ if (flags & NDR_IN) {
+ NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.JobID));
+ NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
+ NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.bufsize));
+ }
+ if (flags & NDR_OUT) {
+ NDR_CHECK(ndr_push_rap_status(ndr, NDR_SCALARS, r->out.status));
+ NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->out.convert));
+ NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->out.available));
+ NDR_CHECK(ndr_push_set_switch_value(ndr, &r->out.info, r->in.level));
+ NDR_CHECK(ndr_push_rap_printj_info(ndr, NDR_SCALARS|NDR_BUFFERS, &r->out.info));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_rap_NetPrintJobGetInfo(struct ndr_pull *ndr, int flags, struct rap_NetPrintJobGetInfo *r)
+{
+ if (flags & NDR_IN) {
+ ZERO_STRUCT(r->out);
+
+ NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.JobID));
+ NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
+ NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.bufsize));
+ }
+ if (flags & NDR_OUT) {
+ NDR_CHECK(ndr_pull_rap_status(ndr, NDR_SCALARS, &r->out.status));
+ NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->out.convert));
+ NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->out.available));
+ NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.info, r->in.level));
+ NDR_CHECK(ndr_pull_rap_printj_info(ndr, NDR_SCALARS|NDR_BUFFERS, &r->out.info));
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_rap_NetPrintJobGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetPrintJobGetInfo *r)
+{
+ ndr_print_struct(ndr, name, "rap_NetPrintJobGetInfo");
+ ndr->depth++;
+ if (flags & NDR_SET_VALUES) {
+ ndr->flags |= LIBNDR_PRINT_SET_VALUES;
+ }
+ if (flags & NDR_IN) {
+ ndr_print_struct(ndr, "in", "rap_NetPrintJobGetInfo");
+ ndr->depth++;
+ ndr_print_uint16(ndr, "JobID", r->in.JobID);
+ ndr_print_uint16(ndr, "level", r->in.level);
+ ndr_print_uint16(ndr, "bufsize", r->in.bufsize);
+ ndr->depth--;
+ }
+ if (flags & NDR_OUT) {
+ ndr_print_struct(ndr, "out", "rap_NetPrintJobGetInfo");
+ ndr->depth++;
+ ndr_print_rap_status(ndr, "status", r->out.status);
+ ndr_print_uint16(ndr, "convert", r->out.convert);
+ ndr_print_uint16(ndr, "available", r->out.available);
+ ndr_print_set_switch_value(ndr, &r->out.info, r->in.level);
+ ndr_print_rap_printj_info(ndr, "info", &r->out.info);
+ ndr->depth--;
+ }
+ ndr->depth--;
+}
+
diff --git a/librpc/gen_ndr/ndr_rap.h b/librpc/gen_ndr/ndr_rap.h
index 6cd7901..6ccaf76 100644
--- a/librpc/gen_ndr/ndr_rap.h
+++ b/librpc/gen_ndr/ndr_rap.h
@@ -31,7 +31,9 @@
#define NDR_RAP_NETPRINTJOBENUM (0x0b)
-#define NDR_RAP_CALL_COUNT (12)
+#define NDR_RAP_NETPRINTJOBGETINFO (0x0c)
+
+#define NDR_RAP_CALL_COUNT (13)
enum ndr_err_code ndr_push_rap_status(struct ndr_push *ndr, int ndr_flags, enum rap_status r);
enum ndr_err_code ndr_pull_rap_status(struct ndr_pull *ndr, int ndr_flags, enum rap_status *r);
void ndr_print_rap_status(struct ndr_print *ndr, const char *name, enum rap_status r);
@@ -102,4 +104,7 @@ void ndr_print_rap_NetPrintQueuePurge(struct ndr_print *ndr, const char *name, i
enum ndr_err_code ndr_push_rap_NetPrintJobEnum(struct ndr_push *ndr, int flags, const struct rap_NetPrintJobEnum *r);
enum ndr_err_code ndr_pull_rap_NetPrintJobEnum(struct ndr_pull *ndr, int flags, struct rap_NetPrintJobEnum *r);
void ndr_print_rap_NetPrintJobEnum(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetPrintJobEnum *r);
+enum ndr_err_code ndr_push_rap_NetPrintJobGetInfo(struct ndr_push *ndr, int flags, const struct rap_NetPrintJobGetInfo *r);
+enum ndr_err_code ndr_pull_rap_NetPrintJobGetInfo(struct ndr_pull *ndr, int flags, struct rap_NetPrintJobGetInfo *r);
+void ndr_print_rap_NetPrintJobGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetPrintJobGetInfo *r);
#endif /* _HEADER_NDR_rap */
diff --git a/librpc/gen_ndr/rap.h b/librpc/gen_ndr/rap.h
index e20a569..3d93b4e 100644
--- a/librpc/gen_ndr/rap.h
+++ b/librpc/gen_ndr/rap.h
@@ -792,4 +792,21 @@ struct rap_NetPrintJobEnum {
};
+
+struct rap_NetPrintJobGetInfo {
+ struct {
+ uint16_t JobID;
+ uint16_t level;
+ uint16_t bufsize;
+ } in;
+
+ struct {
+ enum rap_status status;
+ uint16_t convert;
+ uint16_t available;
+ union rap_printj_info info;/* [switch_is(level)] */
+ } out;
+
+};
+
#endif /* _HEADER_rap */
diff --git a/librpc/idl/rap.idl b/librpc/idl/rap.idl
index 8035327..b8b2e95 100644
--- a/librpc/idl/rap.idl
+++ b/librpc/idl/rap.idl
@@ -628,6 +628,16 @@ interface rap
[out,switch_is(level)] rap_printj_info info[count]
);
+ [public] void rap_NetPrintJobGetInfo(
+ [in] uint16 JobID,
+ [in] uint16 level,
+ [in] uint16 bufsize,
+ [out] rap_status status,
+ [out] uint16 convert,
+ [out] uint16 available,
+ [out,switch_is(level)] rap_printj_info info
+ );
+
/* Parameter description strings for RAP calls */
/* Names are defined name for RAP call with _REQ */
/* appended to end. */
diff --git a/source4/torture/rap/printing.c b/source4/torture/rap/printing.c
index cebacd4..6161239 100644
--- a/source4/torture/rap/printing.c
+++ b/source4/torture/rap/printing.c
@@ -302,6 +302,60 @@ static bool test_netprintjobenum_one(struct torture_context *tctx,
return true;
}
+static bool test_netprintjobgetinfo_byid(struct torture_context *tctx,
+ struct smbcli_state *cli,
+ uint16_t JobID)
+{
+ struct rap_NetPrintJobGetInfo r;
+ uint16_t levels[] = { 0, 1, 2 };
+ NTSTATUS status;
+ int i;
+
+ r.in.JobID = JobID;
+ r.in.bufsize = 8192;
+
+ for (i=0; i < ARRAY_SIZE(levels); i++) {
+
+ r.in.level = levels[i];
+
+ torture_comment(tctx, "Testing rap_NetPrintJobGetInfo(%d) level %d\n", r.in.JobID, r.in.level);
+
+ status = smbcli_rap_netprintjobgetinfo(cli->tree, lp_iconv_convenience(tctx->lp_ctx), tctx, &r);
+ if (!NT_STATUS_IS_OK(status)) {
+ torture_warning(tctx, "smbcli_rap_netprintjobgetinfo 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)
+{
+ 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_netprintjobgetinfo_byid(tctx, cli, r.out.info[i].info0.JobID),
+ "failed to get job info");
+ }
+
+ return true;
+}
+
+
static bool test_netprintjobenum(struct torture_context *tctx,
struct smbcli_state *cli)
{
@@ -327,6 +381,31 @@ static bool test_netprintjobenum(struct torture_context *tctx,
return true;
}
+static bool test_netprintjobgetinfo(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_netprintjobgetinfo_byqueue(tctx, cli, printqname),
+ "failed to enumerate printjobs on print queue");
+ }
+
+ return true;
+}
+
static bool test_rap_print(struct torture_context *tctx,
struct smbcli_state *cli)
{
@@ -349,9 +428,10 @@ struct torture_suite *torture_rap_printing(TALLOC_CTX *mem_ctx)
torture_suite_add_1smb_test(suite, "rap_print", test_rap_print);
torture_suite_add_1smb_test(suite, "rap_printq_enum", test_netprintqenum);
torture_suite_add_1smb_test(suite, "rap_printq_getinfo", test_netprintqgetinfo);
+ 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", test_netprintjob);
- torture_suite_add_1smb_test(suite, "rap_printq", test_netprintq);
return suite;
}
diff --git a/source4/torture/rap/rap.c b/source4/torture/rap/rap.c
index ede48b1..ead7f8a 100644
--- a/source4/torture/rap/rap.c
+++ b/source4/torture/rap/rap.c
@@ -1157,6 +1157,8 @@ NTSTATUS smbcli_rap_netprintjobenum(struct smbcli_tree *tree,
goto done;
}
+ result = NT_STATUS_OK;
+
for (i=0; i<r->out.count; i++) {
switch(r->in.level) {
case 0:
@@ -1189,6 +1191,90 @@ NTSTATUS smbcli_rap_netprintjobenum(struct smbcli_tree *tree,
return result;
}
+NTSTATUS smbcli_rap_netprintjobgetinfo(struct smbcli_tree *tree,
+ struct smb_iconv_convenience *iconv_convenience,
+ TALLOC_CTX *mem_ctx,
+ struct rap_NetPrintJobGetInfo *r)
+{
+ struct rap_call *call;
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+ if (!(call = new_rap_cli_call(mem_ctx, iconv_convenience, RAP_WPrintJobGetInfo))) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ rap_cli_push_word(call, r->in.JobID);
+ rap_cli_push_word(call, r->in.level);
+ rap_cli_push_rcvbuf(call, r->in.bufsize);
+ rap_cli_expect_word(call);
+
+ switch(r->in.level) {
+ case 0:
+ rap_cli_expect_format(call, "W");
+ break;
+ case 1:
+ rap_cli_expect_format(call, "WB21BB16B10zWWzDDz");
+ break;
+ case 2:
+ rap_cli_expect_format(call, "WWzWWDDzz");
+ break;
+ case 3:
+ rap_cli_expect_format(call, "WWzWWDDzzzzzzzzzzlz");
+ break;
+ case 4:
+ rap_cli_expect_format(call, "WWzWWDDzzzzzDDDDDDD");
+ break;
+ default:
+ result = NT_STATUS_INVALID_PARAMETER;
+ goto done;
+ }
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_IN_DEBUG(rap_NetPrintJobGetInfo, 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));
+ NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.available));
+
+ switch(r->in.level) {
+ case 0:
+ result = rap_pull_rap_JobInfo0(mem_ctx, call->ndr_pull_data, r->out.convert, &r->out.info.info0);
+ break;
+ case 1:
+ result = rap_pull_rap_JobInfo1(mem_ctx, call->ndr_pull_data, r->out.convert, &r->out.info.info1);
+ break;
+ case 2:
+ result = rap_pull_rap_JobInfo2(mem_ctx, call->ndr_pull_data, r->out.convert, &r->out.info.info2);
+ break;
+ case 3:
+ result = rap_pull_rap_JobInfo3(mem_ctx, call->ndr_pull_data, r->out.convert, &r->out.info.info3);
+ break;
+ default:
+ result = NT_STATUS_NOT_IMPLEMENTED;
+ break;
+ }
+
+
+ if (!NT_STATUS_IS_OK(result)) {
+ goto done;
+ }
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_OUT_DEBUG(rap_NetPrintJobGetInfo, 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