5ac4c31
diff -up nfs-utils-1.2.1/support/nfs/getport.c.orig nfs-utils-1.2.1/support/nfs/getport.c
5ac4c31
--- nfs-utils-1.2.1/support/nfs/getport.c.orig	2010-01-27 13:48:06.136623000 -0500
5ac4c31
+++ nfs-utils-1.2.1/support/nfs/getport.c	2010-01-27 14:02:28.491921000 -0500
5ac4c31
@@ -277,7 +277,7 @@ nfs_get_proto(const char *netid, sa_fami
5ac4c31
 #ifdef HAVE_LIBTIRPC
5ac4c31
 char *nfs_get_netid(const sa_family_t family, const unsigned long protocol)
5ac4c31
 {
5ac4c31
-	char *nc_protofmly, *nc_proto, *nc_netid;
5ac4c31
+	char *nc_protofmly, *nc_proto, *nc_netid = NULL;
5ac4c31
 	struct netconfig *nconf;
5ac4c31
 	struct protoent *proto;
5ac4c31
 	void *handle;
5ac4c31
@@ -319,6 +319,19 @@ char *nfs_get_netid(const sa_family_t fa
5ac4c31
 	endnetconfig(handle);
5ac4c31
 
5ac4c31
 out:
5ac4c31
+	/*
5ac4c31
+	 * The system configuration files are inaccessible 
5ac4c31
+	 * so see if these are well known protocols
5ac4c31
+	 */
5ac4c31
+	if (protocol == IPPROTO_TCP)
5ac4c31
+		nc_netid = (family == AF_INET6 ? 
5ac4c31
+			strdup("tcp6") : strdup("tcp"));
5ac4c31
+	else if (protocol == IPPROTO_UDP)
5ac4c31
+		nc_netid = (family == AF_INET6 ? 
5ac4c31
+			strdup("udp6") : strdup("udp"));
5ac4c31
+	if (nc_netid != NULL)
5ac4c31
+		return nc_netid;
5ac4c31
+
5ac4c31
 	rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
5ac4c31
 	return NULL;
5ac4c31
 }
5ac4c31
diff -up nfs-utils-1.2.1/utils/mount/network.c.orig nfs-utils-1.2.1/utils/mount/network.c
5ac4c31
--- nfs-utils-1.2.1/utils/mount/network.c.orig	2010-01-27 13:48:06.141624000 -0500
5ac4c31
+++ nfs-utils-1.2.1/utils/mount/network.c	2010-01-27 14:17:49.098201000 -0500
5ac4c31
@@ -1280,7 +1280,26 @@ nfs_nfs_version(struct mount_options *op
5ac4c31
 	*version = 0;
5ac4c31
 	return 1;
5ac4c31
 }
5ac4c31
-
5ac4c31
+/*
5ac4c31
+ * Returns TRUE if the option string is a well known protocol
5ac4c31
+ */
5ac4c31
+int 
5ac4c31
+nfs_set_proto(char *option,  unsigned long *protocol)
5ac4c31
+{
5ac4c31
+	if (strcmp(option, "tcp") == 0 || 
5ac4c31
+			strcmp(option, "tcp6") == 0) {
5ac4c31
+		*protocol = IPPROTO_TCP;
5ac4c31
+		return 1;
5ac4c31
+	}
5ac4c31
+	if (strcmp(option, "udp") == 0 ||
5ac4c31
+			strcmp(option, "udp6") == 0) {
5ac4c31
+		*protocol = IPPROTO_UDP;
5ac4c31
+		return 1;
5ac4c31
+	}
5ac4c31
+	if (verbose)
5ac4c31
+		nfs_error(_("%s: unkown protocol: '%s'"), progname, option);
5ac4c31
+	return 0;
5ac4c31
+}
5ac4c31
 /*
5ac4c31
  * Returns TRUE if @protocol contains a valid value for this option,
5ac4c31
  * or FALSE if the option was specified with an invalid value.
5ac4c31
@@ -1300,8 +1319,13 @@ nfs_nfs_protocol(struct mount_options *o
5ac4c31
 		return 1;
5ac4c31
 	case 2: /* proto */
5ac4c31
 		option = po_get(options, "proto");
5ac4c31
-		if (option != NULL)
5ac4c31
-			return nfs_get_proto(option, &family, protocol);
5ac4c31
+		if (option != NULL) {
5ac4c31
+			if (nfs_get_proto(option, &family, protocol))
5ac4c31
+				return 1;
5ac4c31
+			if (nfs_set_proto(option, protocol))
5ac4c31
+				return 1;
5ac4c31
+			return 0;
5ac4c31
+		}
5ac4c31
 	}
5ac4c31
 
5ac4c31
 	/*
5ac4c31
@@ -1349,7 +1373,7 @@ nfs_nfs_port(struct mount_options *optio
5ac4c31
 int nfs_nfs_proto_family(struct mount_options *options,
5ac4c31
 				sa_family_t *family)
5ac4c31
 {
5ac4c31
-	unsigned long protocol;
5ac4c31
+	unsigned long protocol = 0;
5ac4c31
 	char *option;
5ac4c31
 
5ac4c31
 	*family = config_default_family;
5ac4c31
@@ -1360,8 +1384,13 @@ int nfs_nfs_proto_family(struct mount_op
5ac4c31
 		return 1;
5ac4c31
 	case 2: /* proto */
5ac4c31
 		option = po_get(options, "proto");
5ac4c31
-		if (option != NULL)
5ac4c31
-			return nfs_get_proto(option, family, &protocol);
5ac4c31
+		if (option != NULL){
5ac4c31
+			if (nfs_get_proto(option, family, &protocol))
5ac4c31
+				return 1;
5ac4c31
+			if (nfs_set_proto(option, &protocol))
5ac4c31
+				return 1;
5ac4c31
+			return 0;
5ac4c31
+		}
5ac4c31
 	}
5ac4c31
 
5ac4c31
 	/*
5ac4c31
@@ -1443,8 +1472,13 @@ nfs_mount_protocol(struct mount_options 
5ac4c31
 	char *option;
5ac4c31
 
5ac4c31
 	option = po_get(options, "mountproto");
5ac4c31
-	if (option != NULL)
5ac4c31
-		return nfs_get_proto(option, &family, protocol);
5ac4c31
+	if (option != NULL) {
5ac4c31
+		if (nfs_get_proto(option, &family, protocol))
5ac4c31
+			return 1;
5ac4c31
+		if (nfs_set_proto(option, protocol))
5ac4c31
+			return 1;
5ac4c31
+		return 0;
5ac4c31
+	}
5ac4c31
 
5ac4c31
 	/*
5ac4c31
 	 * MNT transport protocol wasn't specified.  If the NFS