X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsocket-util.c;h=acc4d33372badb098b8f7713e7608537b083c6f1;hp=779850d37fa137cd8a702ca7e1df515e6ba3ac96;hb=34a35eced40860181757abe5ec00ac0e5d8d0225;hpb=5a2b80ceb20876e80907d0b7f7915afb20f716e6 diff --git a/src/socket-util.c b/src/socket-util.c index 779850d37..acc4d3337 100644 --- a/src/socket-util.c +++ b/src/socket-util.c @@ -389,6 +389,7 @@ int socket_address_listen( SocketAddressBindIPv6Only only, const char *bind_to_device, bool free_bind, + bool transparent, mode_t directory_mode, mode_t socket_mode, const char *label, @@ -433,6 +434,12 @@ int socket_address_listen( if (setsockopt(fd, IPPROTO_IP, IP_FREEBIND, &one, sizeof(one)) < 0) log_warning("IP_FREEBIND failed: %m"); } + + if (transparent) { + one = 1; + if (setsockopt(fd, IPPROTO_IP, IP_TRANSPARENT, &one, sizeof(one)) < 0) + log_warning("IP_TRANSPARENT failed: %m"); + } } one = 1; @@ -451,7 +458,7 @@ int socket_address_listen( /* Include the original umask in our mask */ umask(~socket_mode | old_mask); - r = bind(fd, &a->sockaddr.sa, a->size); + r = label_bind(fd, &a->sockaddr.sa, a->size); if (r < 0 && errno == EADDRINUSE) { /* Unlink and try again */