B&W print-friendly diagrams + tinkerpop-0001 + wave-3 proof sections. Squash of 94 local commits onto remote master.
248 lines
9.5 KiB
Makefile
248 lines
9.5 KiB
Makefile
# CWE-407 Scan Makefile
|
|
# Tracks all scan targets, results, and triage state.
|
|
# Results are files — make skips targets that are already up to date.
|
|
#
|
|
# Usage:
|
|
# make scan-networkx # single target
|
|
# make scan-critical # all critical-priority targets
|
|
# make scan-networking # all networking targets
|
|
# make scan-scientific # all scientific computing targets
|
|
# make scan-databases # all database targets
|
|
# make scan-eda # all EDA/chip targets
|
|
# make scan-web-infra # all web infrastructure targets
|
|
# make scan-all # everything
|
|
# make report # summarize all completed results
|
|
# make clean-results # remove all result files (re-run everything)
|
|
#
|
|
# Prerequisites:
|
|
# ~/.unsandbox/accounts.csv must exist (see: un key)
|
|
# Row 0: portal-playground, Row 1: russ-test (for -j2 parallel)
|
|
# UN := path to un binary (default: ~/git/un-inception/build/un)
|
|
|
|
UN ?= $(HOME)/git/un-inception/build/un
|
|
RESULTS := scan-results
|
|
SCANS := scans
|
|
|
|
# Account slots from ~/.unsandbox/accounts.csv (0-based index)
|
|
# -j2 uses both slots in parallel — no env vars needed
|
|
ACCT1 ?= 1
|
|
ACCT2 ?= 0
|
|
|
|
# Network mode: semitrusted required for targets that git clone
|
|
NET_CLONE := -n semitrusted
|
|
NET_NONE :=
|
|
|
|
# ── Result file targets ──────────────────────────────────────────────────────
|
|
# Each target produces scan-results/<name>.txt
|
|
# Make tracks freshness: re-run only if .sh is newer than .txt
|
|
|
|
$(RESULTS)/frrouting.txt: $(SCANS)/frrouting.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/networkx.txt: $(SCANS)/networkx.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/exabgp.txt: $(SCANS)/exabgp.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/postgresql.txt: $(SCANS)/postgresql.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/verilator.txt: $(SCANS)/verilator.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/yosys.txt: $(SCANS)/yosys.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/sqlite.txt: $(SCANS)/sqlite.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/mysql.txt: $(SCANS)/mysql.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/bird.txt: $(SCANS)/bird.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/onos.txt: $(SCANS)/onos.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/opendaylight.txt: $(SCANS)/opendaylight.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/v8.txt: $(SCANS)/v8.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/spidermonkey.txt: $(SCANS)/spidermonkey.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/bazel.txt: $(SCANS)/bazel.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/kicad.txt: $(SCANS)/kicad.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/gnu-octave.txt: $(SCANS)/gnu-octave.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/php-zend.txt: $(SCANS)/php-zend.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/redis.txt: $(SCANS)/redis.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/varnish.txt: $(SCANS)/varnish.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/nginx.txt: $(SCANS)/nginx.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/apache2.txt: $(SCANS)/apache2.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/memcached.txt: $(SCANS)/memcached.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/ant.txt: $(SCANS)/ant.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/sbt.txt: $(SCANS)/sbt.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/bundler.txt: $(SCANS)/bundler.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/duckdb.txt: $(SCANS)/duckdb.sh
|
|
$(UN) --account $(ACCT2) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/composer.txt: $(SCANS)/composer.sh
|
|
$(UN) --account $(ACCT1) $(NET_CLONE) $< | tee $@
|
|
|
|
$(RESULTS)/full-43lang.txt: ../tools/unsandbox-scan.sh
|
|
$(UN) --account $(ACCT1) $(NET_NONE) $< | tee $@
|
|
|
|
# ── Grouped phony targets ────────────────────────────────────────────────────
|
|
|
|
.PHONY: scan-critical scan-networking scan-scientific scan-databases \
|
|
scan-eda scan-compilers scan-web-infra scan-package-managers scan-all \
|
|
scan-frrouting scan-networkx scan-exabgp scan-postgresql scan-sqlite \
|
|
scan-verilator scan-yosys scan-mysql scan-bird scan-onos \
|
|
scan-opendaylight scan-v8 scan-spidermonkey scan-bazel \
|
|
scan-kicad scan-gnu-octave scan-php-zend scan-redis \
|
|
scan-varnish scan-nginx scan-apache2 scan-memcached \
|
|
scan-ant scan-sbt scan-bundler scan-duckdb scan-composer \
|
|
scan-43lang report clean-results help
|
|
|
|
# Convenience aliases
|
|
scan-frrouting: $(RESULTS)/frrouting.txt
|
|
scan-networkx: $(RESULTS)/networkx.txt
|
|
scan-exabgp: $(RESULTS)/exabgp.txt
|
|
scan-postgresql: $(RESULTS)/postgresql.txt
|
|
scan-sqlite: $(RESULTS)/sqlite.txt
|
|
scan-verilator: $(RESULTS)/verilator.txt
|
|
scan-yosys: $(RESULTS)/yosys.txt
|
|
scan-mysql: $(RESULTS)/mysql.txt
|
|
scan-bird: $(RESULTS)/bird.txt
|
|
scan-onos: $(RESULTS)/onos.txt
|
|
scan-opendaylight: $(RESULTS)/opendaylight.txt
|
|
scan-v8: $(RESULTS)/v8.txt
|
|
scan-spidermonkey: $(RESULTS)/spidermonkey.txt
|
|
scan-bazel: $(RESULTS)/bazel.txt
|
|
scan-kicad: $(RESULTS)/kicad.txt
|
|
scan-gnu-octave: $(RESULTS)/gnu-octave.txt
|
|
scan-php-zend: $(RESULTS)/php-zend.txt
|
|
scan-redis: $(RESULTS)/redis.txt
|
|
scan-varnish: $(RESULTS)/varnish.txt
|
|
scan-nginx: $(RESULTS)/nginx.txt
|
|
scan-apache2: $(RESULTS)/apache2.txt
|
|
scan-memcached: $(RESULTS)/memcached.txt
|
|
scan-ant: $(RESULTS)/ant.txt
|
|
scan-sbt: $(RESULTS)/sbt.txt
|
|
scan-bundler: $(RESULTS)/bundler.txt
|
|
scan-duckdb: $(RESULTS)/duckdb.txt
|
|
scan-composer: $(RESULTS)/composer.txt
|
|
scan-43lang: $(RESULTS)/full-43lang.txt
|
|
|
|
# Priority groups
|
|
scan-critical: scan-frrouting scan-networkx scan-exabgp
|
|
|
|
scan-networking: \
|
|
scan-frrouting scan-exabgp scan-bird scan-onos scan-opendaylight
|
|
|
|
scan-scientific: \
|
|
scan-networkx scan-gnu-octave
|
|
|
|
scan-databases: \
|
|
scan-postgresql scan-sqlite scan-mysql
|
|
|
|
scan-eda: \
|
|
scan-verilator scan-yosys scan-kicad
|
|
|
|
scan-compilers: \
|
|
scan-v8 scan-spidermonkey scan-bazel
|
|
|
|
scan-web-infra: \
|
|
scan-php-zend scan-redis scan-varnish scan-nginx scan-apache2 scan-memcached
|
|
|
|
scan-package-managers: \
|
|
scan-ant scan-sbt scan-bundler scan-duckdb scan-composer
|
|
|
|
scan-all: \
|
|
scan-critical scan-networking scan-scientific \
|
|
scan-databases scan-eda scan-compilers scan-web-infra scan-43lang
|
|
|
|
# ── Report ───────────────────────────────────────────────────────────────────
|
|
|
|
report:
|
|
@echo ""
|
|
@echo "═══════════════════════════════════════════════════════"
|
|
@echo " CWE-407 Scan Report — $(shell date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
@echo "═══════════════════════════════════════════════════════"
|
|
@echo ""
|
|
@total=0; \
|
|
for f in $(RESULTS)/*.txt; do \
|
|
[ -f "$$f" ] || continue; \
|
|
target=$$(basename $$f .txt); \
|
|
hits=$$(grep -c '^CANDIDATE' "$$f" 2>/dev/null || true); \
|
|
hits=$${hits:-0}; \
|
|
total=$$((total + hits)); \
|
|
if [ "$$hits" -gt 0 ]; then \
|
|
printf " %-20s %3d candidates\n" "$$target" "$$hits"; \
|
|
grep '^CANDIDATE' "$$f" | head -3 | sed 's/^/ /'; \
|
|
else \
|
|
printf " %-20s CLEAN\n" "$$target"; \
|
|
fi; \
|
|
echo ""; \
|
|
done; \
|
|
echo " Total candidates: $$total"
|
|
@echo "═══════════════════════════════════════════════════════"
|
|
@echo ""
|
|
|
|
# ── Maintenance ──────────────────────────────────────────────────────────────
|
|
|
|
clean-results:
|
|
rm -f $(RESULTS)/*.txt
|
|
@echo "All result files removed — next make scan-* will re-run from scratch"
|
|
|
|
help:
|
|
@echo ""
|
|
@echo "Targets:"
|
|
@echo " scan-critical frrouting, networkx, exabgp (highest impact)"
|
|
@echo " scan-networking all routing/SDN targets"
|
|
@echo " scan-scientific networkx, gnu-octave"
|
|
@echo " scan-databases postgresql, mysql"
|
|
@echo " scan-eda verilator, yosys, kicad"
|
|
@echo " scan-compilers v8, spidermonkey, bazel"
|
|
@echo " scan-web-infra php-zend, redis, varnish, nginx, apache2, memcached"
|
|
@echo " scan-43lang full golden-image scan (no clone needed)"
|
|
@echo " scan-all everything"
|
|
@echo " report summarize all completed results"
|
|
@echo " clean-results force re-run of all scans"
|
|
@echo ""
|
|
@echo "Variables:"
|
|
@echo " UN=path path to un binary (default: ~/git/un-inception/build/un)"
|
|
@echo " ACCT1=N primary account index in ~/.unsandbox/accounts.csv (default: 1)"
|
|
@echo " ACCT2=N secondary account index (default: 0, used for -j2 parallel)"
|
|
@echo ""
|
|
@echo "Parallel execution (uses both account slots):"
|
|
@echo " make -j2 scan-critical"
|
|
@echo ""
|