File: //usr/share/ossec/contrib/ossec-pcre2-config.pl
#! /usr/bin/perl -w
use strict;
use warnings;
use Cwd qw/getcwd realpath/;
use File::Basename;
use File::Find;
use File::Temp qw/tempfile/;
my $ossec_regex_convert = realpath(dirname($0) . '/../src/ossec-regex-convert');
sub get_install_dir () {
    open(FILE, '<', 'src/LOCATION') || die("Cannot find INSTALL DIR");
    my $dir = '/var/ossec';
    while (<FILE>) {
        if (m{^DIR\s*=\s*(["']?)(.*)\g1$}p) {
            $dir = $2;
            last;
        }
    }
    return $dir;
}
my $old_tags = join('|', split(/\n/m, `$ossec_regex_convert -t`));
sub convert_file ($) {
    my $filename = shift();
    print("Converting ${filename}...\n");
    unless (open(SRC, '<', $filename)) {
        print(STDERR "Cannot read '${filename}'\n");
        return;
    }
    my ($tmp_fh, $tmp_filename) = tempfile('tmp-ossec-config-convert.XXXXX', DIR => '/tmp', SUFFIX => '.xml');
    while (<SRC>) {
        if (m{^(\s*)<\s*($old_tags)([^>]*)>(.*?)<\s*/\s*\g2\s*>}pg) {
            my ($indent, $old_type, $options, $old_regex) = ($1, $2, $3, $4);
            $old_regex =~ s/'/'\\''/g;
            my $out = qx/$ossec_regex_convert -b -- $old_type '$old_regex'/;
            chomp($out);
            my ($type, $regex) = split(/ /, $out, 2);
            if ($old_regex) {
                print($tmp_fh "$indent<$type$options>$regex</$type>\n");
            } else {
                print($tmp_fh "$indent<$type$options></$type>\n");
            }
        } else {
            print($tmp_fh $_);
        }
    }
    close(SRC);
    close($tmp_fh);
    rename($tmp_filename, $filename);
}
sub wanted() {
    my $filename = $File::Find::name;
    if ($filename =~ m/[.]xml$/) {
        convert_file($filename);
    }
}
my $INSTALL_DIR = get_install_dir();
if (! -d ${INSTALL_DIR}) {
    print(STDERR "Please install OSSEC first\n");
    exit(1);
}
find({wanted => \&wanted, no_chdir => 1}, $INSTALL_DIR);
exit(0);