cve-toolkit

CVE helper toolkit
git clone git://git.finwo.net/app/cve-toolkit
Log | Files | Refs | README | LICENSE

commit 8a3b19ff6041f73cf413d7a81d8aeb2470713d1b
parent 924ff61950ab936176c87ab66839f77ec6c009a3
Author: finwo <finwo@pm.me>
Date:   Sat,  9 May 2026 01:15:16 +0200

Make output script-parseable

Diffstat:
Msrc/main.c | 48+++++++++++++++++++-----------------------------
1 file changed, 19 insertions(+), 29 deletions(-)

diff --git a/src/main.c b/src/main.c @@ -1,56 +1,46 @@ #include <stdio.h> -#ifndef MAX -#define MAX(A, B) ((A) > (B) ? (A) : (B)) -#endif - #include "detector/setup.h" int main() { - int resultcode = 0; // 0 = not vulnerable - // 1+ = vulnerable (returns code-1) - + setvbuf(stderr, NULL, _IONBF, 0); + setvbuf(stdout, NULL, _IONBF, 0); for (int i = 0; i < detector_queue_length; i++) { struct detector_queue_entry *entry = detector_queue[i]; int result = entry->handler(i); detector_total++; if (result == 0) { - printf("[pass] %s\n", entry->name); + fprintf(stderr, "[pass] %s\n", entry->name); detector_pass++; } else { - printf("[fail] %s\n", entry->name); + fprintf(stderr, "[fail] %s\n", entry->name); detector_fail++; } entry->result = result; - - resultcode = MAX(resultcode, result); } - printf("\n====[ REPORT ]====\n"); - printf("pass: %d\n", detector_pass); - printf("fail: %d\n", detector_fail); + fprintf(stderr, "\n====[ REPORT ]====\n"); + fprintf(stderr, "pass: %d\n", detector_pass); + fprintf(stderr, "fail: %d\n", detector_fail); - int has_remediation = 0; + fprintf(stderr, "\n====[ REMEDIATION ]====\n"); for (int i = 0; i < detector_queue_length; i++) { struct detector_queue_entry *entry = detector_queue[i]; - if (entry->result && entry->remediation) { - has_remediation = 1; - break; - } - } - - if (has_remediation) { - printf("\n====[ REMEDIATION ]====\n"); - for (int i = 0; i < detector_queue_length; i++) { - struct detector_queue_entry *entry = detector_queue[i]; - if (entry->result && entry->remediation) { - printf("\n%s:\n %s\n", entry->name, entry->remediation); + if (entry->result) { + fprintf(stderr, "\n"); + fprintf(stdout, "%s", entry->name); + fprintf(stderr, ":"); + fprintf(stdout, "\n"); + if (entry->remediation) { + fprintf(stderr, " %s\n", entry->remediation); + } else { + fprintf(stderr, " No remediation suggestion available\n"); } } } - if (resultcode) { - return resultcode - 1; + if (detector_fail > 0) { + return 1; } return 0;