2019-10-20 12:03:20 +02:00
// +build !android
2019-10-03 16:11:02 +02: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 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 {
2019-10-11 11:54:00 +02:00
defer file . Close ( )
2018-06-13 16:49:32 +02:00
if listener , err := net . FileListener ( file ) ; err == nil {
dlog . Noticef ( "Wiring systemd TCP socket #%d, %s, %s" , i , file . Name ( ) , listener . Addr ( ) )
2020-04-26 14:57:18 +02:00
proxy . tcpListener = append ( proxy . tcpListener , listener . ( * net . TCPListener ) )
2018-06-13 16:49:32 +02:00
} else if pc , err := net . FilePacketConn ( file ) ; err == nil {
dlog . Noticef ( "Wiring systemd UDP socket #%d, %s, %s" , i , file . Name ( ) , pc . LocalAddr ( ) )
2020-04-26 14:57:18 +02:00
proxy . udpListener = append ( proxy . udpListener , listener . ( * net . UDPConn ) )
2019-10-11 11:54:00 +02: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
}