From ca4419d65ce055c85c2f9ec97a9278937047b73a Mon Sep 17 00:00:00 2001 From: bllfr0g Date: Sun, 24 Nov 2019 19:07:30 -0800 Subject: [PATCH] modified: common.go --- cmd/common.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/cmd/common.go b/cmd/common.go index 8f86fba..f6154e1 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -34,6 +34,8 @@ var allTime = flag.Bool("all_time", false, "Scan certs from all time, not just s var state *State var printMutex sync.Mutex +var wg sync.WaitGroup +var rcode = make(chan int) func homedir() string { home := os.Getenv("HOME") @@ -243,21 +245,25 @@ func (ctlog *logHandle) scan(processCallback certspotter.ProcessCallback) error } func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.ProcessCallback) int { + defer wg.Done() log.SetPrefix(os.Args[0] + ": " + logInfo.Url + ": ") ctlog, err := makeLogHandle(logInfo) if err != nil { log.Printf("%s\n", err) + rcode <- 1 return 1 } if err := ctlog.refresh(); err != nil { log.Printf("%s\n", err) + rcode <- 1 return 1 } if err := ctlog.audit(); err != nil { log.Printf("%s\n", err) + rcode <- 1 return 1 } @@ -274,6 +280,7 @@ func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.Proces ctlog.tree, err = ctlog.scanner.MakeCollapsedMerkleTree(ctlog.verifiedSTH) if err != nil { log.Printf("Error reconstructing Merkle Tree: %s", err) + rcode <- 1 return 1 } if *verbose { @@ -287,11 +294,13 @@ func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.Proces } if err := ctlog.state.StoreTree(ctlog.tree); err != nil { log.Printf("Error storing tree: %s\n", err) + rcode <- 1 return 1 } if err := ctlog.scan(processCallback); err != nil { log.Printf("%s\n", err) + rcode <- 1 return 1 } @@ -299,6 +308,7 @@ func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.Proces log.Printf("Final log size = %d, final root hash = %x", ctlog.verifiedSTH.TreeSize, ctlog.verifiedSTH.SHA256RootHash) } + rcode <- 0 return 0 } @@ -331,8 +341,16 @@ func Main(statePath string, processCallback certspotter.ProcessCallback) int { } exitCode := 0 + wg.Add(len(logs)) + for i := range logs { - exitCode |= processLog(&logs[i], processCallback) + go processLog(&logs[i], processCallback) + } + + wg.Wait() + + for i := range rcode { + exitCode |= i } if state.IsFirstRun() && exitCode == 0 {