module_04.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include <magic.h>
  6. #define BOLD_GRAY "\033[1;90m"
  7. #define RED "\033[0;31m"
  8. #define WHITE "\033[0;37m"
  9. #define RESET "\033[0m"
  10. int module_04_run(const char *filename) {
  11. char log_msg[1024];
  12. magic_t magic = magic_open(MAGIC_MIME_TYPE | MAGIC_ERROR | MAGIC_NO_CHECK_CDF);
  13. if (!magic) {
  14. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library libmagic: " RED "File type not recognized: Error initializing libmagic" RESET);
  15. printf("%s\n", log_msg);
  16. return 1;
  17. }
  18. if (magic_load(magic, NULL) != 0) {
  19. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library libmagic: " RED "File type not recognized: Error loading magic database: %s" RESET,
  20. magic_error(magic));
  21. printf("%s\n", log_msg);
  22. magic_close(magic);
  23. return 1;
  24. }
  25. const char *mime = magic_file(magic, filename);
  26. if (!mime || strlen(mime) == 0 || strstr(mime, "\xFF") || strstr(mime, "\x00")) {
  27. mime = "text/plain";
  28. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library libmagic: " RED "Invalid MIME, assuming text/plain" RESET);
  29. printf("%s\n", log_msg);
  30. }
  31. magic_setflags(magic, 0);
  32. const char *desc = magic_file(magic, filename);
  33. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library libmagic: " WHITE "MIME: %s, Description: %s" RESET,
  34. mime, desc ? desc : "Unknown");
  35. printf("%s\n", log_msg);
  36. magic_close(magic);
  37. return 0;
  38. }