View | Details | Raw Unified | Return to bug 26068
Collapse All | Expand All

(-)sbin/mountd/mountd.c (-19 / +21 lines)
Lines 352-378 Link Here
352
	rpcb_unset(RPCPROG_MNT, RPCMNT_VER3, NULL);
352
	rpcb_unset(RPCPROG_MNT, RPCMNT_VER3, NULL);
353
	udpsock  = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
353
	udpsock  = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
354
	tcpsock  = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
354
	tcpsock  = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
355
	udp6sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
355
	udpconf  = getnetconfigent("udp");
356
	tcp6sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
356
	tcpconf  = getnetconfigent("tcp");
357
	if (have_v6) {
358
		udp6sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
359
		tcp6sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
357
	/*
360
	/*
358
	 * We're doing host-based access checks here, so don't allow
361
	 * We're doing host-based access checks here, so don't allow
359
	 * v4-in-v6 to confuse things. The kernel will disable it
362
	 * v4-in-v6 to confuse things. The kernel will disable it
360
	 * by default on NFS sockets too.
363
	 * by default on NFS sockets too.
361
	 */
364
	 */
362
	if (udp6sock != -1 && setsockopt(udp6sock, IPPROTO_IPV6,
365
		if (udp6sock != -1 && setsockopt(udp6sock, IPPROTO_IPV6,
363
		IPV6_BINDV6ONLY, &one, sizeof one) < 0){
366
			IPV6_BINDV6ONLY, &one, sizeof one) < 0){
364
		syslog(LOG_ERR, "can't disable v4-in-v6 on UDP socket");
367
			syslog(LOG_ERR, "can't disable v4-in-v6 on UDP socket");
365
		exit(1);
368
			exit(1);
366
	}
369
		}
367
	if (tcp6sock != -1 && setsockopt(tcp6sock, IPPROTO_IPV6,
370
		if (tcp6sock != -1 && setsockopt(tcp6sock, IPPROTO_IPV6,
368
		IPV6_BINDV6ONLY, &one, sizeof one) < 0){
371
			IPV6_BINDV6ONLY, &one, sizeof one) < 0){
369
		syslog(LOG_ERR, "can't disable v4-in-v6 on UDP socket");
372
			syslog(LOG_ERR, "can't disable v4-in-v6 on UDP socket");
370
		exit(1);
373
			exit(1);
374
		}
375
		udp6conf = getnetconfigent("udp6");
376
		tcp6conf = getnetconfigent("tcp6");
371
	}
377
	}
372
	udpconf  = getnetconfigent("udp");
373
	tcpconf  = getnetconfigent("tcp");
374
	udp6conf = getnetconfigent("udp6");
375
	tcp6conf = getnetconfigent("tcp6");
376
	if (!resvport_only) {
378
	if (!resvport_only) {
377
		mib[0] = CTL_VFS;
379
		mib[0] = CTL_VFS;
378
		mib[1] = vfc.vfc_typenum;
380
		mib[1] = vfc.vfc_typenum;
Lines 429-435 Link Here
429
			syslog(LOG_WARNING, "can't create TCP service");
431
			syslog(LOG_WARNING, "can't create TCP service");
430
432
431
	}
433
	}
432
	if (udp6sock != -1 && udp6conf != NULL) {
434
	if (have_v6 && udp6sock != -1 && udp6conf != NULL) {
433
		bindresvport(udp6sock, NULL);
435
		bindresvport(udp6sock, NULL);
434
		udp6transp = svc_dg_create(udp6sock, 0, 0);
436
		udp6transp = svc_dg_create(udp6sock, 0, 0);
435
		if (udp6transp != NULL) {
437
		if (udp6transp != NULL) {
Lines 449-455 Link Here
449
			syslog(LOG_WARNING, "can't create UDP6 service");
451
			syslog(LOG_WARNING, "can't create UDP6 service");
450
452
451
	}
453
	}
452
	if (tcp6sock != -1 && tcp6conf != NULL) {
454
	if (have_v6 && tcp6sock != -1 && tcp6conf != NULL) {
453
		bindresvport(tcp6sock, NULL);
455
		bindresvport(tcp6sock, NULL);
454
		listen(tcp6sock, SOMAXCONN);
456
		listen(tcp6sock, SOMAXCONN);
455
		tcp6transp = svc_vc_create(tcp6sock, 0, 0);
457
		tcp6transp = svc_vc_create(tcp6sock, 0, 0);
Lines 2502-2508 Link Here
2502
{
2504
{
2503
	close(mountdlockfd);
2505
	close(mountdlockfd);
2504
	unlink(MOUNTDLOCK);
2506
	unlink(MOUNTDLOCK);
2505
	pmap_unset(RPCPROG_MNT, 1);
2507
	rpcb_unset(RPCPROG_MNT, RPCMNT_VER1, NULL);
2506
	pmap_unset(RPCPROG_MNT, 3);
2508
	rpcb_unset(RPCPROG_MNT, RPCMNT_VER3, NULL);
2507
	exit (0);
2509
	exit (0);
2508
}
2510
}

Return to bug 26068