|
Line
Link Here
|
| 0 |
-- xinetd/confparse.c |
0 |
++ xinetd/confparse.c |
|
Lines 544-553
Link Here
|
| 544 |
} |
544 |
} |
| 545 |
|
545 |
|
| 546 |
if( SC_IPV4( scp ) && SC_IPV6( scp ) ) { |
546 |
if( SC_IPV4( scp ) && SC_IPV6( scp ) ) { |
| 547 |
msg( LOG_ERR, func, |
547 |
msg( LOG_INFO, func, |
| 548 |
"Service %s specified as both IPv4 and IPv6 - DISABLING", |
548 |
"Service %s will use IPv6 or fallback to IPv4", |
| 549 |
SC_NAME(scp)); |
549 |
SC_NAME(scp)); |
| 550 |
return FAILED ; |
|
|
| 551 |
} |
550 |
} |
| 552 |
|
551 |
|
| 553 |
/* |
552 |
/* |
| 554 |
-- xinetd/service.c |
553 |
++ xinetd/service.c |
|
Lines 322-333
Link Here
|
| 322 |
return( OK ); |
322 |
return( OK ); |
| 323 |
} |
323 |
} |
| 324 |
|
324 |
|
| 325 |
if( SC_IPV4( scp ) ) { |
325 |
if( SC_IPV4( scp ) && !SC_IPV6(scp) ) { |
| 326 |
SVC_FD(sp) = socket( AF_INET, |
326 |
SVC_FD(sp) = socket( AF_INET, |
| 327 |
SC_SOCKET_TYPE( scp ), SC_PROTOVAL( scp ) ) ; |
327 |
SC_SOCKET_TYPE( scp ), SC_PROTOVAL( scp ) ) ; |
| 328 |
} else if( SC_IPV6( scp ) ) { |
328 |
} else if( SC_IPV6( scp ) ) { |
| 329 |
SVC_FD(sp) = socket( AF_INET6, |
329 |
SVC_FD(sp) = socket( AF_INET6, |
| 330 |
SC_SOCKET_TYPE( scp ), SC_PROTOVAL( scp ) ) ; |
330 |
SC_SOCKET_TYPE( scp ), SC_PROTOVAL( scp ) ) ; |
|
|
331 |
/* service with IPv6-IPv4 fallback |
| 332 |
* - if IPv6 succeeds, use IPv6 and clear the IPv4 flag |
| 333 |
* - if IPv6 fails, use IPv4 socket and clear the IPv6 flag |
| 334 |
*/ |
| 335 |
if( SVC_FD(sp) == -1 ) { |
| 336 |
if( SC_IPV4(scp) ) { |
| 337 |
msg( LOG_INFO, func, |
| 338 |
"IPv6 socket creation failed (%m), service = %s", SC_ID( scp ) ); |
| 339 |
msg( LOG_INFO, func, |
| 340 |
"falling back to IPv4, service = %s", SC_ID( scp ) ); |
| 341 |
M_CLEAR(SC_XFLAGS(scp), SF_IPV6); |
| 342 |
SVC_FD(sp) = socket( AF_INET, |
| 343 |
SC_SOCKET_TYPE( scp ), SC_PROTOVAL( scp ) ) ; |
| 344 |
} |
| 345 |
} else { |
| 346 |
M_CLEAR(SC_XFLAGS(scp), SF_IPV4); |
| 347 |
} |
| 331 |
} |
348 |
} |
| 332 |
|
349 |
|
| 333 |
if ( SVC_FD(sp) == -1 ) |
350 |
if ( SVC_FD(sp) == -1 ) |