2018-01-24 15:14:48 +01:00
package main
import (
"net"
"github.com/coreos/go-systemd/activation"
"github.com/jedisct1/dlog"
)
func ( proxy * Proxy ) SystemDListeners ( ) error {
2018-06-13 16:49:32 +02:00
files := activation . Files ( true )
2019-09-16 15:46:39 +02:00
if len ( files ) > 0 {
2019-10-03 15:46:37 +02:00
if len ( proxy . userName ) > 0 || proxy . child {
2019-09-16 15:46:39 +02: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." )
}
dlog . Warn ( "Systemd sockets are untested and unsupported - use at your own risk" )
2018-07-07 19:44:11 +02:00
}
2018-06-13 16:49:32 +02:00
for i , file := range files {
if listener , err := net . FileListener ( file ) ; err == nil {
dlog . Noticef ( "Wiring systemd TCP socket #%d, %s, %s" , i , file . Name ( ) , listener . Addr ( ) )
go proxy . tcpListener ( listener . ( * net . TCPListener ) )
} else if pc , err := net . FilePacketConn ( file ) ; err == nil {
dlog . Noticef ( "Wiring systemd UDP socket #%d, %s, %s" , i , file . Name ( ) , pc . LocalAddr ( ) )
go proxy . udpListener ( pc . ( * net . UDPConn ) )
2018-01-24 15:14:48 +01:00
}
2018-06-13 16:49:32 +02:00
file . Close ( )
2018-01-24 15:14:48 +01:00
}
2018-06-13 16:49:32 +02:00
2018-01-24 15:14:48 +01:00
return nil
}