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"