/usr/share/perl5/Nagios/Plugin/Config.pm is in libnagios-plugin-perl 0.36-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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | package Nagios::Plugin::Config;
use strict;
use Carp;
use File::Spec;
use base qw(Config::Tiny);
my $FILENAME1 = 'plugins.ini';
my $FILENAME2 = 'nagios-plugins.ini';
# Config paths ending in nagios (search for $FILENAME1)
my @NAGIOS_CONFIG_PATH = qw(/etc/nagios /usr/local/nagios/etc /usr/local/etc/nagios /etc/opt/nagios);
# Config paths not ending in nagios (search for $FILENAME2)
my @CONFIG_PATH = qw(/etc /usr/local/etc /etc/opt);
# Override Config::Tiny::read to default the filename, if not given
sub read
{
my $class = shift;
unless ($_[0]) {
SEARCH: {
if ($ENV{NAGIOS_CONFIG_PATH}) {
for (split /:/, $ENV{NAGIOS_CONFIG_PATH}) {
my $file = File::Spec->catfile($_, $FILENAME1);
unshift(@_, $file), last SEARCH if -f $file;
$file = File::Spec->catfile($_, $FILENAME2);
unshift(@_, $file), last SEARCH if -f $file;
}
}
for (@NAGIOS_CONFIG_PATH) {
my $file = File::Spec->catfile($_, $FILENAME1);
unshift(@_, $file), last SEARCH if -f $file;
}
for (@CONFIG_PATH) {
my $file = File::Spec->catfile($_, $FILENAME2);
unshift(@_, $file), last SEARCH if -f $file;
}
}
# Use die instead of croak, so we can pass a clean message downstream
die "Cannot find '$FILENAME1' or '$FILENAME2' in any standard location.\n" unless $_[0];
}
$class->SUPER::read( @_ );
}
# Straight from Config::Tiny - only changes are repeated property key support
# Would be nice if we could just override the per-line handling ...
sub read_string
{
my $class = ref $_[0] ? ref shift : shift;
my $self = bless {}, $class;
return undef unless defined $_[0];
# Parse the file
my $ns = '_';
my $counter = 0;
foreach ( split /(?:\015{1,2}\012|\015|\012)/, shift ) {
$counter++;
# Skip comments and empty lines
next if /^\s*(?:\#|\;|$)/;
# Handle section headers
if ( /^\s*\[\s*(.+?)\s*\]\s*$/ ) {
# Create the sub-hash if it doesn't exist.
# Without this sections without keys will not
# appear at all in the completed struct.
$self->{$ns = $1} ||= {};
next;
}
# Handle properties
if ( /^\s*([^=]+?)\s*=\s*(.*?)\s*$/ ) {
push @{$self->{$ns}->{$1}}, $2;
next;
}
return $self->_error( "Syntax error at line $counter: '$_'" );
}
$self;
}
sub write { croak "Write access not permitted" }
1;
=head1 NAME
Nagios::Plugin::Config - read nagios plugin .ini style config files
=head1 SYNOPSIS
# Read given nagios plugin config file
$Config = Nagios::Plugin::Config->read( '/etc/nagios/plugins.ini' );
# Search for and read default nagios plugin config file
$Config = Nagios::Plugin::Config->read();
# Access sections and properties (returns scalars or arrayrefs)
$rootproperty = $Config->{_}->{rootproperty};
$one = $Config->{section}->{one};
$Foo = $Config->{section}->{Foo};
=head1 DESCRIPTION
Nagios::Plugin::Config is a subclass of the excellent Config::Tiny,
with the following changes:
=over 4
=item
Repeated keys are allowed within sections, returning lists instead of scalars
=item
Write functionality has been removed i.e. access is read only
=item
Nagios::Plugin::Config searches for a default nagios plugins file if no explicit
filename is given to C<read()>. The current standard locations checked are:
=over 4
=item /etc/nagios/plugins.ini
=item /usr/local/nagios/etc/plugins.ini
=item /usr/local/etc/nagios /etc/opt/nagios/plugins.ini
=item /etc/nagios-plugins.ini
=item /usr/local/etc/nagios-plugins.ini
=item /etc/opt/nagios-plugins.ini
=back
To use a custom location, set a C<NAGIOS_CONFIG_PATH> environment variable
to the set of directories that should be checked. The first C<plugins.ini> or
C<nagios-plugins.ini> file found will be used.
=back
=head1 SEE ALSO
L<Config::Tiny>, L<Nagios::Plugin>
=head1 AUTHORS
This code is maintained by the Nagios Plugin Development Team:
L<http://nagiosplug.sourceforge.net>.
=head1 COPYRIGHT and LICENCE
Copyright (C) 2006-2007 by Nagios Plugin Development Team
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
|