Home
Software
Utilities
About
Reader (main.c)
https://centaur.pw/software/md4/main.c
[
Direct Link
]
/* Centaur MD4 * * Version 3.0 * 4/7/2024 * * Main program * * main.c */ #include <ctype.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <openssl/md4.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include "color.h" #include "md4.h" #define _USAGE "Usage: %s <file ...>\n\t%s -u <file ...>\n\t%s -L <file>\n\t%s -f <checksum-file>\n\t%s -s/-S '<string>'\n" int main(int argc, char **argv) { if (argc < 2) { printf(_USAGE, argv[0], argv[0], argv[0], argv[0], argv[0]); exit(1); } static int u = 0; if (argc > 2 && !strcmp(argv[1], "-u")) u = 1; else u = 0; if (((!strcmp(argv[1], "-f") || !strcmp(argv[1], "--file")) && argc == 3)) { int s; int ok = 0, failed = 0, files = 0; s = valid_md4_file(argv[2]); if (s == 0) { printf("%s: %s: not a valid MD4 checksum file\n", argv[0], argv[2]); exit(1); } else if (s == -1) { printf("%s: %s: file access error\n", argv[0], argv[2]); exit(1); } else if (s == -2) { printf("%s: %s: is a directory\n", argv[0], argv[2]); exit(1); } FILE *fptr; char md4[33]; char file[64]; fptr = fopen(argv[2], "r"); rewind(fptr); while (1) { fscanf(fptr, "%s %s", md4, file); if (feof(fptr)) { break; } files++; strcpy(r, md4file(file, u)); if (!strcmp(r, "(directory)")) { printf("%s: %s%sIS A DIRECTORY%s\n", file, BOLD, RED, RESET); failed++; } else if (!strcmp(r, "(file access error)")) { printf("%s: %s%sFILE ACCESS ERROR%s\n", file, BOLD, RED, RESET); failed++; } else if (!hashcompare(md4, r)) { printf("%s: %s%sOK%s\n", file, BOLD, GREEN, RESET); ok++; } else { printf("%s: %s%sFAILED%s\n", file, BOLD, RED, RESET); failed++; } } fclose(fptr); printf("\n%d files processed\n%d %s%spassed%s\n%d %s%sfailed%s\n", files, ok, BOLD, GREEN, RESET, failed, BOLD, RED, RESET); exit(0); } int a; for (a = 0; a <= (argc - 1); a++) { if (argc == 3 && !strcmp(argv[1], "-s")) { strcpy(r, md4string(argv[2], 0)); printf("%s\n", r); exit(0); } else if (argc == 3 && !strcmp(argv[1], "-S")) { strcpy(r, md4string(argv[2], 1)); printf("%s\n", r); exit(0); } else if (argc == 3 && !strcmp(argv[1], "-L")) { strcpy(r, md4file(argv[2], 0)); printf("%s\n", r); exit(0); } else if (argc > 3 && (!strcmp(argv[1], "-s") || !strcmp(argv[1], "-S") || !strcmp(argv[1], "-L"))) { printf("%s: too many arguments used with option %s\n", argv[0], argv[1]); exit(1); } } int b; if (argc >= 2) { if (!strcmp(argv[1], "-u")) { for (b = 2; b <= argc - 1; b++) { strcpy(r, md4file(argv[b], 1)); printf("%s %s\n", r, argv[b]); } exit(0); } for (b = 1; b <= (argc - 1); b++) { strcpy(r, md4file(argv[b], u)); printf("%s %s\n", r, argv[b]); } exit(0); } else { printf(_USAGE, argv[0], argv[0], argv[0], argv[0], argv[0]); exit(1); } exit(1); }