Skip to content
Snippets Groups Projects
Commit ae54658e authored by Daniel Lublin's avatar Daniel Lublin
Browse files

Set the default NTP server to the NTS-KE IP we connected to

This ensure that NTP server default is the same as the NTS-KE server
we're doing key exchange with. Case in point is a setup where NTS-KE
FQDN has multiple A records, and does not do server negotiation to point
us in the right direction.
parent fc4d2a87
1 merge request!7Set the default NTP server to the NTS-KE IP we connected to
......@@ -335,16 +335,13 @@ func Connect(hostport string, config *tls.Config, debug bool) (*KeyExchange, err
ke.Debug = debug
ke.hostport = hostport
host, _, err := net.SplitHostPort(ke.hostport)
_, _, err := net.SplitHostPort(ke.hostport)
if err != nil {
if !strings.Contains(err.Error(), "missing port in address") {
return nil, err
}
host = ke.hostport
ke.hostport = net.JoinHostPort(ke.hostport, strconv.Itoa(DEFAULT_NTSKE_PORT))
}
ke.Meta.Server = host // Default to same server for NTP as NTS
ke.Meta.Port = DEFAULT_NTP_PORT
if ke.Debug {
fmt.Printf("Connecting to KE server %v\n", ke.hostport)
......@@ -356,6 +353,18 @@ func Connect(hostport string, config *tls.Config, debug bool) (*KeyExchange, err
return nil, err
}
// Set default NTP server to the IP resolved and connected to for NTS-KE.
// Handles multiple A records & possible lack of NTPv4 Server Negotiation.
ke.Meta.Server, _, err = net.SplitHostPort(ke.Conn.RemoteAddr().String())
if err != nil {
return nil, fmt.Errorf("unexpected remoteaddr issue: %s", err)
}
ke.Meta.Port = DEFAULT_NTP_PORT
if ke.Debug {
fmt.Printf("Using resolved KE server as NTP default: %v\n",
net.JoinHostPort(ke.Meta.Server, strconv.Itoa(int(ke.Meta.Port))))
}
ke.reader = bufio.NewReader(ke.Conn)
state := ke.Conn.ConnectionState()
......@@ -476,10 +485,7 @@ func (ke *KeyExchange) Read() error {
switch msg.Type {
case RecEom:
// Check that we have complete data. It's OK
// if we don't fill in meta.Server --- this
// means the client should use the same IP
// address as the NTS-KE server.
// Check that we have complete data.
// if len(ke.Meta.Cookie) == 0 || ke.Meta.Algo == 0 {
// return errors.New("incomplete data")
// }
......@@ -519,12 +525,18 @@ func (ke *KeyExchange) Read() error {
return errors.New("buffer overrun")
}
ke.Meta.Server = string(address)
if ke.Debug {
fmt.Printf("(got negotiated NTP server: %v)\n", ke.Meta.Server)
}
case RecPort:
err := binary.Read(ke.reader, binary.BigEndian, &ke.Meta.Port)
if err != nil {
return errors.New("buffer overrun")
}
if ke.Debug {
fmt.Printf("(got negotiated NTP port: %v)\n", ke.Meta.Port)
}
default:
if critical {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment