Device may not be a real filename
authorGlenn L McGrath <bug1@ihug.co.nz>
Mon, 7 May 2001 01:38:03 +0000 (01:38 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Mon, 7 May 2001 01:38:03 +0000 (01:38 -0000)
mount.c
util-linux/mount.c

diff --git a/mount.c b/mount.c
index 9d61bd3..fa885cb 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -334,12 +334,14 @@ void show_mounts()
 
 extern int mount_main(int argc, char **argv)
 {
+       struct stat statbuf;
        char string_flags_buf[1024] = "";
        char *string_flags = string_flags_buf;
        char *extra_opts = string_flags_buf;
        int flags = 0;
        char *filesystemType = "auto";
-       char device[PATH_MAX], directory[PATH_MAX];
+       char *device = xmalloc(PATH_MAX);
+       char *directory = xmalloc(PATH_MAX);
        int all = FALSE;
        int fakeIt = FALSE;
        int useMtab = TRUE;
@@ -382,19 +384,23 @@ extern int mount_main(int argc, char **argv)
                show_mounts();
 
        if (optind < argc) {
-               /* Don't canonicalize NFS devices.  */
-               if (strchr(argv[optind], ':') != NULL)
+               /* if device is a filename get its real path */
+               if ((strchr(argv[optind], ':') == NULL) &&
+                       (stat(argv[optind], &statbuf) == 0)) {
+                       realpath(argv[optind], device);
+               } else {
                        safe_strncpy(device, argv[optind], PATH_MAX);
-               else if (realpath(argv[optind], device) == NULL)
-                       perror_msg_and_die("%s", device);
+               }
        }
 
-       if (optind + 1 < argc)
-               if (realpath(argv[optind + 1], directory) == NULL)
-                       perror_msg_and_die("%s", directory);
-
+       if (optind + 1 < argc) {
+               if (realpath(argv[optind + 1], directory) == NULL) {
+                       perror_msg_and_die("Invalid directory %s", directory);
+               }
+       }
+       
        if (all == TRUE || optind + 1 == argc) {
-               struct mntent *m;
+               struct mntent *m = NULL;
                FILE *f = setmntent("/etc/fstab", "r");
                fstabmount = TRUE;
 
index 9d61bd3..fa885cb 100644 (file)
@@ -334,12 +334,14 @@ void show_mounts()
 
 extern int mount_main(int argc, char **argv)
 {
+       struct stat statbuf;
        char string_flags_buf[1024] = "";
        char *string_flags = string_flags_buf;
        char *extra_opts = string_flags_buf;
        int flags = 0;
        char *filesystemType = "auto";
-       char device[PATH_MAX], directory[PATH_MAX];
+       char *device = xmalloc(PATH_MAX);
+       char *directory = xmalloc(PATH_MAX);
        int all = FALSE;
        int fakeIt = FALSE;
        int useMtab = TRUE;
@@ -382,19 +384,23 @@ extern int mount_main(int argc, char **argv)
                show_mounts();
 
        if (optind < argc) {
-               /* Don't canonicalize NFS devices.  */
-               if (strchr(argv[optind], ':') != NULL)
+               /* if device is a filename get its real path */
+               if ((strchr(argv[optind], ':') == NULL) &&
+                       (stat(argv[optind], &statbuf) == 0)) {
+                       realpath(argv[optind], device);
+               } else {
                        safe_strncpy(device, argv[optind], PATH_MAX);
-               else if (realpath(argv[optind], device) == NULL)
-                       perror_msg_and_die("%s", device);
+               }
        }
 
-       if (optind + 1 < argc)
-               if (realpath(argv[optind + 1], directory) == NULL)
-                       perror_msg_and_die("%s", directory);
-
+       if (optind + 1 < argc) {
+               if (realpath(argv[optind + 1], directory) == NULL) {
+                       perror_msg_and_die("Invalid directory %s", directory);
+               }
+       }
+       
        if (all == TRUE || optind + 1 == argc) {
-               struct mntent *m;
+               struct mntent *m = NULL;
                FILE *f = setmntent("/etc/fstab", "r");
                fstabmount = TRUE;