/usr/share/perl5/Rex/Helper/INI.pm is in rex 1.4.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #
# (c) Jan Gehring <jan.gehring@gmail.com>
#
# vim: set ts=2 sw=2 tw=0:
# vim: set expandtab:
package Rex::Helper::INI;
use strict;
use warnings;
our $VERSION = '1.4.1'; # VERSION
BEGIN { String::Escape->use('string2hash'); }
sub parse {
my (@lines) = @_;
my $ini;
my $section;
for (@lines) {
chomp;
s/\n|\r//g;
(/^#|^;|^\s*$/) && (next);
if ( /^\[(.*)\]/ && !/^\[(\d+((?:,)|(?:\.\.))*)+(\/\d+)*\]/ ) {
# check for inheritance
$section = $1;
$ini->{$section} = {};
if ( $section =~ /</ ) {
delete $ini->{$section};
my @inherit = split( /</, $section );
s/^\s*|\s*$//g for @inherit;
$section = shift @inherit;
for my $is (@inherit) {
for my $ik ( keys %{ $ini->{$is} } ) {
$ini->{$section}->{$ik} = $ini->{$is}->{$ik};
}
}
}
next;
}
my ( $key, $val ) = split( /[= ]/, $_, 2 );
$key =~ s/^\s*|\s*$//g if $key;
$val =~ s/^\s*|\s*$//g if $val;
my @splitted;
if ( !$val ) {
$val = $key;
@splitted = ($key);
}
# commented out due to #184
else {
#@splitted = split(/\./, $key);
@splitted = ($key);
}
my $ref = $ini->{$section};
my $last = pop @splitted;
for my $sub (@splitted) {
unless ( exists $ini->{$section}->{$sub} ) {
$ini->{$section}->{$sub} = {};
}
$ref = $ini->{$section}->{$sub};
}
# include other group
if ( $key =~ m/^\@(.*)/ ) {
for my $ik ( keys %{ $ini->{$1} } ) {
$ini->{$section}->{$ik} = $ini->{$1}->{$ik};
}
next;
}
if ( $val =~ m/\$\{(.*)\}/ ) {
my $var_name = $1;
my $ref = $ini;
my @splitted = split( /\./, $var_name );
for my $s (@splitted) {
$ref = $ref->{$s};
}
$val = $ref;
}
if ( $val =~ m/=/ ) {
$val = { string2hash($val) };
}
$ref->{$last} = $val;
}
return $ini;
}
1;
|