33 #include <sys/utsname.h>
35 #define VERSION_REGEX "^([0-9]+)\\.([0-9]+)"
39 struct utsname kuname;
40 pcre2_code *version_regex;
41 pcre2_match_data *version_regex_match;
50 if (uname(&kuname) != 0) {
51 SCLogError(
"Invalid uname return: %s", strerror(errno));
55 SCLogDebug(
"Kernel release is '%s'", kuname.release);
58 pcre2_compile((PCRE2_SPTR8)
VERSION_REGEX, PCRE2_ZERO_TERMINATED, opts, &en, &eo, NULL);
59 if (version_regex == NULL) {
60 PCRE2_UCHAR errbuffer[256];
61 pcre2_get_error_message(en, errbuffer,
sizeof(errbuffer));
62 SCLogError(
"pcre2 compile of \"%s\" failed at "
67 version_regex_match = pcre2_match_data_create_from_pattern(version_regex, NULL);
69 ret = pcre2_match(version_regex, (PCRE2_SPTR8)kuname.release, strlen(kuname.release), 0, 0,
70 version_regex_match, NULL);
78 SCLogError(
"Version major and minor not found (ret %d)", ret);
82 pcre2_substring_list_get(version_regex_match, &list, NULL);
86 SCLogError(
"Invalid value for kmajor: '%s'", list[1]);
90 SCLogError(
"Invalid value for kminor: '%s'", list[2]);
94 pcre2_substring_list_free((PCRE2_SPTR *)list);
95 pcre2_match_data_free(version_regex_match);
96 pcre2_code_free(version_regex);
103 if (kmajor == major && kminor >= minor)
113 SCLogError(
"OS compare is not supported on Windows");