@@ -28,8 +28,10 @@ func always(context.Context, string) bool {
28
28
}
29
29
30
30
type ldapTarget struct {
31
- localPoolRange * net.IPNet
32
- ldap * ldap.Pool
31
+ localPoolRange * net.IPNet
32
+ ldap * ldap.Pool
33
+ statuszServer * HijackedServer
34
+ unavailableServer * HijackedServer
33
35
}
34
36
35
37
// HandleConn is called by tcpproxy after receiving a connection and sniffing the host.
@@ -39,6 +41,17 @@ func (l *ldapTarget) HandleConn(netConn net.Conn) {
39
41
var pool string
40
42
var err error
41
43
if conn , ok := netConn .(* tcpproxy.Conn ); ok {
44
+ switch conn .HostName {
45
+ case "proxy.scripts.scripts.mit.edu" :
46
+ // Special handling for proxy.scripts.scripts.mit.edu
47
+ l .statuszServer .HandleConn (netConn )
48
+ return
49
+ case "heartbeat.scripts.scripts.mit.edu" :
50
+ if nolvsPresent () {
51
+ l .unavailableServer .HandleConn (netConn )
52
+ return
53
+ }
54
+ }
42
55
pool , err = l .ldap .ResolvePool (conn .HostName )
43
56
if err != nil {
44
57
log .Printf ("resolving %q: %v" , conn .HostName , err )
@@ -50,9 +63,9 @@ func (l *ldapTarget) HandleConn(netConn net.Conn) {
50
63
log .Printf ("resolving default pool: %v" , err )
51
64
}
52
65
}
53
- // TODO: Serve an error page? Forward to scripts- director?
66
+ // TODO: Forward to sorry server on director?
54
67
if pool == "" {
55
- netConn . Close ( )
68
+ l . unavailableServer . HandleConn ( netConn )
56
69
return
57
70
}
58
71
laddr := netConn .LocalAddr ().(* net.TCPAddr )
@@ -91,8 +104,10 @@ func main() {
91
104
92
105
var p tcpproxy.Proxy
93
106
t := & ldapTarget {
94
- localPoolRange : ipnet ,
95
- ldap : ldapPool ,
107
+ localPoolRange : ipnet ,
108
+ ldap : ldapPool ,
109
+ statuszServer : NewHijackedServer (nil ),
110
+ unavailableServer : NewUnavailableServer (),
96
111
}
97
112
for _ , addr := range strings .Split (* httpAddrs , "," ) {
98
113
p .AddHTTPHostMatchRoute (addr , always , t )
0 commit comments