From 8632db8e9964de907abc76cd5da93bd7e0e8833e Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 10 Mar 2022 19:39:30 +0100 Subject: [PATCH 1/3] checker: Report ping errors --- checker/checker.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/checker/checker.go b/checker/checker.go index 4cae4aa..00c8f24 100644 --- a/checker/checker.go +++ b/checker/checker.go @@ -46,7 +46,7 @@ func check_ping(ip string, cb func(pkt *ping.Packet)) (err error) { pinger.Count = 1 pinger.OnRecv = cb pinger.SetPrivileged(true) - pinger.Run() + err = pinger.Run() return } @@ -578,7 +578,7 @@ func studentChecker(std *adlin.Student, also_check_matrix bool) { log.Printf("Tests %s on %s...", std.Login, stdIP) } // Check ping - check_ping(stdIP, func(pkt *ping.Packet) { + err = check_ping(stdIP, func(pkt *ping.Packet) { tunnel_version, err := minTunnelVersion(std, tun.SuffixIP) if verbose { log.Printf("%s PONG (on %x); version=%d (%v)\n", std.Login, tun.SuffixIP, tunnel_version, err) @@ -803,8 +803,10 @@ func studentChecker(std *adlin.Student, also_check_matrix bool) { return }) + if err != nil && verbose { + log.Printf("%s: Unable to perform ping to %s: %s", std.Login, stdIP, err.Error()) + } } - } func studentsChecker() { From 55b1af83f0c9b59b1d6183db9d8375968ea72af1 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 10 Mar 2022 19:40:02 +0100 Subject: [PATCH 2/3] checker: Add offline mode which assumes student default parameters --- checker/checker.go | 24 +++++++++++++++++------- checker/main.go | 9 ++++++--- libadlin/tunnel.go | 7 +++++++ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/checker/checker.go b/checker/checker.go index 00c8f24..8116420 100644 --- a/checker/checker.go +++ b/checker/checker.go @@ -560,13 +560,23 @@ func minTunnelVersion(std *adlin.Student, suffixip int) (int, error) { return minversion, nil } -func studentChecker(std *adlin.Student, also_check_matrix bool) { +func studentChecker(std *adlin.Student, also_check_matrix bool, offline bool) { tuns, err := std.GetActivesTunnels() if err != nil { - if verbose2 { - log.Printf("SKip %s due to error when getting active tunnels: %s", std.Login, err.Error()) + if offline { + tuns, err = std.GetDefaultTunnels() + if err != nil { + if verbose { + log.Printf("SKip %s as I'm unable to generate default tunnels: %s", std.Login, err.Error()) + } + return + } + } else { + if verbose2 { + log.Printf("SKip %s due to error when getting active tunnels: %s", std.Login, err.Error()) + } + return } - return } if verbose2 && len(tuns) == 0 { log.Printf("%s has no active tunnels: %s", std.Login, err.Error()) @@ -585,7 +595,7 @@ func studentChecker(std *adlin.Student, also_check_matrix bool) { } std.OnPong(true) - if tunnel_version == 2147483647 || tunnel_version == 0 { + if !offline && (tunnel_version == 2147483647 || tunnel_version == 0) { log.Printf("%s unknown tunnel version: %d skipping tests (%v)", std.Login, tunnel_version, err) return } @@ -809,7 +819,7 @@ func studentChecker(std *adlin.Student, also_check_matrix bool) { } } -func studentsChecker() { +func studentsChecker(offline bool) { students, err := adlin.GetStudents() if err != nil { log.Println("Unable to check students:", err) @@ -821,6 +831,6 @@ func studentsChecker() { for istd, s := range students { time.Sleep(250 * time.Millisecond) - go studentChecker(s, istd%10 == check_matrix_for) + go studentChecker(s, istd%10 == check_matrix_for, offline) } } diff --git a/checker/main.go b/checker/main.go index 5663cc2..95fda64 100644 --- a/checker/main.go +++ b/checker/main.go @@ -12,9 +12,12 @@ import ( ) func main() { + offline := false + var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server") flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode") flag.BoolVar(&verbose2, "verbose2", verbose2, "Enable more verbose mode") + flag.BoolVar(&offline, "offline", offline, "Enable offline mode (doesn't check what wg report)") flag.Parse() if verbose2 && !verbose { @@ -44,7 +47,7 @@ func main() { log.Printf("%s: %s", std_login, err.Error()) } else { log.Printf("Checking %s...", std.Login) - studentChecker(std, true) + studentChecker(std, true, offline) } } @@ -59,14 +62,14 @@ func main() { defer ticker.Stop() // Launch checker - studentsChecker() + studentsChecker(offline) loop: for { select { case <-interrupt: break loop case <-ticker.C: - studentsChecker() + studentsChecker(offline) } } } diff --git a/libadlin/tunnel.go b/libadlin/tunnel.go index c4fa99c..58a31fa 100644 --- a/libadlin/tunnel.go +++ b/libadlin/tunnel.go @@ -225,6 +225,13 @@ func (student *Student) GetActivesTunnels() (ts []*TunnelToken, err error) { } } +func (student *Student) GetDefaultTunnels() (ts []*TunnelToken, err error) { + t := &TunnelToken{IdStudent: student.Id} + ts = append(ts, t) + + return +} + func (student *Student) GetActivesTunnelsPubKey() (ts []ed25519.PublicKey, err error) { var activeTuns []*TunnelToken activeTuns, err = student.GetActivesTunnels() From 26ad05fd9e15c6b1ee73d6a264de90c82c404930 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 10 Mar 2022 19:48:45 +0100 Subject: [PATCH 3/3] checker: Precise DS error msg --- checker/checker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/checker/checker.go b/checker/checker.go index 8116420..08ba965 100644 --- a/checker/checker.go +++ b/checker/checker.go @@ -336,7 +336,7 @@ func check_dnssec(domain, ip string) (err error) { if !found { if err == nil { - return fmt.Errorf("Unable to find a valid DS record in parent zone.") + return fmt.Errorf("Unable to find a valid DS record in parent zone (if you use your own domain (ie. not given by maatma), this can be due to a previously cached response, you should wait).") } else { return err }