Device may not be a real filename

This commit is contained in:
Glenn L McGrath 2001-05-07 01:38:03 +00:00
parent 2e6c878763
commit 3aae10014c
2 changed files with 32 additions and 20 deletions

26
mount.c
View File

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

View File

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