[PATCH 1/2] s3:tests: Add smbspool_argv_wrapper

Andrew Bartlett abartlet at samba.org
Wed Sep 25 05:51:27 UTC 2019


On Tue, 2019-09-24 at 17:37 -0700, Bryan Mason via samba-technical
wrote:
> This patch, along with the next one, is intended to catch problems
> like https://bugzilla.samba.org/show_bug.cgi?id=14128 where CUPS puts
> a sanitized Device URI in argv[0].  This patch creates a utility to
> pass the Device URI in argv[0]; the next patch actually uses this
> utility to perform the test.
> 
> Please review and comment.  Thanks.

Thanks for the patches.  Can you please either:
 - submit them as a merge request to our gitlab repo
 - attach them to a mail

Sadly samba-technical is set up in such a way that your patches have
been munged and credited to the mailing list, not yourself.

See also our contributing instructions (which need work) and copyright
policy:
https://wiki.samba.org/index.php/Contribute
https://www.samba.org/samba/devel/copyright-policy.html

Sorry!

Andrew Bartlett

> [PATCH 1/2] s3:tests: Add smbspool_argv_wrapper
> 
> Before calling a backend like smbspool, CUPS will set argv[0] to the
> Device URI.  smbspool_argv_wrapper can be used in testing to emulate
> CUPS-like behavior by setting argv[0] to the device URI before
> exec()ing smbspool.
> 
> Signed-off-by: Bryan Mason <bmason at redhat.com>
> ---
>  source3/script/tests/smbspool_argv_wrapper.c | 68 ++++++++++++++++++++
>  source3/wscript_build                        |  4 ++
>  2 files changed, 72 insertions(+)
>  create mode 100644 source3/script/tests/smbspool_argv_wrapper.c
> 
> diff --git a/source3/script/tests/smbspool_argv_wrapper.c
> b/source3/script/tests/smbspool_argv_wrapper.c
> new file mode 100644
> index 00000000000..f4a1d0c762b
> --- /dev/null
> +++ b/source3/script/tests/smbspool_argv_wrapper.c
> @@ -0,0 +1,68 @@
> +/*
> +   Wrapper for smbspool to test Device URI in argv[0]
> +
> +   Copyright (C) Bryan Mason 2019
> +
> +   This program is free software; you can redistribute it and/or
> modify
> +   it under the terms of the GNU General Public License as published
> by
> +   the Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see <
> http://www.gnu.org/licenses/>;;;.
> +*/
> +
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <errno.h>
> +
> +/*
> + * Before calling a backend like smbspool, CUPS will set argv[0] to
> + * the Device URI.  This program wraps a program like smbspool and
> + * sets argv[0] to the device URI before exec()ing the acutal backend
> + * program.
> + */
> +
> +int
> +main(int argc,
> +     char *argv[],
> +     char *envp[])
> +{
> +	char **new_argv;
> +	char *exec_path;
> +	int a;
> +/*
> + * Expected parameters:
> + *
> + * smbspool_argv_wrapper smbspool uri job user title copies opts
> file(s)
> + * argv[0]	       1	2   3   4    5     6      7    8
> + *
> + */
> +	/* Allocate memory for the new arguments (exit on failure). */
> +	new_argv = calloc(argc, sizeof(char *));
> +	if (new_argv == 0) {
> +		exit(ENOMEM);
> +	}
> +
> +	/* Save the path to the smbspool executable */
> +	exec_path = argv[1];
> +
> +	/*
> +	 * Shift the rest of the args so smbspool is called with:
> +	 *
> +	 * uri     job user title copies opts file(s)
> +	 * argv[0] 1   2    3     4      5    6
> +	 */
> +
> +	for ( a = 2; a < argc-1; a++ ) {
> +		new_argv[a-2] = argv[a];
> +	}
> +
> +	/* Execute smbspool with new arguments */
> +	execve(exec_path, new_argv, envp);
> +}
> diff --git a/source3/wscript_build b/source3/wscript_build
> index 6707b4bb146..fb58b85b4db 100644
> --- a/source3/wscript_build
> +++ b/source3/wscript_build
> @@ -1144,6 +1144,10 @@ bld.SAMBA3_BINARY('smbspool_krb5_wrapper',
>                   install_path='${LIBEXECDIR}/samba',
>                   enabled=bld.CONFIG_SET('HAVE_CUPS'))
>  
> +bld.SAMBA3_BINARY('smbspool_argv_wrapper',
> +		  source='script/tests/smbspool_argv_wrapper.c',
> +		  install=False)
> +
>  bld.SAMBA3_BINARY('locktest2',
>                   source='torture/locktest2.c',
>                   deps='''
-- 
Andrew Bartlett
https://samba.org/~abartlet/
Authentication Developer, Samba Team         https://samba.org
Samba Development and Support, Catalyst IT   
https://catalyst.net.nz/services/samba







More information about the samba-technical mailing list