etc.git


etc

~ scripts and random things
git clone https://github.com/djnnvx/etc.git
log | files | refs | archive

clean.sh (6211B)

      1 #!/bin/bash
      2 # Clean up TTYD fuzzing artifacts
      3 #
      4 # Usage: ./clean.sh [OPTIONS]
      5 #   --keep-crashes   Save crash files before cleaning output/
      6 #   --corpus-only    Only clean corpus/, leave everything else
      7 #   --keep-source    Do not remove ttyd-src/ (the git clone)
      8 #   -h, --help
      9 
     10 set -e
     11 
     12 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
     13 
     14 KEEP_CRASHES=false
     15 CORPUS_ONLY=false
     16 KEEP_SOURCE=false
     17 
     18 for arg in "$@"; do
     19     case "$arg" in
     20         --keep-crashes) KEEP_CRASHES=true ;;
     21         --corpus-only)  CORPUS_ONLY=true ;;
     22         --keep-source)  KEEP_SOURCE=true ;;
     23         -h|--help)
     24             echo "Usage: $0 [OPTIONS]"
     25             echo
     26             echo "Options:"
     27             echo "  --keep-crashes  Save crash files before cleaning output/"
     28             echo "  --corpus-only   Only clean the corpus directory"
     29             echo "  --keep-source   Keep ttyd-src/ git clone"
     30             echo "  -h, --help      Show this help"
     31             exit 0
     32             ;;
     33         *)
     34             echo "[!] Unknown option: $arg"
     35             echo "    Use --help for usage"
     36             exit 1
     37             ;;
     38     esac
     39 done
     40 
     41 # ── stop running fuzzers ──────────────────────────────────────────────────────
     42 if tmux has-session -t ttyd-fuzz 2>/dev/null; then
     43     echo "[*] Stopping running fuzzer session..."
     44     tmux kill-session -t ttyd-fuzz
     45     echo "[+] Fuzzer session killed"
     46 fi
     47 
     48 # Kill headless background fuzzer processes
     49 if [ -f "$SCRIPT_DIR/.bg_fuzz_pids" ]; then
     50     while read -r pid; do
     51         kill "$pid" 2>/dev/null || true
     52     done < "$SCRIPT_DIR/.bg_fuzz_pids"
     53     rm -f "$SCRIPT_DIR/.bg_fuzz_pids"
     54     echo "[+] Killed headless fuzzer processes"
     55 fi
     56 
     57 # ── remove crontab entry ──────────────────────────────────────────────────────
     58 CRONTAB_MARKER="# ttyd-fuzz-crash-backup"
     59 CURRENT_CRON=$(crontab -l 2>/dev/null || true)
     60 if echo "$CURRENT_CRON" | grep -q "$CRONTAB_MARKER"; then
     61     TMPFILE=$(mktemp)
     62     echo "$CURRENT_CRON" \
     63         | grep -v "$CRONTAB_MARKER" \
     64         | grep -v "backup_crashes.sh" \
     65         > "$TMPFILE" || true
     66     crontab "$TMPFILE"
     67     rm -f "$TMPFILE"
     68     echo "[+] Removed crash-backup crontab entry"
     69 else
     70     echo "[*] No crash-backup crontab entry found"
     71 fi
     72 
     73 # ── clean corpus ──────────────────────────────────────────────────────────────
     74 if [ -d "$SCRIPT_DIR/corpus" ]; then
     75     echo "[*] Removing corpus/"
     76     rm -rf "$SCRIPT_DIR/corpus"
     77     echo "[+] Corpus removed"
     78 fi
     79 
     80 if $CORPUS_ONLY; then
     81     echo "[+] Done (corpus-only mode)"
     82     exit 0
     83 fi
     84 
     85 # ── clean output (optionally save crashes first) ──────────────────────────────
     86 if [ -d "$SCRIPT_DIR/output" ]; then
     87     if $KEEP_CRASHES; then
     88         CRASH_DIR="$SCRIPT_DIR/saved_crashes_$(date +%Y%m%d_%H%M%S)"
     89         HAS_CRASHES=false
     90 
     91         for target_dir in "$SCRIPT_DIR"/output/*/; do
     92             [ -d "$target_dir" ] || continue
     93             for node_dir in "$target_dir"*/; do
     94                 [ -d "$node_dir" ] || continue
     95                 crash_path="$node_dir/crashes"
     96                 if [ -d "$crash_path" ] && [ "$(ls -A "$crash_path" 2>/dev/null)" ]; then
     97                     dest="$CRASH_DIR/$(basename "$target_dir")/$(basename "$node_dir")"
     98                     mkdir -p "$dest"
     99                     cp -r "$crash_path"/* "$dest/"
    100                     HAS_CRASHES=true
    101                 fi
    102             done
    103         done
    104 
    105         if $HAS_CRASHES; then
    106             echo "[+] Crashes saved to: $CRASH_DIR"
    107         else
    108             echo "[*] No crashes found to save"
    109             rmdir "$CRASH_DIR" 2>/dev/null || true
    110         fi
    111     fi
    112 
    113     echo "[*] Removing output/"
    114     rm -rf "$SCRIPT_DIR/output"
    115     echo "[+] Output removed"
    116 fi
    117 
    118 # ── remove compiled harness binaries ─────────────────────────────────────────
    119 REMOVED=0
    120 for binary in fuzz_websocket_auth fuzz_http_parsing; do
    121     for suffix in "" "_cmplog" "_lf"; do
    122         target="$SCRIPT_DIR/${binary}${suffix}"
    123         if [ -f "$target" ]; then
    124             rm -f "$target"
    125             REMOVED=$((REMOVED + 1))
    126         fi
    127     done
    128 done
    129 if [ -f "$SCRIPT_DIR/http_mutator.so" ]; then
    130     rm -f "$SCRIPT_DIR/http_mutator.so"
    131     REMOVED=$((REMOVED + 1))
    132 fi
    133 [ "$REMOVED" -gt 0 ] && echo "[+] Removed $REMOVED compiled binaries/libraries" \
    134                       || echo "[*] No binaries to remove"
    135 
    136 # ── remove build artifacts (NOT tracked source files) ─────────────────────────
    137 # fuzz_lws_mock.{c,h}, mock_server_globals.c, mock_pty_stubs.c, and
    138 # fuzz-include/{libwebsockets,uv}.h are tracked source — keep them.
    139 if [ -f "$SCRIPT_DIR/backup_crashes.sh" ]; then
    140     rm -f "$SCRIPT_DIR/backup_crashes.sh"
    141     echo "[+] Removed backup_crashes.sh"
    142 fi
    143 
    144 # ── remove instrumented objects ───────────────────────────────────────────────
    145 if [ -d "$SCRIPT_DIR/ttyd-obj" ]; then
    146     echo "[*] Removing ttyd-obj/"
    147     rm -rf "$SCRIPT_DIR/ttyd-obj"
    148     echo "[+] ttyd-obj/ removed"
    149 fi
    150 
    151 # ── optionally remove the ttyd source clone ───────────────────────────────────
    152 if [ -d "$SCRIPT_DIR/ttyd-src" ]; then
    153     if $KEEP_SOURCE; then
    154         echo "[*] Keeping ttyd-src/ (--keep-source)"
    155     else
    156         echo "[*] Removing ttyd-src/ (pass --keep-source to skip)"
    157         rm -rf "$SCRIPT_DIR/ttyd-src"
    158         echo "[+] ttyd-src/ removed"
    159     fi
    160 fi
    161 
    162 # ── remove crash backups log (keep archives — user's decision) ───────────────
    163 if [ -f "$SCRIPT_DIR/crashes-backup/backup.log" ]; then
    164     rm -f "$SCRIPT_DIR/crashes-backup/backup.log"
    165     echo "[+] Removed crashes-backup/backup.log"
    166 fi
    167 
    168 echo "[+] Clean complete"