2021-09-23 19:16:26 +02:00
//go:build !android
2019-10-03 17:11:02 +03:00
2018-01-24 15:14:48 +01:00
package main
import (
"net"
"github.com/coreos/go-systemd/activation"
"github.com/jedisct1/dlog"
)
2020-04-26 14:57:18 +02:00
func ( proxy * Proxy ) addSystemDListeners ( ) error {
2018-06-13 09:49:32 -05:00
files := activation . Files ( true )
2019-09-16 15:46:39 +02:00
if len ( files ) > 0 {
2019-10-03 16:46:37 +03:00
if len ( proxy . userName ) > 0 || proxy . child {
2022-03-23 17:48:48 +01:00
dlog . Fatal (
"Systemd activated sockets are incompatible with privilege dropping. Remove activated sockets and fill `listen_addresses` in the dnscrypt-proxy configuration file instead." ,
)
2019-09-16 15:46:39 +02:00
}
dlog . Warn ( "Systemd sockets are untested and unsupported - use at your own risk" )
2018-07-07 19:44:11 +02:00
}
2018-06-13 09:49:32 -05:00
for i , file := range files {
2019-10-11 12:54:00 +03:00
defer file . Close ( )
2018-06-13 09:49:32 -05:00
if listener , err := net . FileListener ( file ) ; err == nil {
2020-06-19 20:16:21 +02:00
proxy . registerTCPListener ( listener . ( * net . TCPListener ) )
2018-06-13 09:49:32 -05:00
dlog . Noticef ( "Wiring systemd TCP socket #%d, %s, %s" , i , file . Name ( ) , listener . Addr ( ) )
} else if pc , err := net . FilePacketConn ( file ) ; err == nil {
2020-06-19 20:16:21 +02:00
proxy . registerUDPListener ( pc . ( * net . UDPConn ) )
2018-06-13 09:49:32 -05:00
dlog . Noticef ( "Wiring systemd UDP socket #%d, %s, %s" , i , file . Name ( ) , pc . LocalAddr ( ) )
2019-10-11 12:54:00 +03:00
}
2018-01-24 15:14:48 +01:00
}
2019-10-31 17:49:48 +01:00
return nil
2018-01-24 15:14:48 +01:00
}