modified: common.go

This commit is contained in:
bllfr0g 2019-11-24 19:07:30 -08:00
parent b11fd6bbf8
commit ca4419d65c
1 changed files with 19 additions and 1 deletions

View File

@ -34,6 +34,8 @@ var allTime = flag.Bool("all_time", false, "Scan certs from all time, not just s
var state *State var state *State
var printMutex sync.Mutex var printMutex sync.Mutex
var wg sync.WaitGroup
var rcode = make(chan int)
func homedir() string { func homedir() string {
home := os.Getenv("HOME") 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 { func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.ProcessCallback) int {
defer wg.Done()
log.SetPrefix(os.Args[0] + ": " + logInfo.Url + ": ") log.SetPrefix(os.Args[0] + ": " + logInfo.Url + ": ")
ctlog, err := makeLogHandle(logInfo) ctlog, err := makeLogHandle(logInfo)
if err != nil { if err != nil {
log.Printf("%s\n", err) log.Printf("%s\n", err)
rcode <- 1
return 1 return 1
} }
if err := ctlog.refresh(); err != nil { if err := ctlog.refresh(); err != nil {
log.Printf("%s\n", err) log.Printf("%s\n", err)
rcode <- 1
return 1 return 1
} }
if err := ctlog.audit(); err != nil { if err := ctlog.audit(); err != nil {
log.Printf("%s\n", err) log.Printf("%s\n", err)
rcode <- 1
return 1 return 1
} }
@ -274,6 +280,7 @@ func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.Proces
ctlog.tree, err = ctlog.scanner.MakeCollapsedMerkleTree(ctlog.verifiedSTH) ctlog.tree, err = ctlog.scanner.MakeCollapsedMerkleTree(ctlog.verifiedSTH)
if err != nil { if err != nil {
log.Printf("Error reconstructing Merkle Tree: %s", err) log.Printf("Error reconstructing Merkle Tree: %s", err)
rcode <- 1
return 1 return 1
} }
if *verbose { if *verbose {
@ -287,11 +294,13 @@ func processLog(logInfo *certspotter.LogInfo, processCallback certspotter.Proces
} }
if err := ctlog.state.StoreTree(ctlog.tree); err != nil { if err := ctlog.state.StoreTree(ctlog.tree); err != nil {
log.Printf("Error storing tree: %s\n", err) log.Printf("Error storing tree: %s\n", err)
rcode <- 1
return 1 return 1
} }
if err := ctlog.scan(processCallback); err != nil { if err := ctlog.scan(processCallback); err != nil {
log.Printf("%s\n", err) log.Printf("%s\n", err)
rcode <- 1
return 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) log.Printf("Final log size = %d, final root hash = %x", ctlog.verifiedSTH.TreeSize, ctlog.verifiedSTH.SHA256RootHash)
} }
rcode <- 0
return 0 return 0
} }
@ -331,8 +341,16 @@ func Main(statePath string, processCallback certspotter.ProcessCallback) int {
} }
exitCode := 0 exitCode := 0
wg.Add(len(logs))
for i := range 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 { if state.IsFirstRun() && exitCode == 0 {