229 lines
6.7 KiB
Diff
229 lines
6.7 KiB
Diff
|
From ae206fe3027873138d36240b3be8bc582ab0aac6 Mon Sep 17 00:00:00 2001
|
||
|
From: Andreas Schneider <asn@samba.org>
|
||
|
Date: Fri, 5 Jan 2018 10:50:57 +0100
|
||
|
Subject: [PATCH 1/2] smbspool: Improve URI handling code
|
||
|
|
||
|
This also checks that the URI given via the environment variables
|
||
|
starts with smb://
|
||
|
|
||
|
Signed-off-by: Andreas Schneider <asn@samba.org>
|
||
|
Reviewed-by: Alexander Bokovoy <ab@samba.org>
|
||
|
Reviewed-by: David Disseldorp <ddiss@samba.org>
|
||
|
(cherry picked from commit a6eac8f64989235e7a297c14e349d98a3fc70e47)
|
||
|
---
|
||
|
source3/client/smbspool.c | 29 ++++++++++++++++++-----------
|
||
|
1 file changed, 18 insertions(+), 11 deletions(-)
|
||
|
|
||
|
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c
|
||
|
index 3b732c99234..ff32baea204 100644
|
||
|
--- a/source3/client/smbspool.c
|
||
|
+++ b/source3/client/smbspool.c
|
||
|
@@ -100,6 +100,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||
|
const char *dev_uri;
|
||
|
const char *config_file = NULL;
|
||
|
TALLOC_CTX *frame = talloc_stackframe();
|
||
|
+ int cmp;
|
||
|
+ int len;
|
||
|
|
||
|
null_str[0] = '\0';
|
||
|
|
||
|
@@ -155,20 +157,25 @@ main(int argc, /* I - Number of command-line arguments */
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
- * Find the URI...
|
||
|
- */
|
||
|
-
|
||
|
+ * Find the URI ...
|
||
|
+ */
|
||
|
dev_uri = getenv("DEVICE_URI");
|
||
|
- if (dev_uri) {
|
||
|
- strncpy(uri, dev_uri, sizeof(uri) - 1);
|
||
|
- } else if (strncmp(argv[1], "smb://", 6) == 0) {
|
||
|
- strncpy(uri, argv[1], sizeof(uri) - 1);
|
||
|
- } else {
|
||
|
- fputs("ERROR: No device URI found in DEVICE_URI environment variable or arg1 !\n", stderr);
|
||
|
- goto done;
|
||
|
+ if (dev_uri == NULL || strlen(dev_uri) == 0) {
|
||
|
+ dev_uri = argv[1];
|
||
|
}
|
||
|
|
||
|
- uri[sizeof(uri) - 1] = '\0';
|
||
|
+ cmp = strncmp(dev_uri, "smb://", 6);
|
||
|
+ if (cmp != 0) {
|
||
|
+ fprintf(stderr,
|
||
|
+ "ERROR: No valid device URI has been specified\n");
|
||
|
+ goto done;
|
||
|
+ }
|
||
|
+ len = snprintf(uri, sizeof(uri), "%s", dev_uri);
|
||
|
+ if (len >= sizeof(uri)) {
|
||
|
+ fprintf(stderr,
|
||
|
+ "ERROR: The URI is too long.\n");
|
||
|
+ goto done;
|
||
|
+ }
|
||
|
|
||
|
/*
|
||
|
* Extract the destination from the URI...
|
||
|
--
|
||
|
2.16.3
|
||
|
|
||
|
|
||
|
From c19801fa6551c601ec3e7f5a983f2bc1a9bc6597 Mon Sep 17 00:00:00 2001
|
||
|
From: Andreas Schneider <asn@samba.org>
|
||
|
Date: Thu, 3 May 2018 10:17:12 +0200
|
||
|
Subject: [PATCH 2/2] s3:smbspool: Fix cmdline argument handling
|
||
|
|
||
|
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13417
|
||
|
|
||
|
Signed-off-by: Andreas Schneider <asn@samba.org>
|
||
|
Reviewed-by: Alexander Bokovoy <ab@samba.org>
|
||
|
(cherry picked from commit a753ccfd946aaad320977ae8c5f483f73077c3f8)
|
||
|
---
|
||
|
source3/client/smbspool.c | 61 ++++++++++++++++++++++++-----------
|
||
|
source3/script/tests/test_smbspool.sh | 30 +++++++++++++++++
|
||
|
2 files changed, 72 insertions(+), 19 deletions(-)
|
||
|
|
||
|
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c
|
||
|
index ff32baea204..d6e944d547c 100644
|
||
|
--- a/source3/client/smbspool.c
|
||
|
+++ b/source3/client/smbspool.c
|
||
|
@@ -100,6 +100,9 @@ main(int argc, /* I - Number of command-line arguments */
|
||
|
const char *dev_uri;
|
||
|
const char *config_file = NULL;
|
||
|
TALLOC_CTX *frame = talloc_stackframe();
|
||
|
+ bool device_uri_cmdline = false;
|
||
|
+ const char *print_file = NULL;
|
||
|
+ const char *print_copies = NULL;
|
||
|
int cmp;
|
||
|
int len;
|
||
|
|
||
|
@@ -119,7 +122,12 @@ main(int argc, /* I - Number of command-line arguments */
|
||
|
goto done;
|
||
|
}
|
||
|
|
||
|
- if (argc < 7 || argc > 8) {
|
||
|
+ /*
|
||
|
+ * We need at least 5 options if the DEVICE_URI is passed via an env
|
||
|
+ * variable and printing data comes via stdin.
|
||
|
+ * We don't accept more than 7 options in total, including optional.
|
||
|
+ */
|
||
|
+ if (argc < 5 || argc > 8) {
|
||
|
fprintf(stderr,
|
||
|
"Usage: %s [DEVICE_URI] job-id user title copies options [file]\n"
|
||
|
" The DEVICE_URI environment variable can also contain the\n"
|
||
|
@@ -131,37 +139,52 @@ main(int argc, /* I - Number of command-line arguments */
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
- * If we have 7 arguments, print the file named on the command-line.
|
||
|
- * Otherwise, print data from stdin...
|
||
|
- */
|
||
|
-
|
||
|
+ * If we have 6 arguments find out if we have the device_uri from the
|
||
|
+ * command line or the print data
|
||
|
+ */
|
||
|
if (argc == 7) {
|
||
|
- /*
|
||
|
- * Print from Copy stdin to a temporary file...
|
||
|
- */
|
||
|
+ cmp = strncmp(argv[1], "smb://", 6);
|
||
|
+ if (cmp == 0) {
|
||
|
+ device_uri_cmdline = true;
|
||
|
+ } else {
|
||
|
+ print_copies = argv[4];
|
||
|
+ print_file = argv[6];
|
||
|
+ }
|
||
|
+ } else if (argc == 8) {
|
||
|
+ device_uri_cmdline = true;
|
||
|
+ print_copies = argv[5];
|
||
|
+ print_file = argv[7];
|
||
|
+ }
|
||
|
|
||
|
- fp = stdin;
|
||
|
- copies = 1;
|
||
|
- } else if ((fp = fopen(argv[7], "rb")) == NULL) {
|
||
|
- perror("ERROR: Unable to open print file");
|
||
|
- goto done;
|
||
|
- } else {
|
||
|
- char *p = argv[5];
|
||
|
+ if (print_file != NULL) {
|
||
|
char *endp;
|
||
|
|
||
|
- copies = strtol(p, &endp, 10);
|
||
|
- if (p == endp) {
|
||
|
+ fp = fopen(print_file, "rb");
|
||
|
+ if (fp == NULL) {
|
||
|
+ perror("ERROR: Unable to open print file");
|
||
|
+ goto done;
|
||
|
+ }
|
||
|
+
|
||
|
+ copies = strtol(print_copies, &endp, 10);
|
||
|
+ if (print_copies == endp) {
|
||
|
perror("ERROR: Unable to determine number of copies");
|
||
|
goto done;
|
||
|
}
|
||
|
+ } else {
|
||
|
+ fp = stdin;
|
||
|
+ copies = 1;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Find the URI ...
|
||
|
*/
|
||
|
- dev_uri = getenv("DEVICE_URI");
|
||
|
- if (dev_uri == NULL || strlen(dev_uri) == 0) {
|
||
|
+ if (device_uri_cmdline) {
|
||
|
dev_uri = argv[1];
|
||
|
+ } else {
|
||
|
+ dev_uri = getenv("DEVICE_URI");
|
||
|
+ if (dev_uri == NULL || strlen(dev_uri) == 0) {
|
||
|
+ dev_uri = "";
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
cmp = strncmp(dev_uri, "smb://", 6);
|
||
|
diff --git a/source3/script/tests/test_smbspool.sh b/source3/script/tests/test_smbspool.sh
|
||
|
index 8f9426f87ba..899b34d0e40 100755
|
||
|
--- a/source3/script/tests/test_smbspool.sh
|
||
|
+++ b/source3/script/tests/test_smbspool.sh
|
||
|
@@ -135,6 +135,36 @@ testit "smbspool print example.ps" \
|
||
|
$samba_smbspool smb://$USERNAME:$PASSWORD@$SERVER_IP/print1 200 $USERNAME "Testprint" 1 "options" $SRCDIR/testdata/printing/example.ps || \
|
||
|
failed=$(expr $failed + 1)
|
||
|
|
||
|
+testit "vlp verify example.ps" \
|
||
|
+ test_vlp_verify \
|
||
|
+ || failed=$(expr $failed + 1)
|
||
|
+
|
||
|
+testit "smbspool print example.ps via stdin" \
|
||
|
+ $samba_smbspool smb://$USERNAME:$PASSWORD@$SERVER_IP/print1 200 $USERNAME "Testprint" 1 "options" < $SRCDIR/testdata/printing/example.ps || \
|
||
|
+ failed=$(expr $failed + 1)
|
||
|
+
|
||
|
+testit "vlp verify example.ps" \
|
||
|
+ test_vlp_verify \
|
||
|
+ || failed=$(expr $failed + 1)
|
||
|
+
|
||
|
+DEVICE_URI="smb://$USERNAME:$PASSWORD@$SERVER_IP/print1"
|
||
|
+export DEVICE_URI
|
||
|
+testit "smbspool print DEVICE_URI example.ps" \
|
||
|
+ $samba_smbspool 200 $USERNAME "Testprint" 1 "options" $SRCDIR/testdata/printing/example.ps || \
|
||
|
+ failed=$(expr $failed + 1)
|
||
|
+unset DEVICE_URI
|
||
|
+
|
||
|
+testit "vlp verify example.ps" \
|
||
|
+ test_vlp_verify \
|
||
|
+ || failed=$(expr $failed + 1)
|
||
|
+
|
||
|
+DEVICE_URI="smb://$USERNAME:$PASSWORD@$SERVER_IP/print1"
|
||
|
+export DEVICE_URI
|
||
|
+testit "smbspool print DEVICE_URI example.ps via stdin" \
|
||
|
+ $samba_smbspool 200 $USERNAME "Testprint" 1 "options" < $SRCDIR/testdata/printing/example.ps || \
|
||
|
+ failed=$(expr $failed + 1)
|
||
|
+unset DEVICE_URI
|
||
|
+
|
||
|
testit "vlp verify example.ps" \
|
||
|
test_vlp_verify \
|
||
|
|| failed=$(expr $failed + 1)
|
||
|
--
|
||
|
2.16.3
|
||
|
|