checker: better handle DNS checks

This commit is contained in:
nemunaire 2021-03-07 12:42:05 +01:00
parent 456694c330
commit 07e91271f4

View File

@ -219,6 +219,7 @@ func studentsChecker() {
} }
dnsIP := stdIP dnsIP := stdIP
var glueErr error
// Is GLUE defined? // Is GLUE defined?
if glueIP, err := get_GLUE(std.MyDelegatedDomain()); glueIP != nil { if glueIP, err := get_GLUE(std.MyDelegatedDomain()); glueIP != nil {
dnsIP = glueIP.String() dnsIP = glueIP.String()
@ -228,48 +229,59 @@ func studentsChecker() {
} }
} else if err != nil { } else if err != nil {
log.Printf("%s and GLUE: %s\n", std.Login, err) log.Printf("%s and GLUE: %s\n", std.Login, err)
glueErr = err
} }
// Check DNS // Check DNS
if addr, err := check_dns(std.MyDelegatedDomain(), dnsIP); err == nil { if addr, err := check_dns(std.MyDelegatedDomain(), dnsIP); err == nil {
if verbose {
log.Printf("%s just unlocked DNS challenge\n", std.Login)
}
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+3, ""); err != nil {
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
}
// Check HTTP with DNS
if addr == nil { if addr == nil {
log.Printf("%s and HTTP (with DNS ip=%s): skipped due to empty response\n", std.Login, addr.String()) dnsAt := " at " + dnsIP
} else if err := check_http(addr.String(), std.MyDelegatedDomain()); err == nil { if glueErr != nil {
if verbose { dnsAt = " + there is a problem with the GLUE record: " + glueErr.Error()
log.Printf("%s just unlocked HTTP challenge\n", std.Login)
} }
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+4, ""); err != nil { if errreg := std.RegisterChallengeError(100*(tunnel_version-1)+3, fmt.Errorf("%s: empty response from the server%s", std.MyDelegatedDomain(), dnsAt)); errreg != nil {
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error()) log.Printf("Unable to register challenge error for %s: %s\n", std.Login, errreg)
} }
} else { } else {
std.RegisterChallengeError(100*(tunnel_version-1)+4, err)
if verbose { if verbose {
log.Printf("%s and HTTP (with DNS ip=%s): %s\n", std.Login, addr.String(), err) log.Printf("%s just unlocked DNS challenge\n", std.Login)
} }
} if _, err := std.UnlockChallenge(100*(tunnel_version-1)+3, addr.String()); err != nil {
// Check HTTPs with DNS
if addr == nil {
log.Printf("%s and HTTPS (with DNS ip=%s): skipped due to empty response\n", std.Login, addr.String())
} else if err := check_https(std.MyDelegatedDomain(), addr.String()); err == nil {
if verbose {
log.Printf("%s just unlocked HTTPS challenge\n", std.Login)
}
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+5, ""); err != nil {
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error()) log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
} }
} else {
std.RegisterChallengeError(100*(tunnel_version-1)+5, err) // Check HTTP with DNS
if verbose { if glueErr != nil {
log.Printf("%s and HTTPS (with DNS ip=%s): %s\n", std.Login, addr.String(), err) std.RegisterChallengeError(100*(tunnel_version-1)+4, fmt.Errorf("Unable to perform the test due to GLUE problem: %w", err))
} else if err := check_http(addr.String(), std.MyDelegatedDomain()); err == nil {
if verbose {
log.Printf("%s just unlocked HTTP challenge\n", std.Login)
}
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+4, ""); err != nil {
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
}
} else {
std.RegisterChallengeError(100*(tunnel_version-1)+4, err)
if verbose {
log.Printf("%s and HTTP (with DNS ip=%s): %s\n", std.Login, addr.String(), err)
}
}
// Check HTTPs with DNS
if glueErr != nil {
std.RegisterChallengeError(100*(tunnel_version-1)+5, fmt.Errorf("Unable to perform the test due to GLUE problem: %w", err))
} else if err := check_https(std.MyDelegatedDomain(), addr.String()); err == nil {
if verbose {
log.Printf("%s just unlocked HTTPS challenge\n", std.Login)
}
if _, err := std.UnlockChallenge(100*(tunnel_version-1)+5, ""); err != nil {
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
}
} else {
std.RegisterChallengeError(100*(tunnel_version-1)+5, err)
if verbose {
log.Printf("%s and HTTPS (with DNS ip=%s): %s\n", std.Login, addr.String(), err)
}
} }
} }
} else { } else {