mcinglis / rpms / nfs-utils

Forked from rpms/nfs-utils 2 years ago
Clone
Blob Blame History Raw
commit 99defadcebf3bf892871f5541bfe762685faccbd
Author: Steve Dickson <steved@redhat.com>
Date:   Wed May 9 13:14:26 2007 -0400

    When nfs4 mount fail because the exported directory does
    not exist, the mount command claims the local mount point
    does not exist which is wrong. This patch fixes that problem
    as well as  makes the v4 mount failures look like v3/v2 failures.
    
    Signed-off-by: Steve Dickson <steved@redhat.com>

--- nfs-utils-1.0.12/utils/mount/mount.c.orig	2007-05-09 14:06:23.574929000 -0400
+++ nfs-utils-1.0.12/utils/mount/mount.c	2007-05-09 14:07:34.368247000 -0400
@@ -348,22 +348,49 @@
 	return 0;
 }
 
-static void mount_error(char *node)
+static void mount_error(char *mntpnt, char *node)
 {
 	switch(errno) {
 		case ENOTDIR:
-			fprintf(stderr, "%s: mount point %s is not a directory\n", progname, node);
+			fprintf(stderr, "%s: mount point %s is not a directory\n", 
+				progname, mntpnt);
 			break;
 		case EBUSY:
-			fprintf(stderr, "%s: %s is already mounted or busy\n", progname, node);
+			fprintf(stderr, "%s: %s is already mounted or busy\n", 
+				progname, mntpnt);
 			break;
 		case ENOENT:
-			fprintf(stderr, "%s: mount point %s does not exist\n", progname, node);
+			if (node) {
+				fprintf(stderr, "%s: %s failed, reason given by server: %s\n",
+					progname, node, strerror(errno));
+			} else
+				fprintf(stderr, "%s: mount point %s does not exist\n", 
+					progname, mntpnt);
 			break;
 		default:
 			fprintf(stderr, "%s: %s\n", progname, strerror(errno));
 	}
 }
+static int chk_mountpoint(char *mount_point)
+{
+	struct stat sb;
+
+	if (stat(mount_point, &sb) < 0){
+		mount_error(mount_point, NULL);
+		return 1;
+	}
+	if (S_ISDIR(sb.st_mode) == 0){
+		errno = ENOTDIR;
+		mount_error(mount_point, NULL);
+		return 1;
+	}
+	if (access(mount_point, X_OK) < 0) {
+		mount_error(mount_point, NULL);
+		return 1;
+	}
+
+	return 0;
+}
 #define NFS_MOUNT_VERS_DEFAULT 3
 
 int main(int argc, char *argv[])
@@ -493,6 +520,9 @@
 		}
 	}
 
+	if (chk_mountpoint(mount_point))
+		exit(EX_FAIL);
+
 	if (nfs_mount_vers == 4) {
 		mnt_err = nfs4mount(spec, mount_point, &flags, 
 			&extra_opts, &mount_opts, 0);
@@ -512,7 +542,7 @@
 				flags, mount_opts);
 
 		if (mnt_err) {
-			mount_error(mount_point);
+			mount_error(mount_point, spec);
 			exit(EX_FAIL);
 		}
 	}