From 01a13cd0f4acb7375c16a10965d2cff765d9647a Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 16 Jul 2007 16:29:22 -0400 Subject: [PATCH] mount.nfs: Error handling clean-up o Use nfs_error( _() ) instead of fprintf(stderr, o Use the mount return code macros instead of bare integers o Free mount_point after it has been canonicalized Signed-off-by: Chuck Lever Signed-off-by: Neil Brown --- utils/mount/mount.c | 51 ++++++++++++++++++++++++----------------- utils/mount/nfsumount.c | 6 ++--- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/utils/mount/mount.c b/utils/mount/mount.c index dde4562..d5e5cea 100644 --- a/utils/mount/mount.c +++ b/utils/mount/mount.c @@ -367,22 +367,22 @@ int main(int argc, char *argv[]) if(!strncmp(progname, "umount", strlen("umount"))) { if(argc < 2) { umount_usage(); - exit(1); + exit(EX_USAGE); } exit(nfsumount(argc, argv)); } - if(argv[1] && argv[1][0] == '-') { + if (argv[1] && argv[1][0] == '-') { if(argv[1][1] == 'V') printf("%s ("PACKAGE_STRING")\n", progname); else mount_usage(); - return 0; + exit(0); } if ((argc < 3)) { mount_usage(); - exit(1); + exit(EX_USAGE); } spec = argv[1]; @@ -422,13 +422,13 @@ int main(int argc, char *argv[]) case 'h': default: mount_usage(); - exit(1); + exit(EX_USAGE); } } if (optind != argc-2) { /* Extra non-option words at the end... */ mount_usage(); - exit(1); + exit(EX_USAGE); } if (strcmp(progname, "mount.nfs4") == 0) @@ -445,9 +445,9 @@ int main(int argc, char *argv[]) if ((mc = getfsfile(mount_point)) == NULL || strcmp(mc->m.mnt_fsname, spec) != 0 || strcmp(mc->m.mnt_type, fs_type) != 0) { - fprintf(stderr, "%s: permission denied: no match for %s " - "found in /etc/fstab\n", progname, mount_point); - exit(1); + nfs_error(_("%s: permission denied: no match for %s " + "found in /etc/fstab"), progname, mount_point); + exit(EX_USAGE); } /* @@ -460,24 +460,31 @@ int main(int argc, char *argv[]) } mount_point = canonicalize(mount_point); - if (mount_point == NULL || - mount_point[0] != '/') { - fprintf(stderr, "%s: unknown mount point %s\n", - progname, mount_point ? : ""); - exit(1); + if (!mount_point) { + nfs_error(_("%s: no mount point provided"), progname); + exit(EX_USAGE); } - + if (mount_point[0] != '/') { + nfs_error(_("%s: unrecognized mount point %s"), + progname, mount_point); + mnt_err = EX_USAGE; + goto out; + } + parse_opts(mount_opts, &flags, &extra_opts); if (uid != 0) { - if (! (flags & (MS_USERS | MS_USER))) { - fprintf(stderr, "%s: permission denied\n", progname); - exit(1); - } + if (!(flags & (MS_USERS|MS_USER))) { + nfs_error(_("%s: permission denied"), progname); + mnt_err = EX_USAGE; + goto out; + } } - if (chk_mountpoint(mount_point)) - exit(EX_FAIL); + if (chk_mountpoint(mount_point)) { + mnt_err = EX_USAGE; + goto out; + } if (strcmp(fs_type, "nfs4") == 0) mnt_err = nfs4mount(spec, mount_point, flags, &extra_opts, fake); @@ -494,6 +501,8 @@ int main(int argc, char *argv[]) mnt_err = add_mtab(spec, mount_point, fs_type, flags, extra_opts, 0, 0 /* these are always zero for NFS */ ); +out: + free(mount_point); exit(mnt_err); } diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c index 97b96e8..1b3c8d1 100644 --- a/utils/mount/nfsumount.c +++ b/utils/mount/nfsumount.c @@ -157,7 +157,7 @@ int del_mtab(const char *spec, const char *node) if (umnt_err) umount_error(umnt_err, node); - return 1; + return EX_FILEIO; } /* @@ -307,7 +307,7 @@ int nfsumount(int argc, char *argv[]) strcmp(mc->m.mnt_type, "nfs4") != 0) { fprintf(stderr, "umount.nfs: %s on %s it not an nfs filesystem\n", mc->m.mnt_fsname, mc->m.mnt_dir); - exit(1); + return EX_USAGE; } if (getuid() != 0) { @@ -355,6 +355,6 @@ int nfsumount(int argc, char *argv[]) } else ret = del_mtab(NULL, spec); - return(ret); + return ret; } -- 2.39.2