mount: fix mishandling of proto=tcp/udp
function old new delta singlemount 4729 4695 -34
This commit is contained in:
		@@ -1059,6 +1059,7 @@ static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
 | 
			
		||||
	if (filteropts)	for (opt = strtok(filteropts, ","); opt; opt = strtok(NULL, ",")) {
 | 
			
		||||
		char *opteq = strchr(opt, '=');
 | 
			
		||||
		if (opteq) {
 | 
			
		||||
			int val, idx;
 | 
			
		||||
			static const char options[] ALIGN1 =
 | 
			
		||||
				/* 0 */ "rsize\0"
 | 
			
		||||
				/* 1 */ "wsize\0"
 | 
			
		||||
@@ -1081,87 +1082,92 @@ static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
 | 
			
		||||
				/* 18 */ "proto\0"
 | 
			
		||||
				/* 19 */ "namlen\0"
 | 
			
		||||
				/* 20 */ "addr\0";
 | 
			
		||||
			int val = xatoi_u(opteq + 1);
 | 
			
		||||
			*opteq = '\0';
 | 
			
		||||
			switch (index_in_strings(options, opt)) {
 | 
			
		||||
 | 
			
		||||
			*opteq++ = '\0';
 | 
			
		||||
			idx = index_in_strings(options, opt);
 | 
			
		||||
			switch (idx) {
 | 
			
		||||
			case 12: // "mounthost"
 | 
			
		||||
				mounthost = xstrndup(opteq,
 | 
			
		||||
						strcspn(opteq, " \t\n\r,"));
 | 
			
		||||
				continue;
 | 
			
		||||
			case 18: // "proto"
 | 
			
		||||
				if (!strncmp(opteq, "tcp", 3))
 | 
			
		||||
					tcp = 1;
 | 
			
		||||
				else if (!strncmp(opteq, "udp", 3))
 | 
			
		||||
					tcp = 0;
 | 
			
		||||
				else
 | 
			
		||||
					bb_error_msg("warning: unrecognized proto= option");
 | 
			
		||||
				continue;
 | 
			
		||||
			case 20: // "addr" - ignore
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			val = xatoi_u(opteq);
 | 
			
		||||
			switch (idx) {
 | 
			
		||||
			case 0: // "rsize"
 | 
			
		||||
				data.rsize = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 1: // "wsize"
 | 
			
		||||
				data.wsize = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 2: // "timeo"
 | 
			
		||||
				data.timeo = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 3: // "retrans"
 | 
			
		||||
				data.retrans = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 4: // "acregmin"
 | 
			
		||||
				data.acregmin = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 5: // "acregmax"
 | 
			
		||||
				data.acregmax = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 6: // "acdirmin"
 | 
			
		||||
				data.acdirmin = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 7: // "acdirmax"
 | 
			
		||||
				data.acdirmax = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 8: // "actimeo"
 | 
			
		||||
				data.acregmin = val;
 | 
			
		||||
				data.acregmax = val;
 | 
			
		||||
				data.acdirmin = val;
 | 
			
		||||
				data.acdirmax = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 9: // "retry"
 | 
			
		||||
				retry = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 10: // "port"
 | 
			
		||||
				port = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 11: // "mountport"
 | 
			
		||||
				mountport = val;
 | 
			
		||||
				break;
 | 
			
		||||
			case 12: // "mounthost"
 | 
			
		||||
				mounthost = xstrndup(opteq+1,
 | 
			
		||||
						strcspn(opteq+1," \t\n\r,"));
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 13: // "mountprog"
 | 
			
		||||
				mountprog = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 14: // "mountvers"
 | 
			
		||||
				mountvers = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 15: // "nfsprog"
 | 
			
		||||
				nfsprog = val;
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 16: // "nfsvers"
 | 
			
		||||
			case 17: // "vers"
 | 
			
		||||
				nfsvers = val;
 | 
			
		||||
				break;
 | 
			
		||||
			case 18: // "proto"
 | 
			
		||||
				if (!strncmp(opteq+1, "tcp", 3))
 | 
			
		||||
					tcp = 1;
 | 
			
		||||
				else if (!strncmp(opteq+1, "udp", 3))
 | 
			
		||||
					tcp = 0;
 | 
			
		||||
				else
 | 
			
		||||
					bb_error_msg("warning: unrecognized proto= option");
 | 
			
		||||
				break;
 | 
			
		||||
				continue;
 | 
			
		||||
			case 19: // "namlen"
 | 
			
		||||
				if (nfs_mount_version >= 2)
 | 
			
		||||
				//if (nfs_mount_version >= 2)
 | 
			
		||||
					data.namlen = val;
 | 
			
		||||
				else
 | 
			
		||||
					bb_error_msg("warning: option namlen is not supported\n");
 | 
			
		||||
				break;
 | 
			
		||||
			case 20: // "addr" - ignore
 | 
			
		||||
				break;
 | 
			
		||||
				//else
 | 
			
		||||
				//	bb_error_msg("warning: option namlen is not supported\n");
 | 
			
		||||
				continue;
 | 
			
		||||
			default:
 | 
			
		||||
				bb_error_msg("unknown nfs mount parameter: %s=%d", opt, val);
 | 
			
		||||
				goto fail;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
		else { /* not of the form opt=val */
 | 
			
		||||
			static const char options[] ALIGN1 =
 | 
			
		||||
				"bg\0"
 | 
			
		||||
				"fg\0"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user