App-Regather
view release on metacpan or search on metacpan
lib/App/Regather/Config.pm view on Meta::CPAN
# -*- mode: cperl; eval: (follow-mode); -*-
#
package App::Regather::Config;
use strict;
use warnings;
use diagnostics;
use parent 'Config::Parser::Ini';
use Carp;
use File::Basename;
use Mail::RFC822::Address qw(valid validlist);
use App::Regather::Plugin;
use constant LDAP => { opt => { async => '',
debug => '',
inet4 => '',
inet6 => '',
keepalive => '',
localaddr => '',
multihomed => '',
onerror => '',
port => 'port',
raw => '',
scheme => '',
timeout => 'timeout',
uri => 'uri',
version => '',
},
ssl => {
cafile => 'tls_cacert',
capath => 'tls_cacertdir',
checkcrl => 'tls_crlfile',
ciphers => 'tls_cipher_suite',
clientcert => 'tls_cert',
clientkey => 'tls_key',
keydecrypt => '',
sslversion => 'tls_protocol_min',
verify => { tls_reqcert => {
none => 'never',
allow => 'optional',
demand => 'require',
hard => 'require',
try => 'optional',
},
},
},
bnd => {
anonymous => '',
dn => 'binddn',
password => 'bindpw',
},
srch=> {
attrs => '',
base => 'base',
filter => '',
raw => '',
scope => '',
sizelimit => 'sizelimit',
timelimit => 'timelimit',
}
};
=pod
=encoding UTF-8
=head1 NAME
App::Regather::Config - config file processing class
=head1 SYNOPSIS
=head1 DESCRIPTION
This is a class to log messages.
=head1 CONSTRUCTOR
=over 4
=item new
Creates a new B<App::Regather::Config> object
=over 4
=item filename =E<gt> config-file-name
Name of the file to parse.
=item cli =E<gt> = delete $_{cli};
Hash with CLI provided config options.
=item logger =E<gt> = delete $_{logger};
App::Regather::Logg object created preliminary.
lib/App/Regather/Config.pm view on Meta::CPAN
if ( defined $nodes ) {
while (my ($key, $val) = each %$nodes) {
next if ! %$val;
while (my ($k, $v) = each %$val) {
# next if $self->is_set($key, $k);
$self->set($key, $k, $v);
}
}
}
$self->commit or return;
$self
}
=head1 METHODS
=over 4
=item get_ldap_config_file
ldap.conf processing (with L<Config::Parser::ldap>) to add options
from it to config object
files searched are:
$ENV{LDAP_CONF}
/usr/local/etc/openldap/ldap.conf
/etc/ldap.conf
/etc/ldap/ldap.conf
/etc/openldap/ldap.conf );
the first one found is used.
=cut
sub get_ldap_config_file {
my $self = shift;
use Config::Parser::ldap;
my $ldap_config = {};
my @ldap_config_files = qw( /usr/local/etc/openldap/ldap.conf
/etc/ldap.conf
/etc/ldap/ldap.conf
/etc/openldap/ldap.conf );
unshift @ldap_config_files, $ENV{LDAP_CONF} if defined($ENV{LDAP_CONF});
my ( $cf, $val );
foreach (@ldap_config_files) {
if ( -e $_ ) {
$cf = new Config::Parser::ldap(filename => $_ );
foreach my $section ( keys %{ LDAP()} ) { # $section: bnd, opt or ssl
foreach my $item ( keys %{ LDAP->{$section} } ) { # $_: item in each of ones above
$self->add_value( 'ldap.' . $section . '.' . $item,
$section eq 'ssl' && $item eq 'verify' && $cf->is_set('tls_reqcert')
?
LDAP->{$section}->{$item}->{tls_reqcert}->{ $cf->get('tls_reqcert') }
:
$cf->get( LDAP->{$section}->{$item} ),
new Text::Locus("option \"$item\" provided from ldap.conf",1))
if LDAP->{$section}->{$item} ne '' &&
$cf->is_set( LDAP->{$section}->{$item} ) &&
! $self->is_set( 'ldap', $section, $item );
}
}
last;
}
}
}
=item mangle
modify the created source tree. (resolve I<uid/gid> symbolic to number, add I<altroot>)
=cut
sub mangle {
my $self = shift;
my ( $section, $item, $k, $v );
my $re_mod = qr(^Can.t locate.*);
if ( $self->is_set(qw(core uid)) ) {
$item = getpwnam( $self->get(qw(core uid)) );
if ( defined $item ) {
$self->{logger}->cc( pr => 'info', fm => "%s: setuid user %s(%s) confirmed",
ls => [ sprintf("%s:%s",__FILE__,__LINE__), $self->get(qw(core uid)), $item ] )
if $self->{verbose} > 1;
$self->set('core', 'uid_number', $item);
} else {
print "No user $self->get('uid') found\n\n";
exit 2;
}
}
if ( $self->is_set(qw(core gid)) ) {
$item = getgrnam( $self->get(qw(core gid)) );
if ( defined $item ) {
$self->{logger}->cc( pr => 'info', fm => "%s: setgid group %s(%s) confirmed",
ls => [ sprintf("%s:%s",__FILE__,__LINE__), $self->get(qw(core gid)), $item ] )
if $self->{verbose} > 1;
$self->set('core', 'gid_number', $item);
} else {
print "No group $self->get('gid') found\n\n";
exit 2;
}
}
foreach my $svc ( $self->names_of('service') ) {
if ( $self->is_set(qw($svc uid)) ) {
$item = getpwnam( $self->get(qw($svc uid)) );
if ( defined $item ) {
$self->{logger}->cc( pr => 'info', fm => "%s: setuid user %s(%s) confirmed",
ls => [ sprintf("%s:%s",__FILE__,__LINE__), $self->get(qw($svc uid)), $item ] )
lib/App/Regather/Config.pm view on Meta::CPAN
facility = STRING :default local4
colors = NUMBER :default 0
foreground = NUMBER :default 0
verbosity = NUMBER :default 0
altroot = STRING :check=core_only
dryrun = STRING :check=core_only
pid_file = STRING :check=core_only
tt_debug = STRING :check=core_only
tt_path = STRING :check=core_only
[ldap]
altroot = STRING :check=core_only
dryrun = STRING :check=core_only
pid_file = STRING :check=core_only
tt_debug = STRING :check=core_only
tt_path = STRING :check=core_only
ANY = STRING
[ldap srch]
attrs = STRING
base = STRING
filter = STRING :mandatory
raw = STRING
scope = STRING :default sub
sizelimit = NUMBER :default 0
timelimit = NUMBER :default 0
log_base = STRING
[ldap bnd]
anonymous = STRING
bindpw = STRING
dn = STRING
password = STRING
[ldap opt]
async = NUMBER :default 0
debug = NUMBER :default 0
inet4 = STRING
inet6 = STRING
keepalive = STRING
localaddr = STRING
multihomed = STRING
onerror = STRING
port = STRING
raw = STRING
scheme = STRING
timeout = STRING
uri = STRING
version = NUMBER :default 3
[ldap ssl]
cafile = STRING
capath = STRING
checkcrl = STRING
ciphers = STRING
clientcert = STRING
clientkey = STRING
keydecrypt = STRING
ssl = STRING
sslversion = STRING
verify = STRING
[service ANY]
all_attr = NUMBER :default 0
chmod = OCTAL :default 0640
chown = NUMBER :default 1
ctrl_attr = STRING :mandatory :array
ctrl_srv_re = STRING :mandatory
gid = STRING
out_ext = STRING
out_file = STRING
out_file_pfx = STRING
out_path = STRING :check=chk_dir
tt_file = STRING :check=chk_file_tt
uid = STRING
ns_attr = STRING
ns_keyfile = STRING
ns_ttl = NUMBER :default 600
ns_txt_pfx = STRING :default REGATHER:
ns_server = STRING :array
ns_zone = STRING :array
plugin = STRING :mandatory :array :check=chk_plugin
notify = NUMBER :default 0 :check=chk_depend_notify
post_process = STRING :array
skip = NUMBER :default 0
[service ANY map s]
ANY = STRING
altroot = STRING :check=core_only
dryrun = STRING :check=core_only
pid_file = STRING :check=core_only
tt_debug = STRING :check=core_only
tt_path = STRING :check=core_only
[service ANY map m]
ANY = STRING
altroot = STRING :check=core_only
dryrun = STRING :check=core_only
pid_file = STRING :check=core_only
tt_debug = STRING :check=core_only
tt_path = STRING :check=core_only
( run in 1.101 second using v1.01-cache-2.11-cpan-140bd7fdf52 )