59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
|
package listeners
|
||
|
|
||
|
import (
|
||
|
"crypto/tls"
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"net"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/Microsoft/go-winio"
|
||
|
)
|
||
|
|
||
|
// Init creates new listeners for the server.
|
||
|
func Init(proto, addr, socketGroup string, tlsConfig *tls.Config) (ls []net.Listener, err error) {
|
||
|
switch proto {
|
||
|
case "tcp":
|
||
|
l, err := initTCPSocket(addr, tlsConfig)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
ls = append(ls, l)
|
||
|
|
||
|
case "npipe":
|
||
|
// allow Administrators and SYSTEM, plus whatever additional users or groups were specified
|
||
|
sddl := "D:P(A;;GA;;;BA)(A;;GA;;;SY)"
|
||
|
if socketGroup != "" {
|
||
|
for _, g := range strings.Split(socketGroup, ",") {
|
||
|
sid, err := winio.LookupSidByName(g)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
sddl += fmt.Sprintf("(A;;GRGW;;;%s)", sid)
|
||
|
}
|
||
|
}
|
||
|
c := winio.PipeConfig{
|
||
|
SecurityDescriptor: sddl,
|
||
|
MessageMode: true, // Use message mode so that CloseWrite() is supported
|
||
|
InputBufferSize: 65536, // Use 64KB buffers to improve performance
|
||
|
OutputBufferSize: 65536,
|
||
|
}
|
||
|
l, err := winio.ListenPipe(addr, &c)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
ls = append(ls, l)
|
||
|
|
||
|
default:
|
||
|
return nil, errors.New("Invalid protocol format. Windows only supports tcp and npipe.")
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// allocateDaemonPort ensures that there are no containers
|
||
|
// that try to use any port allocated for the docker server.
|
||
|
func allocateDaemonPort(addr string) error {
|
||
|
return nil
|
||
|
}
|