diff options
author | Andreas Schneider <asn@samba.org> | 2018-01-05 10:50:57 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-02-20 21:46:38 +0100 |
commit | a6eac8f64989235e7a297c14e349d98a3fc70e47 (patch) | |
tree | a14d7a3601a33ebf95c7e2ab894e1a593f3fc8de /source3/client | |
parent | 7573b2a960c5bd32ac6d42b10bb46329ff7fa7b7 (diff) | |
download | samba-a6eac8f64989235e7a297c14e349d98a3fc70e47.tar.gz |
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>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Tue Feb 20 21:46:38 CET 2018 on sn-devel-144
Diffstat (limited to 'source3/client')
-rw-r--r-- | source3/client/smbspool.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c index 949cdb4076e..152492eadf1 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; if (argc == 1) { /* @@ -153,20 +155,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... |