summaryrefslogtreecommitdiff
path: root/source3/client
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2018-05-03 10:17:12 +0200
committerAlexander Bokovoy <ab@samba.org>2018-05-03 16:33:54 +0200
commita753ccfd946aaad320977ae8c5f483f73077c3f8 (patch)
treed8d5c060485f2de30dfd278ae6d8511457187b49 /source3/client
parent47713d648740cf2d11436ac6bd768c23cf89ca7f (diff)
downloadsamba-a753ccfd946aaad320977ae8c5f483f73077c3f8.tar.gz
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> Autobuild-User(master): Alexander Bokovoy <ab@samba.org> Autobuild-Date(master): Thu May 3 16:33:54 CEST 2018 on sn-devel-144
Diffstat (limited to 'source3/client')
-rw-r--r--source3/client/smbspool.c61
1 files changed, 42 insertions, 19 deletions
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c
index 3660319b5b1..389e4ea553f 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;
@@ -117,7 +120,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"
@@ -129,37 +137,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);