[PATCHES] some printing related patches
Jeremy Allison
jra at samba.org
Sun Sep 11 17:42:25 UTC 2016
On Sat, Sep 10, 2016 at 02:37:49PM +0200, Günther Deschner wrote:
> Hi,
>
> attached some printing related patches.
>
> Please review and push.
Thanks *SO* much for your work on the printing code :-).
Pushed !
> --
> Günther Deschner GPG-ID: 8EE11688
> Red Hat gdeschner at redhat.com
> Samba Team gd at samba.org
> From 04e420047880988e88eb3c1bd13ef58711d3c5db Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Mon, 7 Apr 2014 15:47:43 +0200
> Subject: [PATCH 01/12] pidl: in s3 server templates, support default HRESULT
> error returns.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> pidl/lib/Parse/Pidl/Samba3/Template.pm | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/pidl/lib/Parse/Pidl/Samba3/Template.pm b/pidl/lib/Parse/Pidl/Samba3/Template.pm
> index 4750cef..d50f706 100644
> --- a/pidl/lib/Parse/Pidl/Samba3/Template.pm
> +++ b/pidl/lib/Parse/Pidl/Samba3/Template.pm
> @@ -70,6 +70,8 @@ $pad"."struct $fname *r)
> $res .= "\treturn NT_STATUS_NOT_IMPLEMENTED;\n";
> } elsif ($d->{RETURN_TYPE} eq "WERROR") {
> $res .= "\treturn WERR_NOT_SUPPORTED;\n";
> + } elsif ($d->{RETURN_TYPE} eq "HRESULT") {
> + $res .= "\treturn HRES_ERROR_NOT_SUPPORTED;\n";
> }
>
> $res .= "}
> --
> 2.7.4
>
>
> From 83d789fad4d05a1d8b8a539e7b0f190945def29f Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Tue, 23 Aug 2016 12:28:53 +0200
> Subject: [PATCH 02/12] spoolss: add IDL for spoolss_LogJobInfoForBranchOffice.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> librpc/idl/spoolss.idl | 97 +++++++++++++++++++++++++++++
> source3/rpc_server/spoolss/srv_spoolss_nt.c | 33 ++++++++++
> 2 files changed, 130 insertions(+)
>
> diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
> index ae10917..c9d9b36 100644
> --- a/librpc/idl/spoolss.idl
> +++ b/librpc/idl/spoolss.idl
> @@ -3413,4 +3413,101 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
> [out,ref] uint32 *pcProperties,
> [out,ref,size_is(,*pcProperties)] RPC_PrintNamedProperty **ppProperties
> );
> +
> + /******************/
> + /* Function: 0x72 */
> + [todo] WERROR spoolss_72(
> + );
> +
> + /******************/
> + /* Function: 0x73 */
> + [todo] WERROR spoolss_73(
> + );
> +
> + /******************/
> + /* Function: 0x71 */
> + typedef enum {
> + kInvalidJobState = 0,
> + kLogJobPrinted = 1,
> + kLogJobRendered = 2,
> + kLogJobError = 3,
> + kLogJobPipelineError = 4,
> + kLogOfflineFileFull = 5
> + } EBranchOfficeJobEventType;
> +
> + typedef struct {
> + DWORD Status;
> + [string,charset(UTF16)] uint16 *pDocumentName;
> + [string,charset(UTF16)] uint16 *pUserName;
> + [string,charset(UTF16)] uint16 *pMachineName;
> + [string,charset(UTF16)] uint16 *pPrinterName;
> + [string,charset(UTF16)] uint16 *pPortName;
> + hyper Size;
> + DWORD TotalPages;
> + } spoolss_BranchOfficeJobDataPrinted;
> +
> + typedef struct {
> + hyper Size;
> + DWORD ICMMethod;
> + short Color;
> + short PrintQuality;
> + short YResolution;
> + short Copies;
> + short TTOption;
> + } spoolss_BranchOfficeJobDataRendered;
> +
> + typedef struct {
> + WERROR LastError;
> + [string,charset(UTF16)] uint16 *pDocumentName;
> + [string,charset(UTF16)] uint16 *pUserName;
> + [string,charset(UTF16)] uint16 *pPrinterName;
> + [string,charset(UTF16)] uint16 *pDataType;
> + hyper TotalSize;
> + hyper PrintedSize;
> + DWORD TotalPages;
> + DWORD PrintedPages;
> + [string,charset(UTF16)] uint16 *pMachineName;
> + [string,charset(UTF16)] uint16 *pJobError;
> + [string,charset(UTF16)] uint16 *pErrorDescription;
> + } spoolss_BranchOfficeJobDataError;
> +
> + typedef struct {
> + [string,charset(UTF16)] uint16 *pDocumentName;
> + [string,charset(UTF16)] uint16 *pPrinterName;
> + [string,charset(UTF16)] uint16 *pExtraErrorInfo;
> + } spoolss_BranchOfficeJobDataPipelineFailed;
> +
> + typedef struct {
> + [string,charset(UTF16)] uint16 *pMachineName;
> + } spoolss_BranchOfficeLogOfflineFileFull;
> +
> + typedef [ms_union,switch_type(EBranchOfficeJobEventType)] union {
> + [case(kLogJobPrinted)]
> + spoolss_BranchOfficeJobDataPrinted LogJobPrinted;
> + [case(kLogJobRendered)]
> + spoolss_BranchOfficeJobDataRendered LogJobRendered;
> + [case(kLogJobError)]
> + spoolss_BranchOfficeJobDataError LogJobError;
> + [case(kLogJobPipelineError)]
> + spoolss_BranchOfficeJobDataPipelineFailed LogPipelineFailed;
> + [case(kLogOfflineFileFull)]
> + spoolss_BranchOfficeLogOfflineFileFull LogOfflineFileFull;
> + } spoolss_BranchOfficeJobInfo;
> +
> + typedef struct {
> + EBranchOfficeJobEventType eEventType;
> + DWORD JobId;
> + [switch_is(eEventType)] spoolss_BranchOfficeJobInfo JobInfo;
> + } spoolss_BranchOfficeJobData;
> +
> + typedef struct {
> + DWORD cJobDataEntries;
> + [size_is(cJobDataEntries)] spoolss_BranchOfficeJobData JobData[];
> + } spoolss_BranchOfficeJobDataContainer;
> +
> + WERROR spoolss_LogJobInfoForBranchOffice(
> + [in,ref] policy_handle *hPrinter,
> + [in,ref] spoolss_BranchOfficeJobDataContainer *pBranchOfficeJobDataContainer
> + );
> +
> }
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index 7413d9d..5a8328c 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -11303,3 +11303,36 @@ WERROR _spoolss_RpcEnumJobNamedProperties(struct pipes_struct *p,
> p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
> return WERR_NOT_SUPPORTED;
> }
> +
> +/****************************************************************
> + _spoolss_72
> +****************************************************************/
> +
> +WERROR _spoolss_72(struct pipes_struct *p,
> + struct spoolss_72 *r)
> +{
> + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
> + return WERR_NOT_SUPPORTED;
> +}
> +
> +/****************************************************************
> + _spoolss_73
> +****************************************************************/
> +
> +WERROR _spoolss_73(struct pipes_struct *p,
> + struct spoolss_73 *r)
> +{
> + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
> + return WERR_NOT_SUPPORTED;
> +}
> +
> +/****************************************************************
> + _spoolss_RpcLogJobInfoForBranchOffice
> +****************************************************************/
> +
> +WERROR _spoolss_LogJobInfoForBranchOffice(struct pipes_struct *p,
> + struct spoolss_LogJobInfoForBranchOffice *r)
> +{
> + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
> + return WERR_NOT_SUPPORTED;
> +}
> --
> 2.7.4
>
>
> From 2e425b65c51bb05c47e22f4140a21f2f6547729f Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Tue, 6 Sep 2016 12:11:26 +0200
> Subject: [PATCH 03/12] s4-torture: add test for
> spoolss_LogJobInfoForBranchOffice
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> selftest/knownfail | 1 +
> source4/torture/rpc/spoolss.c | 58 +++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 59 insertions(+)
>
> diff --git a/selftest/knownfail b/selftest/knownfail
> index 2f6a66b..0aefedf 100644
> --- a/selftest/knownfail
> +++ b/selftest/knownfail
> @@ -181,6 +181,7 @@
> ^samba3.rpc.spoolss.printer.addprinter.driver_info_winreg # knownfail or flapping?
> ^samba3.rpc.spoolss.printer.addprinterex.driver_info_winreg # knownfail or flapping?
> ^samba3.rpc.spoolss.printer.*.publish_toggle\(.*\)$ # needs spoolss AD member env
> +^samba3.rpc.spoolss.printer.*.log_jobinfo\(.*\)$ # not implemented yet
> ^samba3.rpc.spoolss.printserver.*.add_processor\(.*\)$
> ^samba3.rpc.spoolss.printserver.*.get_core_printer_drivers\(.*\)$
> ^samba3.rpc.spoolss.printserver.*.get_printer_driver_package_path\(.*\)$
> diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
> index a44b732..23f2b2e 100644
> --- a/source4/torture/rpc/spoolss.c
> +++ b/source4/torture/rpc/spoolss.c
> @@ -9137,6 +9137,63 @@ static bool test_print_job_enum(struct torture_context *tctx,
> return true;
> }
>
> +static bool test_printer_log_jobinfo(struct torture_context *tctx,
> + void *private_data)
> +{
> + struct torture_printer_context *t =
> + (struct torture_printer_context *)talloc_get_type_abort(private_data, struct torture_printer_context);
> + struct dcerpc_pipe *p = t->spoolss_pipe;
> + struct dcerpc_binding_handle *b = p->binding_handle;
> + struct spoolss_BranchOfficeJobDataContainer info;
> + int i;
> +
> + struct spoolss_LogJobInfoForBranchOffice r;
> +
> + torture_comment(tctx, "Testing LogJobInfoForBranchOffice\n");
> +
> + info.cJobDataEntries = 0;
> + info.JobData = NULL;
> +
> + r.in.hPrinter = &t->handle;
> + r.in.pBranchOfficeJobDataContainer = &info;
> +
> + torture_assert_ntstatus_ok(tctx,
> + dcerpc_spoolss_LogJobInfoForBranchOffice_r(b, tctx, &r),
> + "LogJobInfoForBranchOffice failed");
> + torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_PARAMETER,
> + "LogJobInfoForBranchOffice failed");
> +
> + info.cJobDataEntries = 1;
> + info.JobData = talloc_zero_array(tctx, struct spoolss_BranchOfficeJobData, info.cJobDataEntries);
> +
> + info.JobData[0].eEventType = kLogOfflineFileFull;
> + info.JobData[0].JobId = 42;
> + info.JobData[0].JobInfo.LogOfflineFileFull.pMachineName = talloc_strdup(tctx, "mthelena");
> +
> + torture_assert_ntstatus_ok(tctx,
> + dcerpc_spoolss_LogJobInfoForBranchOffice_r(b, tctx, &r),
> + "LogJobInfoForBranchOffice failed");
> + torture_assert_werr_equal(tctx, r.out.result, WERR_OK,
> + "LogJobInfoForBranchOffice failed");
> +
> + info.cJobDataEntries = 42;
> + info.JobData = talloc_zero_array(tctx, struct spoolss_BranchOfficeJobData, info.cJobDataEntries);
> +
> + for (i=0; i < info.cJobDataEntries; i++) {
> + info.JobData[i].eEventType = kLogOfflineFileFull;
> + info.JobData[i].JobId = i;
> + info.JobData[i].JobInfo.LogOfflineFileFull.pMachineName = talloc_asprintf(tctx, "torture_%d", i);
> + }
> +
> + torture_assert_ntstatus_ok(tctx,
> + dcerpc_spoolss_LogJobInfoForBranchOffice_r(b, tctx, &r),
> + "LogJobInfoForBranchOffice failed");
> + torture_assert_werr_equal(tctx, r.out.result, WERR_OK,
> + "LogJobInfoForBranchOffice failed");
> +
> + return true;
> +}
> +
> void torture_tcase_printer(struct torture_tcase *tcase)
> {
> torture_tcase_add_simple_test(tcase, "openprinter", test_openprinter_wrap);
> @@ -9165,6 +9222,7 @@ void torture_tcase_printer(struct torture_tcase *tcase)
> torture_tcase_add_simple_test(tcase, "publish_toggle",
> test_printer_publish_toggle);
> torture_tcase_add_simple_test(tcase, "print_job_enum", test_print_job_enum);
> + torture_tcase_add_simple_test(tcase, "log_jobinfo", test_printer_log_jobinfo);
> }
>
> struct torture_suite *torture_rpc_spoolss_printer(TALLOC_CTX *mem_ctx)
> --
> 2.7.4
>
>
> From 5b733f44c0e54a77b0642901b95769560fdd7b92 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 25 Aug 2016 17:10:09 +0200
> Subject: [PATCH 04/12] s3-spoolss: add missing newline in debug message of
> _spoolss_OpenPrinterEx.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source3/rpc_server/spoolss/srv_spoolss_nt.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index 5a8328c..aa7e821 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -1819,9 +1819,8 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p,
> close_printer_handle(p, r->out.handle);
> ZERO_STRUCTP(r->out.handle);
> DEBUG(3,("access DENIED as user is not root, "
> - "has no printoperator privilege, "
> - "not a member of the printoperator builtin group and "
> - "is not in printer admin list"));
> + "has no printoperator privilege and is "
> + "not a member of the printoperator builtin group\n"));
> return WERR_ACCESS_DENIED;
> }
>
> --
> 2.7.4
>
>
> From 791273dbe9711cd437095499f53f1bbef36a0f4e Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Fri, 2 Sep 2016 12:44:34 +0200
> Subject: [PATCH 05/12] s4-torture: use torture_comment in
> torture_rpc_connection()
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source4/torture/rpc/rpc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/source4/torture/rpc/rpc.c b/source4/torture/rpc/rpc.c
> index e41f726..6553229 100644
> --- a/source4/torture/rpc/rpc.c
> +++ b/source4/torture/rpc/rpc.c
> @@ -86,7 +86,7 @@ _PUBLIC_ NTSTATUS torture_rpc_connection(struct torture_context *tctx,
> cmdline_credentials, tctx->ev, tctx->lp_ctx);
>
> if (NT_STATUS_IS_ERR(status)) {
> - printf("Failed to connect to remote server: %s %s\n",
> + torture_warning(tctx, "Failed to connect to remote server: %s %s\n",
> dcerpc_binding_string(tctx, binding), nt_errstr(status));
> }
>
> --
> 2.7.4
>
>
> From 3fc154c5d80871056d595c5a8da4d975f4794f6a Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 10 Jan 2013 13:53:56 +0100
> Subject: [PATCH 06/12] s3-waf: give rpcclient its own wscript_build.
>
> Guenther
> ---
> source3/rpcclient/wscript_build | 54 +++++++++++++++++++++++++++++++++++++++++
> source3/wscript_build | 53 +---------------------------------------
> 2 files changed, 55 insertions(+), 52 deletions(-)
> create mode 100644 source3/rpcclient/wscript_build
>
> diff --git a/source3/rpcclient/wscript_build b/source3/rpcclient/wscript_build
> new file mode 100644
> index 0000000..3e8791d
> --- /dev/null
> +++ b/source3/rpcclient/wscript_build
> @@ -0,0 +1,54 @@
> +#!/usr/bin/env python
> +
> +bld.SAMBA3_BINARY('rpcclient',
> + source='''rpcclient.c
> + cmd_lsarpc.c
> + cmd_samr.c
> + cmd_spoolss.c
> + cmd_netlogon.c
> + cmd_srvsvc.c
> + cmd_dfs.c
> + cmd_epmapper.c
> + cmd_dssetup.c
> + cmd_echo.c
> + cmd_shutdown.c
> + cmd_test.c
> + cmd_wkssvc.c
> + cmd_ntsvcs.c
> + cmd_drsuapi.c
> + cmd_eventlog.c
> + cmd_winreg.c
> + cmd_fss.c
> + cmd_clusapi.c
> + cmd_witness.c
> + ''',
> + deps='''
> + talloc
> + popt_samba3
> + pdb
> + libsmb
> + param
> + ndr-standard
> + msrpc3
> + SMBREADLINE
> + trusts_util
> + RPC_NDR_WINREG
> + RPC_NDR_ECHO
> + RPC_CLIENT_SCHANNEL
> + DCUTIL
> + LIBCLI_SAMR
> + libcli_lsa3
> + libcli_netlogon3
> + cli_spoolss
> + RPC_NDR_SRVSVC
> + RPC_NDR_WKSSVC
> + RPC_NDR_DSSETUP
> + RPC_NDR_DFS
> + RPC_NDR_DRSUAPI
> + RPC_NDR_NTSVCS
> + RPC_NDR_EVENTLOG
> + INIT_SAMR
> + RPC_NDR_FSRVP
> + RPC_NDR_CLUSAPI
> + RPC_NDR_WITNESS
> + ''')
> diff --git a/source3/wscript_build b/source3/wscript_build
> index e25b8d5..a59927a 100755
> --- a/source3/wscript_build
> +++ b/source3/wscript_build
> @@ -998,58 +998,6 @@ bld.SAMBA3_BINARY('winbindd/winbindd',
> enabled=bld.env.build_winbind,
> install_path='${SBINDIR}')
>
> -bld.SAMBA3_BINARY('rpcclient/rpcclient',
> - source='''rpcclient/rpcclient.c
> - rpcclient/cmd_lsarpc.c
> - rpcclient/cmd_samr.c
> - rpcclient/cmd_spoolss.c
> - rpcclient/cmd_netlogon.c
> - rpcclient/cmd_srvsvc.c
> - rpcclient/cmd_dfs.c
> - rpcclient/cmd_epmapper.c
> - rpcclient/cmd_dssetup.c
> - rpcclient/cmd_echo.c
> - rpcclient/cmd_shutdown.c
> - rpcclient/cmd_test.c
> - rpcclient/cmd_wkssvc.c
> - rpcclient/cmd_ntsvcs.c
> - rpcclient/cmd_drsuapi.c
> - rpcclient/cmd_eventlog.c
> - rpcclient/cmd_winreg.c
> - rpcclient/cmd_fss.c
> - rpcclient/cmd_witness.c
> - rpcclient/cmd_clusapi.c''',
> - deps='''
> - talloc
> - popt_samba3
> - pdb
> - libsmb
> - param
> - ndr-standard
> - msrpc3
> - SMBREADLINE
> - trusts_util
> - RPC_NDR_WINREG
> - RPC_NDR_ECHO
> - RPC_CLIENT_SCHANNEL
> - DCUTIL
> - LIBCLI_SAMR
> - libcli_lsa3
> - libcli_netlogon3
> - cli_spoolss
> - RPC_NDR_SRVSVC
> - RPC_NDR_WKSSVC
> - RPC_NDR_DSSETUP
> - RPC_NDR_DFS
> - RPC_NDR_DRSUAPI
> - RPC_NDR_NTSVCS
> - RPC_NDR_EVENTLOG
> - INIT_SAMR
> - RPC_NDR_FSRVP
> - RPC_NDR_WITNESS
> - RPC_NDR_CLUSAPI
> - ''')
> -
> bld.SAMBA3_BINARY('client/smbclient',
> source='''client/client.c
> client/clitar.c
> @@ -1528,6 +1476,7 @@ bld.RECURSE('../examples/VFS')
> bld.RECURSE('lib/netapi/tests')
> bld.RECURSE('lib/netapi/examples')
> bld.RECURSE('smbd/notifyd')
> +bld.RECURSE('rpcclient')
>
> bld.ENFORCE_GROUP_ORDERING()
> bld.CHECK_PROJECT_RULES()
> --
> 2.7.4
>
>
> From f6be103fee8fb78548aa102c905ff9a62d71eedf Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 8 Sep 2016 20:57:05 +0200
> Subject: [PATCH 07/12] s3-rpcclient: add getdriverpackagepath command.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source3/rpcclient/cmd_spoolss.c | 69 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 69 insertions(+)
>
> diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
> index 3191e80..91f328e 100644
> --- a/source3/rpcclient/cmd_spoolss.c
> +++ b/source3/rpcclient/cmd_spoolss.c
> @@ -1600,6 +1600,74 @@ static WERROR cmd_spoolss_getdriverdir(struct rpc_pipe_client *cli,
> /****************************************************************************
> ****************************************************************************/
>
> +static WERROR cmd_spoolss_getdriverpackagepath(struct rpc_pipe_client *cli,
> + TALLOC_CTX *mem_ctx,
> + int argc, const char **argv)
> +{
> + HRESULT hresult;
> + NTSTATUS status;
> + const char *env = SPOOLSS_ARCHITECTURE_NT_X86;
> + uint32_t offered;
> + uint32_t needed;
> + struct dcerpc_binding_handle *b = cli->binding_handle;
> + const char *package_id = "";
> + const char *cab = NULL;
> +
> + if (argc > 4) {
> + printf("Usage: %s [environment] [package_id]\n", argv[0]);
> + return WERR_OK;
> + }
> +
> + /* Get the arguments need to open the printer handle */
> +
> + if (argc >= 2) {
> + env = argv[1];
> + }
> +
> + if (argc == 3) {
> + package_id = argv[2];
> + }
> +
> + offered = 1;
> + cab = talloc_array(mem_ctx, char, offered);
> + status = dcerpc_spoolss_GetPrinterDriverPackagePath(b, mem_ctx,
> + cli->srv_name_slash,
> + env,
> + NULL,
> + package_id,
> + cab,
> + offered,
> + &needed,
> + &hresult);
> + if (!NT_STATUS_IS_OK(status)) {
> + return ntstatus_to_werror(status);
> + }
> +
> + if (W_ERROR_EQUAL(W_ERROR(WIN32_FROM_HRESULT(hresult)), WERR_INSUFFICIENT_BUFFER)) {
> + offered = needed;
> + cab = talloc_zero_array(mem_ctx, char, offered);
> +
> + status = dcerpc_spoolss_GetPrinterDriverPackagePath(b, mem_ctx,
> + cli->srv_name_slash,
> + env,
> + NULL,
> + package_id,
> + cab,
> + offered,
> + &needed,
> + &hresult);
> + if (!NT_STATUS_IS_OK(status)) {
> + return ntstatus_to_werror(status);
> + }
> + }
> +
> + return W_ERROR(WIN32_FROM_HRESULT(hresult));
> +}
> +
> +
> +/****************************************************************************
> +****************************************************************************/
> +
> static void set_drv_info_3_env(TALLOC_CTX *mem_ctx,
> struct spoolss_AddDriverInfo3 *info,
> const char *arch)
> @@ -3866,6 +3934,7 @@ struct cmd_set spoolss_commands[] = {
> { "getdataex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinterdataex, &ndr_table_spoolss, NULL, "Get printer driver data with keyname", ""},
> { "getdriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getdriver, &ndr_table_spoolss, NULL, "Get print driver information", "" },
> { "getdriverdir", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getdriverdir, &ndr_table_spoolss, NULL, "Get print driver upload directory", "" },
> + { "getdriverpackagepath", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getdriverpackagepath, &ndr_table_spoolss, NULL, "Get print driver package download directory", "" },
> { "getprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinter, &ndr_table_spoolss, NULL, "Get printer info", "" },
> { "openprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_open_printer, &ndr_table_spoolss, NULL, "Open printer handle", "" },
> { "openprinter_ex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_open_printer_ex, &ndr_table_spoolss, NULL, "Open printer handle", "" },
> --
> 2.7.4
>
>
> From 34bb6b98245b9eea467b20314e3fae22dd15a8fc Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 8 Sep 2016 21:06:41 +0200
> Subject: [PATCH 08/12] s3-spoolss: avoid referencing p->opnum in
> _spoolss_AddPrinterDriverEx
>
> When called by another protocol, this call would fail when called with an
> unexpected opnum... This change is in preparation for supporting MS-PAR.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source3/rpc_server/spoolss/srv_spoolss_nt.c | 16 ++--------------
> 1 file changed, 2 insertions(+), 14 deletions(-)
>
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index aa7e821..90aac33 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -8438,18 +8438,6 @@ WERROR _spoolss_AddPrinterDriverEx(struct pipes_struct *p,
> WERROR err = WERR_OK;
> const char *driver_name = NULL;
> uint32_t version;
> - const char *fn;
> -
> - switch (p->opnum) {
> - case NDR_SPOOLSS_ADDPRINTERDRIVER:
> - fn = "_spoolss_AddPrinterDriver";
> - break;
> - case NDR_SPOOLSS_ADDPRINTERDRIVEREX:
> - fn = "_spoolss_AddPrinterDriverEx";
> - break;
> - default:
> - return WERR_INVALID_PARAM;
> - }
>
> /*
> * we only support the semantics of AddPrinterDriver()
> @@ -8468,7 +8456,7 @@ WERROR _spoolss_AddPrinterDriverEx(struct pipes_struct *p,
> if (r->in.info_ctr->level != 3 &&
> r->in.info_ctr->level != 6 &&
> r->in.info_ctr->level != 8) {
> - DEBUG(0,("%s: level %d not yet implemented\n", fn,
> + DEBUG(0,("%s: level %d not yet implemented\n", __func__,
> r->in.info_ctr->level));
> return WERR_UNKNOWN_LEVEL;
> }
> @@ -8503,7 +8491,7 @@ WERROR _spoolss_AddPrinterDriverEx(struct pipes_struct *p,
>
> if (!srv_spoolss_drv_upgrade_printer(driver_name, p->msg_ctx)) {
> DEBUG(0,("%s: Failed to send message about upgrading driver [%s]!\n",
> - fn, driver_name));
> + __func__, driver_name));
> }
>
> done:
> --
> 2.7.4
>
>
> From b02f8b4c4e2f0704df595378668765e851633f48 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 8 Sep 2016 21:09:42 +0200
> Subject: [PATCH 09/12] s4-torture: also test NULL servername in
> spoolss_GetPrinterDriverPackagePath
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source4/torture/rpc/spoolss.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
> index 23f2b2e..1fcf379 100644
> --- a/source4/torture/rpc/spoolss.c
> +++ b/source4/torture/rpc/spoolss.c
> @@ -8063,6 +8063,25 @@ static bool test_get_printer_driver_package_path(struct torture_context *tctx,
> torture_assert_hresult_ok(tctx, r.out.result,
> "spoolss_GetPrinterDriverPackagePath failed");
>
> + r.in.servername = NULL;
> +
> + torture_assert_ntstatus_ok(tctx,
> + dcerpc_spoolss_GetPrinterDriverPackagePath_r(b, tctx, &r),
> + "spoolss_GetPrinterDriverPackagePath failed");
> + torture_assert_werr_equal(tctx,
> + W_ERROR(WIN32_FROM_HRESULT(r.out.result)), WERR_INSUFFICIENT_BUFFER,
> + "spoolss_GetPrinterDriverPackagePath failed");
> +
> + r.in.driver_package_cab_size = required;
> + r.in.driver_package_cab = talloc_zero_array(tctx, char, required);
> + r.out.driver_package_cab = talloc_zero_array(tctx, char, required);
> +
> + torture_assert_ntstatus_ok(tctx,
> + dcerpc_spoolss_GetPrinterDriverPackagePath_r(b, tctx, &r),
> + "spoolss_GetPrinterDriverPackagePath failed");
> + torture_assert_hresult_ok(tctx, r.out.result,
> + "spoolss_GetPrinterDriverPackagePath failed");
> +
> }
>
> return true;
> --
> 2.7.4
>
>
> From d11cd4b6003a858e6af629d9fa363fd26d726d0d Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 8 Sep 2016 21:22:17 +0200
> Subject: [PATCH 10/12] s3-rpc_client: make it more clear printer driver
> version is a QWORD not a DWORD.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source3/rpc_client/cli_winreg_spoolss.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/source3/rpc_client/cli_winreg_spoolss.c b/source3/rpc_client/cli_winreg_spoolss.c
> index ac4fe86..8014e41 100644
> --- a/source3/rpc_client/cli_winreg_spoolss.c
> +++ b/source3/rpc_client/cli_winreg_spoolss.c
> @@ -563,7 +563,7 @@ static WERROR winreg_printer_write_ver(TALLOC_CTX *mem_ctx,
> return result;
> }
>
> -static WERROR winreg_printer_ver_to_dword(const char *str, uint64_t *data)
> +static WERROR winreg_printer_ver_to_qword(const char *str, uint64_t *data)
> {
> unsigned int v1, v2, v3, v4;
>
> @@ -3659,7 +3659,7 @@ WERROR winreg_get_driver(TALLOC_CTX *mem_ctx,
> "DriverVersion",
> &tmp_str);
> if (W_ERROR_IS_OK(result)) {
> - result = winreg_printer_ver_to_dword(tmp_str,
> + result = winreg_printer_ver_to_qword(tmp_str,
> &info8->driver_version);
> }
> CHECK_ERROR(result);
> @@ -3727,7 +3727,7 @@ WERROR winreg_get_driver(TALLOC_CTX *mem_ctx,
> "MinInboxDriverVerVersion",
> &tmp_str);
> if (W_ERROR_IS_OK(result)) {
> - result = winreg_printer_ver_to_dword(tmp_str,
> + result = winreg_printer_ver_to_qword(tmp_str,
> &info8->min_inbox_driver_ver_version);
> }
> CHECK_ERROR(result);
> --
> 2.7.4
>
>
> From def22b0c3c64fced182bdff95ca0b55cd5b1348e Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Thu, 8 Sep 2016 21:28:22 +0200
> Subject: [PATCH 11/12] libgpo: accept more boolean matches in
> gp_inifile_getbool().
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> libgpo/gpo_ini.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/libgpo/gpo_ini.c b/libgpo/gpo_ini.c
> index a91bb92..c027612 100644
> --- a/libgpo/gpo_ini.c
> +++ b/libgpo/gpo_ini.c
> @@ -197,12 +197,14 @@ NTSTATUS gp_inifile_getbool(struct gp_inifile_context *ctx, const char *key, boo
> return result;
> }
>
> - if (strequal(value, "Yes")) {
> + if (strequal(value, "Yes") ||
> + strequal(value, "True")) {
> if (ret) {
> *ret = true;
> }
> return NT_STATUS_OK;
> - } else if (strequal(value, "No")) {
> + } else if (strequal(value, "No") ||
> + strequal(value, "False")) {
> if (ret) {
> *ret = false;
> }
> --
> 2.7.4
>
>
> From 2966f4a08f8dca4c5a00cc38af77e1b3bf563241 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
> Date: Sat, 10 Sep 2016 11:07:54 +0200
> Subject: [PATCH 12/12] s3-registry: create winprint print processor entry for
> x64 as well.
>
> Guenther
>
> Signed-off-by: Guenther Deschner <gd at samba.org>
> ---
> source3/registry/reg_backend_db.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c
> index bdfe7d2..45d74d5 100644
> --- a/source3/registry/reg_backend_db.c
> +++ b/source3/registry/reg_backend_db.c
> @@ -126,6 +126,7 @@ static const char *builtin_registry_paths[] = {
> KEY_PRINTING "\\Forms",
> KEY_PRINTING "\\Printers",
> KEY_PRINTING "\\Environments\\Windows NT x86\\Print Processors\\winprint",
> + KEY_PRINTING "\\Environments\\Windows x64\\Print Processors\\winprint",
> KEY_SHARES,
> KEY_EVENTLOG,
> KEY_SMBCONF,
> --
> 2.7.4
>
More information about the samba-technical
mailing list