smbspool: Improve URI handling code
authorAndreas Schneider <asn@samba.org>
Fri, 5 Jan 2018 09:50:57 +0000 (10:50 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Tue, 20 Feb 2018 20:46:38 +0000 (21:46 +0100)
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

source3/client/smbspool.c

index 949cdb4076ee4954547be58cbc9c04e5924c5b66..152492eadf16860e7bf90ce31c86fcb24f1bb140 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;
 
        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...