in lib/handler.go [82:121]
func handleOverride(config *Config, message *DHCPMessage) (*DHCPServer, error) {
if override, ok := config.Overrides[message.Mac.String()]; ok {
// Checking if override is expired. If so, ignore it. Expiration field should
// be a timestamp in the following format "2006/01/02 15:04 -0700".
// For example, a timestamp in UTC would look as follows: "2017/05/06 14:00 +0000".
var err error
var expiration time.Time
if override.Expiration != "" {
expiration, err = time.Parse("2006/01/02 15:04 -0700", override.Expiration)
if err != nil {
glog.Errorf("Could not parse override expiration for MAC %s: %s", message.Mac.String(), err.Error())
return nil, nil
}
if time.Now().After(expiration) {
glog.Errorf("Override rule for MAC %s expired on %s, ignoring", message.Mac.String(), expiration.Local())
return nil, nil
}
}
if override.Expiration == "" {
glog.Infof("Found override rule for %s without expiration", message.Mac.String())
} else {
glog.Infof("Found override rule for %s, it will expire on %s", message.Mac.String(), expiration.Local())
}
var server *DHCPServer
if len(override.Host) > 0 {
server, err = handleHostOverride(config, override.Host)
} else if len(override.Tier) > 0 {
server, err = handleTierOverride(config, override.Tier, message)
}
if err != nil {
return nil, err
}
if server != nil {
return server, nil
}
glog.Infof("Override didn't have host or tier, this shouldn't happen, proceeding with normal server selection")
}
return nil, nil
}