Skip to content

Commit 636c09a

Browse files
authored
Support Unix Domain Sockets (#328)
1 parent 06294f5 commit 636c09a

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

auth_server/main.go

+23-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"crypto/tls"
2222
"flag"
2323
"math/rand"
24+
"net"
2425
"net/http"
2526
"os"
2627
"os/signal"
@@ -134,15 +135,35 @@ func ServeOnce(c *server.Config, cf string) (*server.AuthServer, *http.Server) {
134135
Handler: as,
135136
TLSConfig: tlsConfig,
136137
}
138+
139+
var listener net.Listener
140+
if c.Server.Net == "unix" {
141+
// Remove socket, if exists
142+
if _, err := os.Stat(c.Server.ListenAddress); err == nil {
143+
if err := os.Remove(c.Server.ListenAddress); err != nil {
144+
glog.Fatal(err.Error())
145+
}
146+
}
147+
listener, err = net.Listen("unix", c.Server.ListenAddress)
148+
if err != nil {
149+
glog.Fatal(err.Error())
150+
}
151+
} else {
152+
listener, err = net.Listen("tcp", c.Server.ListenAddress)
153+
if err != nil {
154+
glog.Fatal(err.Error())
155+
}
156+
}
157+
137158
go func() {
138159
if c.Server.CertFile == "" && c.Server.KeyFile == "" {
139-
if err := hs.ListenAndServe(); err != nil {
160+
if err := hs.Serve(listener); err != nil {
140161
if err == http.ErrServerClosed {
141162
return
142163
}
143164
}
144165
} else {
145-
if err := hs.ListenAndServeTLS(c.Server.CertFile, c.Server.KeyFile); err != nil {
166+
if err := hs.ServeTLS(listener, c.Server.CertFile, c.Server.KeyFile); err != nil {
146167
if err == http.ErrServerClosed {
147168
return
148169
}

auth_server/server/config.go

+8
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type Config struct {
5656

5757
type ServerConfig struct {
5858
ListenAddress string `yaml:"addr,omitempty"`
59+
Net string `yaml:"net,omitempty"`
5960
PathPrefix string `yaml:"path_prefix,omitempty"`
6061
RealIPHeader string `yaml:"real_ip_header,omitempty"`
6162
RealIPPos int `yaml:"real_ip_pos,omitempty"`
@@ -150,6 +151,13 @@ func validate(c *Config) error {
150151
if c.Server.ListenAddress == "" {
151152
return errors.New("server.addr is required")
152153
}
154+
if c.Server.Net != "unix" && c.Server.Net != "tcp" {
155+
if c.Server.Net == "" {
156+
c.Server.Net = "tcp"
157+
} else {
158+
return errors.New("server.net must be unix or tcp")
159+
}
160+
}
153161
if c.Server.PathPrefix != "" && !strings.HasPrefix(c.Server.PathPrefix, "/") {
154162
return errors.New("server.path_prefix must be an absolute path")
155163
}

examples/reference.yml

+4
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212

1313
server: # Server settings.
1414
# Address to listen on.
15+
# Can be HOST:PORT for TCP or file path (e.g. /run/docker_auth.sock) for Unix socket.
1516
addr: ":5001"
1617

18+
# Network, can be "tcp" or "unix" ("tcp" if unspecified).
19+
net: "tcp"
20+
1721
# URL path prefix to use.
1822
path_prefix: ""
1923

0 commit comments

Comments
 (0)