diff options
author | Glenn L McGrath | 2001-05-07 01:38:03 +0000 |
---|---|---|
committer | Glenn L McGrath | 2001-05-07 01:38:03 +0000 |
commit | 3aae10014c184cb28e30196cafa143fe622fc508 (patch) | |
tree | feb98587b0ca90a02751561132777eed4f2b91b4 | |
parent | 2e6c87876353cf5e038d8430c076f645be51da75 (diff) | |
download | busybox-3aae10014c184cb28e30196cafa143fe622fc508.zip busybox-3aae10014c184cb28e30196cafa143fe622fc508.tar.gz |
Device may not be a real filename
-rw-r--r-- | mount.c | 26 | ||||
-rw-r--r-- | util-linux/mount.c | 26 |
2 files changed, 32 insertions, 20 deletions
@@ -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; diff --git a/util-linux/mount.c b/util-linux/mount.c index 9d61bd3..fa885cb 100644 --- a/util-linux/mount.c +++ b/util-linux/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; |