diff options
author | Andreas Schneider <asn@samba.org> | 2018-05-03 10:17:12 +0200 |
---|---|---|
committer | Alexander Bokovoy <ab@samba.org> | 2018-05-03 16:33:54 +0200 |
commit | a753ccfd946aaad320977ae8c5f483f73077c3f8 (patch) | |
tree | d8d5c060485f2de30dfd278ae6d8511457187b49 /source3/client | |
parent | 47713d648740cf2d11436ac6bd768c23cf89ca7f (diff) | |
download | samba-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.c | 61 |
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); |