At file:///home/jelmer/bzr.samba/spoolss/ ------------------------------------------------------------ revno: 12285 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: spoolss timestamp: Tue 2007-05-29 01:20:35 +0200 message: Add generic tests for ReplyOpenPrinter() and ReplyClosePrinter(). modified: source/rpc_server/spoolss/dcesrv_spoolss.c [EMAIL PROTECTED]:branches%2FSAMBA_4_0:source%2Frpc_server%2Fspoolss%2Fdcesrv_spoolss.c source/torture/rpc/spoolss.c [EMAIL PROTECTED]:branches%2FSAMBA_4_0:source%2Ftorture%2Frpc%2Fspoolss.c === modified file 'source/rpc_server/spoolss/dcesrv_spoolss.c' --- a/source/rpc_server/spoolss/dcesrv_spoolss.c 2007-05-28 19:44:03 +0000 +++ b/source/rpc_server/spoolss/dcesrv_spoolss.c 2007-05-28 23:20:35 +0000 @@ -1070,7 +1070,13 @@ static WERROR dcesrv_spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ReplyClosePrinter *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct dcesrv_handle *handle; + + DCESRV_PULL_HANDLE_WERR(handle, r->in.handle, SPOOLSS_NOTIFY); + + talloc_free(handle); + + return WERR_OK; }
=== modified file 'source/torture/rpc/spoolss.c' --- a/source/torture/rpc/spoolss.c 2007-05-28 19:44:03 +0000 +++ b/source/torture/rpc/spoolss.c 2007-05-28 23:20:35 +0000 @@ -2072,6 +2072,41 @@ return ret; } +/** Test that makes sure that calling ReplyOpenPrinter() + * on Samba 4 will cause an irpc broadcast call. + */ +static bool test_ReplyOpenPrinter(struct torture_context *tctx, + struct dcerpc_pipe *pipe) +{ + struct spoolss_ReplyOpenPrinter r; + struct spoolss_ReplyClosePrinter s; + struct policy_handle h; + + r.in.server_name = "earth"; + r.in.printer_local = 2; + r.in.type = REG_DWORD; + r.in.unknown1 = 0; + r.in.unknown2 = 0; + r.out.handle = &h; + + torture_assert_ntstatus_ok(tctx, + dcerpc_spoolss_ReplyOpenPrinter(pipe, tctx, &r), + "spoolss_ReplyOpenPrinter call failed"); + + torture_assert_werr_ok(tctx, r.out.result, "error return code"); + + s.in.handle = &h; + s.out.handle = &h; + + torture_assert_ntstatus_ok(tctx, + dcerpc_spoolss_ReplyClosePrinter(pipe, tctx, &s), + "spoolss_ReplyClosePrinter call failed"); + + torture_assert_werr_ok(tctx, r.out.result, "error return code"); + + return true; +} + BOOL torture_rpc_spoolss(struct torture_context *torture) { NTSTATUS status; @@ -2133,6 +2168,8 @@ ret &= test_EnumPrinterDrivers_old(p, mem_ctx); + ret &= test_ReplyOpenPrinter(torture, p); + talloc_free(mem_ctx); return ret;