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

Bryan Mason bmason at redhat.com
Wed Sep 25 00:37:44 UTC 2019


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.

[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='''
-- 
2.18.1





More information about the samba-technical mailing list