11
file => $params{file},
12
commandline => $params{commandline},
14
section => 'default_no_section',
17
$self->prepare_file_and_section();
22
sub prepare_file_and_section {
24
if (! defined $self->{file}) {
25
# ./check_stuff --extra-opts
26
$self->{section} = basename($0);
27
$self->{file} = $self->get_default_file();
28
} elsif ($self->{file} =~ /^[^@]+$/) {
29
# ./check_stuff --extra-opts=special_opts
30
$self->{section} = $self->{file};
31
$self->{file} = $self->get_default_file();
32
} elsif ($self->{file} =~ /^@(.*)/) {
33
# ./check_stuff --extra-opts=@/etc/myconfig.ini
34
$self->{section} = basename($0);
36
} elsif ($self->{file} =~ /^(.*?)@(.*)/) {
37
# ./check_stuff --extra-opts=special_opts@/etc/myconfig.ini
38
$self->{section} = $1;
43
sub get_default_file {
45
foreach my $default (qw(/etc/nagios/plugins.ini
46
/usr/local/nagios/etc/plugins.ini
47
/usr/local/etc/nagios/plugins.ini
48
/etc/opt/nagios/plugins.ini
49
/etc/nagios-plugins.ini
50
/usr/local/etc/nagios-plugins.ini
51
/etc/opt/nagios-plugins.ini)) {
61
if (! defined $self->{file}) {
62
$self->{errors} = sprintf 'no extra-opts file specified and no default file found';
63
} elsif (! -f $self->{file}) {
64
$self->{errors} = sprintf 'could not open %s', $self->{file};
66
my $data = do { local (@ARGV, $/) = $self->{file}; <> };
67
my $in_section = 'default_no_section';
68
foreach my $line (split(/\n/, $data)) {
69
if ($line =~ /\[(.*)\]/) {
71
} elsif ($line =~ /(.*?)\s*=\s*(.*)/) {
72
$self->{config}->{$in_section}->{$1} = $2;
80
return ! exists $self->{errors};
86
if (scalar(keys %{$self->{config}->{default_no_section}}) > 0) {
87
foreach (keys %{$self->{config}->{default_no_section}}) {
88
$commandline{$_} = $self->{config}->{default_no_section}->{$_};
91
if (exists $self->{config}->{$self->{section}}) {
92
foreach (keys %{$self->{config}->{$self->{section}}}) {
93
$commandline{$_} = $self->{config}->{$self->{section}}->{$_};
96
foreach (keys %commandline) {
97
if (! exists $self->{commandline}->{$_}) {
98
$self->{commandline}->{$_} = $commandline{$_};