[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