smbspool: Improve URI handling code
authorAndreas Schneider <asn@samba.org>
Fri, 5 Jan 2018 09:50:57 +0000 (10:50 +0100)
committerKarolin Seeger <kseeger@samba.org>
Wed, 9 May 2018 07:48:21 +0000 (09:48 +0200)
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

index 3b732c99234dca977a6b7ab9c763c1a3135e6b81..ff32baea20459bdfea4d0f8a575eedce8846037a 100644 (file)
@@ -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...