|
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 |
} |