commit 8a3b19ff6041f73cf413d7a81d8aeb2470713d1b
parent 924ff61950ab936176c87ab66839f77ec6c009a3
Author: finwo <finwo@pm.me>
Date: Sat, 9 May 2026 01:15:16 +0200
Make output script-parseable
Diffstat:
| M | src/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;