Просмотр исходного кода

feat(dir): continue on permission error (#1621)

Richard Gomez 1 год назад
Родитель
Сommit
c1add1d268
2 измененных файлов с 12 добавлено и 1 удалено
  1. 5 1
      detect/directory.go
  2. 7 0
      sources/directory.go

+ 5 - 1
detect/directory.go

@@ -15,9 +15,13 @@ func (d *Detector) DetectFiles(paths <-chan sources.ScanTarget) ([]report.Findin
 	for pa := range paths {
 		d.Sema.Go(func() error {
 			logger := log.With().Str("path", pa.Path).Logger()
-			log.Trace().Msgf("Scanning path: %s", pa)
+			logger.Trace().Msg("Scanning path")
 			f, err := os.Open(pa.Path)
 			if err != nil {
+				if os.IsPermission(err) {
+					logger.Warn().Msg("Skipping file: permission denied")
+					return nil
+				}
 				return err
 			}
 			defer f.Close()

+ 7 - 0
sources/directory.go

@@ -20,9 +20,16 @@ func DirectoryTargets(source string, s *semgroup.Group, followSymlinks bool) (<-
 		defer close(paths)
 		return filepath.Walk(source,
 			func(path string, fInfo os.FileInfo, err error) error {
+				logger := log.With().Str("path", path).Logger()
 				if err != nil {
+					if os.IsPermission(err) {
+						// This seems to only fail on directories at this stage.
+						logger.Warn().Msg("Skipping directory: permission denied")
+						return filepath.SkipDir
+					}
 					return err
 				}
+
 				if fInfo.Name() == ".git" && fInfo.IsDir() {
 					return filepath.SkipDir
 				}